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)
193 typedef duk_ret_t (*duk_c_function)(
duk_context *ctx);
194 typedef void *(*duk_alloc_function) (
void *udata, duk_size_t size);
195 typedef void *(*duk_realloc_function) (
void *udata,
void *ptr, duk_size_t size);
196 typedef void (*duk_free_function) (
void *udata,
void *ptr);
197 typedef void (*duk_fatal_function) (
void *udata,
const char *msg);
198 typedef void (*duk_decode_char_function) (
void *udata, duk_codepoint_t codepoint);
199 typedef duk_codepoint_t (*duk_map_char_function) (
void *udata, duk_codepoint_t codepoint);
200 typedef duk_ret_t (*duk_safe_call_function) (
duk_context *ctx,
void *udata);
201 typedef duk_size_t (*duk_debug_read_function) (
void *udata,
char *buffer, duk_size_t length);
202 typedef duk_size_t (*duk_debug_write_function) (
void *udata,
const char *buffer, duk_size_t length);
203 typedef duk_size_t (*duk_debug_peek_function) (
void *udata);
204 typedef void (*duk_debug_read_flush_function) (
void *udata);
205 typedef void (*duk_debug_write_flush_function) (
void *udata);
206 typedef duk_idx_t (*duk_debug_request_function) (
duk_context *ctx,
void *udata, duk_idx_t nvalues);
207 typedef 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)
401 DUK_EXTERNAL_DECL
const char *duk_api_global_filename;
402 DUK_EXTERNAL_DECL duk_int_t duk_api_global_line;
410 duk_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);
415 DUK_EXTERNAL_DECL
void duk_destroy_heap(
duk_context *ctx);
420 #define duk_create_heap_default() \
421 duk_create_heap(NULL, NULL, NULL, NULL, NULL)
429 DUK_EXTERNAL_DECL
void *duk_alloc_raw(
duk_context *ctx, duk_size_t size);
430 DUK_EXTERNAL_DECL
void duk_free_raw(
duk_context *ctx,
void *ptr);
431 DUK_EXTERNAL_DECL
void *duk_realloc_raw(
duk_context *ctx,
void *ptr, duk_size_t size);
432 DUK_EXTERNAL_DECL
void *duk_alloc(
duk_context *ctx, duk_size_t size);
433 DUK_EXTERNAL_DECL
void duk_free(
duk_context *ctx,
void *ptr);
434 DUK_EXTERNAL_DECL
void *duk_realloc(
duk_context *ctx,
void *ptr, duk_size_t size);
436 DUK_EXTERNAL_DECL
void duk_gc(
duk_context *ctx, duk_uint_t flags);
442 DUK_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)
445 DUK_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)
450 DUK_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)
476 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_error_stash(
duk_context *ctx, duk_errcode_t err_code,
const char *fmt, ...));
477 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_generic_error_stash(
duk_context *ctx,
const char *fmt, ...));
478 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_eval_error_stash(
duk_context *ctx,
const char *fmt, ...));
479 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_range_error_stash(
duk_context *ctx,
const char *fmt, ...));
480 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_reference_error_stash(
duk_context *ctx,
const char *fmt, ...));
481 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_syntax_error_stash(
duk_context *ctx,
const char *fmt, ...));
482 DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_type_error_stash(
duk_context *ctx,
const char *fmt, ...));
483 DUK_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), \
518 DUK_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)
540 DUK_EXTERNAL_DECL duk_bool_t duk_is_strict_call(
duk_context *ctx);
541 DUK_EXTERNAL_DECL duk_bool_t duk_is_constructor_call(
duk_context *ctx);
547 DUK_EXTERNAL_DECL duk_idx_t duk_normalize_index(
duk_context *ctx, duk_idx_t idx);
548 DUK_EXTERNAL_DECL duk_idx_t duk_require_normalize_index(
duk_context *ctx, duk_idx_t idx);
549 DUK_EXTERNAL_DECL duk_bool_t duk_is_valid_index(
duk_context *ctx, duk_idx_t idx);
550 DUK_EXTERNAL_DECL
void duk_require_valid_index(
duk_context *ctx, duk_idx_t idx);
552 DUK_EXTERNAL_DECL duk_idx_t duk_get_top(
duk_context *ctx);
553 DUK_EXTERNAL_DECL
void duk_set_top(
duk_context *ctx, duk_idx_t idx);
554 DUK_EXTERNAL_DECL duk_idx_t duk_get_top_index(
duk_context *ctx);
555 DUK_EXTERNAL_DECL duk_idx_t duk_require_top_index(
duk_context *ctx);
564 DUK_EXTERNAL_DECL duk_bool_t duk_check_stack(
duk_context *ctx, duk_idx_t extra);
565 DUK_EXTERNAL_DECL
void duk_require_stack(
duk_context *ctx, duk_idx_t extra);
566 DUK_EXTERNAL_DECL duk_bool_t duk_check_stack_top(
duk_context *ctx, duk_idx_t top);
567 DUK_EXTERNAL_DECL
void duk_require_stack_top(
duk_context *ctx, duk_idx_t top);
573 DUK_EXTERNAL_DECL
void duk_swap(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
574 DUK_EXTERNAL_DECL
void duk_swap_top(
duk_context *ctx, duk_idx_t idx);
575 DUK_EXTERNAL_DECL
void duk_dup(
duk_context *ctx, duk_idx_t from_idx);
576 DUK_EXTERNAL_DECL
void duk_dup_top(
duk_context *ctx);
577 DUK_EXTERNAL_DECL
void duk_insert(
duk_context *ctx, duk_idx_t to_idx);
578 DUK_EXTERNAL_DECL
void duk_replace(
duk_context *ctx, duk_idx_t to_idx);
579 DUK_EXTERNAL_DECL
void duk_copy(
duk_context *ctx, duk_idx_t from_idx, duk_idx_t to_idx);
580 DUK_EXTERNAL_DECL
void duk_remove(
duk_context *ctx, duk_idx_t idx);
581 DUK_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 )
597 DUK_EXTERNAL_DECL
void duk_push_undefined(
duk_context *ctx);
598 DUK_EXTERNAL_DECL
void duk_push_null(
duk_context *ctx);
599 DUK_EXTERNAL_DECL
void duk_push_boolean(
duk_context *ctx, duk_bool_t val);
600 DUK_EXTERNAL_DECL
void duk_push_true(
duk_context *ctx);
601 DUK_EXTERNAL_DECL
void duk_push_false(
duk_context *ctx);
602 DUK_EXTERNAL_DECL
void duk_push_number(
duk_context *ctx, duk_double_t val);
603 DUK_EXTERNAL_DECL
void duk_push_nan(
duk_context *ctx);
604 DUK_EXTERNAL_DECL
void duk_push_int(
duk_context *ctx, duk_int_t val);
605 DUK_EXTERNAL_DECL
void duk_push_uint(
duk_context *ctx, duk_uint_t val);
606 DUK_EXTERNAL_DECL
const char *duk_push_string(
duk_context *ctx,
const char *str);
607 DUK_EXTERNAL_DECL
const char *duk_push_lstring(
duk_context *ctx,
const char *str, duk_size_t len);
608 DUK_EXTERNAL_DECL
void duk_push_pointer(
duk_context *ctx,
void *p);
609 DUK_EXTERNAL_DECL
const char *duk_push_sprintf(
duk_context *ctx,
const char *fmt, ...);
610 DUK_EXTERNAL_DECL
const char *duk_push_vsprintf(
duk_context *ctx,
const char *fmt, va_list ap);
612 DUK_EXTERNAL_DECL
void duk_push_this(
duk_context *ctx);
613 DUK_EXTERNAL_DECL
void duk_push_current_function(
duk_context *ctx);
614 DUK_EXTERNAL_DECL
void duk_push_current_thread(
duk_context *ctx);
615 DUK_EXTERNAL_DECL
void duk_push_global_object(
duk_context *ctx);
616 DUK_EXTERNAL_DECL
void duk_push_heap_stash(
duk_context *ctx);
617 DUK_EXTERNAL_DECL
void duk_push_global_stash(
duk_context *ctx);
620 DUK_EXTERNAL_DECL duk_idx_t duk_push_object(
duk_context *ctx);
621 DUK_EXTERNAL_DECL duk_idx_t duk_push_bare_object(
duk_context *ctx);
622 DUK_EXTERNAL_DECL duk_idx_t duk_push_array(
duk_context *ctx);
623 DUK_EXTERNAL_DECL duk_idx_t duk_push_c_function(
duk_context *ctx, duk_c_function func, duk_idx_t nargs);
624 DUK_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);
625 DUK_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 )
633 DUK_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__)
639 DUK_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)
647 DUK_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)
655 DUK_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)
680 DUK_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);
682 DUK_EXTERNAL_DECL duk_idx_t duk_push_heapptr(
duk_context *ctx,
void *ptr);
689 DUK_EXTERNAL_DECL
void duk_pop_n(
duk_context *ctx, duk_idx_t count);
690 DUK_EXTERNAL_DECL
void duk_pop_2(
duk_context *ctx);
691 DUK_EXTERNAL_DECL
void duk_pop_3(
duk_context *ctx);
700 DUK_EXTERNAL_DECL duk_int_t duk_get_type(
duk_context *ctx, duk_idx_t idx);
701 DUK_EXTERNAL_DECL duk_bool_t duk_check_type(
duk_context *ctx, duk_idx_t idx, duk_int_t type);
702 DUK_EXTERNAL_DECL duk_uint_t duk_get_type_mask(
duk_context *ctx, duk_idx_t idx);
703 DUK_EXTERNAL_DECL duk_bool_t duk_check_type_mask(
duk_context *ctx, duk_idx_t idx, duk_uint_t mask);
705 DUK_EXTERNAL_DECL duk_bool_t duk_is_undefined(
duk_context *ctx, duk_idx_t idx);
706 DUK_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)
710 DUK_EXTERNAL_DECL duk_bool_t duk_is_boolean(
duk_context *ctx, duk_idx_t idx);
711 DUK_EXTERNAL_DECL duk_bool_t duk_is_number(
duk_context *ctx, duk_idx_t idx);
712 DUK_EXTERNAL_DECL duk_bool_t duk_is_nan(
duk_context *ctx, duk_idx_t idx);
713 DUK_EXTERNAL_DECL duk_bool_t duk_is_string(
duk_context *ctx, duk_idx_t idx);
714 DUK_EXTERNAL_DECL duk_bool_t duk_is_object(
duk_context *ctx, duk_idx_t idx);
715 DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer(
duk_context *ctx, duk_idx_t idx);
716 DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer_data(
duk_context *ctx, duk_idx_t idx);
717 DUK_EXTERNAL_DECL duk_bool_t duk_is_pointer(
duk_context *ctx, duk_idx_t idx);
718 DUK_EXTERNAL_DECL duk_bool_t duk_is_lightfunc(
duk_context *ctx, duk_idx_t idx);
720 DUK_EXTERNAL_DECL duk_bool_t duk_is_symbol(
duk_context *ctx, duk_idx_t idx);
721 DUK_EXTERNAL_DECL duk_bool_t duk_is_array(
duk_context *ctx, duk_idx_t idx);
722 DUK_EXTERNAL_DECL duk_bool_t duk_is_function(
duk_context *ctx, duk_idx_t idx);
723 DUK_EXTERNAL_DECL duk_bool_t duk_is_c_function(
duk_context *ctx, duk_idx_t idx);
724 DUK_EXTERNAL_DECL duk_bool_t duk_is_ecmascript_function(
duk_context *ctx, duk_idx_t idx);
725 DUK_EXTERNAL_DECL duk_bool_t duk_is_bound_function(
duk_context *ctx, duk_idx_t idx);
726 DUK_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))
730 DUK_EXTERNAL_DECL duk_bool_t duk_is_dynamic_buffer(
duk_context *ctx, duk_idx_t idx);
731 DUK_EXTERNAL_DECL duk_bool_t duk_is_fixed_buffer(
duk_context *ctx, duk_idx_t idx);
732 DUK_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)
756 DUK_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)
780 DUK_EXTERNAL_DECL duk_bool_t duk_get_boolean(
duk_context *ctx, duk_idx_t idx);
781 DUK_EXTERNAL_DECL duk_double_t duk_get_number(
duk_context *ctx, duk_idx_t idx);
782 DUK_EXTERNAL_DECL duk_int_t duk_get_int(
duk_context *ctx, duk_idx_t idx);
783 DUK_EXTERNAL_DECL duk_uint_t duk_get_uint(
duk_context *ctx, duk_idx_t idx);
784 DUK_EXTERNAL_DECL
const char *duk_get_string(
duk_context *ctx, duk_idx_t idx);
785 DUK_EXTERNAL_DECL
const char *duk_get_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
786 DUK_EXTERNAL_DECL
void *duk_get_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
787 DUK_EXTERNAL_DECL
void *duk_get_buffer_data(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
788 DUK_EXTERNAL_DECL
void *duk_get_pointer(
duk_context *ctx, duk_idx_t idx);
789 DUK_EXTERNAL_DECL duk_c_function duk_get_c_function(
duk_context *ctx, duk_idx_t idx);
791 DUK_EXTERNAL_DECL
void *duk_get_heapptr(
duk_context *ctx, duk_idx_t idx);
792 DUK_EXTERNAL_DECL duk_size_t duk_get_length(
duk_context *ctx, duk_idx_t idx);
793 DUK_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))
803 DUK_EXTERNAL_DECL
void duk_require_undefined(
duk_context *ctx, duk_idx_t idx);
804 DUK_EXTERNAL_DECL
void duk_require_null(
duk_context *ctx, duk_idx_t idx);
805 DUK_EXTERNAL_DECL duk_bool_t duk_require_boolean(
duk_context *ctx, duk_idx_t idx);
806 DUK_EXTERNAL_DECL duk_double_t duk_require_number(
duk_context *ctx, duk_idx_t idx);
807 DUK_EXTERNAL_DECL duk_int_t duk_require_int(
duk_context *ctx, duk_idx_t idx);
808 DUK_EXTERNAL_DECL duk_uint_t duk_require_uint(
duk_context *ctx, duk_idx_t idx);
809 DUK_EXTERNAL_DECL
const char *duk_require_string(
duk_context *ctx, duk_idx_t idx);
810 DUK_EXTERNAL_DECL
const char *duk_require_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
811 DUK_EXTERNAL_DECL
void *duk_require_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
812 DUK_EXTERNAL_DECL
void *duk_require_buffer_data(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
813 DUK_EXTERNAL_DECL
void *duk_require_pointer(
duk_context *ctx, duk_idx_t idx);
814 DUK_EXTERNAL_DECL duk_c_function duk_require_c_function(
duk_context *ctx, duk_idx_t idx);
816 DUK_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))
819 DUK_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))
839 DUK_EXTERNAL_DECL
void duk_to_undefined(
duk_context *ctx, duk_idx_t idx);
840 DUK_EXTERNAL_DECL
void duk_to_null(
duk_context *ctx, duk_idx_t idx);
841 DUK_EXTERNAL_DECL duk_bool_t duk_to_boolean(
duk_context *ctx, duk_idx_t idx);
842 DUK_EXTERNAL_DECL duk_double_t duk_to_number(
duk_context *ctx, duk_idx_t idx);
843 DUK_EXTERNAL_DECL duk_int_t duk_to_int(
duk_context *ctx, duk_idx_t idx);
844 DUK_EXTERNAL_DECL duk_uint_t duk_to_uint(
duk_context *ctx, duk_idx_t idx);
845 DUK_EXTERNAL_DECL duk_int32_t duk_to_int32(
duk_context *ctx, duk_idx_t idx);
846 DUK_EXTERNAL_DECL duk_uint32_t duk_to_uint32(
duk_context *ctx, duk_idx_t idx);
847 DUK_EXTERNAL_DECL duk_uint16_t duk_to_uint16(
duk_context *ctx, duk_idx_t idx);
848 DUK_EXTERNAL_DECL
const char *duk_to_string(
duk_context *ctx, duk_idx_t idx);
849 DUK_EXTERNAL_DECL
const char *duk_to_lstring(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
850 DUK_EXTERNAL_DECL
void *duk_to_buffer_raw(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size, duk_uint_t flags);
851 DUK_EXTERNAL_DECL
void *duk_to_pointer(
duk_context *ctx, duk_idx_t idx);
852 DUK_EXTERNAL_DECL
void duk_to_object(
duk_context *ctx, duk_idx_t idx);
853 DUK_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)
867 DUK_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)
875 DUK_EXTERNAL_DECL
const char *duk_base64_encode(
duk_context *ctx, duk_idx_t idx);
876 DUK_EXTERNAL_DECL
void duk_base64_decode(
duk_context *ctx, duk_idx_t idx);
877 DUK_EXTERNAL_DECL
const char *duk_hex_encode(
duk_context *ctx, duk_idx_t idx);
878 DUK_EXTERNAL_DECL
void duk_hex_decode(
duk_context *ctx, duk_idx_t idx);
879 DUK_EXTERNAL_DECL
const char *duk_json_encode(
duk_context *ctx, duk_idx_t idx);
880 DUK_EXTERNAL_DECL
void duk_json_decode(
duk_context *ctx, duk_idx_t idx);
882 DUK_EXTERNAL_DECL
const char *duk_buffer_to_string(
duk_context *ctx, duk_idx_t idx);
888 DUK_EXTERNAL_DECL
void *duk_resize_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t new_size);
889 DUK_EXTERNAL_DECL
void *duk_steal_buffer(
duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
890 DUK_EXTERNAL_DECL
void duk_config_buffer(
duk_context *ctx, duk_idx_t idx,
void *ptr, duk_size_t len);
900 DUK_EXTERNAL_DECL duk_bool_t duk_get_prop(
duk_context *ctx, duk_idx_t obj_idx);
901 DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
902 DUK_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);
903 DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
904 DUK_EXTERNAL_DECL duk_bool_t duk_put_prop(
duk_context *ctx, duk_idx_t obj_idx);
905 DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
906 DUK_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);
907 DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
908 DUK_EXTERNAL_DECL duk_bool_t duk_del_prop(
duk_context *ctx, duk_idx_t obj_idx);
909 DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
910 DUK_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);
911 DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
912 DUK_EXTERNAL_DECL duk_bool_t duk_has_prop(
duk_context *ctx, duk_idx_t obj_idx);
913 DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_string(
duk_context *ctx, duk_idx_t obj_idx,
const char *
key);
914 DUK_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);
915 DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_index(
duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
917 DUK_EXTERNAL_DECL
void duk_get_prop_desc(
duk_context *ctx, duk_idx_t obj_idx, duk_uint_t flags);
918 DUK_EXTERNAL_DECL
void duk_def_prop(
duk_context *ctx, duk_idx_t obj_idx, duk_uint_t flags);
920 DUK_EXTERNAL_DECL duk_bool_t duk_get_global_string(
duk_context *ctx,
const char *
key);
921 DUK_EXTERNAL_DECL duk_bool_t duk_get_global_lstring(
duk_context *ctx,
const char *
key, duk_size_t key_len);
922 DUK_EXTERNAL_DECL duk_bool_t duk_put_global_string(
duk_context *ctx,
const char *
key);
923 DUK_EXTERNAL_DECL duk_bool_t duk_put_global_lstring(
duk_context *ctx,
const char *
key, duk_size_t key_len);
929 DUK_EXTERNAL_DECL
void duk_inspect_value(
duk_context *ctx, duk_idx_t idx);
930 DUK_EXTERNAL_DECL
void duk_inspect_callstack_entry(
duk_context *ctx, duk_int_t level);
936 DUK_EXTERNAL_DECL
void duk_get_prototype(
duk_context *ctx, duk_idx_t idx);
937 DUK_EXTERNAL_DECL
void duk_set_prototype(
duk_context *ctx, duk_idx_t idx);
943 DUK_EXTERNAL_DECL
void duk_get_finalizer(
duk_context *ctx, duk_idx_t idx);
944 DUK_EXTERNAL_DECL
void duk_set_finalizer(
duk_context *ctx, duk_idx_t idx);
950 DUK_EXTERNAL_DECL
void duk_set_global_object(
duk_context *ctx);
956 DUK_EXTERNAL_DECL duk_int_t duk_get_magic(
duk_context *ctx, duk_idx_t idx);
957 DUK_EXTERNAL_DECL
void duk_set_magic(
duk_context *ctx, duk_idx_t idx, duk_int_t magic);
958 DUK_EXTERNAL_DECL duk_int_t duk_get_current_magic(
duk_context *ctx);
971 DUK_EXTERNAL_DECL
void duk_compact(
duk_context *ctx, duk_idx_t obj_idx);
972 DUK_EXTERNAL_DECL
void duk_enum(
duk_context *ctx, duk_idx_t obj_idx, duk_uint_t enum_flags);
973 DUK_EXTERNAL_DECL duk_bool_t duk_next(
duk_context *ctx, duk_idx_t enum_idx, duk_bool_t get_value);
979 DUK_EXTERNAL_DECL
void duk_concat(
duk_context *ctx, duk_idx_t count);
980 DUK_EXTERNAL_DECL
void duk_join(
duk_context *ctx, duk_idx_t count);
981 DUK_EXTERNAL_DECL
void duk_decode_string(
duk_context *ctx, duk_idx_t idx, duk_decode_char_function callback,
void *udata);
982 DUK_EXTERNAL_DECL
void duk_map_string(
duk_context *ctx, duk_idx_t idx, duk_map_char_function callback,
void *udata);
983 DUK_EXTERNAL_DECL
void duk_substring(
duk_context *ctx, duk_idx_t idx, duk_size_t start_char_offset, duk_size_t end_char_offset);
984 DUK_EXTERNAL_DECL
void duk_trim(
duk_context *ctx, duk_idx_t idx);
985 DUK_EXTERNAL_DECL duk_codepoint_t duk_char_code_at(
duk_context *ctx, duk_idx_t idx, duk_size_t char_offset);
991 DUK_EXTERNAL_DECL duk_bool_t duk_equals(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
992 DUK_EXTERNAL_DECL duk_bool_t duk_strict_equals(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
993 DUK_EXTERNAL_DECL duk_bool_t duk_samevalue(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
994 DUK_EXTERNAL_DECL duk_bool_t duk_instanceof(
duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
1000 DUK_EXTERNAL_DECL
void duk_call(
duk_context *ctx, duk_idx_t nargs);
1001 DUK_EXTERNAL_DECL
void duk_call_method(
duk_context *ctx, duk_idx_t nargs);
1002 DUK_EXTERNAL_DECL
void duk_call_prop(
duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs);
1003 DUK_EXTERNAL_DECL duk_int_t duk_pcall(
duk_context *ctx, duk_idx_t nargs);
1004 DUK_EXTERNAL_DECL duk_int_t duk_pcall_method(
duk_context *ctx, duk_idx_t nargs);
1005 DUK_EXTERNAL_DECL duk_int_t duk_pcall_prop(
duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs);
1006 DUK_EXTERNAL_DECL
void duk_new(
duk_context *ctx, duk_idx_t nargs);
1007 DUK_EXTERNAL_DECL duk_int_t duk_pnew(
duk_context *ctx, duk_idx_t nargs);
1008 DUK_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);
1022 DUK_EXTERNAL_DECL duk_int_t duk_eval_raw(
duk_context *ctx,
const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
1023 DUK_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))
1098 DUK_EXTERNAL_DECL
void duk_dump_function(
duk_context *ctx);
1099 DUK_EXTERNAL_DECL
void duk_load_function(
duk_context *ctx);
1105 DUK_EXTERNAL_DECL
void duk_push_context_dump(
duk_context *ctx);
1111 DUK_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,
1120 DUK_EXTERNAL_DECL
void duk_debugger_detach(
duk_context *ctx);
1121 DUK_EXTERNAL_DECL
void duk_debugger_cooperate(
duk_context *ctx);
1122 DUK_EXTERNAL_DECL duk_bool_t duk_debugger_notify(
duk_context *ctx, duk_idx_t nvalues);
1123 DUK_EXTERNAL_DECL
void duk_debugger_pause(
duk_context *ctx);
1129 DUK_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)
1219 DUK_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))