133#if !defined(DUKTAPE_H_INCLUDED)
134#define DUKTAPE_H_INCLUDED
136#define DUK_SINGLE_FILE
142#include "duk_config.h"
148#if !defined(DUK_API_PUBLIC_H_INCLUDED)
149#define DUK_API_PUBLIC_H_INCLUDED
155#if defined(__cplusplus)
163#undef DUK_API_VARIADIC_MACROS
164#if defined(DUK_USE_VARIADIC_MACROS)
165#define DUK_API_VARIADIC_MACROS
168#define DUK_API_NORETURN(decl) DUK_NORETURN(decl)
193typedef duk_ret_t (*duk_c_function)(
duk_context *ctx);
194typedef void *(*duk_alloc_function) (
void *udata, duk_size_t size);
195typedef void *(*duk_realloc_function) (
void *udata,
void *ptr, duk_size_t size);
196typedef void (*duk_free_function) (
void *udata,
void *ptr);
197typedef void (*duk_fatal_function) (
void *udata,
const char *msg);
198typedef void (*duk_decode_char_function) (
void *udata, duk_codepoint_t codepoint);
199typedef duk_codepoint_t (*duk_map_char_function) (
void *udata, duk_codepoint_t codepoint);
200typedef duk_ret_t (*duk_safe_call_function) (
duk_context *ctx,
void *udata);
201typedef duk_size_t (*duk_debug_read_function) (
void *udata,
char *buffer, duk_size_t length);
202typedef duk_size_t (*duk_debug_write_function) (
void *udata,
const char *buffer, duk_size_t length);
203typedef duk_size_t (*duk_debug_peek_function) (
void *udata);
204typedef void (*duk_debug_read_flush_function) (
void *udata);
205typedef void (*duk_debug_write_flush_function) (
void *udata);
206typedef duk_idx_t (*duk_debug_request_function) (
duk_context *ctx,
void *udata, duk_idx_t nvalues);
207typedef void (*duk_debug_detached_function) (
duk_context *ctx,
void *udata);
218 duk_alloc_function alloc_func;
219 duk_realloc_function realloc_func;
220 duk_free_function free_func;
226 duk_c_function value;
240 duk_double_t minutes;
241 duk_double_t seconds;
242 duk_double_t milliseconds;
243 duk_double_t weekday;
256#define DUK_VERSION 20000L
263#define DUK_GIT_COMMIT "external"
264#define DUK_GIT_DESCRIBE "external"
265#define DUK_GIT_BRANCH "external"
268#define DUK_DEBUG_PROTOCOL_VERSION 2
274#define DUK_INVALID_INDEX DUK_IDX_MIN
279#define DUK_VARARGS ((duk_int_t) (-1))
284#define DUK_API_ENTRY_STACK 64
287#define DUK_TYPE_MIN 0
288#define DUK_TYPE_NONE 0
289#define DUK_TYPE_UNDEFINED 1
290#define DUK_TYPE_NULL 2
291#define DUK_TYPE_BOOLEAN 3
292#define DUK_TYPE_NUMBER 4
293#define DUK_TYPE_STRING 5
294#define DUK_TYPE_OBJECT 6
295#define DUK_TYPE_BUFFER 7
296#define DUK_TYPE_POINTER 8
297#define DUK_TYPE_LIGHTFUNC 9
298#define DUK_TYPE_MAX 9
301#define DUK_TYPE_MASK_NONE (1 << DUK_TYPE_NONE)
302#define DUK_TYPE_MASK_UNDEFINED (1 << DUK_TYPE_UNDEFINED)
303#define DUK_TYPE_MASK_NULL (1 << DUK_TYPE_NULL)
304#define DUK_TYPE_MASK_BOOLEAN (1 << DUK_TYPE_BOOLEAN)
305#define DUK_TYPE_MASK_NUMBER (1 << DUK_TYPE_NUMBER)
306#define DUK_TYPE_MASK_STRING (1 << DUK_TYPE_STRING)
307#define DUK_TYPE_MASK_OBJECT (1 << DUK_TYPE_OBJECT)
308#define DUK_TYPE_MASK_BUFFER (1 << DUK_TYPE_BUFFER)
309#define DUK_TYPE_MASK_POINTER (1 << DUK_TYPE_POINTER)
310#define DUK_TYPE_MASK_LIGHTFUNC (1 << DUK_TYPE_LIGHTFUNC)
311#define DUK_TYPE_MASK_THROW (1 << 10)
312#define DUK_TYPE_MASK_PROMOTE (1 << 11)
315#define DUK_HINT_NONE 0
318#define DUK_HINT_STRING 1
319#define DUK_HINT_NUMBER 2
322#define DUK_ENUM_INCLUDE_NONENUMERABLE (1 << 0)
323#define DUK_ENUM_INCLUDE_HIDDEN (1 << 1)
324#define DUK_ENUM_INCLUDE_SYMBOLS (1 << 2)
325#define DUK_ENUM_EXCLUDE_STRINGS (1 << 3)
326#define DUK_ENUM_OWN_PROPERTIES_ONLY (1 << 4)
327#define DUK_ENUM_ARRAY_INDICES_ONLY (1 << 5)
328#define DUK_ENUM_SORT_ARRAY_INDICES (1 << 6)
329#define DUK_ENUM_NO_PROXY_BEHAVIOR (1 << 7)
334#define DUK_COMPILE_EVAL (1 << 3)
335#define DUK_COMPILE_FUNCTION (1 << 4)
336#define DUK_COMPILE_STRICT (1 << 5)
337#define DUK_COMPILE_SAFE (1 << 6)
338#define DUK_COMPILE_NORESULT (1 << 7)
339#define DUK_COMPILE_NOSOURCE (1 << 8)
340#define DUK_COMPILE_STRLEN (1 << 9)
341#define DUK_COMPILE_NOFILENAME (1 << 10)
344#define DUK_DEFPROP_WRITABLE (1 << 0)
345#define DUK_DEFPROP_ENUMERABLE (1 << 1)
346#define DUK_DEFPROP_CONFIGURABLE (1 << 2)
347#define DUK_DEFPROP_HAVE_WRITABLE (1 << 3)
348#define DUK_DEFPROP_HAVE_ENUMERABLE (1 << 4)
349#define DUK_DEFPROP_HAVE_CONFIGURABLE (1 << 5)
350#define DUK_DEFPROP_HAVE_VALUE (1 << 6)
351#define DUK_DEFPROP_HAVE_GETTER (1 << 7)
352#define DUK_DEFPROP_HAVE_SETTER (1 << 8)
353#define DUK_DEFPROP_FORCE (1 << 9)
354#define DUK_DEFPROP_SET_WRITABLE (DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_WRITABLE)
355#define DUK_DEFPROP_CLEAR_WRITABLE DUK_DEFPROP_HAVE_WRITABLE
356#define DUK_DEFPROP_SET_ENUMERABLE (DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE)
357#define DUK_DEFPROP_CLEAR_ENUMERABLE DUK_DEFPROP_HAVE_ENUMERABLE
358#define DUK_DEFPROP_SET_CONFIGURABLE (DUK_DEFPROP_HAVE_CONFIGURABLE | DUK_DEFPROP_CONFIGURABLE)
359#define DUK_DEFPROP_CLEAR_CONFIGURABLE DUK_DEFPROP_HAVE_CONFIGURABLE
362#define DUK_THREAD_NEW_GLOBAL_ENV (1 << 0)
365#define DUK_GC_COMPACT (1 << 0)
368#define DUK_ERR_NONE 0
369#define DUK_ERR_ERROR 1
370#define DUK_ERR_EVAL_ERROR 2
371#define DUK_ERR_RANGE_ERROR 3
372#define DUK_ERR_REFERENCE_ERROR 4
373#define DUK_ERR_SYNTAX_ERROR 5
374#define DUK_ERR_TYPE_ERROR 6
375#define DUK_ERR_URI_ERROR 7
378#define DUK_RET_ERROR (-DUK_ERR_ERROR)
379#define DUK_RET_EVAL_ERROR (-DUK_ERR_EVAL_ERROR)
380#define DUK_RET_RANGE_ERROR (-DUK_ERR_RANGE_ERROR)
381#define DUK_RET_REFERENCE_ERROR (-DUK_ERR_REFERENCE_ERROR)
382#define DUK_RET_SYNTAX_ERROR (-DUK_ERR_SYNTAX_ERROR)
383#define DUK_RET_TYPE_ERROR (-DUK_ERR_TYPE_ERROR)
384#define DUK_RET_URI_ERROR (-DUK_ERR_URI_ERROR)
387#define DUK_EXEC_SUCCESS 0
388#define DUK_EXEC_ERROR 1
391#define DUK_LEVEL_DEBUG 0
392#define DUK_LEVEL_DDEBUG 1
393#define DUK_LEVEL_DDDEBUG 2
400#if !defined(DUK_API_VARIADIC_MACROS)
401DUK_EXTERNAL_DECL
const char *duk_api_global_filename;
402DUK_EXTERNAL_DECL duk_int_t duk_api_global_line;
410duk_context *duk_create_heap(duk_alloc_function alloc_func,
411 duk_realloc_function realloc_func,
412 duk_free_function free_func,
414 duk_fatal_function fatal_handler);
415DUK_EXTERNAL_DECL
void duk_destroy_heap(
duk_context *ctx);
420#define duk_create_heap_default() \
421 duk_create_heap(NULL, NULL, NULL, NULL, NULL)
429DUK_EXTERNAL_DECL
void *duk_alloc_raw(
duk_context *ctx, duk_size_t size);
430DUK_EXTERNAL_DECL
void duk_free_raw(
duk_context *ctx,
void *ptr);
431DUK_EXTERNAL_DECL
void *duk_realloc_raw(
duk_context *ctx,
void *ptr, duk_size_t size);
432DUK_EXTERNAL_DECL
void *duk_alloc(
duk_context *ctx, duk_size_t size);
433DUK_EXTERNAL_DECL
void duk_free(
duk_context *ctx,
void *ptr);
434DUK_EXTERNAL_DECL
void *duk_realloc(
duk_context *ctx,
void *ptr, duk_size_t size);
436DUK_EXTERNAL_DECL
void duk_gc(
duk_context *ctx, duk_uint_t flags);
442DUK_API_NORETURN(DUK_EXTERNAL_DECL
void duk_throw_raw(
duk_context *ctx));
443#define duk_throw(ctx) \
444 (duk_throw_raw((ctx)), (duk_ret_t) 0)
445DUK_API_NORETURN(DUK_EXTERNAL_DECL
void duk_fatal_raw(
duk_context *ctx,
const char *err_msg));
446#define duk_fatal(ctx,err_msg) \
447 (duk_fatal_raw((ctx), (err_msg)), (duk_ret_t) 0)
449#if defined(DUK_API_VARIADIC_MACROS)
450DUK_API_NORETURN(DUK_EXTERNAL_DECL
void duk_error_raw(
duk_context *ctx, duk_errcode_t err_code,
const char *filename, duk_int_t line,
const char *fmt, ...));
451#define duk_error(ctx,err_code,...) \
452 (duk_error_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
453#define duk_generic_error(ctx,...) \
454 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
455#define duk_eval_error(ctx,...) \
456 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_EVAL_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
457#define duk_range_error(ctx,...) \
458 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_RANGE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
459#define duk_reference_error(ctx,...) \
460 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_REFERENCE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
461#define duk_syntax_error(ctx,...) \
462 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_SYNTAX_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
463#define duk_type_error(ctx,...) \
464 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_TYPE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
465#define duk_uri_error(ctx,...) \
466 (duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_URI_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
476DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_error_stash(
duk_context *ctx, duk_errcode_t err_code,
const char *fmt, ...));
477DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_generic_error_stash(
duk_context *ctx,
const char *fmt, ...));
478DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_eval_error_stash(
duk_context *ctx,
const char *fmt, ...));
479DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_range_error_stash(
duk_context *ctx,
const char *fmt, ...));
480DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_reference_error_stash(
duk_context *ctx,
const char *fmt, ...));
481DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_syntax_error_stash(
duk_context *ctx,
const char *fmt, ...));
482DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_type_error_stash(
duk_context *ctx,
const char *fmt, ...));
483DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_uri_error_stash(
duk_context *ctx,
const char *fmt, ...));
485 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
486 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
488#define duk_generic_error \
489 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
490 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
491 duk_generic_error_stash)
492#define duk_eval_error \
493 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
494 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
495 duk_eval_error_stash)
496#define duk_range_error \
497 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
498 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
499 duk_range_error_stash)
500#define duk_reference_error \
501 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
502 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
503 duk_reference_error_stash)
504#define duk_syntax_error \
505 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
506 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
507 duk_syntax_error_stash)
508#define duk_type_error \
509 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
510 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
511 duk_type_error_stash)
512#define duk_uri_error \
513 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
514 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
518DUK_API_NORETURN(DUK_EXTERNAL_DECL
void duk_error_va_raw(
duk_context *ctx, duk_errcode_t err_code,
const char *filename, duk_int_t line,
const char *fmt, va_list ap));
519#define duk_error_va(ctx,err_code,fmt,ap) \
520 (duk_error_va_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
521#define duk_generic_error_va(ctx,fmt,ap) \
522 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
523#define duk_eval_error_va(ctx,fmt,ap) \
524 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_EVAL_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
525#define duk_range_error_va(ctx,fmt,ap) \
526 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_RANGE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
527#define duk_reference_error_va(ctx,fmt,ap) \
528 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_REFERENCE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
529#define duk_syntax_error_va(ctx,fmt,ap) \
530 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_SYNTAX_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
531#define duk_type_error_va(ctx,fmt,ap) \
532 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_TYPE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
533#define duk_uri_error_va(ctx,fmt,ap) \
534 (duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_URI_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
540DUK_EXTERNAL_DECL duk_bool_t duk_is_strict_call(
duk_context *ctx);
541DUK_EXTERNAL_DECL duk_bool_t duk_is_constructor_call(
duk_context *ctx);
547DUK_EXTERNAL_DECL duk_idx_t duk_normalize_index(
duk_context *ctx, duk_idx_t idx);
548DUK_EXTERNAL_DECL duk_idx_t duk_require_normalize_index(
duk_context *ctx, duk_idx_t idx);
549DUK_EXTERNAL_DECL duk_bool_t duk_is_valid_index(
duk_context *ctx, duk_idx_t idx);
550DUK_EXTERNAL_DECL
void duk_require_valid_index(
duk_context *ctx, duk_idx_t idx);
552DUK_EXTERNAL_DECL duk_idx_t duk_get_top(
duk_context *ctx);
553DUK_EXTERNAL_DECL
void duk_set_top(
duk_context *ctx, duk_idx_t idx);
554DUK_EXTERNAL_DECL duk_idx_t duk_get_top_index(
duk_context *ctx);
555DUK_EXTERNAL_DECL duk_idx_t duk_require_top_index(
duk_context *ctx);
564DUK_EXTERNAL_DECL duk_bool_t duk_check_stack(
duk_context *ctx, duk_idx_t extra);
565DUK_EXTERNAL_DECL
void duk_require_stack(
duk_context *ctx, duk_idx_t extra);
566DUK_EXTERNAL_DECL duk_bool_t duk_check_stack_top(
duk_context *ctx, duk_idx_t top);
567DUK_EXTERNAL_DECL
void duk_require_stack_top(
duk_context *ctx, duk_idx_t top);
573DUK_EXTERNAL_DECL
void duk_swap(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
574DUK_EXTERNAL_DECL
void duk_swap_top(
duk_context *ctx, duk_idx_t idx);
575DUK_EXTERNAL_DECL
void duk_dup(
duk_context *ctx, duk_idx_t from_idx);
576DUK_EXTERNAL_DECL
void duk_dup_top(
duk_context *ctx);
577DUK_EXTERNAL_DECL
void duk_insert(
duk_context *ctx, duk_idx_t to_idx);
578DUK_EXTERNAL_DECL
void duk_replace(
duk_context *ctx, duk_idx_t to_idx);
579DUK_EXTERNAL_DECL
void duk_copy(
duk_context *ctx, duk_idx_t from_idx, duk_idx_t to_idx);
580DUK_EXTERNAL_DECL
void duk_remove(
duk_context *ctx, duk_idx_t idx);
581DUK_EXTERNAL_DECL
void duk_xcopymove_raw(
duk_context *to_ctx,
duk_context *from_ctx, duk_idx_t count, duk_bool_t is_copy);
583#define duk_xmove_top(to_ctx,from_ctx,count) \
584 duk_xcopymove_raw((to_ctx), (from_ctx), (count), 0 )
585#define duk_xcopy_top(to_ctx,from_ctx,count) \
586 duk_xcopymove_raw((to_ctx), (from_ctx), (count), 1 )
597DUK_EXTERNAL_DECL
void duk_push_undefined(
duk_context *ctx);
598DUK_EXTERNAL_DECL
void duk_push_null(
duk_context *ctx);
599DUK_EXTERNAL_DECL
void duk_push_boolean(
duk_context *ctx, duk_bool_t val);
600DUK_EXTERNAL_DECL
void duk_push_true(
duk_context *ctx);
601DUK_EXTERNAL_DECL
void duk_push_false(
duk_context *ctx);
602DUK_EXTERNAL_DECL
void duk_push_number(
duk_context *ctx, duk_double_t val);
603DUK_EXTERNAL_DECL
void duk_push_nan(
duk_context *ctx);
604DUK_EXTERNAL_DECL
void duk_push_int(
duk_context *ctx, duk_int_t val);
605DUK_EXTERNAL_DECL
void duk_push_uint(
duk_context *ctx, duk_uint_t val);
606DUK_EXTERNAL_DECL
const char *duk_push_string(
duk_context *ctx,
const char *str);
607DUK_EXTERNAL_DECL
const char *duk_push_lstring(
duk_context *ctx,
const char *str, duk_size_t len);
608DUK_EXTERNAL_DECL
void duk_push_pointer(
duk_context *ctx,
void *p);
609DUK_EXTERNAL_DECL
const char *duk_push_sprintf(
duk_context *ctx,
const char *fmt, ...);
610DUK_EXTERNAL_DECL
const char *duk_push_vsprintf(
duk_context *ctx,
const char *fmt, va_list ap);
612DUK_EXTERNAL_DECL
void duk_push_this(
duk_context *ctx);
613DUK_EXTERNAL_DECL
void duk_push_current_function(
duk_context *ctx);
614DUK_EXTERNAL_DECL
void duk_push_current_thread(
duk_context *ctx);
615DUK_EXTERNAL_DECL
void duk_push_global_object(
duk_context *ctx);
616DUK_EXTERNAL_DECL
void duk_push_heap_stash(
duk_context *ctx);
617DUK_EXTERNAL_DECL
void duk_push_global_stash(
duk_context *ctx);
620DUK_EXTERNAL_DECL duk_idx_t duk_push_object(
duk_context *ctx);
621DUK_EXTERNAL_DECL duk_idx_t duk_push_bare_object(
duk_context *ctx);
622DUK_EXTERNAL_DECL duk_idx_t duk_push_array(
duk_context *ctx);
623DUK_EXTERNAL_DECL duk_idx_t duk_push_c_function(
duk_context *ctx, duk_c_function func, duk_idx_t nargs);
624DUK_EXTERNAL_DECL duk_idx_t duk_push_c_lightfunc(
duk_context *ctx, duk_c_function func, duk_idx_t nargs, duk_idx_t length, duk_int_t magic);
625DUK_EXTERNAL_DECL duk_idx_t duk_push_thread_raw(
duk_context *ctx, duk_uint_t flags);
627#define duk_push_thread(ctx) \
628 duk_push_thread_raw((ctx), 0 )
630#define duk_push_thread_new_globalenv(ctx) \
631 duk_push_thread_raw((ctx), DUK_THREAD_NEW_GLOBAL_ENV )
633DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_raw(
duk_context *ctx, duk_errcode_t err_code,
const char *filename, duk_int_t line,
const char *fmt, ...);
635#if defined(DUK_API_VARIADIC_MACROS)
636#define duk_push_error_object(ctx,err_code,...) \
637 duk_push_error_object_raw((ctx), (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__)
639DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_stash(
duk_context *ctx, duk_errcode_t err_code,
const char *fmt, ...);
641#define duk_push_error_object \
642 (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
643 duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
644 duk_push_error_object_stash)
647DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_va_raw(
duk_context *ctx, duk_errcode_t err_code,
const char *filename, duk_int_t line,
const char *fmt, va_list ap);
648#define duk_push_error_object_va(ctx,err_code,fmt,ap) \
649 duk_push_error_object_va_raw((ctx), (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap))
651#define DUK_BUF_FLAG_DYNAMIC (1 << 0)
652#define DUK_BUF_FLAG_EXTERNAL (1 << 1)
653#define DUK_BUF_FLAG_NOZERO (1 << 2)
655DUK_EXTERNAL_DECL
void *duk_push_buffer_raw(
duk_context *ctx, duk_size_t size, duk_small_uint_t flags);
657#define duk_push_buffer(ctx,size,dynamic) \
658 duk_push_buffer_raw((ctx), (size), (dynamic) ? DUK_BUF_FLAG_DYNAMIC : 0)
659#define duk_push_fixed_buffer(ctx,size) \
660 duk_push_buffer_raw((ctx), (size), 0 )
661#define duk_push_dynamic_buffer(ctx,size) \
662 duk_push_buffer_raw((ctx), (size), DUK_BUF_FLAG_DYNAMIC )
663#define duk_push_external_buffer(ctx) \
664 ((void) duk_push_buffer_raw((ctx), 0, DUK_BUF_FLAG_DYNAMIC | DUK_BUF_FLAG_EXTERNAL))
666#define DUK_BUFOBJ_CREATE_ARRBUF (1 << 4)
667#define DUK_BUFOBJ_ARRAYBUFFER 0
668#define DUK_BUFOBJ_NODEJS_BUFFER (1 | DUK_BUFOBJ_CREATE_ARRBUF)
669#define DUK_BUFOBJ_DATAVIEW (2 | DUK_BUFOBJ_CREATE_ARRBUF)
670#define DUK_BUFOBJ_INT8ARRAY (3 | DUK_BUFOBJ_CREATE_ARRBUF)
671#define DUK_BUFOBJ_UINT8ARRAY (4 | DUK_BUFOBJ_CREATE_ARRBUF)
672#define DUK_BUFOBJ_UINT8CLAMPEDARRAY (5 | DUK_BUFOBJ_CREATE_ARRBUF)
673#define DUK_BUFOBJ_INT16ARRAY (6 | DUK_BUFOBJ_CREATE_ARRBUF)
674#define DUK_BUFOBJ_UINT16ARRAY (7 | DUK_BUFOBJ_CREATE_ARRBUF)
675#define DUK_BUFOBJ_INT32ARRAY (8 | DUK_BUFOBJ_CREATE_ARRBUF)
676#define DUK_BUFOBJ_UINT32ARRAY (9 | DUK_BUFOBJ_CREATE_ARRBUF)
677#define DUK_BUFOBJ_FLOAT32ARRAY (10 | DUK_BUFOBJ_CREATE_ARRBUF)
678#define DUK_BUFOBJ_FLOAT64ARRAY (11 | DUK_BUFOBJ_CREATE_ARRBUF)
680DUK_EXTERNAL_DECL
void duk_push_buffer_object(
duk_context *ctx, duk_idx_t idx_buffer, duk_size_t byte_offset, duk_size_t byte_length, duk_uint_t flags);
682DUK_EXTERNAL_DECL duk_idx_t duk_push_heapptr(
duk_context *ctx,
void *ptr);
689DUK_EXTERNAL_DECL
void duk_pop_n(
duk_context *ctx, duk_idx_t count);
700DUK_EXTERNAL_DECL duk_int_t duk_get_type(
duk_context *ctx, duk_idx_t idx);
701DUK_EXTERNAL_DECL duk_bool_t duk_check_type(
duk_context *ctx, duk_idx_t idx, duk_int_t type);
702DUK_EXTERNAL_DECL duk_uint_t duk_get_type_mask(
duk_context *ctx, duk_idx_t idx);
703DUK_EXTERNAL_DECL duk_bool_t duk_check_type_mask(
duk_context *ctx, duk_idx_t idx, duk_uint_t mask);
705DUK_EXTERNAL_DECL duk_bool_t duk_is_undefined(
duk_context *ctx, duk_idx_t idx);
706DUK_EXTERNAL_DECL duk_bool_t duk_is_null(
duk_context *ctx, duk_idx_t idx);
707#define duk_is_null_or_undefined(ctx, idx) \
708 ((duk_get_type_mask((ctx), (idx)) & (DUK_TYPE_MASK_NULL | DUK_TYPE_MASK_UNDEFINED)) ? 1 : 0)
710DUK_EXTERNAL_DECL duk_bool_t duk_is_boolean(
duk_context *ctx, duk_idx_t idx);
711DUK_EXTERNAL_DECL duk_bool_t duk_is_number(
duk_context *ctx, duk_idx_t idx);
712DUK_EXTERNAL_DECL duk_bool_t duk_is_nan(
duk_context *ctx, duk_idx_t idx);
713DUK_EXTERNAL_DECL duk_bool_t duk_is_string(
duk_context *ctx, duk_idx_t idx);
714DUK_EXTERNAL_DECL duk_bool_t duk_is_object(
duk_context *ctx, duk_idx_t idx);
715DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer(
duk_context *ctx, duk_idx_t idx);
716DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer_data(
duk_context *ctx, duk_idx_t idx);
717DUK_EXTERNAL_DECL duk_bool_t duk_is_pointer(
duk_context *ctx, duk_idx_t idx);
718DUK_EXTERNAL_DECL duk_bool_t duk_is_lightfunc(
duk_context *ctx, duk_idx_t idx);
720DUK_EXTERNAL_DECL duk_bool_t duk_is_symbol(
duk_context *ctx, duk_idx_t idx);
721DUK_EXTERNAL_DECL duk_bool_t duk_is_array(
duk_context *ctx, duk_idx_t idx);
722DUK_EXTERNAL_DECL duk_bool_t duk_is_function(
duk_context *ctx, duk_idx_t idx);
723DUK_EXTERNAL_DECL duk_bool_t duk_is_c_function(
duk_context *ctx, duk_idx_t idx);
724DUK_EXTERNAL_DECL duk_bool_t duk_is_ecmascript_function(
duk_context *ctx, duk_idx_t idx);
725DUK_EXTERNAL_DECL duk_bool_t duk_is_bound_function(
duk_context *ctx, duk_idx_t idx);
726DUK_EXTERNAL_DECL duk_bool_t duk_is_thread(
duk_context *ctx, duk_idx_t idx);
728#define duk_is_callable(ctx,idx) \
729 duk_is_function((ctx), (idx))
730DUK_EXTERNAL_DECL duk_bool_t duk_is_dynamic_buffer(
duk_context *ctx, duk_idx_t idx);
731DUK_EXTERNAL_DECL duk_bool_t duk_is_fixed_buffer(
duk_context *ctx, duk_idx_t idx);
732DUK_EXTERNAL_DECL duk_bool_t duk_is_external_buffer(
duk_context *ctx, duk_idx_t idx);
738#define duk_is_primitive(ctx,idx) \
739 duk_check_type_mask((ctx), (idx), DUK_TYPE_MASK_UNDEFINED | \
740 DUK_TYPE_MASK_NULL | \
741 DUK_TYPE_MASK_BOOLEAN | \
742 DUK_TYPE_MASK_NUMBER | \
743 DUK_TYPE_MASK_STRING | \
744 DUK_TYPE_MASK_POINTER)
747#define duk_is_object_coercible(ctx,idx) \
748 duk_check_type_mask((ctx), (idx), DUK_TYPE_MASK_BOOLEAN | \
749 DUK_TYPE_MASK_NUMBER | \
750 DUK_TYPE_MASK_STRING | \
751 DUK_TYPE_MASK_OBJECT | \
752 DUK_TYPE_MASK_BUFFER | \
753 DUK_TYPE_MASK_POINTER | \
754 DUK_TYPE_MASK_LIGHTFUNC)
756DUK_EXTERNAL_DECL duk_errcode_t duk_get_error_code(
duk_context *ctx, duk_idx_t idx);
757#define duk_is_error(ctx,idx) \
758 (duk_get_error_code((ctx), (idx)) != 0)
759#define duk_is_eval_error(ctx,idx) \
760 (duk_get_error_code((ctx), (idx)) == DUK_ERR_EVAL_ERROR)
761#define duk_is_range_error(ctx,idx) \
762 (duk_get_error_code((ctx), (idx)) == DUK_ERR_RANGE_ERROR)
763#define duk_is_reference_error(ctx,idx) \
764 (duk_get_error_code((ctx), (idx)) == DUK_ERR_REFERENCE_ERROR)
765#define duk_is_syntax_error(ctx,idx) \
766 (duk_get_error_code((ctx), (idx)) == DUK_ERR_SYNTAX_ERROR)
767#define duk_is_type_error(ctx,idx) \
768 (duk_get_error_code((ctx), (idx)) == DUK_ERR_TYPE_ERROR)
769#define duk_is_uri_error(ctx,idx) \
770 (duk_get_error_code((ctx), (idx)) == DUK_ERR_URI_ERROR)
780DUK_EXTERNAL_DECL duk_bool_t duk_get_boolean(
duk_context *ctx, duk_idx_t idx);
781DUK_EXTERNAL_DECL duk_double_t duk_get_number(
duk_context *ctx, duk_idx_t idx);
782DUK_EXTERNAL_DECL duk_int_t duk_get_int(
duk_context *ctx, duk_idx_t idx);
783DUK_EXTERNAL_DECL duk_uint_t duk_get_uint(
duk_context *ctx, duk_idx_t idx);
784DUK_EXTERNAL_DECL
const char *duk_get_string(
duk_context *ctx, duk_idx_t idx);
785DUK_EXTERNAL_DECL
const char *duk_get_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
786DUK_EXTERNAL_DECL
void *duk_get_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
787DUK_EXTERNAL_DECL
void *duk_get_buffer_data(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
788DUK_EXTERNAL_DECL
void *duk_get_pointer(
duk_context *ctx, duk_idx_t idx);
789DUK_EXTERNAL_DECL duk_c_function duk_get_c_function(
duk_context *ctx, duk_idx_t idx);
791DUK_EXTERNAL_DECL
void *duk_get_heapptr(
duk_context *ctx, duk_idx_t idx);
792DUK_EXTERNAL_DECL duk_size_t duk_get_length(
duk_context *ctx, duk_idx_t idx);
793DUK_EXTERNAL_DECL
void duk_set_length(
duk_context *ctx, duk_idx_t idx, duk_size_t len);
800#define duk_require_type_mask(ctx,idx,mask) \
801 ((void) duk_check_type_mask((ctx), (idx), (mask) | DUK_TYPE_MASK_THROW))
803DUK_EXTERNAL_DECL
void duk_require_undefined(
duk_context *ctx, duk_idx_t idx);
804DUK_EXTERNAL_DECL
void duk_require_null(
duk_context *ctx, duk_idx_t idx);
805DUK_EXTERNAL_DECL duk_bool_t duk_require_boolean(
duk_context *ctx, duk_idx_t idx);
806DUK_EXTERNAL_DECL duk_double_t duk_require_number(
duk_context *ctx, duk_idx_t idx);
807DUK_EXTERNAL_DECL duk_int_t duk_require_int(
duk_context *ctx, duk_idx_t idx);
808DUK_EXTERNAL_DECL duk_uint_t duk_require_uint(
duk_context *ctx, duk_idx_t idx);
809DUK_EXTERNAL_DECL
const char *duk_require_string(
duk_context *ctx, duk_idx_t idx);
810DUK_EXTERNAL_DECL
const char *duk_require_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
811DUK_EXTERNAL_DECL
void *duk_require_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
812DUK_EXTERNAL_DECL
void *duk_require_buffer_data(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
813DUK_EXTERNAL_DECL
void *duk_require_pointer(
duk_context *ctx, duk_idx_t idx);
814DUK_EXTERNAL_DECL duk_c_function duk_require_c_function(
duk_context *ctx, duk_idx_t idx);
816DUK_EXTERNAL_DECL
void duk_require_function(
duk_context *ctx, duk_idx_t idx);
817#define duk_require_callable(ctx,idx) \
818 duk_require_function((ctx), (idx))
819DUK_EXTERNAL_DECL
void *duk_require_heapptr(
duk_context *ctx, duk_idx_t idx);
822#define duk_require_object_coercible(ctx,idx) \
823 ((void) duk_check_type_mask((ctx), (idx), DUK_TYPE_MASK_BOOLEAN | \
824 DUK_TYPE_MASK_NUMBER | \
825 DUK_TYPE_MASK_STRING | \
826 DUK_TYPE_MASK_OBJECT | \
827 DUK_TYPE_MASK_BUFFER | \
828 DUK_TYPE_MASK_POINTER | \
829 DUK_TYPE_MASK_LIGHTFUNC | \
830 DUK_TYPE_MASK_THROW))
839DUK_EXTERNAL_DECL
void duk_to_undefined(
duk_context *ctx, duk_idx_t idx);
840DUK_EXTERNAL_DECL
void duk_to_null(
duk_context *ctx, duk_idx_t idx);
841DUK_EXTERNAL_DECL duk_bool_t duk_to_boolean(
duk_context *ctx, duk_idx_t idx);
842DUK_EXTERNAL_DECL duk_double_t duk_to_number(
duk_context *ctx, duk_idx_t idx);
843DUK_EXTERNAL_DECL duk_int_t duk_to_int(
duk_context *ctx, duk_idx_t idx);
844DUK_EXTERNAL_DECL duk_uint_t duk_to_uint(
duk_context *ctx, duk_idx_t idx);
845DUK_EXTERNAL_DECL duk_int32_t duk_to_int32(
duk_context *ctx, duk_idx_t idx);
846DUK_EXTERNAL_DECL duk_uint32_t duk_to_uint32(
duk_context *ctx, duk_idx_t idx);
847DUK_EXTERNAL_DECL duk_uint16_t duk_to_uint16(
duk_context *ctx, duk_idx_t idx);
848DUK_EXTERNAL_DECL
const char *duk_to_string(
duk_context *ctx, duk_idx_t idx);
849DUK_EXTERNAL_DECL
const char *duk_to_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
850DUK_EXTERNAL_DECL
void *duk_to_buffer_raw(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size, duk_uint_t flags);
851DUK_EXTERNAL_DECL
void *duk_to_pointer(
duk_context *ctx, duk_idx_t idx);
852DUK_EXTERNAL_DECL
void duk_to_object(
duk_context *ctx, duk_idx_t idx);
853DUK_EXTERNAL_DECL
void duk_to_primitive(
duk_context *ctx, duk_idx_t idx, duk_int_t hint);
855#define DUK_BUF_MODE_FIXED 0
856#define DUK_BUF_MODE_DYNAMIC 1
857#define DUK_BUF_MODE_DONTCARE 2
859#define duk_to_buffer(ctx,idx,out_size) \
860 duk_to_buffer_raw((ctx), (idx), (out_size), DUK_BUF_MODE_DONTCARE)
861#define duk_to_fixed_buffer(ctx,idx,out_size) \
862 duk_to_buffer_raw((ctx), (idx), (out_size), DUK_BUF_MODE_FIXED)
863#define duk_to_dynamic_buffer(ctx,idx,out_size) \
864 duk_to_buffer_raw((ctx), (idx), (out_size), DUK_BUF_MODE_DYNAMIC)
867DUK_EXTERNAL_DECL
const char *duk_safe_to_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
868#define duk_safe_to_string(ctx,idx) \
869 duk_safe_to_lstring((ctx), (idx), NULL)
875DUK_EXTERNAL_DECL
const char *duk_base64_encode(
duk_context *ctx, duk_idx_t idx);
876DUK_EXTERNAL_DECL
void duk_base64_decode(
duk_context *ctx, duk_idx_t idx);
877DUK_EXTERNAL_DECL
const char *duk_hex_encode(
duk_context *ctx, duk_idx_t idx);
878DUK_EXTERNAL_DECL
void duk_hex_decode(
duk_context *ctx, duk_idx_t idx);
879DUK_EXTERNAL_DECL
const char *duk_json_encode(
duk_context *ctx, duk_idx_t idx);
880DUK_EXTERNAL_DECL
void duk_json_decode(
duk_context *ctx, duk_idx_t idx);
882DUK_EXTERNAL_DECL
const char *duk_buffer_to_string(
duk_context *ctx, duk_idx_t idx);
888DUK_EXTERNAL_DECL
void *duk_resize_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t new_size);
889DUK_EXTERNAL_DECL
void *duk_steal_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
890DUK_EXTERNAL_DECL
void duk_config_buffer(
duk_context *ctx, duk_idx_t idx,
void *ptr, duk_size_t len);
900DUK_EXTERNAL_DECL duk_bool_t duk_get_prop(
duk_context *ctx, duk_idx_t obj_idx);
901DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
902DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_lstring(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key, duk_size_t key_len);
903DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
904DUK_EXTERNAL_DECL duk_bool_t duk_put_prop(
duk_context *ctx, duk_idx_t obj_idx);
905DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
906DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_lstring(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key, duk_size_t key_len);
907DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
908DUK_EXTERNAL_DECL duk_bool_t duk_del_prop(
duk_context *ctx, duk_idx_t obj_idx);
909DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
910DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_lstring(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key, duk_size_t key_len);
911DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
912DUK_EXTERNAL_DECL duk_bool_t duk_has_prop(
duk_context *ctx, duk_idx_t obj_idx);
913DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
914DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_lstring(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key, duk_size_t key_len);
915DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
917DUK_EXTERNAL_DECL
void duk_get_prop_desc(
duk_context *ctx, duk_idx_t obj_idx, duk_uint_t flags);
918DUK_EXTERNAL_DECL
void duk_def_prop(
duk_context *ctx, duk_idx_t obj_idx, duk_uint_t flags);
920DUK_EXTERNAL_DECL duk_bool_t duk_get_global_string(
duk_context *ctx,
const char *
key);
921DUK_EXTERNAL_DECL duk_bool_t duk_get_global_lstring(
duk_context *ctx,
const char *
key, duk_size_t key_len);
922DUK_EXTERNAL_DECL duk_bool_t duk_put_global_string(
duk_context *ctx,
const char *
key);
923DUK_EXTERNAL_DECL duk_bool_t duk_put_global_lstring(
duk_context *ctx,
const char *
key, duk_size_t key_len);
929DUK_EXTERNAL_DECL
void duk_inspect_value(
duk_context *ctx, duk_idx_t idx);
930DUK_EXTERNAL_DECL
void duk_inspect_callstack_entry(
duk_context *ctx, duk_int_t level);
936DUK_EXTERNAL_DECL
void duk_get_prototype(
duk_context *ctx, duk_idx_t idx);
937DUK_EXTERNAL_DECL
void duk_set_prototype(
duk_context *ctx, duk_idx_t idx);
943DUK_EXTERNAL_DECL
void duk_get_finalizer(
duk_context *ctx, duk_idx_t idx);
944DUK_EXTERNAL_DECL
void duk_set_finalizer(
duk_context *ctx, duk_idx_t idx);
950DUK_EXTERNAL_DECL
void duk_set_global_object(
duk_context *ctx);
956DUK_EXTERNAL_DECL duk_int_t duk_get_magic(
duk_context *ctx, duk_idx_t idx);
957DUK_EXTERNAL_DECL
void duk_set_magic(
duk_context *ctx, duk_idx_t idx, duk_int_t magic);
958DUK_EXTERNAL_DECL duk_int_t duk_get_current_magic(
duk_context *ctx);
971DUK_EXTERNAL_DECL
void duk_compact(
duk_context *ctx, duk_idx_t obj_idx);
972DUK_EXTERNAL_DECL
void duk_enum(
duk_context *ctx, duk_idx_t obj_idx, duk_uint_t enum_flags);
973DUK_EXTERNAL_DECL duk_bool_t duk_next(
duk_context *ctx, duk_idx_t enum_idx, duk_bool_t get_value);
979DUK_EXTERNAL_DECL
void duk_concat(
duk_context *ctx, duk_idx_t count);
980DUK_EXTERNAL_DECL
void duk_join(
duk_context *ctx, duk_idx_t count);
981DUK_EXTERNAL_DECL
void duk_decode_string(
duk_context *ctx, duk_idx_t idx, duk_decode_char_function callback,
void *udata);
982DUK_EXTERNAL_DECL
void duk_map_string(
duk_context *ctx, duk_idx_t idx, duk_map_char_function callback,
void *udata);
983DUK_EXTERNAL_DECL
void duk_substring(
duk_context *ctx, duk_idx_t idx, duk_size_t start_char_offset, duk_size_t end_char_offset);
984DUK_EXTERNAL_DECL
void duk_trim(
duk_context *ctx, duk_idx_t idx);
985DUK_EXTERNAL_DECL duk_codepoint_t duk_char_code_at(
duk_context *ctx, duk_idx_t idx, duk_size_t char_offset);
991DUK_EXTERNAL_DECL duk_bool_t duk_equals(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
992DUK_EXTERNAL_DECL duk_bool_t duk_strict_equals(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
993DUK_EXTERNAL_DECL duk_bool_t duk_samevalue(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
994DUK_EXTERNAL_DECL duk_bool_t duk_instanceof(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
1000DUK_EXTERNAL_DECL
void duk_call(
duk_context *ctx, duk_idx_t nargs);
1001DUK_EXTERNAL_DECL
void duk_call_method(
duk_context *ctx, duk_idx_t nargs);
1002DUK_EXTERNAL_DECL
void duk_call_prop(
duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs);
1003DUK_EXTERNAL_DECL duk_int_t duk_pcall(
duk_context *ctx, duk_idx_t nargs);
1004DUK_EXTERNAL_DECL duk_int_t duk_pcall_method(
duk_context *ctx, duk_idx_t nargs);
1005DUK_EXTERNAL_DECL duk_int_t duk_pcall_prop(
duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs);
1006DUK_EXTERNAL_DECL
void duk_new(
duk_context *ctx, duk_idx_t nargs);
1007DUK_EXTERNAL_DECL duk_int_t duk_pnew(
duk_context *ctx, duk_idx_t nargs);
1008DUK_EXTERNAL_DECL duk_int_t duk_safe_call(
duk_context *ctx, duk_safe_call_function func,
void *udata, duk_idx_t nargs, duk_idx_t nrets);
1022DUK_EXTERNAL_DECL duk_int_t duk_eval_raw(
duk_context *ctx,
const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
1023DUK_EXTERNAL_DECL duk_int_t duk_compile_raw(
duk_context *ctx,
const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
1026#define duk_eval(ctx) \
1027 ((void) duk_eval_raw((ctx), NULL, 0, 1 | DUK_COMPILE_EVAL | DUK_COMPILE_NOFILENAME))
1029#define duk_eval_noresult(ctx) \
1030 ((void) duk_eval_raw((ctx), NULL, 0, 1 | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
1032#define duk_peval(ctx) \
1033 (duk_eval_raw((ctx), NULL, 0, 1 | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME))
1035#define duk_peval_noresult(ctx) \
1036 (duk_eval_raw((ctx), NULL, 0, 1 | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
1038#define duk_compile(ctx,flags) \
1039 ((void) duk_compile_raw((ctx), NULL, 0, 2 | (flags)))
1041#define duk_pcompile(ctx,flags) \
1042 (duk_compile_raw((ctx), NULL, 0, 2 | (flags) | DUK_COMPILE_SAFE))
1045#define duk_eval_string(ctx,src) \
1046 ((void) duk_eval_raw((ctx), (src), 0, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
1048#define duk_eval_string_noresult(ctx,src) \
1049 ((void) duk_eval_raw((ctx), (src), 0, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
1051#define duk_peval_string(ctx,src) \
1052 (duk_eval_raw((ctx), (src), 0, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
1054#define duk_peval_string_noresult(ctx,src) \
1055 (duk_eval_raw((ctx), (src), 0, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
1057#define duk_compile_string(ctx,flags,src) \
1058 ((void) duk_compile_raw((ctx), (src), 0, 0 | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
1060#define duk_compile_string_filename(ctx,flags,src) \
1061 ((void) duk_compile_raw((ctx), (src), 0, 1 | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
1063#define duk_pcompile_string(ctx,flags,src) \
1064 (duk_compile_raw((ctx), (src), 0, 0 | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
1066#define duk_pcompile_string_filename(ctx,flags,src) \
1067 (duk_compile_raw((ctx), (src), 0, 1 | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
1070#define duk_eval_lstring(ctx,buf,len) \
1071 ((void) duk_eval_raw((ctx), buf, len, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
1073#define duk_eval_lstring_noresult(ctx,buf,len) \
1074 ((void) duk_eval_raw((ctx), buf, len, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
1076#define duk_peval_lstring(ctx,buf,len) \
1077 (duk_eval_raw((ctx), buf, len, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME))
1079#define duk_peval_lstring_noresult(ctx,buf,len) \
1080 (duk_eval_raw((ctx), buf, len, 0 | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
1082#define duk_compile_lstring(ctx,flags,buf,len) \
1083 ((void) duk_compile_raw((ctx), buf, len, 0 | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
1085#define duk_compile_lstring_filename(ctx,flags,buf,len) \
1086 ((void) duk_compile_raw((ctx), buf, len, 1 | (flags) | DUK_COMPILE_NOSOURCE))
1088#define duk_pcompile_lstring(ctx,flags,buf,len) \
1089 (duk_compile_raw((ctx), buf, len, 0 | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
1091#define duk_pcompile_lstring_filename(ctx,flags,buf,len) \
1092 (duk_compile_raw((ctx), buf, len, 1 | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE))
1098DUK_EXTERNAL_DECL
void duk_dump_function(
duk_context *ctx);
1099DUK_EXTERNAL_DECL
void duk_load_function(
duk_context *ctx);
1105DUK_EXTERNAL_DECL
void duk_push_context_dump(
duk_context *ctx);
1111DUK_EXTERNAL_DECL
void duk_debugger_attach(
duk_context *ctx,
1112 duk_debug_read_function read_cb,
1113 duk_debug_write_function write_cb,
1114 duk_debug_peek_function peek_cb,
1115 duk_debug_read_flush_function read_flush_cb,
1116 duk_debug_write_flush_function write_flush_cb,
1117 duk_debug_request_function request_cb,
1118 duk_debug_detached_function detached_cb,
1120DUK_EXTERNAL_DECL
void duk_debugger_detach(
duk_context *ctx);
1121DUK_EXTERNAL_DECL
void duk_debugger_cooperate(
duk_context *ctx);
1122DUK_EXTERNAL_DECL duk_bool_t duk_debugger_notify(
duk_context *ctx, duk_idx_t nvalues);
1123DUK_EXTERNAL_DECL
void duk_debugger_pause(
duk_context *ctx);
1129DUK_EXTERNAL_DECL duk_double_t duk_get_now(
duk_context *ctx);
1141#define DUK_DATE_MSEC_SECOND 1000L
1142#define DUK_DATE_MSEC_MINUTE (60L * 1000L)
1143#define DUK_DATE_MSEC_HOUR (60L * 60L * 1000L)
1144#define DUK_DATE_MSEC_DAY (24L * 60L * 60L * 1000L)
1151#define DUK_DATE_MSEC_100M_DAYS (8.64e15)
1152#define DUK_DATE_MSEC_100M_DAYS_LEEWAY (8.64e15 + 24 * 3600e3)
1160#define DUK_DATE_MIN_ECMA_YEAR (-271821L)
1161#define DUK_DATE_MAX_ECMA_YEAR 275760L
1171#define DUK_DATE_IDX_YEAR 0
1172#define DUK_DATE_IDX_MONTH 1
1173#define DUK_DATE_IDX_DAY 2
1174#define DUK_DATE_IDX_HOUR 3
1175#define DUK_DATE_IDX_MINUTE 4
1176#define DUK_DATE_IDX_SECOND 5
1177#define DUK_DATE_IDX_MILLISECOND 6
1178#define DUK_DATE_IDX_WEEKDAY 7
1179#define DUK_DATE_IDX_NUM_PARTS 8
1197#define DUK_DATE_FLAG_NAN_TO_ZERO (1 << 0)
1198#define DUK_DATE_FLAG_NAN_TO_RANGE_ERROR (1 << 1)
1199#define DUK_DATE_FLAG_ONEBASED (1 << 2)
1200#define DUK_DATE_FLAG_EQUIVYEAR (1 << 3)
1201#define DUK_DATE_FLAG_LOCALTIME (1 << 4)
1202#define DUK_DATE_FLAG_SUB1900 (1 << 5)
1203#define DUK_DATE_FLAG_TOSTRING_DATE (1 << 6)
1204#define DUK_DATE_FLAG_TOSTRING_TIME (1 << 7)
1205#define DUK_DATE_FLAG_TOSTRING_LOCALE (1 << 8)
1206#define DUK_DATE_FLAG_TIMESETTER (1 << 9)
1207#define DUK_DATE_FLAG_YEAR_FIXUP (1 << 10)
1208#define DUK_DATE_FLAG_SEP_T (1 << 11)
1209#define DUK_DATE_FLAG_VALUE_SHIFT 12
1218#if defined(DUK_USE_ROM_OBJECTS) && defined(DUK_USE_HEAPPTR16)
1219DUK_EXTERNAL_DECL
const void *
const duk_rom_compressed_pointers[];
1226#if defined(__cplusplus)
1287#if !defined(DUK_DBLUNION_H_INCLUDED)
1288#define DUK_DBLUNION_H_INCLUDED
1297#if defined(DUK_USE_64BIT_OPS)
1298 duk_uint64_t ull[1];
1303#if defined(DUK_USE_PACKED_TVAL)
1314#if defined(DUK_USE_DOUBLE_LE)
1315#if defined(DUK_USE_64BIT_OPS)
1316#define DUK_DBL_IDX_ULL0 0
1318#define DUK_DBL_IDX_UI0 1
1319#define DUK_DBL_IDX_UI1 0
1320#define DUK_DBL_IDX_US0 3
1321#define DUK_DBL_IDX_US1 2
1322#define DUK_DBL_IDX_US2 1
1323#define DUK_DBL_IDX_US3 0
1324#define DUK_DBL_IDX_UC0 7
1325#define DUK_DBL_IDX_UC1 6
1326#define DUK_DBL_IDX_UC2 5
1327#define DUK_DBL_IDX_UC3 4
1328#define DUK_DBL_IDX_UC4 3
1329#define DUK_DBL_IDX_UC5 2
1330#define DUK_DBL_IDX_UC6 1
1331#define DUK_DBL_IDX_UC7 0
1332#define DUK_DBL_IDX_VP0 DUK_DBL_IDX_UI0
1333#define DUK_DBL_IDX_VP1 DUK_DBL_IDX_UI1
1334#elif defined(DUK_USE_DOUBLE_BE)
1335#if defined(DUK_USE_64BIT_OPS)
1336#define DUK_DBL_IDX_ULL0 0
1338#define DUK_DBL_IDX_UI0 0
1339#define DUK_DBL_IDX_UI1 1
1340#define DUK_DBL_IDX_US0 0
1341#define DUK_DBL_IDX_US1 1
1342#define DUK_DBL_IDX_US2 2
1343#define DUK_DBL_IDX_US3 3
1344#define DUK_DBL_IDX_UC0 0
1345#define DUK_DBL_IDX_UC1 1
1346#define DUK_DBL_IDX_UC2 2
1347#define DUK_DBL_IDX_UC3 3
1348#define DUK_DBL_IDX_UC4 4
1349#define DUK_DBL_IDX_UC5 5
1350#define DUK_DBL_IDX_UC6 6
1351#define DUK_DBL_IDX_UC7 7
1352#define DUK_DBL_IDX_VP0 DUK_DBL_IDX_UI0
1353#define DUK_DBL_IDX_VP1 DUK_DBL_IDX_UI1
1354#elif defined(DUK_USE_DOUBLE_ME)
1355#if defined(DUK_USE_64BIT_OPS)
1356#define DUK_DBL_IDX_ULL0 0
1358#define DUK_DBL_IDX_UI0 0
1359#define DUK_DBL_IDX_UI1 1
1360#define DUK_DBL_IDX_US0 1
1361#define DUK_DBL_IDX_US1 0
1362#define DUK_DBL_IDX_US2 3
1363#define DUK_DBL_IDX_US3 2
1364#define DUK_DBL_IDX_UC0 3
1365#define DUK_DBL_IDX_UC1 2
1366#define DUK_DBL_IDX_UC2 1
1367#define DUK_DBL_IDX_UC3 0
1368#define DUK_DBL_IDX_UC4 7
1369#define DUK_DBL_IDX_UC5 6
1370#define DUK_DBL_IDX_UC6 5
1371#define DUK_DBL_IDX_UC7 4
1372#define DUK_DBL_IDX_VP0 DUK_DBL_IDX_UI0
1373#define DUK_DBL_IDX_VP1 DUK_DBL_IDX_UI1
1375#error internal error
1383#define DUK_DBLUNION_SET_DOUBLE(u,v) do { \
1387#define DUK_DBLUNION_SET_HIGH32(u,v) do { \
1388 (u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) (v); \
1391#if defined(DUK_USE_64BIT_OPS)
1392#if defined(DUK_USE_DOUBLE_ME)
1393#define DUK_DBLUNION_SET_HIGH32_ZERO_LOW32(u,v) do { \
1394 (u)->ull[DUK_DBL_IDX_ULL0] = (duk_uint64_t) (v); \
1397#define DUK_DBLUNION_SET_HIGH32_ZERO_LOW32(u,v) do { \
1398 (u)->ull[DUK_DBL_IDX_ULL0] = ((duk_uint64_t) (v)) << 32; \
1402#define DUK_DBLUNION_SET_HIGH32_ZERO_LOW32(u,v) do { \
1403 (u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) (v); \
1404 (u)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) 0; \
1408#define DUK_DBLUNION_SET_LOW32(u,v) do { \
1409 (u)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (v); \
1412#define DUK_DBLUNION_GET_DOUBLE(u) ((u)->d)
1413#define DUK_DBLUNION_GET_HIGH32(u) ((u)->ui[DUK_DBL_IDX_UI0])
1414#define DUK_DBLUNION_GET_LOW32(u) ((u)->ui[DUK_DBL_IDX_UI1])
1416#if defined(DUK_USE_64BIT_OPS)
1417#if defined(DUK_USE_DOUBLE_ME)
1418#define DUK_DBLUNION_SET_UINT64(u,v) do { \
1419 (u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) ((v) >> 32); \
1420 (u)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (v); \
1422#define DUK_DBLUNION_GET_UINT64(u) \
1423 ((((duk_uint64_t) (u)->ui[DUK_DBL_IDX_UI0]) << 32) | \
1424 ((duk_uint64_t) (u)->ui[DUK_DBL_IDX_UI1]))
1426#define DUK_DBLUNION_SET_UINT64(u,v) do { \
1427 (u)->ull[DUK_DBL_IDX_ULL0] = (duk_uint64_t) (v); \
1429#define DUK_DBLUNION_GET_UINT64(u) ((u)->ull[DUK_DBL_IDX_ULL0])
1431#define DUK_DBLUNION_SET_INT64(u,v) DUK_DBLUNION_SET_UINT64((u), (duk_uint64_t) (v))
1432#define DUK_DBLUNION_GET_INT64(u) ((duk_int64_t) DUK_DBLUNION_GET_UINT64((u)))
1461#if defined(DUK_USE_64BIT_OPS)
1462#if defined(DUK_USE_DOUBLE_ME)
1464#define DUK__DBLUNION_SET_NAN_FULL(u) do { \
1465 (u)->ull[DUK_DBL_IDX_ULL0] = 0x000000007ff80000ULL; \
1467#define DUK__DBLUNION_IS_NAN_FULL(u) \
1468 ((((u)->ull[DUK_DBL_IDX_ULL0] & 0x000000007ff00000ULL) == 0x000000007ff00000ULL) && \
1469 ((((u)->ull[DUK_DBL_IDX_ULL0]) & 0xffffffff000fffffULL) != 0))
1470#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
1471 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x000000007ff80000ULL)
1472#define DUK__DBLUNION_IS_ANYINF(u) \
1473 (((u)->ull[DUK_DBL_IDX_ULL0] & 0xffffffff7fffffffULL) == 0x000000007ff00000ULL)
1474#define DUK__DBLUNION_IS_POSINF(u) \
1475 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x000000007ff00000ULL)
1476#define DUK__DBLUNION_IS_NEGINF(u) \
1477 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x00000000fff00000ULL)
1478#define DUK__DBLUNION_IS_ANYZERO(u) \
1479 (((u)->ull[DUK_DBL_IDX_ULL0] & 0xffffffff7fffffffULL) == 0x0000000000000000ULL)
1480#define DUK__DBLUNION_IS_POSZERO(u) \
1481 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x0000000000000000ULL)
1482#define DUK__DBLUNION_IS_NEGZERO(u) \
1483 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x0000000080000000ULL)
1486#define DUK__DBLUNION_SET_NAN_FULL(u) do { \
1487 (u)->ull[DUK_DBL_IDX_ULL0] = 0x7ff8000000000000ULL; \
1489#define DUK__DBLUNION_IS_NAN_FULL(u) \
1490 ((((u)->ull[DUK_DBL_IDX_ULL0] & 0x7ff0000000000000ULL) == 0x7ff0000000000000UL) && \
1491 ((((u)->ull[DUK_DBL_IDX_ULL0]) & 0x000fffffffffffffULL) != 0))
1492#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
1493 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x7ff8000000000000ULL)
1494#define DUK__DBLUNION_IS_ANYINF(u) \
1495 (((u)->ull[DUK_DBL_IDX_ULL0] & 0x7fffffffffffffffULL) == 0x7ff0000000000000ULL)
1496#define DUK__DBLUNION_IS_POSINF(u) \
1497 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x7ff0000000000000ULL)
1498#define DUK__DBLUNION_IS_NEGINF(u) \
1499 ((u)->ull[DUK_DBL_IDX_ULL0] == 0xfff0000000000000ULL)
1500#define DUK__DBLUNION_IS_ANYZERO(u) \
1501 (((u)->ull[DUK_DBL_IDX_ULL0] & 0x7fffffffffffffffULL) == 0x0000000000000000ULL)
1502#define DUK__DBLUNION_IS_POSZERO(u) \
1503 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x0000000000000000ULL)
1504#define DUK__DBLUNION_IS_NEGZERO(u) \
1505 ((u)->ull[DUK_DBL_IDX_ULL0] == 0x8000000000000000ULL)
1509#define DUK__DBLUNION_SET_NAN_FULL(u) do { \
1510 (u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) 0x7ff80000UL; \
1511 (u)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) 0x00000000UL; \
1513#define DUK__DBLUNION_IS_NAN_FULL(u) \
1514 ((((u)->ui[DUK_DBL_IDX_UI0] & 0x7ff00000UL) == 0x7ff00000UL) && \
1515 (((u)->ui[DUK_DBL_IDX_UI0] & 0x000fffffUL) != 0 || \
1516 (u)->ui[DUK_DBL_IDX_UI1] != 0))
1517#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
1518 (((u)->ui[DUK_DBL_IDX_UI0] == 0x7ff80000UL) && \
1519 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1520#define DUK__DBLUNION_IS_ANYINF(u) \
1521 ((((u)->ui[DUK_DBL_IDX_UI0] & 0x7fffffffUL) == 0x7ff00000UL) && \
1522 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1523#define DUK__DBLUNION_IS_POSINF(u) \
1524 (((u)->ui[DUK_DBL_IDX_UI0] == 0x7ff00000UL) && \
1525 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1526#define DUK__DBLUNION_IS_NEGINF(u) \
1527 (((u)->ui[DUK_DBL_IDX_UI0] == 0xfff00000UL) && \
1528 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1529#define DUK__DBLUNION_IS_ANYZERO(u) \
1530 ((((u)->ui[DUK_DBL_IDX_UI0] & 0x7fffffffUL) == 0x00000000UL) && \
1531 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1532#define DUK__DBLUNION_IS_POSZERO(u) \
1533 (((u)->ui[DUK_DBL_IDX_UI0] == 0x00000000UL) && \
1534 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1535#define DUK__DBLUNION_IS_NEGZERO(u) \
1536 (((u)->ui[DUK_DBL_IDX_UI0] == 0x80000000UL) && \
1537 ((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
1540#define DUK__DBLUNION_SET_NAN_NOTFULL(u) do { \
1541 (u)->us[DUK_DBL_IDX_US0] = 0x7ff8UL; \
1544#define DUK__DBLUNION_IS_NAN_NOTFULL(u) \
1546 ((((u)->us[DUK_DBL_IDX_US0] & 0x7ff0UL) == 0x7ff0UL) && \
1547 (((u)->us[DUK_DBL_IDX_US0] & 0x000fUL) != 0x0000UL))
1549#define DUK__DBLUNION_IS_NORMALIZED_NAN_NOTFULL(u) \
1551 ((u)->us[DUK_DBL_IDX_US0] == 0x7ff8UL)
1553#define DUK__DBLUNION_NORMALIZE_NAN_CHECK_FULL(u) do { \
1554 if (DUK__DBLUNION_IS_NAN_FULL((u))) { \
1555 DUK__DBLUNION_SET_NAN_FULL((u)); \
1559#define DUK__DBLUNION_NORMALIZE_NAN_CHECK_NOTFULL(u) do { \
1560 if (DUK__DBLUNION_IS_NAN_NOTFULL((u))) { \
1561 DUK__DBLUNION_SET_NAN_NOTFULL((u)); \
1571#if defined(DUK_USE_PACKED_TVAL)
1572#if defined(DUK_USE_FULL_TVAL)
1573#define DUK_DBLUNION_NORMALIZE_NAN_CHECK(u) DUK__DBLUNION_NORMALIZE_NAN_CHECK_FULL((u))
1574#define DUK_DBLUNION_IS_NAN(u) DUK__DBLUNION_IS_NAN_FULL((u))
1575#define DUK_DBLUNION_IS_NORMALIZED_NAN(u) DUK__DBLUNION_IS_NORMALIZED_NAN_FULL((u))
1576#define DUK_DBLUNION_SET_NAN(d) DUK__DBLUNION_SET_NAN_FULL((d))
1578#define DUK_DBLUNION_NORMALIZE_NAN_CHECK(u) DUK__DBLUNION_NORMALIZE_NAN_CHECK_NOTFULL((u))
1579#define DUK_DBLUNION_IS_NAN(u) DUK__DBLUNION_IS_NAN_NOTFULL((u))
1580#define DUK_DBLUNION_IS_NORMALIZED_NAN(u) DUK__DBLUNION_IS_NORMALIZED_NAN_NOTFULL((u))
1581#define DUK_DBLUNION_SET_NAN(d) DUK__DBLUNION_SET_NAN_NOTFULL((d))
1583#define DUK_DBLUNION_IS_NORMALIZED(u) \
1584 (!DUK_DBLUNION_IS_NAN((u)) || \
1585 DUK_DBLUNION_IS_NORMALIZED_NAN((u)))
1587#define DUK_DBLUNION_NORMALIZE_NAN_CHECK(u)
1588#define DUK_DBLUNION_IS_NAN(u) DUK__DBLUNION_IS_NAN_FULL((u))
1589#define DUK_DBLUNION_IS_NORMALIZED_NAN(u) DUK__DBLUNION_IS_NAN_FULL((u))
1590#define DUK_DBLUNION_IS_NORMALIZED(u) 1
1591#define DUK_DBLUNION_SET_NAN(u) do { \
1593 (u)->d = DUK_DOUBLE_NAN; \
1597#define DUK_DBLUNION_IS_ANYINF(u) DUK__DBLUNION_IS_ANYINF((u))
1598#define DUK_DBLUNION_IS_POSINF(u) DUK__DBLUNION_IS_POSINF((u))
1599#define DUK_DBLUNION_IS_NEGINF(u) DUK__DBLUNION_IS_NEGINF((u))
1601#define DUK_DBLUNION_IS_ANYZERO(u) DUK__DBLUNION_IS_ANYZERO((u))
1602#define DUK_DBLUNION_IS_POSZERO(u) DUK__DBLUNION_IS_POSZERO((u))
1603#define DUK_DBLUNION_IS_NEGZERO(u) DUK__DBLUNION_IS_NEGZERO((u))
1608#define DUK_DBLUNION_BSWAP64(u) do { \
1609 duk_uint32_t duk__bswaptmp1, duk__bswaptmp2; \
1610 duk__bswaptmp1 = (u)->ui[0]; \
1611 duk__bswaptmp2 = (u)->ui[1]; \
1612 duk__bswaptmp1 = DUK_BSWAP32(duk__bswaptmp1); \
1613 duk__bswaptmp2 = DUK_BSWAP32(duk__bswaptmp2); \
1614 (u)->ui[0] = duk__bswaptmp2; \
1615 (u)->ui[1] = duk__bswaptmp1; \
1621#if defined(DUK_USE_DOUBLE_LE)
1622#define DUK_DBLUNION_DOUBLE_HTON(u) do { \
1623 duk_uint32_t duk__bswaptmp1, duk__bswaptmp2; \
1624 duk__bswaptmp1 = (u)->ui[0]; \
1625 duk__bswaptmp2 = (u)->ui[1]; \
1626 duk__bswaptmp1 = DUK_BSWAP32(duk__bswaptmp1); \
1627 duk__bswaptmp2 = DUK_BSWAP32(duk__bswaptmp2); \
1628 (u)->ui[0] = duk__bswaptmp2; \
1629 (u)->ui[1] = duk__bswaptmp1; \
1631#elif defined(DUK_USE_DOUBLE_ME)
1632#define DUK_DBLUNION_DOUBLE_HTON(u) do { \
1633 duk_uint32_t duk__bswaptmp1, duk__bswaptmp2; \
1634 duk__bswaptmp1 = (u)->ui[0]; \
1635 duk__bswaptmp2 = (u)->ui[1]; \
1636 duk__bswaptmp1 = DUK_BSWAP32(duk__bswaptmp1); \
1637 duk__bswaptmp2 = DUK_BSWAP32(duk__bswaptmp2); \
1638 (u)->ui[0] = duk__bswaptmp1; \
1639 (u)->ui[1] = duk__bswaptmp2; \
1641#elif defined(DUK_USE_DOUBLE_BE)
1642#define DUK_DBLUNION_DOUBLE_HTON(u) do { } while (0)
1644#error internal error, double endianness insane
1648#define DUK_DBLUNION_DOUBLE_NTOH(u) DUK_DBLUNION_DOUBLE_HTON((u))
1651#if defined(DUK_USE_64BIT_OPS)
1652#define DUK_DBLUNION_HAS_SIGNBIT(u) (((u)->ull[DUK_DBL_IDX_ULL0] & 0x8000000000000000ULL) != 0)
1653#define DUK_DBLUNION_GET_SIGNBIT(u) (((u)->ull[DUK_DBL_IDX_ULL0] >> 63U))
1655#define DUK_DBLUNION_HAS_SIGNBIT(u) (((u)->ui[DUK_DBL_IDX_UI0] & 0x80000000UL) != 0)
1656#define DUK_DBLUNION_GET_SIGNBIT(u) (((u)->ui[DUK_DBL_IDX_UI0] >> 31U))