From 59eea1333a16a0acb85d0eaa7e14d5d66c2e333a Mon Sep 17 00:00:00 2001 From: Michael Drake Date: Sat, 7 May 2016 21:34:58 +0100 Subject: Update to Duktape 1.5.0 release. --- javascript/duktape/duk_config.h | 217 +- javascript/duktape/duktape.c | 18605 +++++++++++++++++--------------------- javascript/duktape/duktape.h | 158 +- 3 files changed, 8737 insertions(+), 10243 deletions(-) (limited to 'javascript') diff --git a/javascript/duktape/duk_config.h b/javascript/duktape/duk_config.h index 18cd9409c..a3da70a3f 100644 --- a/javascript/duktape/duk_config.h +++ b/javascript/duktape/duk_config.h @@ -1,8 +1,8 @@ /* * duk_config.h configuration header generated by genconfig.py. * - * Git commit: cad6f595382a0cc1a7e4207794ade5be11b3e397 - * Git describe: v1.4.0 + * Git commit: 83d557704ee63f68ab40b6fcb00995c9b3d6777c + * Git describe: v1.5.0 * Git branch: master * * Supported platforms: @@ -95,11 +95,6 @@ #define DUK_F_BSD #endif -/* Atari Mint */ -#if defined(__MINT__) -#define DUK_F_MINT -#endif - /* Atari ST TOS. __TOS__ defined by PureC. No platform define in VBCC * apparently, so to use with VBCC user must define __TOS__ manually. */ @@ -339,6 +334,11 @@ #define DUK_F_VBCC #endif +/* Atari Mint */ +#if defined(__MINT__) +#define DUK_F_MINT +#endif + /* * Platform autodetection */ @@ -371,13 +371,13 @@ #elif TARGET_OS_IPHONE #define DUK_USE_OS_STRING "iphone" #elif TARGET_OS_MAC -#define DUK_USE_OS_STRING "ios" +#define DUK_USE_OS_STRING "osx" #else -#define DUK_USE_OS_STRING "ios-unknown" +#define DUK_USE_OS_STRING "osx-unknown" #endif /* Use _setjmp() on Apple by default, see GH-55. */ -#define DUK_USE_UNDERSCORE_SETJMP +#define DUK_JMPBUF_TYPE jmp_buf #define DUK_SETJMP(jb) _setjmp((jb)) #define DUK_LONGJMP(jb) _longjmp((jb), 1) #elif defined(DUK_F_OPENBSD) @@ -629,7 +629,7 @@ #include #include -#define DUK_USE_UNDERSCORE_SETJMP +#define DUK_JMPBUF_TYPE jmp_buf #define DUK_SETJMP(jb) _setjmp((jb)) #define DUK_LONGJMP(jb) _longjmp((jb), 1) @@ -914,7 +914,6 @@ #endif #define DUK_LOCAL_DECL static #define DUK_LOCAL static - #else #define DUK_EXTERNAL_DECL __attribute__ ((visibility("default"))) extern #define DUK_EXTERNAL __attribute__ ((visibility("default"))) @@ -940,6 +939,8 @@ #define DUK_USE_VARIADIC_MACROS #endif +#define DUK_USE_UNION_INITIALIZERS + #undef DUK_USE_FLEX_C99 #undef DUK_USE_FLEX_ZEROSIZE #undef DUK_USE_FLEX_ONESIZE @@ -951,7 +952,6 @@ #undef DUK_USE_GCC_PRAGMAS #define DUK_USE_PACK_CLANG_ATTR -#define DUK_F_VARIADIC_MACROS_PROVIDED #elif defined(DUK_F_GCC) /* --- GCC --- */ #if defined(DUK_F_C99) || defined(DUK_F_CPP11) @@ -1008,7 +1008,6 @@ #endif #define DUK_LOCAL_DECL static #define DUK_LOCAL static - #elif defined(DUK_F_GCC_VERSION) && (DUK_F_GCC_VERSION >= 40000) #define DUK_EXTERNAL_DECL __attribute__ ((visibility("default"))) extern #define DUK_EXTERNAL __attribute__ ((visibility("default"))) @@ -1042,6 +1041,8 @@ #define DUK_USE_VARIADIC_MACROS #endif +#define DUK_USE_UNION_INITIALIZERS + #undef DUK_USE_FLEX_C99 #undef DUK_USE_FLEX_ZEROSIZE #undef DUK_USE_FLEX_ONESIZE @@ -1058,7 +1059,6 @@ #endif #define DUK_USE_PACK_GCC_ATTR -#define DUK_F_VARIADIC_MACROS_PROVIDED #elif defined(DUK_F_MSVC) /* --- MSVC --- */ /* http://msdn.microsoft.com/en-us/library/aa235362(VS.60).aspx */ @@ -1091,7 +1091,6 @@ #endif #define DUK_LOCAL_DECL static #define DUK_LOCAL static - #endif #if defined(DUK_F_CPP) @@ -1108,6 +1107,17 @@ #define DUK_USE_VARIADIC_MACROS #endif +#undef DUK_USE_UNION_INITIALIZERS +#if defined(_MSC_VER) && (_MSC_VER >= 1800) +/* VS2013+ supports union initializers but there's a bug involving union-inside-struct: + * https://connect.microsoft.com/VisualStudio/feedback/details/805981 + * The bug was fixed (at least) in VS2015 so check for VS2015 for now: + * https://blogs.msdn.microsoft.com/vcblog/2015/07/01/c-compiler-front-end-fixes-in-vs2015/ + * Manually tested using VS2013, CL reports 18.00.31101, so enable for VS2013 too. + */ +#define DUK_USE_UNION_INITIALIZERS +#endif + #undef DUK_USE_FLEX_C99 #undef DUK_USE_FLEX_ZEROSIZE #undef DUK_USE_FLEX_ONESIZE @@ -1121,6 +1131,15 @@ #define DUK_USE_PACK_MSVC_PRAGMA +/* These have been tested from VS2008 onwards; may work in older VS versions + * too but not enabled by default. + */ +#if defined(_MSC_VER) && (_MSC_VER >= 1500) +#define DUK_NOINLINE __declspec(noinline) +#define DUK_INLINE __inline +#define DUK_ALWAYS_INLINE __forceinline +#endif + #if defined(_MSC_VER) && (_MSC_VER >= 1900) #define DUK_SNPRINTF snprintf #define DUK_VSNPRINTF vsnprintf @@ -1132,7 +1151,6 @@ #define DUK_SNPRINTF _snprintf #define DUK_VSNPRINTF _vsnprintf #endif -#define DUK_F_VARIADIC_MACROS_PROVIDED #elif defined(DUK_F_EMSCRIPTEN) /* --- Emscripten --- */ #define DUK_NORETURN(decl) decl __attribute__((noreturn)) @@ -1172,6 +1190,8 @@ #define DUK_USE_VARIADIC_MACROS #endif +#define DUK_USE_UNION_INITIALIZERS + #undef DUK_USE_FLEX_C99 #undef DUK_USE_FLEX_ZEROSIZE #undef DUK_USE_FLEX_ONESIZE @@ -1183,7 +1203,6 @@ #undef DUK_USE_GCC_PRAGMAS #define DUK_USE_PACK_CLANG_ATTR -#define DUK_F_VARIADIC_MACROS_PROVIDED #elif defined(DUK_F_TINYC) /* --- TinyC --- */ #undef DUK_USE_BRANCH_HINTS @@ -1197,12 +1216,13 @@ /* http://bellard.org/tcc/tcc-doc.html#SEC7 */ #define DUK_USE_VARIADIC_MACROS +#define DUK_USE_UNION_INITIALIZERS + /* Most portable, wastes space */ #define DUK_USE_FLEX_ONESIZE /* Most portable, potentially wastes space */ #define DUK_USE_PACK_DUMMY_MEMBER -#define DUK_F_VARIADIC_MACROS_PROVIDED #elif defined(DUK_F_VBCC) /* --- VBCC --- */ #undef DUK_USE_BRANCH_HINTS @@ -1218,9 +1238,16 @@ #define DUK_USE_VARIADIC_MACROS #endif +/* VBCC supports C99 so check only for C99 for union initializer support. + * Designated union initializers would possibly work even without a C99 check. + */ +#undef DUK_USE_UNION_INITIALIZERS +#if defined(DUK_F_C99) +#define DUK_USE_UNION_INITIALIZERS +#endif + #define DUK_USE_FLEX_ZEROSIZE #define DUK_USE_PACK_DUMMY_MEMBER -#define DUK_F_VARIADIC_MACROS_PROVIDED #elif defined(DUK_F_BCC) /* --- Bruce's C compiler --- */ #undef DUK_USE_BRANCH_HINTS @@ -1231,9 +1258,12 @@ #define DUK_USE_COMPILER_STRING "bcc" #endif -/* XXX */ +/* Most portable */ #undef DUK_USE_VARIADIC_MACROS +/* Most portable, wastes space */ +#undef DUK_USE_UNION_INITIALIZERS + /* Most portable, wastes space */ #define DUK_USE_FLEX_ONESIZE @@ -1244,7 +1274,6 @@ #if !defined(DUK_USE_BYTEORDER) #define DUK_USE_BYTEORDER 1 #endif -#define DUK_F_VARIADIC_MACROS_PROVIDED #else /* --- Generic --- */ #undef DUK_USE_BRANCH_HINTS @@ -1260,12 +1289,17 @@ #define DUK_USE_VARIADIC_MACROS #endif +/* C++ doesn't have standard designated union initializers ({ .foo = 1 }). */ +#undef DUK_USE_UNION_INITIALIZERS +#if defined(DUK_F_C99) +#define DUK_USE_UNION_INITIALIZERS +#endif + /* Most portable, wastes space */ #define DUK_USE_FLEX_ONESIZE /* Most portable, potentially wastes space */ #define DUK_USE_PACK_DUMMY_MEMBER -#define DUK_F_VARIADIC_MACROS_PROVIDED #endif /* autodetect compiler */ /* uclibc */ @@ -1834,11 +1868,18 @@ typedef struct duk_hthread duk_context; */ #if !defined(DUK_SETJMP) -#define DUK_USE_SETJMP +#define DUK_JMPBUF_TYPE jmp_buf #define DUK_SETJMP(jb) setjmp((jb)) #define DUK_LONGJMP(jb) longjmp((jb), 1) #endif +#if 0 +/* sigsetjmp() alternative */ +#define DUK_JMPBUF_TYPE sigjmp_buf +#define DUK_SETJMP(jb) sigsetjmp((jb)) +#define DUK_LONGJMP(jb) siglongjmp((jb), 1) +#endif + typedef FILE duk_file; #if !defined(DUK_STDIN) #define DUK_STDIN stdin @@ -2097,7 +2138,7 @@ typedef FILE duk_file; #elif defined(DUK_F_AMIGAOS) && defined(DUK_F_VBCC) /* vbcc + AmigaOS may be missing these */ #elif defined(DUK_F_MINT) -/* mint clib is missing these*/ +/* mint clib is missing these */ #elif !defined(DUK_F_C99) && !defined(DUK_F_CPP11) /* build is not C99 or C++11, play it safe */ #else @@ -2492,13 +2533,8 @@ typedef FILE duk_file; ((duk_uint16_t) (x) << 8) #endif -/* Explicit marker needed; may be 'defined', 'undefined, 'or 'not provided'. */ -#if !defined(DUK_F_VARIADIC_MACROS_PROVIDED) -#undef DUK_USE_VARIADIC_MACROS -#if defined(DUK_F_C99) || defined(DUK_F_CPP11) -#define DUK_USE_VARIADIC_MACROS -#endif -#endif +/* DUK_USE_VARIADIC_MACROS: required from compilers, so no fill-in. */ +/* DUK_USE_UNION_INITIALIZERS: required from compilers, so no fill-in. */ #if !(defined(DUK_USE_FLEX_C99) || defined(DUK_USE_FLEX_ZEROSIZE) || defined(DUK_USE_FLEX_ONESIZE)) #if defined(DUK_F_C99) @@ -2758,6 +2794,14 @@ typedef FILE duk_file; #undef DUK_USE_DEBUGGER_FWD_PRINTALERT #endif +#if defined(DUK_OPT_DEBUGGER_INSPECT) +#define DUK_USE_DEBUGGER_INSPECT +#elif defined(DUK_OPT_NO_DEBUGGER_INSPECT) +#undef DUK_USE_DEBUGGER_INSPECT +#else +#undef DUK_USE_DEBUGGER_INSPECT +#endif + #if defined(DUK_OPT_DEBUGGER_PAUSE_UNCAUGHT) #define DUK_USE_DEBUGGER_PAUSE_UNCAUGHT #elif defined(DUK_OPT_NO_DEBUGGER_PAUSE_UNCAUGHT) @@ -2868,6 +2912,14 @@ typedef FILE duk_file; #define DUK_USE_ES6_PROXY #endif +#if defined(DUK_OPT_ES6_REGEXP_BRACES) +#define DUK_USE_ES6_REGEXP_BRACES +#elif defined(DUK_OPT_NO_ES6_REGEXP_BRACES) +#undef DUK_USE_ES6_REGEXP_BRACES +#else +#define DUK_USE_ES6_REGEXP_BRACES +#endif + #undef DUK_USE_EXEC_INDIRECT_BOUND_CHECK #if defined(DUK_OPT_DEBUG) || defined(DUK_OPT_ASSERTIONS) /* Enabled with debug/assertions just so that any issues can be caught. */ @@ -2960,6 +3012,14 @@ typedef FILE duk_file; #undef DUK_USE_HOBJECT_HASH_PART #endif +#if defined(DUK_OPT_HSTRING_CLEN) +#define DUK_USE_HSTRING_CLEN +#elif defined(DUK_OPT_NO_HSTRING_CLEN) +#undef DUK_USE_HSTRING_CLEN +#else +#define DUK_USE_HSTRING_CLEN +#endif + #if defined(DUK_OPT_EXTERNAL_STRINGS) #define DUK_USE_HSTRING_EXTDATA #elif defined(DUK_OPT_NO_EXTERNAL_STRINGS) @@ -3133,7 +3193,7 @@ typedef FILE duk_file; #elif defined(DUK_OPT_NO_PACKED_TVAL) #undef DUK_USE_PACKED_TVAL #else -#undef DUK_USE_PACKED_TVAL +/* Already provided above */ #endif #undef DUK_USE_PANIC_ABORT @@ -3199,6 +3259,38 @@ typedef FILE duk_file; #define DUK_USE_REGEXP_SUPPORT #endif +#if defined(DUK_OPT_ROM_GLOBAL_CLONE) +#define DUK_USE_ROM_GLOBAL_CLONE +#elif defined(DUK_OPT_NO_ROM_GLOBAL_CLONE) +#undef DUK_USE_ROM_GLOBAL_CLONE +#else +#undef DUK_USE_ROM_GLOBAL_CLONE +#endif + +#if defined(DUK_OPT_ROM_GLOBAL_INHERIT) +#define DUK_USE_ROM_GLOBAL_INHERIT +#elif defined(DUK_OPT_NO_ROM_GLOBAL_INHERIT) +#undef DUK_USE_ROM_GLOBAL_INHERIT +#else +#undef DUK_USE_ROM_GLOBAL_INHERIT +#endif + +#if defined(DUK_OPT_ROM_OBJECTS) +#define DUK_USE_ROM_OBJECTS +#elif defined(DUK_OPT_NO_ROM_OBJECTS) +#undef DUK_USE_ROM_OBJECTS +#else +#undef DUK_USE_ROM_OBJECTS +#endif + +#if defined(DUK_OPT_ROM_STRINGS) +#define DUK_USE_ROM_STRINGS +#elif defined(DUK_OPT_NO_ROM_STRINGS) +#undef DUK_USE_ROM_STRINGS +#else +#undef DUK_USE_ROM_STRINGS +#endif + #if defined(DUK_OPT_SECTION_B) #define DUK_USE_SECTION_B #elif defined(DUK_OPT_NO_SECTION_B) @@ -3215,14 +3307,6 @@ typedef FILE duk_file; #undef DUK_USE_SELF_TESTS #endif -#if defined(DUK_OPT_SETJMP) -#define DUK_USE_SETJMP -#elif defined(DUK_OPT_NO_SETJMP) -#undef DUK_USE_SETJMP -#else -#define DUK_USE_SETJMP -#endif - #if defined(DUK_OPT_SHUFFLE_TORTURE) #define DUK_USE_SHUFFLE_TORTURE #elif defined(DUK_OPT_NO_SHUFFLE_TORTURE) @@ -3231,14 +3315,6 @@ typedef FILE duk_file; #undef DUK_USE_SHUFFLE_TORTURE #endif -#if defined(DUK_OPT_SIGSETJMP) -#define DUK_USE_SIGSETJMP -#elif defined(DUK_OPT_NO_SIGSETJMP) -#undef DUK_USE_SIGSETJMP -#else -#undef DUK_USE_SIGSETJMP -#endif - #if defined(DUK_OPT_SOURCE_NONBMP) #define DUK_USE_SOURCE_NONBMP #elif defined(DUK_OPT_NO_SOURCE_NONBMP) @@ -3321,14 +3397,6 @@ typedef FILE duk_file; #define DUK_USE_TRACEBACK_DEPTH 10 #endif -#if defined(DUK_OPT_UNDERSCORE_SETJMP) -#define DUK_USE_UNDERSCORE_SETJMP -#elif defined(DUK_OPT_NO_UNDERSCORE_SETJMP) -#undef DUK_USE_UNDERSCORE_SETJMP -#else -#undef DUK_USE_UNDERSCORE_SETJMP -#endif - #if defined(DUK_OPT_DECLARE) #define DUK_USE_USER_DECLARE() DUK_OPT_DECLARE #else @@ -3385,6 +3453,7 @@ typedef FILE duk_file; #undef DUK_USE_EXPLICIT_NULL_INIT #define DUK_USE_FAST_REFCOUNT_DEFAULT #define DUK_USE_HEX_FASTPATH +#define DUK_USE_IDCHAR_FASTPATH #undef DUK_USE_INTERRUPT_DEBUG_FIXUP #define DUK_USE_JSON_DECNUMBER_FASTPATH #define DUK_USE_JSON_DECSTRING_FASTPATH @@ -3403,6 +3472,7 @@ typedef FILE duk_file; #undef DUK_USE_REFZERO_FINALIZER_TORTURE #define DUK_USE_REGEXP_COMPILER_RECLIMIT 10000 #define DUK_USE_REGEXP_EXECUTOR_RECLIMIT 10000 +#define DUK_USE_ROM_PTRCOMP_FIRST 63488L #undef DUK_USE_STRHASH_DENSE #define DUK_USE_STRHASH_SKIP_SHIFT 5 #undef DUK_USE_VALSTACK_UNSAFE @@ -3611,6 +3681,36 @@ typedef FILE duk_file; #if defined(DUK_USE_RDTSC) #error unsupported config option used (option has been removed): DUK_USE_RDTSC #endif +#if defined(DUK_USE_ROM_GLOBAL_CLONE) && !defined(DUK_USE_ROM_STRINGS) +#error config option DUK_USE_ROM_GLOBAL_CLONE requires option DUK_USE_ROM_STRINGS (which is missing) +#endif +#if defined(DUK_USE_ROM_GLOBAL_CLONE) && !defined(DUK_USE_ROM_OBJECTS) +#error config option DUK_USE_ROM_GLOBAL_CLONE requires option DUK_USE_ROM_OBJECTS (which is missing) +#endif +#if defined(DUK_USE_ROM_GLOBAL_CLONE) && defined(DUK_USE_ROM_GLOBAL_INHERIT) +#error config option DUK_USE_ROM_GLOBAL_CLONE conflicts with option DUK_USE_ROM_GLOBAL_INHERIT (which is also defined) +#endif +#if defined(DUK_USE_ROM_GLOBAL_INHERIT) && !defined(DUK_USE_ROM_STRINGS) +#error config option DUK_USE_ROM_GLOBAL_INHERIT requires option DUK_USE_ROM_STRINGS (which is missing) +#endif +#if defined(DUK_USE_ROM_GLOBAL_INHERIT) && !defined(DUK_USE_ROM_OBJECTS) +#error config option DUK_USE_ROM_GLOBAL_INHERIT requires option DUK_USE_ROM_OBJECTS (which is missing) +#endif +#if defined(DUK_USE_ROM_GLOBAL_INHERIT) && defined(DUK_USE_ROM_GLOBAL_CLONE) +#error config option DUK_USE_ROM_GLOBAL_INHERIT conflicts with option DUK_USE_ROM_GLOBAL_CLONE (which is also defined) +#endif +#if defined(DUK_USE_ROM_OBJECTS) && !defined(DUK_USE_ROM_STRINGS) +#error config option DUK_USE_ROM_OBJECTS requires option DUK_USE_ROM_STRINGS (which is missing) +#endif +#if defined(DUK_USE_ROM_STRINGS) && !defined(DUK_USE_ROM_OBJECTS) +#error config option DUK_USE_ROM_STRINGS requires option DUK_USE_ROM_OBJECTS (which is missing) +#endif +#if defined(DUK_USE_SETJMP) +#error unsupported config option used (option has been removed): DUK_USE_SETJMP +#endif +#if defined(DUK_USE_SIGSETJMP) +#error unsupported config option used (option has been removed): DUK_USE_SIGSETJMP +#endif #if defined(DUK_USE_STRTAB_CHAIN_SIZE) && !defined(DUK_USE_STRTAB_CHAIN) #error config option DUK_USE_STRTAB_CHAIN_SIZE requires option DUK_USE_STRTAB_CHAIN (which is missing) #endif @@ -3620,6 +3720,9 @@ typedef FILE duk_file; #if defined(DUK_USE_UNALIGNED_ACCESSES_POSSIBLE) #error unsupported config option used (option has been removed): DUK_USE_UNALIGNED_ACCESSES_POSSIBLE #endif +#if defined(DUK_USE_UNDERSCORE_SETJMP) +#error unsupported config option used (option has been removed): DUK_USE_UNDERSCORE_SETJMP +#endif #if defined(DUK_USE_CPP_EXCEPTIONS) && !defined(__cplusplus) #error DUK_USE_CPP_EXCEPTIONS enabled but not compiling with a C++ compiler diff --git a/javascript/duktape/duktape.c b/javascript/duktape/duktape.c index a215d13dc..e5446cc31 100644 --- a/javascript/duktape/duktape.c +++ b/javascript/duktape/duktape.c @@ -1,9 +1,7 @@ -/* Omit from static analysis. */ -#ifndef __clang_analyzer__ /* - * Single source autogenerated distributable for Duktape 1.4.0. + * Single source autogenerated distributable for Duktape 1.5.0. * - * Git commit cad6f595382a0cc1a7e4207794ade5be11b3e397 (v1.4.0). + * Git commit 83d557704ee63f68ab40b6fcb00995c9b3d6777c (v1.5.0). * Git branch master. * * See Duktape AUTHORS.rst and LICENSE.txt for copyright and @@ -69,6 +67,8 @@ * * Karl Skomski * * Bruce Pascoe * * Ren\u00e9 Hollander +* * Julien Hamaide (https://github.com/crazyjul) +* * Sebastian G\u00f6tte (https://github.com/jaseg) * * Other contributions * =================== @@ -106,6 +106,7 @@ * * Michael Drake (https://github.com/tlsa) * * https://github.com/chris-y * * Laurent Zubiaur (https://github.com/lzubiaur) +* * Ole Andr\u00e9 Vadla Ravn\u00e5s (https://github.com/oleavr) * * If you are accidentally missing from this list, send me an e-mail * (``sami.vaarala@iki.fi``) and I'll fix the omission. @@ -160,33 +161,29 @@ DUK_USE_USER_DECLARE() #ifndef DUK_REPLACEMENTS_H_INCLUDED #define DUK_REPLACEMENTS_H_INCLUDED +#if !defined(DUK_SINGLE_FILE) #if defined(DUK_USE_COMPUTED_INFINITY) DUK_INTERNAL_DECL double duk_computed_infinity; #endif - #if defined(DUK_USE_COMPUTED_NAN) DUK_INTERNAL_DECL double duk_computed_nan; #endif - #if defined(DUK_USE_REPL_FPCLASSIFY) DUK_INTERNAL_DECL int duk_repl_fpclassify(double x); #endif - #if defined(DUK_USE_REPL_SIGNBIT) DUK_INTERNAL_DECL int duk_repl_signbit(double x); #endif - #if defined(DUK_USE_REPL_ISFINITE) DUK_INTERNAL_DECL int duk_repl_isfinite(double x); #endif - #if defined(DUK_USE_REPL_ISNAN) DUK_INTERNAL_DECL int duk_repl_isnan(double x); #endif - #if defined(DUK_USE_REPL_ISINF) DUK_INTERNAL_DECL int duk_repl_isinf(double x); #endif +#endif /* !DUK_SINGLE_FILE */ #endif /* DUK_REPLACEMENTS_H_INCLUDED */ #line 1 "duk_jmpbuf.h" @@ -203,15 +200,13 @@ DUK_INTERNAL_DECL int duk_repl_isinf(double x); #ifndef DUK_JMPBUF_H_INCLUDED #define DUK_JMPBUF_H_INCLUDED -#if !defined(DUK_USE_CPP_EXCEPTIONS) +#if defined(DUK_USE_CPP_EXCEPTIONS) struct duk_jmpbuf { -#if defined(DUK_USE_SETJMP) || defined(DUK_USE_UNDERSCORE_SETJMP) - jmp_buf jb; -#elif defined(DUK_USE_SIGSETJMP) - sigjmp_buf jb; + duk_small_int_t dummy; /* unused */ +}; #else -#error internal error, no long control transfer provider -#endif +struct duk_jmpbuf { + DUK_JMPBUF_TYPE jb; }; #endif @@ -358,3975 +353,1286 @@ typedef struct duk_re_matcher_ctx duk_re_matcher_ctx; typedef struct duk_re_compiler_ctx duk_re_compiler_ctx; #endif /* DUK_FORWDECL_H_INCLUDED */ -#line 1 "duk_builtins.h" +#line 1 "duk_tval.h" /* - * Automatically generated by genbuiltins.py, do not edit! + * Tagged type definition (duk_tval) and accessor macros. + * + * Access all fields through the accessor macros, as the representation + * is quite tricky. + * + * There are two packed type alternatives: an 8-byte representation + * based on an IEEE double (preferred for compactness), and a 12-byte + * representation (portability). The latter is needed also in e.g. + * 64-bit environments (it usually pads to 16 bytes per value). + * + * Selecting the tagged type format involves many trade-offs (memory + * use, size and performance of generated code, portability, etc), + * see doc/types.rst for a detailed discussion (especially of how the + * IEEE double format is used to pack tagged values). + * + * NB: because macro arguments are often expressions, macros should + * avoid evaluating their argument more than once. */ -#ifndef DUK_BUILTINS_H_INCLUDED -#define DUK_BUILTINS_H_INCLUDED +#ifndef DUK_TVAL_H_INCLUDED +#define DUK_TVAL_H_INCLUDED -#if defined(DUK_USE_DOUBLE_LE) -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const duk_uint8_t duk_strings_data[2624]; -#endif /* !DUK_SINGLE_FILE */ +/* sanity */ +#if !defined(DUK_USE_DOUBLE_LE) && !defined(DUK_USE_DOUBLE_ME) && !defined(DUK_USE_DOUBLE_BE) +#error unsupported: cannot determine byte order variant +#endif -#define DUK_STRDATA_DATA_LENGTH 2624 -#define DUK_STRDATA_MAX_STRLEN 24 - -#define DUK_STRIDX_UC_LOGGER 0 /* 'Logger' */ -#define DUK_STRIDX_UC_THREAD 1 /* 'Thread' */ -#define DUK_STRIDX_UC_POINTER 2 /* 'Pointer' */ -#define DUK_STRIDX_DEC_ENV 3 /* 'DecEnv' */ -#define DUK_STRIDX_OBJ_ENV 4 /* 'ObjEnv' */ -#define DUK_STRIDX_FLOAT64_ARRAY 5 /* 'Float64Array' */ -#define DUK_STRIDX_FLOAT32_ARRAY 6 /* 'Float32Array' */ -#define DUK_STRIDX_UINT32_ARRAY 7 /* 'Uint32Array' */ -#define DUK_STRIDX_INT32_ARRAY 8 /* 'Int32Array' */ -#define DUK_STRIDX_UINT16_ARRAY 9 /* 'Uint16Array' */ -#define DUK_STRIDX_INT16_ARRAY 10 /* 'Int16Array' */ -#define DUK_STRIDX_UINT8_CLAMPED_ARRAY 11 /* 'Uint8ClampedArray' */ -#define DUK_STRIDX_UINT8_ARRAY 12 /* 'Uint8Array' */ -#define DUK_STRIDX_INT8_ARRAY 13 /* 'Int8Array' */ -#define DUK_STRIDX_DATA_VIEW 14 /* 'DataView' */ -#define DUK_STRIDX_ARRAY_BUFFER 15 /* 'ArrayBuffer' */ -#define DUK_STRIDX_UC_BUFFER 16 /* 'Buffer' */ -#define DUK_STRIDX_EMPTY_STRING 17 /* '' */ -#define DUK_STRIDX_GLOBAL 18 /* 'global' */ -#define DUK_STRIDX_UC_ARGUMENTS 19 /* 'Arguments' */ -#define DUK_STRIDX_JSON 20 /* 'JSON' */ -#define DUK_STRIDX_MATH 21 /* 'Math' */ -#define DUK_STRIDX_UC_ERROR 22 /* 'Error' */ -#define DUK_STRIDX_REG_EXP 23 /* 'RegExp' */ -#define DUK_STRIDX_DATE 24 /* 'Date' */ -#define DUK_STRIDX_UC_NUMBER 25 /* 'Number' */ -#define DUK_STRIDX_UC_BOOLEAN 26 /* 'Boolean' */ -#define DUK_STRIDX_UC_STRING 27 /* 'String' */ -#define DUK_STRIDX_ARRAY 28 /* 'Array' */ -#define DUK_STRIDX_UC_FUNCTION 29 /* 'Function' */ -#define DUK_STRIDX_UC_OBJECT 30 /* 'Object' */ -#define DUK_STRIDX_UC_NULL 31 /* 'Null' */ -#define DUK_STRIDX_UC_UNDEFINED 32 /* 'Undefined' */ -#define DUK_STRIDX_JSON_EXT_FUNCTION2 33 /* '{_func:true}' */ -#define DUK_STRIDX_JSON_EXT_FUNCTION1 34 /* '{"_func":true}' */ -#define DUK_STRIDX_JSON_EXT_NEGINF 35 /* '{"_ninf":true}' */ -#define DUK_STRIDX_JSON_EXT_POSINF 36 /* '{"_inf":true}' */ -#define DUK_STRIDX_JSON_EXT_NAN 37 /* '{"_nan":true}' */ -#define DUK_STRIDX_JSON_EXT_UNDEFINED 38 /* '{"_undef":true}' */ -#define DUK_STRIDX_TO_LOG_STRING 39 /* 'toLogString' */ -#define DUK_STRIDX_CLOG 40 /* 'clog' */ -#define DUK_STRIDX_LC_L 41 /* 'l' */ -#define DUK_STRIDX_LC_N 42 /* 'n' */ -#define DUK_STRIDX_LC_FATAL 43 /* 'fatal' */ -#define DUK_STRIDX_LC_ERROR 44 /* 'error' */ -#define DUK_STRIDX_LC_WARN 45 /* 'warn' */ -#define DUK_STRIDX_LC_DEBUG 46 /* 'debug' */ -#define DUK_STRIDX_LC_TRACE 47 /* 'trace' */ -#define DUK_STRIDX_RAW 48 /* 'raw' */ -#define DUK_STRIDX_FMT 49 /* 'fmt' */ -#define DUK_STRIDX_CURRENT 50 /* 'current' */ -#define DUK_STRIDX_RESUME 51 /* 'resume' */ -#define DUK_STRIDX_COMPACT 52 /* 'compact' */ -#define DUK_STRIDX_JC 53 /* 'jc' */ -#define DUK_STRIDX_JX 54 /* 'jx' */ -#define DUK_STRIDX_BASE64 55 /* 'base64' */ -#define DUK_STRIDX_HEX 56 /* 'hex' */ -#define DUK_STRIDX_DEC 57 /* 'dec' */ -#define DUK_STRIDX_ENC 58 /* 'enc' */ -#define DUK_STRIDX_FIN 59 /* 'fin' */ -#define DUK_STRIDX_GC 60 /* 'gc' */ -#define DUK_STRIDX_ACT 61 /* 'act' */ -#define DUK_STRIDX_LC_INFO 62 /* 'info' */ -#define DUK_STRIDX_VERSION 63 /* 'version' */ -#define DUK_STRIDX_ENV 64 /* 'env' */ -#define DUK_STRIDX_MOD_LOADED 65 /* 'modLoaded' */ -#define DUK_STRIDX_MOD_SEARCH 66 /* 'modSearch' */ -#define DUK_STRIDX_ERR_THROW 67 /* 'errThrow' */ -#define DUK_STRIDX_ERR_CREATE 68 /* 'errCreate' */ -#define DUK_STRIDX_COMPILE 69 /* 'compile' */ -#define DUK_STRIDX_INT_REGBASE 70 /* '\x00Regbase' */ -#define DUK_STRIDX_INT_THREAD 71 /* '\x00Thread' */ -#define DUK_STRIDX_INT_HANDLER 72 /* '\x00Handler' */ -#define DUK_STRIDX_INT_FINALIZER 73 /* '\x00Finalizer' */ -#define DUK_STRIDX_INT_CALLEE 74 /* '\x00Callee' */ -#define DUK_STRIDX_INT_MAP 75 /* '\x00Map' */ -#define DUK_STRIDX_INT_ARGS 76 /* '\x00Args' */ -#define DUK_STRIDX_INT_THIS 77 /* '\x00This' */ -#define DUK_STRIDX_INT_PC2LINE 78 /* '\x00Pc2line' */ -#define DUK_STRIDX_INT_SOURCE 79 /* '\x00Source' */ -#define DUK_STRIDX_INT_VARENV 80 /* '\x00Varenv' */ -#define DUK_STRIDX_INT_LEXENV 81 /* '\x00Lexenv' */ -#define DUK_STRIDX_INT_VARMAP 82 /* '\x00Varmap' */ -#define DUK_STRIDX_INT_FORMALS 83 /* '\x00Formals' */ -#define DUK_STRIDX_INT_BYTECODE 84 /* '\x00Bytecode' */ -#define DUK_STRIDX_INT_NEXT 85 /* '\x00Next' */ -#define DUK_STRIDX_INT_TARGET 86 /* '\x00Target' */ -#define DUK_STRIDX_INT_VALUE 87 /* '\x00Value' */ -#define DUK_STRIDX_LC_POINTER 88 /* 'pointer' */ -#define DUK_STRIDX_INT_TRACEDATA 89 /* '\x00Tracedata' */ -#define DUK_STRIDX_LINE_NUMBER 90 /* 'lineNumber' */ -#define DUK_STRIDX_FILE_NAME 91 /* 'fileName' */ -#define DUK_STRIDX_PC 92 /* 'pc' */ -#define DUK_STRIDX_STACK 93 /* 'stack' */ -#define DUK_STRIDX_THROW_TYPE_ERROR 94 /* 'ThrowTypeError' */ -#define DUK_STRIDX_DUKTAPE 95 /* 'Duktape' */ -#define DUK_STRIDX_SET_FLOAT64 96 /* 'setFloat64' */ -#define DUK_STRIDX_SET_FLOAT32 97 /* 'setFloat32' */ -#define DUK_STRIDX_SET_UINT32 98 /* 'setUint32' */ -#define DUK_STRIDX_SET_INT32 99 /* 'setInt32' */ -#define DUK_STRIDX_SET_UINT16 100 /* 'setUint16' */ -#define DUK_STRIDX_SET_INT16 101 /* 'setInt16' */ -#define DUK_STRIDX_SET_UINT8 102 /* 'setUint8' */ -#define DUK_STRIDX_SET_INT8 103 /* 'setInt8' */ -#define DUK_STRIDX_GET_FLOAT64 104 /* 'getFloat64' */ -#define DUK_STRIDX_GET_FLOAT32 105 /* 'getFloat32' */ -#define DUK_STRIDX_GET_UINT32 106 /* 'getUint32' */ -#define DUK_STRIDX_GET_INT32 107 /* 'getInt32' */ -#define DUK_STRIDX_GET_UINT16 108 /* 'getUint16' */ -#define DUK_STRIDX_GET_INT16 109 /* 'getInt16' */ -#define DUK_STRIDX_GET_UINT8 110 /* 'getUint8' */ -#define DUK_STRIDX_GET_INT8 111 /* 'getInt8' */ -#define DUK_STRIDX_SUBARRAY 112 /* 'subarray' */ -#define DUK_STRIDX_BYTES_PER_ELEMENT 113 /* 'BYTES_PER_ELEMENT' */ -#define DUK_STRIDX_BYTE_OFFSET 114 /* 'byteOffset' */ -#define DUK_STRIDX_LC_BUFFER 115 /* 'buffer' */ -#define DUK_STRIDX_IS_VIEW 116 /* 'isView' */ -#define DUK_STRIDX_DATA 117 /* 'data' */ -#define DUK_STRIDX_TYPE 118 /* 'type' */ -#define DUK_STRIDX_WRITE_INT_BE 119 /* 'writeIntBE' */ -#define DUK_STRIDX_WRITE_INT_LE 120 /* 'writeIntLE' */ -#define DUK_STRIDX_WRITE_UINT_BE 121 /* 'writeUIntBE' */ -#define DUK_STRIDX_WRITE_UINT_LE 122 /* 'writeUIntLE' */ -#define DUK_STRIDX_WRITE_DOUBLE_BE 123 /* 'writeDoubleBE' */ -#define DUK_STRIDX_WRITE_DOUBLE_LE 124 /* 'writeDoubleLE' */ -#define DUK_STRIDX_WRITE_FLOAT_BE 125 /* 'writeFloatBE' */ -#define DUK_STRIDX_WRITE_FLOAT_LE 126 /* 'writeFloatLE' */ -#define DUK_STRIDX_WRITE_INT32_BE 127 /* 'writeInt32BE' */ -#define DUK_STRIDX_WRITE_INT32_LE 128 /* 'writeInt32LE' */ -#define DUK_STRIDX_WRITE_UINT32_BE 129 /* 'writeUInt32BE' */ -#define DUK_STRIDX_WRITE_UINT32_LE 130 /* 'writeUInt32LE' */ -#define DUK_STRIDX_WRITE_INT16_BE 131 /* 'writeInt16BE' */ -#define DUK_STRIDX_WRITE_INT16_LE 132 /* 'writeInt16LE' */ -#define DUK_STRIDX_WRITE_UINT16_BE 133 /* 'writeUInt16BE' */ -#define DUK_STRIDX_WRITE_UINT16_LE 134 /* 'writeUInt16LE' */ -#define DUK_STRIDX_WRITE_INT8 135 /* 'writeInt8' */ -#define DUK_STRIDX_WRITE_UINT8 136 /* 'writeUInt8' */ -#define DUK_STRIDX_READ_INT_BE 137 /* 'readIntBE' */ -#define DUK_STRIDX_READ_INT_LE 138 /* 'readIntLE' */ -#define DUK_STRIDX_READ_UINT_BE 139 /* 'readUIntBE' */ -#define DUK_STRIDX_READ_UINT_LE 140 /* 'readUIntLE' */ -#define DUK_STRIDX_READ_DOUBLE_BE 141 /* 'readDoubleBE' */ -#define DUK_STRIDX_READ_DOUBLE_LE 142 /* 'readDoubleLE' */ -#define DUK_STRIDX_READ_FLOAT_BE 143 /* 'readFloatBE' */ -#define DUK_STRIDX_READ_FLOAT_LE 144 /* 'readFloatLE' */ -#define DUK_STRIDX_READ_INT32_BE 145 /* 'readInt32BE' */ -#define DUK_STRIDX_READ_INT32_LE 146 /* 'readInt32LE' */ -#define DUK_STRIDX_READ_UINT32_BE 147 /* 'readUInt32BE' */ -#define DUK_STRIDX_READ_UINT32_LE 148 /* 'readUInt32LE' */ -#define DUK_STRIDX_READ_INT16_BE 149 /* 'readInt16BE' */ -#define DUK_STRIDX_READ_INT16_LE 150 /* 'readInt16LE' */ -#define DUK_STRIDX_READ_UINT16_BE 151 /* 'readUInt16BE' */ -#define DUK_STRIDX_READ_UINT16_LE 152 /* 'readUInt16LE' */ -#define DUK_STRIDX_READ_INT8 153 /* 'readInt8' */ -#define DUK_STRIDX_READ_UINT8 154 /* 'readUInt8' */ -#define DUK_STRIDX_COPY 155 /* 'copy' */ -#define DUK_STRIDX_EQUALS 156 /* 'equals' */ -#define DUK_STRIDX_FILL 157 /* 'fill' */ -#define DUK_STRIDX_WRITE 158 /* 'write' */ -#define DUK_STRIDX_COMPARE 159 /* 'compare' */ -#define DUK_STRIDX_BYTE_LENGTH 160 /* 'byteLength' */ -#define DUK_STRIDX_IS_BUFFER 161 /* 'isBuffer' */ -#define DUK_STRIDX_IS_ENCODING 162 /* 'isEncoding' */ -#define DUK_STRIDX_EXPORTS 163 /* 'exports' */ -#define DUK_STRIDX_ID 164 /* 'id' */ -#define DUK_STRIDX_REQUIRE 165 /* 'require' */ -#define DUK_STRIDX___PROTO__ 166 /* '__proto__' */ -#define DUK_STRIDX_SET_PROTOTYPE_OF 167 /* 'setPrototypeOf' */ -#define DUK_STRIDX_OWN_KEYS 168 /* 'ownKeys' */ -#define DUK_STRIDX_ENUMERATE 169 /* 'enumerate' */ -#define DUK_STRIDX_DELETE_PROPERTY 170 /* 'deleteProperty' */ -#define DUK_STRIDX_HAS 171 /* 'has' */ -#define DUK_STRIDX_PROXY 172 /* 'Proxy' */ -#define DUK_STRIDX_CALLEE 173 /* 'callee' */ -#define DUK_STRIDX_INVALID_DATE 174 /* 'Invalid Date' */ -#define DUK_STRIDX_BRACKETED_ELLIPSIS 175 /* '[...]' */ -#define DUK_STRIDX_NEWLINE_TAB 176 /* '\n\t' */ -#define DUK_STRIDX_SPACE 177 /* ' ' */ -#define DUK_STRIDX_COMMA 178 /* ',' */ -#define DUK_STRIDX_MINUS_ZERO 179 /* '-0' */ -#define DUK_STRIDX_PLUS_ZERO 180 /* '+0' */ -#define DUK_STRIDX_ZERO 181 /* '0' */ -#define DUK_STRIDX_MINUS_INFINITY 182 /* '-Infinity' */ -#define DUK_STRIDX_PLUS_INFINITY 183 /* '+Infinity' */ -#define DUK_STRIDX_INFINITY 184 /* 'Infinity' */ -#define DUK_STRIDX_LC_OBJECT 185 /* 'object' */ -#define DUK_STRIDX_LC_STRING 186 /* 'string' */ -#define DUK_STRIDX_LC_NUMBER 187 /* 'number' */ -#define DUK_STRIDX_LC_BOOLEAN 188 /* 'boolean' */ -#define DUK_STRIDX_LC_UNDEFINED 189 /* 'undefined' */ -#define DUK_STRIDX_STRINGIFY 190 /* 'stringify' */ -#define DUK_STRIDX_TAN 191 /* 'tan' */ -#define DUK_STRIDX_SQRT 192 /* 'sqrt' */ -#define DUK_STRIDX_SIN 193 /* 'sin' */ -#define DUK_STRIDX_ROUND 194 /* 'round' */ -#define DUK_STRIDX_RANDOM 195 /* 'random' */ -#define DUK_STRIDX_POW 196 /* 'pow' */ -#define DUK_STRIDX_MIN 197 /* 'min' */ -#define DUK_STRIDX_MAX 198 /* 'max' */ -#define DUK_STRIDX_LOG 199 /* 'log' */ -#define DUK_STRIDX_FLOOR 200 /* 'floor' */ -#define DUK_STRIDX_EXP 201 /* 'exp' */ -#define DUK_STRIDX_COS 202 /* 'cos' */ -#define DUK_STRIDX_CEIL 203 /* 'ceil' */ -#define DUK_STRIDX_ATAN2 204 /* 'atan2' */ -#define DUK_STRIDX_ATAN 205 /* 'atan' */ -#define DUK_STRIDX_ASIN 206 /* 'asin' */ -#define DUK_STRIDX_ACOS 207 /* 'acos' */ -#define DUK_STRIDX_ABS 208 /* 'abs' */ -#define DUK_STRIDX_SQRT2 209 /* 'SQRT2' */ -#define DUK_STRIDX_SQRT1_2 210 /* 'SQRT1_2' */ -#define DUK_STRIDX_PI 211 /* 'PI' */ -#define DUK_STRIDX_LOG10E 212 /* 'LOG10E' */ -#define DUK_STRIDX_LOG2E 213 /* 'LOG2E' */ -#define DUK_STRIDX_LN2 214 /* 'LN2' */ -#define DUK_STRIDX_LN10 215 /* 'LN10' */ -#define DUK_STRIDX_E 216 /* 'E' */ -#define DUK_STRIDX_MESSAGE 217 /* 'message' */ -#define DUK_STRIDX_NAME 218 /* 'name' */ -#define DUK_STRIDX_INPUT 219 /* 'input' */ -#define DUK_STRIDX_INDEX 220 /* 'index' */ -#define DUK_STRIDX_ESCAPED_EMPTY_REGEXP 221 /* '(?:)' */ -#define DUK_STRIDX_LAST_INDEX 222 /* 'lastIndex' */ -#define DUK_STRIDX_MULTILINE 223 /* 'multiline' */ -#define DUK_STRIDX_IGNORE_CASE 224 /* 'ignoreCase' */ -#define DUK_STRIDX_SOURCE 225 /* 'source' */ -#define DUK_STRIDX_TEST 226 /* 'test' */ -#define DUK_STRIDX_EXEC 227 /* 'exec' */ -#define DUK_STRIDX_TO_GMT_STRING 228 /* 'toGMTString' */ -#define DUK_STRIDX_SET_YEAR 229 /* 'setYear' */ -#define DUK_STRIDX_GET_YEAR 230 /* 'getYear' */ -#define DUK_STRIDX_TO_JSON 231 /* 'toJSON' */ -#define DUK_STRIDX_TO_ISO_STRING 232 /* 'toISOString' */ -#define DUK_STRIDX_TO_UTC_STRING 233 /* 'toUTCString' */ -#define DUK_STRIDX_SET_UTC_FULL_YEAR 234 /* 'setUTCFullYear' */ -#define DUK_STRIDX_SET_FULL_YEAR 235 /* 'setFullYear' */ -#define DUK_STRIDX_SET_UTC_MONTH 236 /* 'setUTCMonth' */ -#define DUK_STRIDX_SET_MONTH 237 /* 'setMonth' */ -#define DUK_STRIDX_SET_UTC_DATE 238 /* 'setUTCDate' */ -#define DUK_STRIDX_SET_DATE 239 /* 'setDate' */ -#define DUK_STRIDX_SET_UTC_HOURS 240 /* 'setUTCHours' */ -#define DUK_STRIDX_SET_HOURS 241 /* 'setHours' */ -#define DUK_STRIDX_SET_UTC_MINUTES 242 /* 'setUTCMinutes' */ -#define DUK_STRIDX_SET_MINUTES 243 /* 'setMinutes' */ -#define DUK_STRIDX_SET_UTC_SECONDS 244 /* 'setUTCSeconds' */ -#define DUK_STRIDX_SET_SECONDS 245 /* 'setSeconds' */ -#define DUK_STRIDX_SET_UTC_MILLISECONDS 246 /* 'setUTCMilliseconds' */ -#define DUK_STRIDX_SET_MILLISECONDS 247 /* 'setMilliseconds' */ -#define DUK_STRIDX_SET_TIME 248 /* 'setTime' */ -#define DUK_STRIDX_GET_TIMEZONE_OFFSET 249 /* 'getTimezoneOffset' */ -#define DUK_STRIDX_GET_UTC_MILLISECONDS 250 /* 'getUTCMilliseconds' */ -#define DUK_STRIDX_GET_MILLISECONDS 251 /* 'getMilliseconds' */ -#define DUK_STRIDX_GET_UTC_SECONDS 252 /* 'getUTCSeconds' */ -#define DUK_STRIDX_GET_SECONDS 253 /* 'getSeconds' */ -#define DUK_STRIDX_GET_UTC_MINUTES 254 /* 'getUTCMinutes' */ -#define DUK_STRIDX_GET_MINUTES 255 /* 'getMinutes' */ -#define DUK_STRIDX_GET_UTC_HOURS 256 /* 'getUTCHours' */ -#define DUK_STRIDX_GET_HOURS 257 /* 'getHours' */ -#define DUK_STRIDX_GET_UTC_DAY 258 /* 'getUTCDay' */ -#define DUK_STRIDX_GET_DAY 259 /* 'getDay' */ -#define DUK_STRIDX_GET_UTC_DATE 260 /* 'getUTCDate' */ -#define DUK_STRIDX_GET_DATE 261 /* 'getDate' */ -#define DUK_STRIDX_GET_UTC_MONTH 262 /* 'getUTCMonth' */ -#define DUK_STRIDX_GET_MONTH 263 /* 'getMonth' */ -#define DUK_STRIDX_GET_UTC_FULL_YEAR 264 /* 'getUTCFullYear' */ -#define DUK_STRIDX_GET_FULL_YEAR 265 /* 'getFullYear' */ -#define DUK_STRIDX_GET_TIME 266 /* 'getTime' */ -#define DUK_STRIDX_TO_LOCALE_TIME_STRING 267 /* 'toLocaleTimeString' */ -#define DUK_STRIDX_TO_LOCALE_DATE_STRING 268 /* 'toLocaleDateString' */ -#define DUK_STRIDX_TO_TIME_STRING 269 /* 'toTimeString' */ -#define DUK_STRIDX_TO_DATE_STRING 270 /* 'toDateString' */ -#define DUK_STRIDX_NOW 271 /* 'now' */ -#define DUK_STRIDX_UTC 272 /* 'UTC' */ -#define DUK_STRIDX_PARSE 273 /* 'parse' */ -#define DUK_STRIDX_TO_PRECISION 274 /* 'toPrecision' */ -#define DUK_STRIDX_TO_EXPONENTIAL 275 /* 'toExponential' */ -#define DUK_STRIDX_TO_FIXED 276 /* 'toFixed' */ -#define DUK_STRIDX_POSITIVE_INFINITY 277 /* 'POSITIVE_INFINITY' */ -#define DUK_STRIDX_NEGATIVE_INFINITY 278 /* 'NEGATIVE_INFINITY' */ -#define DUK_STRIDX_NAN 279 /* 'NaN' */ -#define DUK_STRIDX_MIN_VALUE 280 /* 'MIN_VALUE' */ -#define DUK_STRIDX_MAX_VALUE 281 /* 'MAX_VALUE' */ -#define DUK_STRIDX_SUBSTR 282 /* 'substr' */ -#define DUK_STRIDX_TRIM 283 /* 'trim' */ -#define DUK_STRIDX_TO_LOCALE_UPPER_CASE 284 /* 'toLocaleUpperCase' */ -#define DUK_STRIDX_TO_UPPER_CASE 285 /* 'toUpperCase' */ -#define DUK_STRIDX_TO_LOCALE_LOWER_CASE 286 /* 'toLocaleLowerCase' */ -#define DUK_STRIDX_TO_LOWER_CASE 287 /* 'toLowerCase' */ -#define DUK_STRIDX_SUBSTRING 288 /* 'substring' */ -#define DUK_STRIDX_SPLIT 289 /* 'split' */ -#define DUK_STRIDX_SEARCH 290 /* 'search' */ -#define DUK_STRIDX_REPLACE 291 /* 'replace' */ -#define DUK_STRIDX_MATCH 292 /* 'match' */ -#define DUK_STRIDX_LOCALE_COMPARE 293 /* 'localeCompare' */ -#define DUK_STRIDX_CHAR_CODE_AT 294 /* 'charCodeAt' */ -#define DUK_STRIDX_CHAR_AT 295 /* 'charAt' */ -#define DUK_STRIDX_FROM_CHAR_CODE 296 /* 'fromCharCode' */ -#define DUK_STRIDX_REDUCE_RIGHT 297 /* 'reduceRight' */ -#define DUK_STRIDX_REDUCE 298 /* 'reduce' */ -#define DUK_STRIDX_FILTER 299 /* 'filter' */ -#define DUK_STRIDX_MAP 300 /* 'map' */ -#define DUK_STRIDX_FOR_EACH 301 /* 'forEach' */ -#define DUK_STRIDX_SOME 302 /* 'some' */ -#define DUK_STRIDX_EVERY 303 /* 'every' */ -#define DUK_STRIDX_LAST_INDEX_OF 304 /* 'lastIndexOf' */ -#define DUK_STRIDX_INDEX_OF 305 /* 'indexOf' */ -#define DUK_STRIDX_UNSHIFT 306 /* 'unshift' */ -#define DUK_STRIDX_SPLICE 307 /* 'splice' */ -#define DUK_STRIDX_SORT 308 /* 'sort' */ -#define DUK_STRIDX_SLICE 309 /* 'slice' */ -#define DUK_STRIDX_SHIFT 310 /* 'shift' */ -#define DUK_STRIDX_REVERSE 311 /* 'reverse' */ -#define DUK_STRIDX_PUSH 312 /* 'push' */ -#define DUK_STRIDX_POP 313 /* 'pop' */ -#define DUK_STRIDX_JOIN 314 /* 'join' */ -#define DUK_STRIDX_CONCAT 315 /* 'concat' */ -#define DUK_STRIDX_IS_ARRAY 316 /* 'isArray' */ -#define DUK_STRIDX_LC_ARGUMENTS 317 /* 'arguments' */ -#define DUK_STRIDX_CALLER 318 /* 'caller' */ -#define DUK_STRIDX_BIND 319 /* 'bind' */ -#define DUK_STRIDX_CALL 320 /* 'call' */ -#define DUK_STRIDX_APPLY 321 /* 'apply' */ -#define DUK_STRIDX_PROPERTY_IS_ENUMERABLE 322 /* 'propertyIsEnumerable' */ -#define DUK_STRIDX_IS_PROTOTYPE_OF 323 /* 'isPrototypeOf' */ -#define DUK_STRIDX_HAS_OWN_PROPERTY 324 /* 'hasOwnProperty' */ -#define DUK_STRIDX_VALUE_OF 325 /* 'valueOf' */ -#define DUK_STRIDX_TO_LOCALE_STRING 326 /* 'toLocaleString' */ -#define DUK_STRIDX_TO_STRING 327 /* 'toString' */ -#define DUK_STRIDX_CONSTRUCTOR 328 /* 'constructor' */ -#define DUK_STRIDX_SET 329 /* 'set' */ -#define DUK_STRIDX_GET 330 /* 'get' */ -#define DUK_STRIDX_ENUMERABLE 331 /* 'enumerable' */ -#define DUK_STRIDX_CONFIGURABLE 332 /* 'configurable' */ -#define DUK_STRIDX_WRITABLE 333 /* 'writable' */ -#define DUK_STRIDX_VALUE 334 /* 'value' */ -#define DUK_STRIDX_KEYS 335 /* 'keys' */ -#define DUK_STRIDX_IS_EXTENSIBLE 336 /* 'isExtensible' */ -#define DUK_STRIDX_IS_FROZEN 337 /* 'isFrozen' */ -#define DUK_STRIDX_IS_SEALED 338 /* 'isSealed' */ -#define DUK_STRIDX_PREVENT_EXTENSIONS 339 /* 'preventExtensions' */ -#define DUK_STRIDX_FREEZE 340 /* 'freeze' */ -#define DUK_STRIDX_SEAL 341 /* 'seal' */ -#define DUK_STRIDX_DEFINE_PROPERTIES 342 /* 'defineProperties' */ -#define DUK_STRIDX_DEFINE_PROPERTY 343 /* 'defineProperty' */ -#define DUK_STRIDX_CREATE 344 /* 'create' */ -#define DUK_STRIDX_GET_OWN_PROPERTY_NAMES 345 /* 'getOwnPropertyNames' */ -#define DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR 346 /* 'getOwnPropertyDescriptor' */ -#define DUK_STRIDX_GET_PROTOTYPE_OF 347 /* 'getPrototypeOf' */ -#define DUK_STRIDX_PROTOTYPE 348 /* 'prototype' */ -#define DUK_STRIDX_LENGTH 349 /* 'length' */ -#define DUK_STRIDX_ALERT 350 /* 'alert' */ -#define DUK_STRIDX_PRINT 351 /* 'print' */ -#define DUK_STRIDX_UNESCAPE 352 /* 'unescape' */ -#define DUK_STRIDX_ESCAPE 353 /* 'escape' */ -#define DUK_STRIDX_ENCODE_URI_COMPONENT 354 /* 'encodeURIComponent' */ -#define DUK_STRIDX_ENCODE_URI 355 /* 'encodeURI' */ -#define DUK_STRIDX_DECODE_URI_COMPONENT 356 /* 'decodeURIComponent' */ -#define DUK_STRIDX_DECODE_URI 357 /* 'decodeURI' */ -#define DUK_STRIDX_IS_FINITE 358 /* 'isFinite' */ -#define DUK_STRIDX_IS_NAN 359 /* 'isNaN' */ -#define DUK_STRIDX_PARSE_FLOAT 360 /* 'parseFloat' */ -#define DUK_STRIDX_PARSE_INT 361 /* 'parseInt' */ -#define DUK_STRIDX_EVAL 362 /* 'eval' */ -#define DUK_STRIDX_URI_ERROR 363 /* 'URIError' */ -#define DUK_STRIDX_TYPE_ERROR 364 /* 'TypeError' */ -#define DUK_STRIDX_SYNTAX_ERROR 365 /* 'SyntaxError' */ -#define DUK_STRIDX_REFERENCE_ERROR 366 /* 'ReferenceError' */ -#define DUK_STRIDX_RANGE_ERROR 367 /* 'RangeError' */ -#define DUK_STRIDX_EVAL_ERROR 368 /* 'EvalError' */ -#define DUK_STRIDX_BREAK 369 /* 'break' */ -#define DUK_STRIDX_CASE 370 /* 'case' */ -#define DUK_STRIDX_CATCH 371 /* 'catch' */ -#define DUK_STRIDX_CONTINUE 372 /* 'continue' */ -#define DUK_STRIDX_DEBUGGER 373 /* 'debugger' */ -#define DUK_STRIDX_DEFAULT 374 /* 'default' */ -#define DUK_STRIDX_DELETE 375 /* 'delete' */ -#define DUK_STRIDX_DO 376 /* 'do' */ -#define DUK_STRIDX_ELSE 377 /* 'else' */ -#define DUK_STRIDX_FINALLY 378 /* 'finally' */ -#define DUK_STRIDX_FOR 379 /* 'for' */ -#define DUK_STRIDX_LC_FUNCTION 380 /* 'function' */ -#define DUK_STRIDX_IF 381 /* 'if' */ -#define DUK_STRIDX_IN 382 /* 'in' */ -#define DUK_STRIDX_INSTANCEOF 383 /* 'instanceof' */ -#define DUK_STRIDX_NEW 384 /* 'new' */ -#define DUK_STRIDX_RETURN 385 /* 'return' */ -#define DUK_STRIDX_SWITCH 386 /* 'switch' */ -#define DUK_STRIDX_THIS 387 /* 'this' */ -#define DUK_STRIDX_THROW 388 /* 'throw' */ -#define DUK_STRIDX_TRY 389 /* 'try' */ -#define DUK_STRIDX_TYPEOF 390 /* 'typeof' */ -#define DUK_STRIDX_VAR 391 /* 'var' */ -#define DUK_STRIDX_CONST 392 /* 'const' */ -#define DUK_STRIDX_VOID 393 /* 'void' */ -#define DUK_STRIDX_WHILE 394 /* 'while' */ -#define DUK_STRIDX_WITH 395 /* 'with' */ -#define DUK_STRIDX_CLASS 396 /* 'class' */ -#define DUK_STRIDX_ENUM 397 /* 'enum' */ -#define DUK_STRIDX_EXPORT 398 /* 'export' */ -#define DUK_STRIDX_EXTENDS 399 /* 'extends' */ -#define DUK_STRIDX_IMPORT 400 /* 'import' */ -#define DUK_STRIDX_SUPER 401 /* 'super' */ -#define DUK_STRIDX_LC_NULL 402 /* 'null' */ -#define DUK_STRIDX_TRUE 403 /* 'true' */ -#define DUK_STRIDX_FALSE 404 /* 'false' */ -#define DUK_STRIDX_IMPLEMENTS 405 /* 'implements' */ -#define DUK_STRIDX_INTERFACE 406 /* 'interface' */ -#define DUK_STRIDX_LET 407 /* 'let' */ -#define DUK_STRIDX_PACKAGE 408 /* 'package' */ -#define DUK_STRIDX_PRIVATE 409 /* 'private' */ -#define DUK_STRIDX_PROTECTED 410 /* 'protected' */ -#define DUK_STRIDX_PUBLIC 411 /* 'public' */ -#define DUK_STRIDX_STATIC 412 /* 'static' */ -#define DUK_STRIDX_YIELD 413 /* 'yield' */ - -#define DUK_HEAP_STRING_UC_LOGGER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_LOGGER) -#define DUK_HTHREAD_STRING_UC_LOGGER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_LOGGER) -#define DUK_HEAP_STRING_UC_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_THREAD) -#define DUK_HTHREAD_STRING_UC_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_THREAD) -#define DUK_HEAP_STRING_UC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_POINTER) -#define DUK_HTHREAD_STRING_UC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_POINTER) -#define DUK_HEAP_STRING_DEC_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC_ENV) -#define DUK_HTHREAD_STRING_DEC_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC_ENV) -#define DUK_HEAP_STRING_OBJ_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OBJ_ENV) -#define DUK_HTHREAD_STRING_OBJ_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OBJ_ENV) -#define DUK_HEAP_STRING_FLOAT64_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT64_ARRAY) -#define DUK_HTHREAD_STRING_FLOAT64_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT64_ARRAY) -#define DUK_HEAP_STRING_FLOAT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT32_ARRAY) -#define DUK_HTHREAD_STRING_FLOAT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT32_ARRAY) -#define DUK_HEAP_STRING_UINT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT32_ARRAY) -#define DUK_HTHREAD_STRING_UINT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT32_ARRAY) -#define DUK_HEAP_STRING_INT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT32_ARRAY) -#define DUK_HTHREAD_STRING_INT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT32_ARRAY) -#define DUK_HEAP_STRING_UINT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT16_ARRAY) -#define DUK_HTHREAD_STRING_UINT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT16_ARRAY) -#define DUK_HEAP_STRING_INT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT16_ARRAY) -#define DUK_HTHREAD_STRING_INT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT16_ARRAY) -#define DUK_HEAP_STRING_UINT8_CLAMPED_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_CLAMPED_ARRAY) -#define DUK_HTHREAD_STRING_UINT8_CLAMPED_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_CLAMPED_ARRAY) -#define DUK_HEAP_STRING_UINT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_ARRAY) -#define DUK_HTHREAD_STRING_UINT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_ARRAY) -#define DUK_HEAP_STRING_INT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT8_ARRAY) -#define DUK_HTHREAD_STRING_INT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT8_ARRAY) -#define DUK_HEAP_STRING_DATA_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA_VIEW) -#define DUK_HTHREAD_STRING_DATA_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA_VIEW) -#define DUK_HEAP_STRING_ARRAY_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY_BUFFER) -#define DUK_HTHREAD_STRING_ARRAY_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY_BUFFER) -#define DUK_HEAP_STRING_UC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BUFFER) -#define DUK_HTHREAD_STRING_UC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BUFFER) -#define DUK_HEAP_STRING_EMPTY_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EMPTY_STRING) -#define DUK_HTHREAD_STRING_EMPTY_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EMPTY_STRING) -#define DUK_HEAP_STRING_GLOBAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GLOBAL) -#define DUK_HTHREAD_STRING_GLOBAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GLOBAL) -#define DUK_HEAP_STRING_UC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ARGUMENTS) -#define DUK_HTHREAD_STRING_UC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ARGUMENTS) -#define DUK_HEAP_STRING_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON) -#define DUK_HTHREAD_STRING_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON) -#define DUK_HEAP_STRING_MATH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATH) -#define DUK_HTHREAD_STRING_MATH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATH) -#define DUK_HEAP_STRING_UC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ERROR) -#define DUK_HTHREAD_STRING_UC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ERROR) -#define DUK_HEAP_STRING_REG_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REG_EXP) -#define DUK_HTHREAD_STRING_REG_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REG_EXP) -#define DUK_HEAP_STRING_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATE) -#define DUK_HTHREAD_STRING_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATE) -#define DUK_HEAP_STRING_UC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NUMBER) -#define DUK_HTHREAD_STRING_UC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NUMBER) -#define DUK_HEAP_STRING_UC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BOOLEAN) -#define DUK_HTHREAD_STRING_UC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BOOLEAN) -#define DUK_HEAP_STRING_UC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_STRING) -#define DUK_HTHREAD_STRING_UC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_STRING) -#define DUK_HEAP_STRING_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY) -#define DUK_HTHREAD_STRING_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY) -#define DUK_HEAP_STRING_UC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_FUNCTION) -#define DUK_HTHREAD_STRING_UC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_FUNCTION) -#define DUK_HEAP_STRING_UC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_OBJECT) -#define DUK_HTHREAD_STRING_UC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_OBJECT) -#define DUK_HEAP_STRING_UC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NULL) -#define DUK_HTHREAD_STRING_UC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NULL) -#define DUK_HEAP_STRING_UC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_UNDEFINED) -#define DUK_HTHREAD_STRING_UC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_UNDEFINED) -#define DUK_HEAP_STRING_JSON_EXT_FUNCTION2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION2) -#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION2) -#define DUK_HEAP_STRING_JSON_EXT_FUNCTION1(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION1) -#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION1(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION1) -#define DUK_HEAP_STRING_JSON_EXT_NEGINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NEGINF) -#define DUK_HTHREAD_STRING_JSON_EXT_NEGINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NEGINF) -#define DUK_HEAP_STRING_JSON_EXT_POSINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_POSINF) -#define DUK_HTHREAD_STRING_JSON_EXT_POSINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_POSINF) -#define DUK_HEAP_STRING_JSON_EXT_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NAN) -#define DUK_HTHREAD_STRING_JSON_EXT_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NAN) -#define DUK_HEAP_STRING_JSON_EXT_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_UNDEFINED) -#define DUK_HTHREAD_STRING_JSON_EXT_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_UNDEFINED) -#define DUK_HEAP_STRING_TO_LOG_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOG_STRING) -#define DUK_HTHREAD_STRING_TO_LOG_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOG_STRING) -#define DUK_HEAP_STRING_CLOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLOG) -#define DUK_HTHREAD_STRING_CLOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLOG) -#define DUK_HEAP_STRING_LC_L(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_L) -#define DUK_HTHREAD_STRING_LC_L(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_L) -#define DUK_HEAP_STRING_LC_N(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_N) -#define DUK_HTHREAD_STRING_LC_N(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_N) -#define DUK_HEAP_STRING_LC_FATAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FATAL) -#define DUK_HTHREAD_STRING_LC_FATAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FATAL) -#define DUK_HEAP_STRING_LC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ERROR) -#define DUK_HTHREAD_STRING_LC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ERROR) -#define DUK_HEAP_STRING_LC_WARN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_WARN) -#define DUK_HTHREAD_STRING_LC_WARN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_WARN) -#define DUK_HEAP_STRING_LC_DEBUG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_DEBUG) -#define DUK_HTHREAD_STRING_LC_DEBUG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_DEBUG) -#define DUK_HEAP_STRING_LC_TRACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_TRACE) -#define DUK_HTHREAD_STRING_LC_TRACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_TRACE) -#define DUK_HEAP_STRING_RAW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RAW) -#define DUK_HTHREAD_STRING_RAW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RAW) -#define DUK_HEAP_STRING_FMT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FMT) -#define DUK_HTHREAD_STRING_FMT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FMT) -#define DUK_HEAP_STRING_CURRENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CURRENT) -#define DUK_HTHREAD_STRING_CURRENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CURRENT) -#define DUK_HEAP_STRING_RESUME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RESUME) -#define DUK_HTHREAD_STRING_RESUME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RESUME) -#define DUK_HEAP_STRING_COMPACT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPACT) -#define DUK_HTHREAD_STRING_COMPACT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPACT) -#define DUK_HEAP_STRING_JC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JC) -#define DUK_HTHREAD_STRING_JC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JC) -#define DUK_HEAP_STRING_JX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JX) -#define DUK_HTHREAD_STRING_JX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JX) -#define DUK_HEAP_STRING_BASE64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BASE64) -#define DUK_HTHREAD_STRING_BASE64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BASE64) -#define DUK_HEAP_STRING_HEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HEX) -#define DUK_HTHREAD_STRING_HEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HEX) -#define DUK_HEAP_STRING_DEC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC) -#define DUK_HTHREAD_STRING_DEC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC) -#define DUK_HEAP_STRING_ENC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENC) -#define DUK_HTHREAD_STRING_ENC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENC) -#define DUK_HEAP_STRING_FIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FIN) -#define DUK_HTHREAD_STRING_FIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FIN) -#define DUK_HEAP_STRING_GC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GC) -#define DUK_HTHREAD_STRING_GC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GC) -#define DUK_HEAP_STRING_ACT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ACT) -#define DUK_HTHREAD_STRING_ACT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ACT) -#define DUK_HEAP_STRING_LC_INFO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_INFO) -#define DUK_HTHREAD_STRING_LC_INFO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_INFO) -#define DUK_HEAP_STRING_VERSION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VERSION) -#define DUK_HTHREAD_STRING_VERSION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VERSION) -#define DUK_HEAP_STRING_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENV) -#define DUK_HTHREAD_STRING_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENV) -#define DUK_HEAP_STRING_MOD_LOADED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_LOADED) -#define DUK_HTHREAD_STRING_MOD_LOADED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_LOADED) -#define DUK_HEAP_STRING_MOD_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_SEARCH) -#define DUK_HTHREAD_STRING_MOD_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_SEARCH) -#define DUK_HEAP_STRING_ERR_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_THROW) -#define DUK_HTHREAD_STRING_ERR_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_THROW) -#define DUK_HEAP_STRING_ERR_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_CREATE) -#define DUK_HTHREAD_STRING_ERR_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_CREATE) -#define DUK_HEAP_STRING_COMPILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPILE) -#define DUK_HTHREAD_STRING_COMPILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPILE) -#define DUK_HEAP_STRING_INT_REGBASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_REGBASE) -#define DUK_HTHREAD_STRING_INT_REGBASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_REGBASE) -#define DUK_HEAP_STRING_INT_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THREAD) -#define DUK_HTHREAD_STRING_INT_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THREAD) -#define DUK_HEAP_STRING_INT_HANDLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_HANDLER) -#define DUK_HTHREAD_STRING_INT_HANDLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_HANDLER) -#define DUK_HEAP_STRING_INT_FINALIZER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FINALIZER) -#define DUK_HTHREAD_STRING_INT_FINALIZER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FINALIZER) -#define DUK_HEAP_STRING_INT_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_CALLEE) -#define DUK_HTHREAD_STRING_INT_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_CALLEE) -#define DUK_HEAP_STRING_INT_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_MAP) -#define DUK_HTHREAD_STRING_INT_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_MAP) -#define DUK_HEAP_STRING_INT_ARGS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_ARGS) -#define DUK_HTHREAD_STRING_INT_ARGS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_ARGS) -#define DUK_HEAP_STRING_INT_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THIS) -#define DUK_HTHREAD_STRING_INT_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THIS) -#define DUK_HEAP_STRING_INT_PC2LINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_PC2LINE) -#define DUK_HTHREAD_STRING_INT_PC2LINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_PC2LINE) -#define DUK_HEAP_STRING_INT_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_SOURCE) -#define DUK_HTHREAD_STRING_INT_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_SOURCE) -#define DUK_HEAP_STRING_INT_VARENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARENV) -#define DUK_HTHREAD_STRING_INT_VARENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARENV) -#define DUK_HEAP_STRING_INT_LEXENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_LEXENV) -#define DUK_HTHREAD_STRING_INT_LEXENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_LEXENV) -#define DUK_HEAP_STRING_INT_VARMAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARMAP) -#define DUK_HTHREAD_STRING_INT_VARMAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARMAP) -#define DUK_HEAP_STRING_INT_FORMALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FORMALS) -#define DUK_HTHREAD_STRING_INT_FORMALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FORMALS) -#define DUK_HEAP_STRING_INT_BYTECODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_BYTECODE) -#define DUK_HTHREAD_STRING_INT_BYTECODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_BYTECODE) -#define DUK_HEAP_STRING_INT_NEXT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_NEXT) -#define DUK_HTHREAD_STRING_INT_NEXT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_NEXT) -#define DUK_HEAP_STRING_INT_TARGET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TARGET) -#define DUK_HTHREAD_STRING_INT_TARGET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TARGET) -#define DUK_HEAP_STRING_INT_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VALUE) -#define DUK_HTHREAD_STRING_INT_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VALUE) -#define DUK_HEAP_STRING_LC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_POINTER) -#define DUK_HTHREAD_STRING_LC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_POINTER) -#define DUK_HEAP_STRING_INT_TRACEDATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TRACEDATA) -#define DUK_HTHREAD_STRING_INT_TRACEDATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TRACEDATA) -#define DUK_HEAP_STRING_LINE_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LINE_NUMBER) -#define DUK_HTHREAD_STRING_LINE_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LINE_NUMBER) -#define DUK_HEAP_STRING_FILE_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILE_NAME) -#define DUK_HTHREAD_STRING_FILE_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILE_NAME) -#define DUK_HEAP_STRING_PC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PC) -#define DUK_HTHREAD_STRING_PC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PC) -#define DUK_HEAP_STRING_STACK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STACK) -#define DUK_HTHREAD_STRING_STACK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STACK) -#define DUK_HEAP_STRING_THROW_TYPE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THROW_TYPE_ERROR) -#define DUK_HTHREAD_STRING_THROW_TYPE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THROW_TYPE_ERROR) -#define DUK_HEAP_STRING_DUKTAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DUKTAPE) -#define DUK_HTHREAD_STRING_DUKTAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DUKTAPE) -#define DUK_HEAP_STRING_SET_FLOAT64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FLOAT64) -#define DUK_HTHREAD_STRING_SET_FLOAT64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FLOAT64) -#define DUK_HEAP_STRING_SET_FLOAT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FLOAT32) -#define DUK_HTHREAD_STRING_SET_FLOAT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FLOAT32) -#define DUK_HEAP_STRING_SET_UINT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT32) -#define DUK_HTHREAD_STRING_SET_UINT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT32) -#define DUK_HEAP_STRING_SET_INT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT32) -#define DUK_HTHREAD_STRING_SET_INT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT32) -#define DUK_HEAP_STRING_SET_UINT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT16) -#define DUK_HTHREAD_STRING_SET_UINT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT16) -#define DUK_HEAP_STRING_SET_INT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT16) -#define DUK_HTHREAD_STRING_SET_INT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT16) -#define DUK_HEAP_STRING_SET_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT8) -#define DUK_HTHREAD_STRING_SET_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT8) -#define DUK_HEAP_STRING_SET_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT8) -#define DUK_HTHREAD_STRING_SET_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT8) -#define DUK_HEAP_STRING_GET_FLOAT64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FLOAT64) -#define DUK_HTHREAD_STRING_GET_FLOAT64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FLOAT64) -#define DUK_HEAP_STRING_GET_FLOAT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FLOAT32) -#define DUK_HTHREAD_STRING_GET_FLOAT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FLOAT32) -#define DUK_HEAP_STRING_GET_UINT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT32) -#define DUK_HTHREAD_STRING_GET_UINT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT32) -#define DUK_HEAP_STRING_GET_INT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT32) -#define DUK_HTHREAD_STRING_GET_INT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT32) -#define DUK_HEAP_STRING_GET_UINT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT16) -#define DUK_HTHREAD_STRING_GET_UINT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT16) -#define DUK_HEAP_STRING_GET_INT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT16) -#define DUK_HTHREAD_STRING_GET_INT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT16) -#define DUK_HEAP_STRING_GET_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT8) -#define DUK_HTHREAD_STRING_GET_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT8) -#define DUK_HEAP_STRING_GET_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT8) -#define DUK_HTHREAD_STRING_GET_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT8) -#define DUK_HEAP_STRING_SUBARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBARRAY) -#define DUK_HTHREAD_STRING_SUBARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBARRAY) -#define DUK_HEAP_STRING_BYTES_PER_ELEMENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTES_PER_ELEMENT) -#define DUK_HTHREAD_STRING_BYTES_PER_ELEMENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTES_PER_ELEMENT) -#define DUK_HEAP_STRING_BYTE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_OFFSET) -#define DUK_HTHREAD_STRING_BYTE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_OFFSET) -#define DUK_HEAP_STRING_LC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BUFFER) -#define DUK_HTHREAD_STRING_LC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BUFFER) -#define DUK_HEAP_STRING_IS_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_VIEW) -#define DUK_HTHREAD_STRING_IS_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_VIEW) -#define DUK_HEAP_STRING_DATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA) -#define DUK_HTHREAD_STRING_DATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA) -#define DUK_HEAP_STRING_TYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE) -#define DUK_HTHREAD_STRING_TYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE) -#define DUK_HEAP_STRING_WRITE_INT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT_BE) -#define DUK_HTHREAD_STRING_WRITE_INT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT_BE) -#define DUK_HEAP_STRING_WRITE_INT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT_LE) -#define DUK_HTHREAD_STRING_WRITE_INT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT_LE) -#define DUK_HEAP_STRING_WRITE_UINT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT_BE) -#define DUK_HEAP_STRING_WRITE_UINT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT_LE) -#define DUK_HEAP_STRING_WRITE_DOUBLE_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_DOUBLE_BE) -#define DUK_HTHREAD_STRING_WRITE_DOUBLE_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_DOUBLE_BE) -#define DUK_HEAP_STRING_WRITE_DOUBLE_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_DOUBLE_LE) -#define DUK_HTHREAD_STRING_WRITE_DOUBLE_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_DOUBLE_LE) -#define DUK_HEAP_STRING_WRITE_FLOAT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_FLOAT_BE) -#define DUK_HTHREAD_STRING_WRITE_FLOAT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_FLOAT_BE) -#define DUK_HEAP_STRING_WRITE_FLOAT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_FLOAT_LE) -#define DUK_HTHREAD_STRING_WRITE_FLOAT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_FLOAT_LE) -#define DUK_HEAP_STRING_WRITE_INT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT32_BE) -#define DUK_HTHREAD_STRING_WRITE_INT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT32_BE) -#define DUK_HEAP_STRING_WRITE_INT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT32_LE) -#define DUK_HTHREAD_STRING_WRITE_INT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT32_LE) -#define DUK_HEAP_STRING_WRITE_UINT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT32_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT32_BE) -#define DUK_HEAP_STRING_WRITE_UINT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT32_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT32_LE) -#define DUK_HEAP_STRING_WRITE_INT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT16_BE) -#define DUK_HTHREAD_STRING_WRITE_INT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT16_BE) -#define DUK_HEAP_STRING_WRITE_INT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT16_LE) -#define DUK_HTHREAD_STRING_WRITE_INT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT16_LE) -#define DUK_HEAP_STRING_WRITE_UINT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT16_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT16_BE) -#define DUK_HEAP_STRING_WRITE_UINT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT16_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT16_LE) -#define DUK_HEAP_STRING_WRITE_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT8) -#define DUK_HTHREAD_STRING_WRITE_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT8) -#define DUK_HEAP_STRING_WRITE_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT8) -#define DUK_HTHREAD_STRING_WRITE_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT8) -#define DUK_HEAP_STRING_READ_INT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT_BE) -#define DUK_HTHREAD_STRING_READ_INT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT_BE) -#define DUK_HEAP_STRING_READ_INT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT_LE) -#define DUK_HTHREAD_STRING_READ_INT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT_LE) -#define DUK_HEAP_STRING_READ_UINT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT_BE) -#define DUK_HTHREAD_STRING_READ_UINT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT_BE) -#define DUK_HEAP_STRING_READ_UINT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT_LE) -#define DUK_HTHREAD_STRING_READ_UINT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT_LE) -#define DUK_HEAP_STRING_READ_DOUBLE_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_DOUBLE_BE) -#define DUK_HTHREAD_STRING_READ_DOUBLE_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_DOUBLE_BE) -#define DUK_HEAP_STRING_READ_DOUBLE_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_DOUBLE_LE) -#define DUK_HTHREAD_STRING_READ_DOUBLE_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_DOUBLE_LE) -#define DUK_HEAP_STRING_READ_FLOAT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_FLOAT_BE) -#define DUK_HTHREAD_STRING_READ_FLOAT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_FLOAT_BE) -#define DUK_HEAP_STRING_READ_FLOAT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_FLOAT_LE) -#define DUK_HTHREAD_STRING_READ_FLOAT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_FLOAT_LE) -#define DUK_HEAP_STRING_READ_INT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT32_BE) -#define DUK_HTHREAD_STRING_READ_INT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT32_BE) -#define DUK_HEAP_STRING_READ_INT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT32_LE) -#define DUK_HTHREAD_STRING_READ_INT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT32_LE) -#define DUK_HEAP_STRING_READ_UINT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT32_BE) -#define DUK_HTHREAD_STRING_READ_UINT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT32_BE) -#define DUK_HEAP_STRING_READ_UINT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT32_LE) -#define DUK_HTHREAD_STRING_READ_UINT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT32_LE) -#define DUK_HEAP_STRING_READ_INT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT16_BE) -#define DUK_HTHREAD_STRING_READ_INT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT16_BE) -#define DUK_HEAP_STRING_READ_INT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT16_LE) -#define DUK_HTHREAD_STRING_READ_INT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT16_LE) -#define DUK_HEAP_STRING_READ_UINT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT16_BE) -#define DUK_HTHREAD_STRING_READ_UINT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT16_BE) -#define DUK_HEAP_STRING_READ_UINT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT16_LE) -#define DUK_HTHREAD_STRING_READ_UINT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT16_LE) -#define DUK_HEAP_STRING_READ_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT8) -#define DUK_HTHREAD_STRING_READ_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT8) -#define DUK_HEAP_STRING_READ_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT8) -#define DUK_HTHREAD_STRING_READ_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT8) -#define DUK_HEAP_STRING_COPY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COPY) -#define DUK_HTHREAD_STRING_COPY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COPY) -#define DUK_HEAP_STRING_EQUALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EQUALS) -#define DUK_HTHREAD_STRING_EQUALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EQUALS) -#define DUK_HEAP_STRING_FILL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILL) -#define DUK_HTHREAD_STRING_FILL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILL) -#define DUK_HEAP_STRING_WRITE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE) -#define DUK_HTHREAD_STRING_WRITE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE) -#define DUK_HEAP_STRING_COMPARE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPARE) -#define DUK_HTHREAD_STRING_COMPARE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPARE) -#define DUK_HEAP_STRING_BYTE_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_LENGTH) -#define DUK_HTHREAD_STRING_BYTE_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_LENGTH) -#define DUK_HEAP_STRING_IS_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_BUFFER) -#define DUK_HTHREAD_STRING_IS_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_BUFFER) -#define DUK_HEAP_STRING_IS_ENCODING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_ENCODING) -#define DUK_HTHREAD_STRING_IS_ENCODING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_ENCODING) -#define DUK_HEAP_STRING_EXPORTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORTS) -#define DUK_HTHREAD_STRING_EXPORTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORTS) -#define DUK_HEAP_STRING_ID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ID) -#define DUK_HTHREAD_STRING_ID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ID) -#define DUK_HEAP_STRING_REQUIRE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REQUIRE) -#define DUK_HTHREAD_STRING_REQUIRE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REQUIRE) -#define DUK_HEAP_STRING___PROTO__(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX___PROTO__) -#define DUK_HTHREAD_STRING___PROTO__(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX___PROTO__) -#define DUK_HEAP_STRING_SET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_SET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_PROTOTYPE_OF) -#define DUK_HEAP_STRING_OWN_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OWN_KEYS) -#define DUK_HTHREAD_STRING_OWN_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OWN_KEYS) -#define DUK_HEAP_STRING_ENUMERATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERATE) -#define DUK_HTHREAD_STRING_ENUMERATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERATE) -#define DUK_HEAP_STRING_DELETE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE_PROPERTY) -#define DUK_HTHREAD_STRING_DELETE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE_PROPERTY) -#define DUK_HEAP_STRING_HAS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS) -#define DUK_HTHREAD_STRING_HAS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS) -#define DUK_HEAP_STRING_PROXY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROXY) -#define DUK_HTHREAD_STRING_PROXY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROXY) -#define DUK_HEAP_STRING_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLEE) -#define DUK_HTHREAD_STRING_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLEE) -#define DUK_HEAP_STRING_INVALID_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INVALID_DATE) -#define DUK_HTHREAD_STRING_INVALID_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INVALID_DATE) -#define DUK_HEAP_STRING_BRACKETED_ELLIPSIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BRACKETED_ELLIPSIS) -#define DUK_HTHREAD_STRING_BRACKETED_ELLIPSIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BRACKETED_ELLIPSIS) -#define DUK_HEAP_STRING_NEWLINE_TAB(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEWLINE_TAB) -#define DUK_HTHREAD_STRING_NEWLINE_TAB(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEWLINE_TAB) -#define DUK_HEAP_STRING_SPACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPACE) -#define DUK_HTHREAD_STRING_SPACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPACE) -#define DUK_HEAP_STRING_COMMA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMMA) -#define DUK_HTHREAD_STRING_COMMA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMMA) -#define DUK_HEAP_STRING_MINUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_ZERO) -#define DUK_HTHREAD_STRING_MINUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_ZERO) -#define DUK_HEAP_STRING_PLUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PLUS_ZERO) -#define DUK_HTHREAD_STRING_PLUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PLUS_ZERO) -#define DUK_HEAP_STRING_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ZERO) -#define DUK_HTHREAD_STRING_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ZERO) -#define DUK_HEAP_STRING_MINUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_INFINITY) -#define DUK_HTHREAD_STRING_MINUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_INFINITY) -#define DUK_HEAP_STRING_PLUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PLUS_INFINITY) -#define DUK_HTHREAD_STRING_PLUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PLUS_INFINITY) -#define DUK_HEAP_STRING_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INFINITY) -#define DUK_HTHREAD_STRING_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INFINITY) -#define DUK_HEAP_STRING_LC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_OBJECT) -#define DUK_HTHREAD_STRING_LC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_OBJECT) -#define DUK_HEAP_STRING_LC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_STRING) -#define DUK_HTHREAD_STRING_LC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_STRING) -#define DUK_HEAP_STRING_LC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NUMBER) -#define DUK_HTHREAD_STRING_LC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NUMBER) -#define DUK_HEAP_STRING_LC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BOOLEAN) -#define DUK_HTHREAD_STRING_LC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BOOLEAN) -#define DUK_HEAP_STRING_LC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_UNDEFINED) -#define DUK_HTHREAD_STRING_LC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_UNDEFINED) -#define DUK_HEAP_STRING_STRINGIFY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STRINGIFY) -#define DUK_HTHREAD_STRING_STRINGIFY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STRINGIFY) -#define DUK_HEAP_STRING_TAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TAN) -#define DUK_HTHREAD_STRING_TAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TAN) -#define DUK_HEAP_STRING_SQRT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT) -#define DUK_HTHREAD_STRING_SQRT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT) -#define DUK_HEAP_STRING_SIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SIN) -#define DUK_HTHREAD_STRING_SIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SIN) -#define DUK_HEAP_STRING_ROUND(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ROUND) -#define DUK_HTHREAD_STRING_ROUND(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ROUND) -#define DUK_HEAP_STRING_RANDOM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RANDOM) -#define DUK_HTHREAD_STRING_RANDOM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RANDOM) -#define DUK_HEAP_STRING_POW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POW) -#define DUK_HTHREAD_STRING_POW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POW) -#define DUK_HEAP_STRING_MIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MIN) -#define DUK_HTHREAD_STRING_MIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MIN) -#define DUK_HEAP_STRING_MAX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAX) -#define DUK_HTHREAD_STRING_MAX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAX) -#define DUK_HEAP_STRING_LOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG) -#define DUK_HTHREAD_STRING_LOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG) -#define DUK_HEAP_STRING_FLOOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOOR) -#define DUK_HTHREAD_STRING_FLOOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOOR) -#define DUK_HEAP_STRING_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXP) -#define DUK_HTHREAD_STRING_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXP) -#define DUK_HEAP_STRING_COS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COS) -#define DUK_HTHREAD_STRING_COS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COS) -#define DUK_HEAP_STRING_CEIL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CEIL) -#define DUK_HTHREAD_STRING_CEIL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CEIL) -#define DUK_HEAP_STRING_ATAN2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ATAN2) -#define DUK_HTHREAD_STRING_ATAN2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ATAN2) -#define DUK_HEAP_STRING_ATAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ATAN) -#define DUK_HTHREAD_STRING_ATAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ATAN) -#define DUK_HEAP_STRING_ASIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ASIN) -#define DUK_HTHREAD_STRING_ASIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ASIN) -#define DUK_HEAP_STRING_ACOS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ACOS) -#define DUK_HTHREAD_STRING_ACOS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ACOS) -#define DUK_HEAP_STRING_ABS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ABS) -#define DUK_HTHREAD_STRING_ABS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ABS) -#define DUK_HEAP_STRING_SQRT2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT2) -#define DUK_HTHREAD_STRING_SQRT2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT2) -#define DUK_HEAP_STRING_SQRT1_2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT1_2) -#define DUK_HTHREAD_STRING_SQRT1_2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT1_2) -#define DUK_HEAP_STRING_PI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PI) -#define DUK_HTHREAD_STRING_PI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PI) -#define DUK_HEAP_STRING_LOG10E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG10E) -#define DUK_HTHREAD_STRING_LOG10E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG10E) -#define DUK_HEAP_STRING_LOG2E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG2E) -#define DUK_HTHREAD_STRING_LOG2E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG2E) -#define DUK_HEAP_STRING_LN2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LN2) -#define DUK_HTHREAD_STRING_LN2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LN2) -#define DUK_HEAP_STRING_LN10(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LN10) -#define DUK_HTHREAD_STRING_LN10(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LN10) -#define DUK_HEAP_STRING_E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_E) -#define DUK_HTHREAD_STRING_E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_E) -#define DUK_HEAP_STRING_MESSAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MESSAGE) -#define DUK_HTHREAD_STRING_MESSAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MESSAGE) -#define DUK_HEAP_STRING_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAME) -#define DUK_HTHREAD_STRING_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAME) -#define DUK_HEAP_STRING_INPUT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INPUT) -#define DUK_HTHREAD_STRING_INPUT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INPUT) -#define DUK_HEAP_STRING_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX) -#define DUK_HTHREAD_STRING_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX) -#define DUK_HEAP_STRING_ESCAPED_EMPTY_REGEXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) -#define DUK_HTHREAD_STRING_ESCAPED_EMPTY_REGEXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) -#define DUK_HEAP_STRING_LAST_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX) -#define DUK_HTHREAD_STRING_LAST_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX) -#define DUK_HEAP_STRING_MULTILINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MULTILINE) -#define DUK_HTHREAD_STRING_MULTILINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MULTILINE) -#define DUK_HEAP_STRING_IGNORE_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IGNORE_CASE) -#define DUK_HTHREAD_STRING_IGNORE_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IGNORE_CASE) -#define DUK_HEAP_STRING_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOURCE) -#define DUK_HTHREAD_STRING_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOURCE) -#define DUK_HEAP_STRING_TEST(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TEST) -#define DUK_HTHREAD_STRING_TEST(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TEST) -#define DUK_HEAP_STRING_EXEC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXEC) -#define DUK_HTHREAD_STRING_EXEC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXEC) -#define DUK_HEAP_STRING_TO_GMT_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_GMT_STRING) -#define DUK_HTHREAD_STRING_TO_GMT_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_GMT_STRING) -#define DUK_HEAP_STRING_SET_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_YEAR) -#define DUK_HTHREAD_STRING_SET_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_YEAR) -#define DUK_HEAP_STRING_GET_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_YEAR) -#define DUK_HTHREAD_STRING_GET_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_YEAR) -#define DUK_HEAP_STRING_TO_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_JSON) -#define DUK_HTHREAD_STRING_TO_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_JSON) -#define DUK_HEAP_STRING_TO_ISO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_ISO_STRING) -#define DUK_HTHREAD_STRING_TO_ISO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_ISO_STRING) -#define DUK_HEAP_STRING_TO_UTC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UTC_STRING) -#define DUK_HTHREAD_STRING_TO_UTC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UTC_STRING) -#define DUK_HEAP_STRING_SET_UTC_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_FULL_YEAR) -#define DUK_HTHREAD_STRING_SET_UTC_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_FULL_YEAR) -#define DUK_HEAP_STRING_SET_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FULL_YEAR) -#define DUK_HTHREAD_STRING_SET_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FULL_YEAR) -#define DUK_HEAP_STRING_SET_UTC_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MONTH) -#define DUK_HTHREAD_STRING_SET_UTC_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MONTH) -#define DUK_HEAP_STRING_SET_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MONTH) -#define DUK_HTHREAD_STRING_SET_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MONTH) -#define DUK_HEAP_STRING_SET_UTC_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_DATE) -#define DUK_HTHREAD_STRING_SET_UTC_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_DATE) -#define DUK_HEAP_STRING_SET_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_DATE) -#define DUK_HTHREAD_STRING_SET_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_DATE) -#define DUK_HEAP_STRING_SET_UTC_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_HOURS) -#define DUK_HTHREAD_STRING_SET_UTC_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_HOURS) -#define DUK_HEAP_STRING_SET_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_HOURS) -#define DUK_HTHREAD_STRING_SET_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_HOURS) -#define DUK_HEAP_STRING_SET_UTC_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MINUTES) -#define DUK_HTHREAD_STRING_SET_UTC_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MINUTES) -#define DUK_HEAP_STRING_SET_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MINUTES) -#define DUK_HTHREAD_STRING_SET_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MINUTES) -#define DUK_HEAP_STRING_SET_UTC_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_SECONDS) -#define DUK_HTHREAD_STRING_SET_UTC_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_SECONDS) -#define DUK_HEAP_STRING_SET_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_SECONDS) -#define DUK_HTHREAD_STRING_SET_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_SECONDS) -#define DUK_HEAP_STRING_SET_UTC_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MILLISECONDS) -#define DUK_HTHREAD_STRING_SET_UTC_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MILLISECONDS) -#define DUK_HEAP_STRING_SET_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MILLISECONDS) -#define DUK_HTHREAD_STRING_SET_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MILLISECONDS) -#define DUK_HEAP_STRING_SET_TIME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_TIME) -#define DUK_HTHREAD_STRING_SET_TIME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_TIME) -#define DUK_HEAP_STRING_GET_TIMEZONE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_TIMEZONE_OFFSET) -#define DUK_HTHREAD_STRING_GET_TIMEZONE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_TIMEZONE_OFFSET) -#define DUK_HEAP_STRING_GET_UTC_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MILLISECONDS) -#define DUK_HTHREAD_STRING_GET_UTC_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MILLISECONDS) -#define DUK_HEAP_STRING_GET_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MILLISECONDS) -#define DUK_HTHREAD_STRING_GET_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MILLISECONDS) -#define DUK_HEAP_STRING_GET_UTC_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_SECONDS) -#define DUK_HTHREAD_STRING_GET_UTC_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_SECONDS) -#define DUK_HEAP_STRING_GET_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_SECONDS) -#define DUK_HTHREAD_STRING_GET_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_SECONDS) -#define DUK_HEAP_STRING_GET_UTC_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MINUTES) -#define DUK_HTHREAD_STRING_GET_UTC_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MINUTES) -#define DUK_HEAP_STRING_GET_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MINUTES) -#define DUK_HTHREAD_STRING_GET_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MINUTES) -#define DUK_HEAP_STRING_GET_UTC_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_HOURS) -#define DUK_HTHREAD_STRING_GET_UTC_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_HOURS) -#define DUK_HEAP_STRING_GET_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_HOURS) -#define DUK_HTHREAD_STRING_GET_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_HOURS) -#define DUK_HEAP_STRING_GET_UTC_DAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_DAY) -#define DUK_HTHREAD_STRING_GET_UTC_DAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_DAY) -#define DUK_HEAP_STRING_GET_DAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_DAY) -#define DUK_HTHREAD_STRING_GET_DAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_DAY) -#define DUK_HEAP_STRING_GET_UTC_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_DATE) -#define DUK_HTHREAD_STRING_GET_UTC_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_DATE) -#define DUK_HEAP_STRING_GET_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_DATE) -#define DUK_HTHREAD_STRING_GET_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_DATE) -#define DUK_HEAP_STRING_GET_UTC_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MONTH) -#define DUK_HTHREAD_STRING_GET_UTC_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MONTH) -#define DUK_HEAP_STRING_GET_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MONTH) -#define DUK_HTHREAD_STRING_GET_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MONTH) -#define DUK_HEAP_STRING_GET_UTC_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_FULL_YEAR) -#define DUK_HTHREAD_STRING_GET_UTC_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_FULL_YEAR) -#define DUK_HEAP_STRING_GET_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FULL_YEAR) -#define DUK_HTHREAD_STRING_GET_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FULL_YEAR) -#define DUK_HEAP_STRING_GET_TIME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_TIME) -#define DUK_HTHREAD_STRING_GET_TIME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_TIME) -#define DUK_HEAP_STRING_TO_LOCALE_TIME_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_TIME_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_TIME_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_TIME_STRING) -#define DUK_HEAP_STRING_TO_LOCALE_DATE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_DATE_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_DATE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_DATE_STRING) -#define DUK_HEAP_STRING_TO_TIME_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_TIME_STRING) -#define DUK_HTHREAD_STRING_TO_TIME_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_TIME_STRING) -#define DUK_HEAP_STRING_TO_DATE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_DATE_STRING) -#define DUK_HTHREAD_STRING_TO_DATE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_DATE_STRING) -#define DUK_HEAP_STRING_NOW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NOW) -#define DUK_HTHREAD_STRING_NOW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NOW) -#define DUK_HEAP_STRING_UTC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UTC) -#define DUK_HTHREAD_STRING_UTC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UTC) -#define DUK_HEAP_STRING_PARSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE) -#define DUK_HTHREAD_STRING_PARSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE) -#define DUK_HEAP_STRING_TO_PRECISION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_PRECISION) -#define DUK_HTHREAD_STRING_TO_PRECISION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_PRECISION) -#define DUK_HEAP_STRING_TO_EXPONENTIAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_EXPONENTIAL) -#define DUK_HTHREAD_STRING_TO_EXPONENTIAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_EXPONENTIAL) -#define DUK_HEAP_STRING_TO_FIXED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_FIXED) -#define DUK_HTHREAD_STRING_TO_FIXED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_FIXED) -#define DUK_HEAP_STRING_POSITIVE_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POSITIVE_INFINITY) -#define DUK_HTHREAD_STRING_POSITIVE_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POSITIVE_INFINITY) -#define DUK_HEAP_STRING_NEGATIVE_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEGATIVE_INFINITY) -#define DUK_HTHREAD_STRING_NEGATIVE_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEGATIVE_INFINITY) -#define DUK_HEAP_STRING_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAN) -#define DUK_HTHREAD_STRING_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAN) -#define DUK_HEAP_STRING_MIN_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MIN_VALUE) -#define DUK_HTHREAD_STRING_MIN_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MIN_VALUE) -#define DUK_HEAP_STRING_MAX_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAX_VALUE) -#define DUK_HTHREAD_STRING_MAX_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAX_VALUE) -#define DUK_HEAP_STRING_SUBSTR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBSTR) -#define DUK_HTHREAD_STRING_SUBSTR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBSTR) -#define DUK_HEAP_STRING_TRIM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRIM) -#define DUK_HTHREAD_STRING_TRIM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRIM) -#define DUK_HEAP_STRING_TO_LOCALE_UPPER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_UPPER_CASE) -#define DUK_HTHREAD_STRING_TO_LOCALE_UPPER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_UPPER_CASE) -#define DUK_HEAP_STRING_TO_UPPER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UPPER_CASE) -#define DUK_HTHREAD_STRING_TO_UPPER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UPPER_CASE) -#define DUK_HEAP_STRING_TO_LOCALE_LOWER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_LOWER_CASE) -#define DUK_HTHREAD_STRING_TO_LOCALE_LOWER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_LOWER_CASE) -#define DUK_HEAP_STRING_TO_LOWER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOWER_CASE) -#define DUK_HTHREAD_STRING_TO_LOWER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOWER_CASE) -#define DUK_HEAP_STRING_SUBSTRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBSTRING) -#define DUK_HTHREAD_STRING_SUBSTRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBSTRING) -#define DUK_HEAP_STRING_SPLIT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPLIT) -#define DUK_HTHREAD_STRING_SPLIT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPLIT) -#define DUK_HEAP_STRING_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SEARCH) -#define DUK_HTHREAD_STRING_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SEARCH) -#define DUK_HEAP_STRING_REPLACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REPLACE) -#define DUK_HTHREAD_STRING_REPLACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REPLACE) -#define DUK_HEAP_STRING_MATCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATCH) -#define DUK_HTHREAD_STRING_MATCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATCH) -#define DUK_HEAP_STRING_LOCALE_COMPARE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOCALE_COMPARE) -#define DUK_HTHREAD_STRING_LOCALE_COMPARE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOCALE_COMPARE) -#define DUK_HEAP_STRING_CHAR_CODE_AT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CHAR_CODE_AT) -#define DUK_HTHREAD_STRING_CHAR_CODE_AT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CHAR_CODE_AT) -#define DUK_HEAP_STRING_CHAR_AT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CHAR_AT) -#define DUK_HTHREAD_STRING_CHAR_AT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CHAR_AT) -#define DUK_HEAP_STRING_FROM_CHAR_CODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FROM_CHAR_CODE) -#define DUK_HTHREAD_STRING_FROM_CHAR_CODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FROM_CHAR_CODE) -#define DUK_HEAP_STRING_REDUCE_RIGHT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REDUCE_RIGHT) -#define DUK_HTHREAD_STRING_REDUCE_RIGHT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REDUCE_RIGHT) -#define DUK_HEAP_STRING_REDUCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REDUCE) -#define DUK_HTHREAD_STRING_REDUCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REDUCE) -#define DUK_HEAP_STRING_FILTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILTER) -#define DUK_HTHREAD_STRING_FILTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILTER) -#define DUK_HEAP_STRING_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAP) -#define DUK_HTHREAD_STRING_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAP) -#define DUK_HEAP_STRING_FOR_EACH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FOR_EACH) -#define DUK_HTHREAD_STRING_FOR_EACH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FOR_EACH) -#define DUK_HEAP_STRING_SOME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOME) -#define DUK_HTHREAD_STRING_SOME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOME) -#define DUK_HEAP_STRING_EVERY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVERY) -#define DUK_HTHREAD_STRING_EVERY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVERY) -#define DUK_HEAP_STRING_LAST_INDEX_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX_OF) -#define DUK_HTHREAD_STRING_LAST_INDEX_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX_OF) -#define DUK_HEAP_STRING_INDEX_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX_OF) -#define DUK_HTHREAD_STRING_INDEX_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX_OF) -#define DUK_HEAP_STRING_UNSHIFT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UNSHIFT) -#define DUK_HTHREAD_STRING_UNSHIFT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UNSHIFT) -#define DUK_HEAP_STRING_SPLICE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPLICE) -#define DUK_HTHREAD_STRING_SPLICE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPLICE) -#define DUK_HEAP_STRING_SORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SORT) -#define DUK_HTHREAD_STRING_SORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SORT) -#define DUK_HEAP_STRING_SLICE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SLICE) -#define DUK_HTHREAD_STRING_SLICE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SLICE) -#define DUK_HEAP_STRING_SHIFT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SHIFT) -#define DUK_HTHREAD_STRING_SHIFT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SHIFT) -#define DUK_HEAP_STRING_REVERSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REVERSE) -#define DUK_HTHREAD_STRING_REVERSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REVERSE) -#define DUK_HEAP_STRING_PUSH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PUSH) -#define DUK_HTHREAD_STRING_PUSH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PUSH) -#define DUK_HEAP_STRING_POP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POP) -#define DUK_HTHREAD_STRING_POP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POP) -#define DUK_HEAP_STRING_JOIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JOIN) -#define DUK_HTHREAD_STRING_JOIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JOIN) -#define DUK_HEAP_STRING_CONCAT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONCAT) -#define DUK_HTHREAD_STRING_CONCAT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONCAT) -#define DUK_HEAP_STRING_IS_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_ARRAY) -#define DUK_HTHREAD_STRING_IS_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_ARRAY) -#define DUK_HEAP_STRING_LC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ARGUMENTS) -#define DUK_HTHREAD_STRING_LC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ARGUMENTS) -#define DUK_HEAP_STRING_CALLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLER) -#define DUK_HTHREAD_STRING_CALLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLER) -#define DUK_HEAP_STRING_BIND(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BIND) -#define DUK_HTHREAD_STRING_BIND(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BIND) -#define DUK_HEAP_STRING_CALL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALL) -#define DUK_HTHREAD_STRING_CALL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALL) -#define DUK_HEAP_STRING_APPLY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_APPLY) -#define DUK_HTHREAD_STRING_APPLY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_APPLY) -#define DUK_HEAP_STRING_PROPERTY_IS_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROPERTY_IS_ENUMERABLE) -#define DUK_HTHREAD_STRING_PROPERTY_IS_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROPERTY_IS_ENUMERABLE) -#define DUK_HEAP_STRING_IS_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_IS_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_PROTOTYPE_OF) -#define DUK_HEAP_STRING_HAS_OWN_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS_OWN_PROPERTY) -#define DUK_HTHREAD_STRING_HAS_OWN_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS_OWN_PROPERTY) -#define DUK_HEAP_STRING_VALUE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE_OF) -#define DUK_HTHREAD_STRING_VALUE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE_OF) -#define DUK_HEAP_STRING_TO_LOCALE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_STRING) -#define DUK_HEAP_STRING_TO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_STRING) -#define DUK_HTHREAD_STRING_TO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_STRING) -#define DUK_HEAP_STRING_CONSTRUCTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONSTRUCTOR) -#define DUK_HTHREAD_STRING_CONSTRUCTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONSTRUCTOR) -#define DUK_HEAP_STRING_SET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET) -#define DUK_HTHREAD_STRING_SET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET) -#define DUK_HEAP_STRING_GET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET) -#define DUK_HTHREAD_STRING_GET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET) -#define DUK_HEAP_STRING_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERABLE) -#define DUK_HTHREAD_STRING_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERABLE) -#define DUK_HEAP_STRING_CONFIGURABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONFIGURABLE) -#define DUK_HTHREAD_STRING_CONFIGURABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONFIGURABLE) -#define DUK_HEAP_STRING_WRITABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITABLE) -#define DUK_HTHREAD_STRING_WRITABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITABLE) -#define DUK_HEAP_STRING_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE) -#define DUK_HTHREAD_STRING_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE) -#define DUK_HEAP_STRING_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_KEYS) -#define DUK_HTHREAD_STRING_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_KEYS) -#define DUK_HEAP_STRING_IS_EXTENSIBLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_EXTENSIBLE) -#define DUK_HTHREAD_STRING_IS_EXTENSIBLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_EXTENSIBLE) -#define DUK_HEAP_STRING_IS_FROZEN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_FROZEN) -#define DUK_HTHREAD_STRING_IS_FROZEN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_FROZEN) -#define DUK_HEAP_STRING_IS_SEALED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_SEALED) -#define DUK_HTHREAD_STRING_IS_SEALED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_SEALED) -#define DUK_HEAP_STRING_PREVENT_EXTENSIONS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PREVENT_EXTENSIONS) -#define DUK_HTHREAD_STRING_PREVENT_EXTENSIONS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PREVENT_EXTENSIONS) -#define DUK_HEAP_STRING_FREEZE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FREEZE) -#define DUK_HTHREAD_STRING_FREEZE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FREEZE) -#define DUK_HEAP_STRING_SEAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SEAL) -#define DUK_HTHREAD_STRING_SEAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SEAL) -#define DUK_HEAP_STRING_DEFINE_PROPERTIES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTIES) -#define DUK_HTHREAD_STRING_DEFINE_PROPERTIES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTIES) -#define DUK_HEAP_STRING_DEFINE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTY) -#define DUK_HTHREAD_STRING_DEFINE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTY) -#define DUK_HEAP_STRING_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CREATE) -#define DUK_HTHREAD_STRING_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CREATE) -#define DUK_HEAP_STRING_GET_OWN_PROPERTY_NAMES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_OWN_PROPERTY_NAMES) -#define DUK_HTHREAD_STRING_GET_OWN_PROPERTY_NAMES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_OWN_PROPERTY_NAMES) -#define DUK_HEAP_STRING_GET_OWN_PROPERTY_DESCRIPTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR) -#define DUK_HTHREAD_STRING_GET_OWN_PROPERTY_DESCRIPTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR) -#define DUK_HEAP_STRING_GET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_GET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_PROTOTYPE_OF) -#define DUK_HEAP_STRING_PROTOTYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTOTYPE) -#define DUK_HTHREAD_STRING_PROTOTYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTOTYPE) -#define DUK_HEAP_STRING_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LENGTH) -#define DUK_HTHREAD_STRING_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LENGTH) -#define DUK_HEAP_STRING_ALERT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ALERT) -#define DUK_HTHREAD_STRING_ALERT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ALERT) -#define DUK_HEAP_STRING_PRINT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PRINT) -#define DUK_HTHREAD_STRING_PRINT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PRINT) -#define DUK_HEAP_STRING_UNESCAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UNESCAPE) -#define DUK_HTHREAD_STRING_UNESCAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UNESCAPE) -#define DUK_HEAP_STRING_ESCAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPE) -#define DUK_HTHREAD_STRING_ESCAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPE) -#define DUK_HEAP_STRING_ENCODE_URI_COMPONENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENCODE_URI_COMPONENT) -#define DUK_HTHREAD_STRING_ENCODE_URI_COMPONENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENCODE_URI_COMPONENT) -#define DUK_HEAP_STRING_ENCODE_URI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENCODE_URI) -#define DUK_HTHREAD_STRING_ENCODE_URI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENCODE_URI) -#define DUK_HEAP_STRING_DECODE_URI_COMPONENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DECODE_URI_COMPONENT) -#define DUK_HTHREAD_STRING_DECODE_URI_COMPONENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DECODE_URI_COMPONENT) -#define DUK_HEAP_STRING_DECODE_URI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DECODE_URI) -#define DUK_HTHREAD_STRING_DECODE_URI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DECODE_URI) -#define DUK_HEAP_STRING_IS_FINITE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_FINITE) -#define DUK_HTHREAD_STRING_IS_FINITE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_FINITE) -#define DUK_HEAP_STRING_IS_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_NAN) -#define DUK_HTHREAD_STRING_IS_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_NAN) -#define DUK_HEAP_STRING_PARSE_FLOAT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE_FLOAT) -#define DUK_HTHREAD_STRING_PARSE_FLOAT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE_FLOAT) -#define DUK_HEAP_STRING_PARSE_INT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE_INT) -#define DUK_HTHREAD_STRING_PARSE_INT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE_INT) -#define DUK_HEAP_STRING_EVAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL) -#define DUK_HTHREAD_STRING_EVAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL) -#define DUK_HEAP_STRING_URI_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_URI_ERROR) -#define DUK_HTHREAD_STRING_URI_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_URI_ERROR) -#define DUK_HEAP_STRING_TYPE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE_ERROR) -#define DUK_HTHREAD_STRING_TYPE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE_ERROR) -#define DUK_HEAP_STRING_SYNTAX_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SYNTAX_ERROR) -#define DUK_HTHREAD_STRING_SYNTAX_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SYNTAX_ERROR) -#define DUK_HEAP_STRING_REFERENCE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REFERENCE_ERROR) -#define DUK_HTHREAD_STRING_REFERENCE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REFERENCE_ERROR) -#define DUK_HEAP_STRING_RANGE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RANGE_ERROR) -#define DUK_HTHREAD_STRING_RANGE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RANGE_ERROR) -#define DUK_HEAP_STRING_EVAL_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL_ERROR) -#define DUK_HTHREAD_STRING_EVAL_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL_ERROR) -#define DUK_HEAP_STRING_BREAK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BREAK) -#define DUK_HTHREAD_STRING_BREAK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BREAK) -#define DUK_HEAP_STRING_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CASE) -#define DUK_HTHREAD_STRING_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CASE) -#define DUK_HEAP_STRING_CATCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CATCH) -#define DUK_HTHREAD_STRING_CATCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CATCH) -#define DUK_HEAP_STRING_CONTINUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONTINUE) -#define DUK_HTHREAD_STRING_CONTINUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONTINUE) -#define DUK_HEAP_STRING_DEBUGGER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEBUGGER) -#define DUK_HTHREAD_STRING_DEBUGGER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEBUGGER) -#define DUK_HEAP_STRING_DEFAULT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFAULT) -#define DUK_HTHREAD_STRING_DEFAULT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFAULT) -#define DUK_HEAP_STRING_DELETE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE) -#define DUK_HTHREAD_STRING_DELETE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE) -#define DUK_HEAP_STRING_DO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DO) -#define DUK_HTHREAD_STRING_DO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DO) -#define DUK_HEAP_STRING_ELSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ELSE) -#define DUK_HTHREAD_STRING_ELSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ELSE) -#define DUK_HEAP_STRING_FINALLY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FINALLY) -#define DUK_HTHREAD_STRING_FINALLY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FINALLY) -#define DUK_HEAP_STRING_FOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FOR) -#define DUK_HTHREAD_STRING_FOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FOR) -#define DUK_HEAP_STRING_LC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FUNCTION) -#define DUK_HTHREAD_STRING_LC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FUNCTION) -#define DUK_HEAP_STRING_IF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IF) -#define DUK_HTHREAD_STRING_IF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IF) -#define DUK_HEAP_STRING_IN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IN) -#define DUK_HTHREAD_STRING_IN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IN) -#define DUK_HEAP_STRING_INSTANCEOF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INSTANCEOF) -#define DUK_HTHREAD_STRING_INSTANCEOF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INSTANCEOF) -#define DUK_HEAP_STRING_NEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEW) -#define DUK_HTHREAD_STRING_NEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEW) -#define DUK_HEAP_STRING_RETURN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RETURN) -#define DUK_HTHREAD_STRING_RETURN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RETURN) -#define DUK_HEAP_STRING_SWITCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SWITCH) -#define DUK_HTHREAD_STRING_SWITCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SWITCH) -#define DUK_HEAP_STRING_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THIS) -#define DUK_HTHREAD_STRING_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THIS) -#define DUK_HEAP_STRING_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THROW) -#define DUK_HTHREAD_STRING_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THROW) -#define DUK_HEAP_STRING_TRY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRY) -#define DUK_HTHREAD_STRING_TRY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRY) -#define DUK_HEAP_STRING_TYPEOF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPEOF) -#define DUK_HTHREAD_STRING_TYPEOF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPEOF) -#define DUK_HEAP_STRING_VAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VAR) -#define DUK_HTHREAD_STRING_VAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VAR) -#define DUK_HEAP_STRING_CONST(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONST) -#define DUK_HTHREAD_STRING_CONST(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONST) -#define DUK_HEAP_STRING_VOID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VOID) -#define DUK_HTHREAD_STRING_VOID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VOID) -#define DUK_HEAP_STRING_WHILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WHILE) -#define DUK_HTHREAD_STRING_WHILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WHILE) -#define DUK_HEAP_STRING_WITH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WITH) -#define DUK_HTHREAD_STRING_WITH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WITH) -#define DUK_HEAP_STRING_CLASS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLASS) -#define DUK_HTHREAD_STRING_CLASS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLASS) -#define DUK_HEAP_STRING_ENUM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUM) -#define DUK_HTHREAD_STRING_ENUM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUM) -#define DUK_HEAP_STRING_EXPORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORT) -#define DUK_HTHREAD_STRING_EXPORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORT) -#define DUK_HEAP_STRING_EXTENDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXTENDS) -#define DUK_HTHREAD_STRING_EXTENDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXTENDS) -#define DUK_HEAP_STRING_IMPORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IMPORT) -#define DUK_HTHREAD_STRING_IMPORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IMPORT) -#define DUK_HEAP_STRING_SUPER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUPER) -#define DUK_HTHREAD_STRING_SUPER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUPER) -#define DUK_HEAP_STRING_LC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NULL) -#define DUK_HTHREAD_STRING_LC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NULL) -#define DUK_HEAP_STRING_TRUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRUE) -#define DUK_HTHREAD_STRING_TRUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRUE) -#define DUK_HEAP_STRING_FALSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FALSE) -#define DUK_HTHREAD_STRING_FALSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FALSE) -#define DUK_HEAP_STRING_IMPLEMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IMPLEMENTS) -#define DUK_HTHREAD_STRING_IMPLEMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IMPLEMENTS) -#define DUK_HEAP_STRING_INTERFACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INTERFACE) -#define DUK_HTHREAD_STRING_INTERFACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INTERFACE) -#define DUK_HEAP_STRING_LET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LET) -#define DUK_HTHREAD_STRING_LET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LET) -#define DUK_HEAP_STRING_PACKAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PACKAGE) -#define DUK_HTHREAD_STRING_PACKAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PACKAGE) -#define DUK_HEAP_STRING_PRIVATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PRIVATE) -#define DUK_HTHREAD_STRING_PRIVATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PRIVATE) -#define DUK_HEAP_STRING_PROTECTED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTECTED) -#define DUK_HTHREAD_STRING_PROTECTED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTECTED) -#define DUK_HEAP_STRING_PUBLIC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PUBLIC) -#define DUK_HTHREAD_STRING_PUBLIC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PUBLIC) -#define DUK_HEAP_STRING_STATIC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STATIC) -#define DUK_HTHREAD_STRING_STATIC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STATIC) -#define DUK_HEAP_STRING_YIELD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_YIELD) -#define DUK_HTHREAD_STRING_YIELD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_YIELD) +#if defined(DUK_USE_PACKED_TVAL) +/* ======================================================================== */ -#define DUK_HEAP_NUM_STRINGS 414 +/* + * Packed 8-byte representation + */ -#define DUK_STRIDX_START_RESERVED 369 -#define DUK_STRIDX_START_STRICT_RESERVED 405 -#define DUK_STRIDX_END_RESERVED 414 /* exclusive endpoint */ +/* use duk_double_union as duk_tval directly */ +typedef union duk_double_union duk_tval; -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const duk_c_function duk_bi_native_functions[149]; -DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[1955]; -#ifdef DUK_USE_BUILTIN_INITJS -DUK_INTERNAL_DECL const duk_uint8_t duk_initjs_data[187]; -#endif /* DUK_USE_BUILTIN_INITJS */ -#endif /* !DUK_SINGLE_FILE */ +/* tags */ +#define DUK_TAG_NORMALIZED_NAN 0x7ff8UL /* the NaN variant we use */ +/* avoid tag 0xfff0, no risk of confusion with negative infinity */ +#if defined(DUK_USE_FASTINT) +#define DUK_TAG_FASTINT 0xfff1UL /* embed: integer value */ +#endif +#define DUK_TAG_UNUSED 0xfff2UL /* marker; not actual tagged value */ +#define DUK_TAG_UNDEFINED 0xfff3UL /* embed: nothing */ +#define DUK_TAG_NULL 0xfff4UL /* embed: nothing */ +#define DUK_TAG_BOOLEAN 0xfff5UL /* embed: 0 or 1 (false or true) */ +/* DUK_TAG_NUMBER would logically go here, but it has multiple 'tags' */ +#define DUK_TAG_POINTER 0xfff6UL /* embed: void ptr */ +#define DUK_TAG_LIGHTFUNC 0xfff7UL /* embed: func ptr */ +#define DUK_TAG_STRING 0xfff8UL /* embed: duk_hstring ptr */ +#define DUK_TAG_OBJECT 0xfff9UL /* embed: duk_hobject ptr */ +#define DUK_TAG_BUFFER 0xfffaUL /* embed: duk_hbuffer ptr */ -#define DUK_BUILTINS_DATA_LENGTH 1955 -#ifdef DUK_USE_BUILTIN_INITJS -#define DUK_BUILTIN_INITJS_DATA_LENGTH 187 -#endif /* DUK_USE_BUILTIN_INITJS */ +/* for convenience */ +#define DUK_XTAG_BOOLEAN_FALSE 0xfff50000UL +#define DUK_XTAG_BOOLEAN_TRUE 0xfff50001UL -#define DUK_BIDX_GLOBAL 0 -#define DUK_BIDX_GLOBAL_ENV 1 -#define DUK_BIDX_OBJECT_CONSTRUCTOR 2 -#define DUK_BIDX_OBJECT_PROTOTYPE 3 -#define DUK_BIDX_FUNCTION_CONSTRUCTOR 4 -#define DUK_BIDX_FUNCTION_PROTOTYPE 5 -#define DUK_BIDX_ARRAY_CONSTRUCTOR 6 -#define DUK_BIDX_ARRAY_PROTOTYPE 7 -#define DUK_BIDX_STRING_CONSTRUCTOR 8 -#define DUK_BIDX_STRING_PROTOTYPE 9 -#define DUK_BIDX_BOOLEAN_CONSTRUCTOR 10 -#define DUK_BIDX_BOOLEAN_PROTOTYPE 11 -#define DUK_BIDX_NUMBER_CONSTRUCTOR 12 -#define DUK_BIDX_NUMBER_PROTOTYPE 13 -#define DUK_BIDX_DATE_CONSTRUCTOR 14 -#define DUK_BIDX_DATE_PROTOTYPE 15 -#define DUK_BIDX_REGEXP_CONSTRUCTOR 16 -#define DUK_BIDX_REGEXP_PROTOTYPE 17 -#define DUK_BIDX_ERROR_CONSTRUCTOR 18 -#define DUK_BIDX_ERROR_PROTOTYPE 19 -#define DUK_BIDX_EVAL_ERROR_CONSTRUCTOR 20 -#define DUK_BIDX_EVAL_ERROR_PROTOTYPE 21 -#define DUK_BIDX_RANGE_ERROR_CONSTRUCTOR 22 -#define DUK_BIDX_RANGE_ERROR_PROTOTYPE 23 -#define DUK_BIDX_REFERENCE_ERROR_CONSTRUCTOR 24 -#define DUK_BIDX_REFERENCE_ERROR_PROTOTYPE 25 -#define DUK_BIDX_SYNTAX_ERROR_CONSTRUCTOR 26 -#define DUK_BIDX_SYNTAX_ERROR_PROTOTYPE 27 -#define DUK_BIDX_TYPE_ERROR_CONSTRUCTOR 28 -#define DUK_BIDX_TYPE_ERROR_PROTOTYPE 29 -#define DUK_BIDX_URI_ERROR_CONSTRUCTOR 30 -#define DUK_BIDX_URI_ERROR_PROTOTYPE 31 -#define DUK_BIDX_MATH 32 -#define DUK_BIDX_JSON 33 -#define DUK_BIDX_TYPE_ERROR_THROWER 34 -#define DUK_BIDX_PROXY_CONSTRUCTOR 35 -#define DUK_BIDX_DUKTAPE 36 -#define DUK_BIDX_THREAD_CONSTRUCTOR 37 -#define DUK_BIDX_THREAD_PROTOTYPE 38 -#define DUK_BIDX_BUFFER_CONSTRUCTOR 39 -#define DUK_BIDX_BUFFER_PROTOTYPE 40 -#define DUK_BIDX_POINTER_CONSTRUCTOR 41 -#define DUK_BIDX_POINTER_PROTOTYPE 42 -#define DUK_BIDX_LOGGER_CONSTRUCTOR 43 -#define DUK_BIDX_LOGGER_PROTOTYPE 44 -#define DUK_BIDX_DOUBLE_ERROR 45 -#define DUK_BIDX_ARRAYBUFFER_CONSTRUCTOR 46 -#define DUK_BIDX_ARRAYBUFFER_PROTOTYPE 47 -#define DUK_BIDX_DATAVIEW_CONSTRUCTOR 48 -#define DUK_BIDX_DATAVIEW_PROTOTYPE 49 -#define DUK_BIDX_TYPEDARRAY_PROTOTYPE 50 -#define DUK_BIDX_INT8ARRAY_CONSTRUCTOR 51 -#define DUK_BIDX_INT8ARRAY_PROTOTYPE 52 -#define DUK_BIDX_UINT8ARRAY_CONSTRUCTOR 53 -#define DUK_BIDX_UINT8ARRAY_PROTOTYPE 54 -#define DUK_BIDX_UINT8CLAMPEDARRAY_CONSTRUCTOR 55 -#define DUK_BIDX_UINT8CLAMPEDARRAY_PROTOTYPE 56 -#define DUK_BIDX_INT16ARRAY_CONSTRUCTOR 57 -#define DUK_BIDX_INT16ARRAY_PROTOTYPE 58 -#define DUK_BIDX_UINT16ARRAY_CONSTRUCTOR 59 -#define DUK_BIDX_UINT16ARRAY_PROTOTYPE 60 -#define DUK_BIDX_INT32ARRAY_CONSTRUCTOR 61 -#define DUK_BIDX_INT32ARRAY_PROTOTYPE 62 -#define DUK_BIDX_UINT32ARRAY_CONSTRUCTOR 63 -#define DUK_BIDX_UINT32ARRAY_PROTOTYPE 64 -#define DUK_BIDX_FLOAT32ARRAY_CONSTRUCTOR 65 -#define DUK_BIDX_FLOAT32ARRAY_PROTOTYPE 66 -#define DUK_BIDX_FLOAT64ARRAY_CONSTRUCTOR 67 -#define DUK_BIDX_FLOAT64ARRAY_PROTOTYPE 68 -#define DUK_BIDX_NODEJS_BUFFER_CONSTRUCTOR 69 -#define DUK_BIDX_NODEJS_BUFFER_PROTOTYPE 70 +/* two casts to avoid gcc warning: "warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]" */ +#if defined(DUK_USE_64BIT_OPS) +#if defined(DUK_USE_DOUBLE_ME) +#define DUK__TVAL_SET_TAGGEDPOINTER(v,h,tag) do { \ + (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) (tag)) << 16) | (((duk_uint64_t) (duk_uint32_t) (h)) << 32); \ + } while (0) +#else +#define DUK__TVAL_SET_TAGGEDPOINTER(v,h,tag) do { \ + (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) (tag)) << 48) | ((duk_uint64_t) (duk_uint32_t) (h)); \ + } while (0) +#endif +#else /* DUK_USE_64BIT_OPS */ +#define DUK__TVAL_SET_TAGGEDPOINTER(v,h,tag) do { \ + (v)->ui[DUK_DBL_IDX_UI0] = ((duk_uint32_t) (tag)) << 16; \ + (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (h); \ + } while (0) +#endif /* DUK_USE_64BIT_OPS */ -#define DUK_NUM_BUILTINS 71 +#if defined(DUK_USE_64BIT_OPS) +/* Double casting for pointer to avoid gcc warning (cast from pointer to integer of different size) */ +#if defined(DUK_USE_DOUBLE_ME) +#define DUK__TVAL_SET_LIGHTFUNC(v,fp,flags) do { \ + (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_LIGHTFUNC) << 16) | \ + ((duk_uint64_t) (flags)) | \ + (((duk_uint64_t) (duk_uint32_t) (fp)) << 32); \ + } while (0) +#else +#define DUK__TVAL_SET_LIGHTFUNC(v,fp,flags) do { \ + (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_LIGHTFUNC) << 48) | \ + (((duk_uint64_t) (flags)) << 32) | \ + ((duk_uint64_t) (duk_uint32_t) (fp)); \ + } while (0) +#endif +#else /* DUK_USE_64BIT_OPS */ +#define DUK__TVAL_SET_LIGHTFUNC(v,fp,flags) do { \ + (v)->ui[DUK_DBL_IDX_UI0] = (((duk_uint32_t) DUK_TAG_LIGHTFUNC) << 16) | ((duk_uint32_t) (flags)); \ + (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (fp); \ + } while (0) +#endif /* DUK_USE_64BIT_OPS */ -#elif defined(DUK_USE_DOUBLE_BE) -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const duk_uint8_t duk_strings_data[2624]; -#endif /* !DUK_SINGLE_FILE */ +#if defined(DUK_USE_FASTINT) +/* Note: masking is done for 'i' to deal with negative numbers correctly */ +#if defined(DUK_USE_DOUBLE_ME) +#define DUK__TVAL_SET_FASTINT(v,i) do { \ + (v)->ui[DUK_DBL_IDX_UI0] = ((duk_uint32_t) DUK_TAG_FASTINT) << 16 | (((duk_uint32_t) ((i) >> 32)) & 0x0000ffffUL); \ + (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (i); \ + } while (0) +#define DUK__TVAL_SET_FASTINT_U32(v,i) do { \ + (v)->ui[DUK_DBL_IDX_UI0] = ((duk_uint32_t) DUK_TAG_FASTINT) << 16; \ + (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (i); \ + } while (0) +#else +#define DUK__TVAL_SET_FASTINT(v,i) do { \ + (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_FASTINT) << 48) | (((duk_uint64_t) (i)) & 0x0000ffffffffffffULL); \ + } while (0) +#define DUK__TVAL_SET_FASTINT_U32(v,i) do { \ + (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_FASTINT) << 48) | (duk_uint64_t) (i); \ + } while (0) +#endif -#define DUK_STRDATA_DATA_LENGTH 2624 -#define DUK_STRDATA_MAX_STRLEN 24 - -#define DUK_STRIDX_UC_LOGGER 0 /* 'Logger' */ -#define DUK_STRIDX_UC_THREAD 1 /* 'Thread' */ -#define DUK_STRIDX_UC_POINTER 2 /* 'Pointer' */ -#define DUK_STRIDX_DEC_ENV 3 /* 'DecEnv' */ -#define DUK_STRIDX_OBJ_ENV 4 /* 'ObjEnv' */ -#define DUK_STRIDX_FLOAT64_ARRAY 5 /* 'Float64Array' */ -#define DUK_STRIDX_FLOAT32_ARRAY 6 /* 'Float32Array' */ -#define DUK_STRIDX_UINT32_ARRAY 7 /* 'Uint32Array' */ -#define DUK_STRIDX_INT32_ARRAY 8 /* 'Int32Array' */ -#define DUK_STRIDX_UINT16_ARRAY 9 /* 'Uint16Array' */ -#define DUK_STRIDX_INT16_ARRAY 10 /* 'Int16Array' */ -#define DUK_STRIDX_UINT8_CLAMPED_ARRAY 11 /* 'Uint8ClampedArray' */ -#define DUK_STRIDX_UINT8_ARRAY 12 /* 'Uint8Array' */ -#define DUK_STRIDX_INT8_ARRAY 13 /* 'Int8Array' */ -#define DUK_STRIDX_DATA_VIEW 14 /* 'DataView' */ -#define DUK_STRIDX_ARRAY_BUFFER 15 /* 'ArrayBuffer' */ -#define DUK_STRIDX_UC_BUFFER 16 /* 'Buffer' */ -#define DUK_STRIDX_EMPTY_STRING 17 /* '' */ -#define DUK_STRIDX_GLOBAL 18 /* 'global' */ -#define DUK_STRIDX_UC_ARGUMENTS 19 /* 'Arguments' */ -#define DUK_STRIDX_JSON 20 /* 'JSON' */ -#define DUK_STRIDX_MATH 21 /* 'Math' */ -#define DUK_STRIDX_UC_ERROR 22 /* 'Error' */ -#define DUK_STRIDX_REG_EXP 23 /* 'RegExp' */ -#define DUK_STRIDX_DATE 24 /* 'Date' */ -#define DUK_STRIDX_UC_NUMBER 25 /* 'Number' */ -#define DUK_STRIDX_UC_BOOLEAN 26 /* 'Boolean' */ -#define DUK_STRIDX_UC_STRING 27 /* 'String' */ -#define DUK_STRIDX_ARRAY 28 /* 'Array' */ -#define DUK_STRIDX_UC_FUNCTION 29 /* 'Function' */ -#define DUK_STRIDX_UC_OBJECT 30 /* 'Object' */ -#define DUK_STRIDX_UC_NULL 31 /* 'Null' */ -#define DUK_STRIDX_UC_UNDEFINED 32 /* 'Undefined' */ -#define DUK_STRIDX_JSON_EXT_FUNCTION2 33 /* '{_func:true}' */ -#define DUK_STRIDX_JSON_EXT_FUNCTION1 34 /* '{"_func":true}' */ -#define DUK_STRIDX_JSON_EXT_NEGINF 35 /* '{"_ninf":true}' */ -#define DUK_STRIDX_JSON_EXT_POSINF 36 /* '{"_inf":true}' */ -#define DUK_STRIDX_JSON_EXT_NAN 37 /* '{"_nan":true}' */ -#define DUK_STRIDX_JSON_EXT_UNDEFINED 38 /* '{"_undef":true}' */ -#define DUK_STRIDX_TO_LOG_STRING 39 /* 'toLogString' */ -#define DUK_STRIDX_CLOG 40 /* 'clog' */ -#define DUK_STRIDX_LC_L 41 /* 'l' */ -#define DUK_STRIDX_LC_N 42 /* 'n' */ -#define DUK_STRIDX_LC_FATAL 43 /* 'fatal' */ -#define DUK_STRIDX_LC_ERROR 44 /* 'error' */ -#define DUK_STRIDX_LC_WARN 45 /* 'warn' */ -#define DUK_STRIDX_LC_DEBUG 46 /* 'debug' */ -#define DUK_STRIDX_LC_TRACE 47 /* 'trace' */ -#define DUK_STRIDX_RAW 48 /* 'raw' */ -#define DUK_STRIDX_FMT 49 /* 'fmt' */ -#define DUK_STRIDX_CURRENT 50 /* 'current' */ -#define DUK_STRIDX_RESUME 51 /* 'resume' */ -#define DUK_STRIDX_COMPACT 52 /* 'compact' */ -#define DUK_STRIDX_JC 53 /* 'jc' */ -#define DUK_STRIDX_JX 54 /* 'jx' */ -#define DUK_STRIDX_BASE64 55 /* 'base64' */ -#define DUK_STRIDX_HEX 56 /* 'hex' */ -#define DUK_STRIDX_DEC 57 /* 'dec' */ -#define DUK_STRIDX_ENC 58 /* 'enc' */ -#define DUK_STRIDX_FIN 59 /* 'fin' */ -#define DUK_STRIDX_GC 60 /* 'gc' */ -#define DUK_STRIDX_ACT 61 /* 'act' */ -#define DUK_STRIDX_LC_INFO 62 /* 'info' */ -#define DUK_STRIDX_VERSION 63 /* 'version' */ -#define DUK_STRIDX_ENV 64 /* 'env' */ -#define DUK_STRIDX_MOD_LOADED 65 /* 'modLoaded' */ -#define DUK_STRIDX_MOD_SEARCH 66 /* 'modSearch' */ -#define DUK_STRIDX_ERR_THROW 67 /* 'errThrow' */ -#define DUK_STRIDX_ERR_CREATE 68 /* 'errCreate' */ -#define DUK_STRIDX_COMPILE 69 /* 'compile' */ -#define DUK_STRIDX_INT_REGBASE 70 /* '\x00Regbase' */ -#define DUK_STRIDX_INT_THREAD 71 /* '\x00Thread' */ -#define DUK_STRIDX_INT_HANDLER 72 /* '\x00Handler' */ -#define DUK_STRIDX_INT_FINALIZER 73 /* '\x00Finalizer' */ -#define DUK_STRIDX_INT_CALLEE 74 /* '\x00Callee' */ -#define DUK_STRIDX_INT_MAP 75 /* '\x00Map' */ -#define DUK_STRIDX_INT_ARGS 76 /* '\x00Args' */ -#define DUK_STRIDX_INT_THIS 77 /* '\x00This' */ -#define DUK_STRIDX_INT_PC2LINE 78 /* '\x00Pc2line' */ -#define DUK_STRIDX_INT_SOURCE 79 /* '\x00Source' */ -#define DUK_STRIDX_INT_VARENV 80 /* '\x00Varenv' */ -#define DUK_STRIDX_INT_LEXENV 81 /* '\x00Lexenv' */ -#define DUK_STRIDX_INT_VARMAP 82 /* '\x00Varmap' */ -#define DUK_STRIDX_INT_FORMALS 83 /* '\x00Formals' */ -#define DUK_STRIDX_INT_BYTECODE 84 /* '\x00Bytecode' */ -#define DUK_STRIDX_INT_NEXT 85 /* '\x00Next' */ -#define DUK_STRIDX_INT_TARGET 86 /* '\x00Target' */ -#define DUK_STRIDX_INT_VALUE 87 /* '\x00Value' */ -#define DUK_STRIDX_LC_POINTER 88 /* 'pointer' */ -#define DUK_STRIDX_INT_TRACEDATA 89 /* '\x00Tracedata' */ -#define DUK_STRIDX_LINE_NUMBER 90 /* 'lineNumber' */ -#define DUK_STRIDX_FILE_NAME 91 /* 'fileName' */ -#define DUK_STRIDX_PC 92 /* 'pc' */ -#define DUK_STRIDX_STACK 93 /* 'stack' */ -#define DUK_STRIDX_THROW_TYPE_ERROR 94 /* 'ThrowTypeError' */ -#define DUK_STRIDX_DUKTAPE 95 /* 'Duktape' */ -#define DUK_STRIDX_SET_FLOAT64 96 /* 'setFloat64' */ -#define DUK_STRIDX_SET_FLOAT32 97 /* 'setFloat32' */ -#define DUK_STRIDX_SET_UINT32 98 /* 'setUint32' */ -#define DUK_STRIDX_SET_INT32 99 /* 'setInt32' */ -#define DUK_STRIDX_SET_UINT16 100 /* 'setUint16' */ -#define DUK_STRIDX_SET_INT16 101 /* 'setInt16' */ -#define DUK_STRIDX_SET_UINT8 102 /* 'setUint8' */ -#define DUK_STRIDX_SET_INT8 103 /* 'setInt8' */ -#define DUK_STRIDX_GET_FLOAT64 104 /* 'getFloat64' */ -#define DUK_STRIDX_GET_FLOAT32 105 /* 'getFloat32' */ -#define DUK_STRIDX_GET_UINT32 106 /* 'getUint32' */ -#define DUK_STRIDX_GET_INT32 107 /* 'getInt32' */ -#define DUK_STRIDX_GET_UINT16 108 /* 'getUint16' */ -#define DUK_STRIDX_GET_INT16 109 /* 'getInt16' */ -#define DUK_STRIDX_GET_UINT8 110 /* 'getUint8' */ -#define DUK_STRIDX_GET_INT8 111 /* 'getInt8' */ -#define DUK_STRIDX_SUBARRAY 112 /* 'subarray' */ -#define DUK_STRIDX_BYTES_PER_ELEMENT 113 /* 'BYTES_PER_ELEMENT' */ -#define DUK_STRIDX_BYTE_OFFSET 114 /* 'byteOffset' */ -#define DUK_STRIDX_LC_BUFFER 115 /* 'buffer' */ -#define DUK_STRIDX_IS_VIEW 116 /* 'isView' */ -#define DUK_STRIDX_DATA 117 /* 'data' */ -#define DUK_STRIDX_TYPE 118 /* 'type' */ -#define DUK_STRIDX_WRITE_INT_BE 119 /* 'writeIntBE' */ -#define DUK_STRIDX_WRITE_INT_LE 120 /* 'writeIntLE' */ -#define DUK_STRIDX_WRITE_UINT_BE 121 /* 'writeUIntBE' */ -#define DUK_STRIDX_WRITE_UINT_LE 122 /* 'writeUIntLE' */ -#define DUK_STRIDX_WRITE_DOUBLE_BE 123 /* 'writeDoubleBE' */ -#define DUK_STRIDX_WRITE_DOUBLE_LE 124 /* 'writeDoubleLE' */ -#define DUK_STRIDX_WRITE_FLOAT_BE 125 /* 'writeFloatBE' */ -#define DUK_STRIDX_WRITE_FLOAT_LE 126 /* 'writeFloatLE' */ -#define DUK_STRIDX_WRITE_INT32_BE 127 /* 'writeInt32BE' */ -#define DUK_STRIDX_WRITE_INT32_LE 128 /* 'writeInt32LE' */ -#define DUK_STRIDX_WRITE_UINT32_BE 129 /* 'writeUInt32BE' */ -#define DUK_STRIDX_WRITE_UINT32_LE 130 /* 'writeUInt32LE' */ -#define DUK_STRIDX_WRITE_INT16_BE 131 /* 'writeInt16BE' */ -#define DUK_STRIDX_WRITE_INT16_LE 132 /* 'writeInt16LE' */ -#define DUK_STRIDX_WRITE_UINT16_BE 133 /* 'writeUInt16BE' */ -#define DUK_STRIDX_WRITE_UINT16_LE 134 /* 'writeUInt16LE' */ -#define DUK_STRIDX_WRITE_INT8 135 /* 'writeInt8' */ -#define DUK_STRIDX_WRITE_UINT8 136 /* 'writeUInt8' */ -#define DUK_STRIDX_READ_INT_BE 137 /* 'readIntBE' */ -#define DUK_STRIDX_READ_INT_LE 138 /* 'readIntLE' */ -#define DUK_STRIDX_READ_UINT_BE 139 /* 'readUIntBE' */ -#define DUK_STRIDX_READ_UINT_LE 140 /* 'readUIntLE' */ -#define DUK_STRIDX_READ_DOUBLE_BE 141 /* 'readDoubleBE' */ -#define DUK_STRIDX_READ_DOUBLE_LE 142 /* 'readDoubleLE' */ -#define DUK_STRIDX_READ_FLOAT_BE 143 /* 'readFloatBE' */ -#define DUK_STRIDX_READ_FLOAT_LE 144 /* 'readFloatLE' */ -#define DUK_STRIDX_READ_INT32_BE 145 /* 'readInt32BE' */ -#define DUK_STRIDX_READ_INT32_LE 146 /* 'readInt32LE' */ -#define DUK_STRIDX_READ_UINT32_BE 147 /* 'readUInt32BE' */ -#define DUK_STRIDX_READ_UINT32_LE 148 /* 'readUInt32LE' */ -#define DUK_STRIDX_READ_INT16_BE 149 /* 'readInt16BE' */ -#define DUK_STRIDX_READ_INT16_LE 150 /* 'readInt16LE' */ -#define DUK_STRIDX_READ_UINT16_BE 151 /* 'readUInt16BE' */ -#define DUK_STRIDX_READ_UINT16_LE 152 /* 'readUInt16LE' */ -#define DUK_STRIDX_READ_INT8 153 /* 'readInt8' */ -#define DUK_STRIDX_READ_UINT8 154 /* 'readUInt8' */ -#define DUK_STRIDX_COPY 155 /* 'copy' */ -#define DUK_STRIDX_EQUALS 156 /* 'equals' */ -#define DUK_STRIDX_FILL 157 /* 'fill' */ -#define DUK_STRIDX_WRITE 158 /* 'write' */ -#define DUK_STRIDX_COMPARE 159 /* 'compare' */ -#define DUK_STRIDX_BYTE_LENGTH 160 /* 'byteLength' */ -#define DUK_STRIDX_IS_BUFFER 161 /* 'isBuffer' */ -#define DUK_STRIDX_IS_ENCODING 162 /* 'isEncoding' */ -#define DUK_STRIDX_EXPORTS 163 /* 'exports' */ -#define DUK_STRIDX_ID 164 /* 'id' */ -#define DUK_STRIDX_REQUIRE 165 /* 'require' */ -#define DUK_STRIDX___PROTO__ 166 /* '__proto__' */ -#define DUK_STRIDX_SET_PROTOTYPE_OF 167 /* 'setPrototypeOf' */ -#define DUK_STRIDX_OWN_KEYS 168 /* 'ownKeys' */ -#define DUK_STRIDX_ENUMERATE 169 /* 'enumerate' */ -#define DUK_STRIDX_DELETE_PROPERTY 170 /* 'deleteProperty' */ -#define DUK_STRIDX_HAS 171 /* 'has' */ -#define DUK_STRIDX_PROXY 172 /* 'Proxy' */ -#define DUK_STRIDX_CALLEE 173 /* 'callee' */ -#define DUK_STRIDX_INVALID_DATE 174 /* 'Invalid Date' */ -#define DUK_STRIDX_BRACKETED_ELLIPSIS 175 /* '[...]' */ -#define DUK_STRIDX_NEWLINE_TAB 176 /* '\n\t' */ -#define DUK_STRIDX_SPACE 177 /* ' ' */ -#define DUK_STRIDX_COMMA 178 /* ',' */ -#define DUK_STRIDX_MINUS_ZERO 179 /* '-0' */ -#define DUK_STRIDX_PLUS_ZERO 180 /* '+0' */ -#define DUK_STRIDX_ZERO 181 /* '0' */ -#define DUK_STRIDX_MINUS_INFINITY 182 /* '-Infinity' */ -#define DUK_STRIDX_PLUS_INFINITY 183 /* '+Infinity' */ -#define DUK_STRIDX_INFINITY 184 /* 'Infinity' */ -#define DUK_STRIDX_LC_OBJECT 185 /* 'object' */ -#define DUK_STRIDX_LC_STRING 186 /* 'string' */ -#define DUK_STRIDX_LC_NUMBER 187 /* 'number' */ -#define DUK_STRIDX_LC_BOOLEAN 188 /* 'boolean' */ -#define DUK_STRIDX_LC_UNDEFINED 189 /* 'undefined' */ -#define DUK_STRIDX_STRINGIFY 190 /* 'stringify' */ -#define DUK_STRIDX_TAN 191 /* 'tan' */ -#define DUK_STRIDX_SQRT 192 /* 'sqrt' */ -#define DUK_STRIDX_SIN 193 /* 'sin' */ -#define DUK_STRIDX_ROUND 194 /* 'round' */ -#define DUK_STRIDX_RANDOM 195 /* 'random' */ -#define DUK_STRIDX_POW 196 /* 'pow' */ -#define DUK_STRIDX_MIN 197 /* 'min' */ -#define DUK_STRIDX_MAX 198 /* 'max' */ -#define DUK_STRIDX_LOG 199 /* 'log' */ -#define DUK_STRIDX_FLOOR 200 /* 'floor' */ -#define DUK_STRIDX_EXP 201 /* 'exp' */ -#define DUK_STRIDX_COS 202 /* 'cos' */ -#define DUK_STRIDX_CEIL 203 /* 'ceil' */ -#define DUK_STRIDX_ATAN2 204 /* 'atan2' */ -#define DUK_STRIDX_ATAN 205 /* 'atan' */ -#define DUK_STRIDX_ASIN 206 /* 'asin' */ -#define DUK_STRIDX_ACOS 207 /* 'acos' */ -#define DUK_STRIDX_ABS 208 /* 'abs' */ -#define DUK_STRIDX_SQRT2 209 /* 'SQRT2' */ -#define DUK_STRIDX_SQRT1_2 210 /* 'SQRT1_2' */ -#define DUK_STRIDX_PI 211 /* 'PI' */ -#define DUK_STRIDX_LOG10E 212 /* 'LOG10E' */ -#define DUK_STRIDX_LOG2E 213 /* 'LOG2E' */ -#define DUK_STRIDX_LN2 214 /* 'LN2' */ -#define DUK_STRIDX_LN10 215 /* 'LN10' */ -#define DUK_STRIDX_E 216 /* 'E' */ -#define DUK_STRIDX_MESSAGE 217 /* 'message' */ -#define DUK_STRIDX_NAME 218 /* 'name' */ -#define DUK_STRIDX_INPUT 219 /* 'input' */ -#define DUK_STRIDX_INDEX 220 /* 'index' */ -#define DUK_STRIDX_ESCAPED_EMPTY_REGEXP 221 /* '(?:)' */ -#define DUK_STRIDX_LAST_INDEX 222 /* 'lastIndex' */ -#define DUK_STRIDX_MULTILINE 223 /* 'multiline' */ -#define DUK_STRIDX_IGNORE_CASE 224 /* 'ignoreCase' */ -#define DUK_STRIDX_SOURCE 225 /* 'source' */ -#define DUK_STRIDX_TEST 226 /* 'test' */ -#define DUK_STRIDX_EXEC 227 /* 'exec' */ -#define DUK_STRIDX_TO_GMT_STRING 228 /* 'toGMTString' */ -#define DUK_STRIDX_SET_YEAR 229 /* 'setYear' */ -#define DUK_STRIDX_GET_YEAR 230 /* 'getYear' */ -#define DUK_STRIDX_TO_JSON 231 /* 'toJSON' */ -#define DUK_STRIDX_TO_ISO_STRING 232 /* 'toISOString' */ -#define DUK_STRIDX_TO_UTC_STRING 233 /* 'toUTCString' */ -#define DUK_STRIDX_SET_UTC_FULL_YEAR 234 /* 'setUTCFullYear' */ -#define DUK_STRIDX_SET_FULL_YEAR 235 /* 'setFullYear' */ -#define DUK_STRIDX_SET_UTC_MONTH 236 /* 'setUTCMonth' */ -#define DUK_STRIDX_SET_MONTH 237 /* 'setMonth' */ -#define DUK_STRIDX_SET_UTC_DATE 238 /* 'setUTCDate' */ -#define DUK_STRIDX_SET_DATE 239 /* 'setDate' */ -#define DUK_STRIDX_SET_UTC_HOURS 240 /* 'setUTCHours' */ -#define DUK_STRIDX_SET_HOURS 241 /* 'setHours' */ -#define DUK_STRIDX_SET_UTC_MINUTES 242 /* 'setUTCMinutes' */ -#define DUK_STRIDX_SET_MINUTES 243 /* 'setMinutes' */ -#define DUK_STRIDX_SET_UTC_SECONDS 244 /* 'setUTCSeconds' */ -#define DUK_STRIDX_SET_SECONDS 245 /* 'setSeconds' */ -#define DUK_STRIDX_SET_UTC_MILLISECONDS 246 /* 'setUTCMilliseconds' */ -#define DUK_STRIDX_SET_MILLISECONDS 247 /* 'setMilliseconds' */ -#define DUK_STRIDX_SET_TIME 248 /* 'setTime' */ -#define DUK_STRIDX_GET_TIMEZONE_OFFSET 249 /* 'getTimezoneOffset' */ -#define DUK_STRIDX_GET_UTC_MILLISECONDS 250 /* 'getUTCMilliseconds' */ -#define DUK_STRIDX_GET_MILLISECONDS 251 /* 'getMilliseconds' */ -#define DUK_STRIDX_GET_UTC_SECONDS 252 /* 'getUTCSeconds' */ -#define DUK_STRIDX_GET_SECONDS 253 /* 'getSeconds' */ -#define DUK_STRIDX_GET_UTC_MINUTES 254 /* 'getUTCMinutes' */ -#define DUK_STRIDX_GET_MINUTES 255 /* 'getMinutes' */ -#define DUK_STRIDX_GET_UTC_HOURS 256 /* 'getUTCHours' */ -#define DUK_STRIDX_GET_HOURS 257 /* 'getHours' */ -#define DUK_STRIDX_GET_UTC_DAY 258 /* 'getUTCDay' */ -#define DUK_STRIDX_GET_DAY 259 /* 'getDay' */ -#define DUK_STRIDX_GET_UTC_DATE 260 /* 'getUTCDate' */ -#define DUK_STRIDX_GET_DATE 261 /* 'getDate' */ -#define DUK_STRIDX_GET_UTC_MONTH 262 /* 'getUTCMonth' */ -#define DUK_STRIDX_GET_MONTH 263 /* 'getMonth' */ -#define DUK_STRIDX_GET_UTC_FULL_YEAR 264 /* 'getUTCFullYear' */ -#define DUK_STRIDX_GET_FULL_YEAR 265 /* 'getFullYear' */ -#define DUK_STRIDX_GET_TIME 266 /* 'getTime' */ -#define DUK_STRIDX_TO_LOCALE_TIME_STRING 267 /* 'toLocaleTimeString' */ -#define DUK_STRIDX_TO_LOCALE_DATE_STRING 268 /* 'toLocaleDateString' */ -#define DUK_STRIDX_TO_TIME_STRING 269 /* 'toTimeString' */ -#define DUK_STRIDX_TO_DATE_STRING 270 /* 'toDateString' */ -#define DUK_STRIDX_NOW 271 /* 'now' */ -#define DUK_STRIDX_UTC 272 /* 'UTC' */ -#define DUK_STRIDX_PARSE 273 /* 'parse' */ -#define DUK_STRIDX_TO_PRECISION 274 /* 'toPrecision' */ -#define DUK_STRIDX_TO_EXPONENTIAL 275 /* 'toExponential' */ -#define DUK_STRIDX_TO_FIXED 276 /* 'toFixed' */ -#define DUK_STRIDX_POSITIVE_INFINITY 277 /* 'POSITIVE_INFINITY' */ -#define DUK_STRIDX_NEGATIVE_INFINITY 278 /* 'NEGATIVE_INFINITY' */ -#define DUK_STRIDX_NAN 279 /* 'NaN' */ -#define DUK_STRIDX_MIN_VALUE 280 /* 'MIN_VALUE' */ -#define DUK_STRIDX_MAX_VALUE 281 /* 'MAX_VALUE' */ -#define DUK_STRIDX_SUBSTR 282 /* 'substr' */ -#define DUK_STRIDX_TRIM 283 /* 'trim' */ -#define DUK_STRIDX_TO_LOCALE_UPPER_CASE 284 /* 'toLocaleUpperCase' */ -#define DUK_STRIDX_TO_UPPER_CASE 285 /* 'toUpperCase' */ -#define DUK_STRIDX_TO_LOCALE_LOWER_CASE 286 /* 'toLocaleLowerCase' */ -#define DUK_STRIDX_TO_LOWER_CASE 287 /* 'toLowerCase' */ -#define DUK_STRIDX_SUBSTRING 288 /* 'substring' */ -#define DUK_STRIDX_SPLIT 289 /* 'split' */ -#define DUK_STRIDX_SEARCH 290 /* 'search' */ -#define DUK_STRIDX_REPLACE 291 /* 'replace' */ -#define DUK_STRIDX_MATCH 292 /* 'match' */ -#define DUK_STRIDX_LOCALE_COMPARE 293 /* 'localeCompare' */ -#define DUK_STRIDX_CHAR_CODE_AT 294 /* 'charCodeAt' */ -#define DUK_STRIDX_CHAR_AT 295 /* 'charAt' */ -#define DUK_STRIDX_FROM_CHAR_CODE 296 /* 'fromCharCode' */ -#define DUK_STRIDX_REDUCE_RIGHT 297 /* 'reduceRight' */ -#define DUK_STRIDX_REDUCE 298 /* 'reduce' */ -#define DUK_STRIDX_FILTER 299 /* 'filter' */ -#define DUK_STRIDX_MAP 300 /* 'map' */ -#define DUK_STRIDX_FOR_EACH 301 /* 'forEach' */ -#define DUK_STRIDX_SOME 302 /* 'some' */ -#define DUK_STRIDX_EVERY 303 /* 'every' */ -#define DUK_STRIDX_LAST_INDEX_OF 304 /* 'lastIndexOf' */ -#define DUK_STRIDX_INDEX_OF 305 /* 'indexOf' */ -#define DUK_STRIDX_UNSHIFT 306 /* 'unshift' */ -#define DUK_STRIDX_SPLICE 307 /* 'splice' */ -#define DUK_STRIDX_SORT 308 /* 'sort' */ -#define DUK_STRIDX_SLICE 309 /* 'slice' */ -#define DUK_STRIDX_SHIFT 310 /* 'shift' */ -#define DUK_STRIDX_REVERSE 311 /* 'reverse' */ -#define DUK_STRIDX_PUSH 312 /* 'push' */ -#define DUK_STRIDX_POP 313 /* 'pop' */ -#define DUK_STRIDX_JOIN 314 /* 'join' */ -#define DUK_STRIDX_CONCAT 315 /* 'concat' */ -#define DUK_STRIDX_IS_ARRAY 316 /* 'isArray' */ -#define DUK_STRIDX_LC_ARGUMENTS 317 /* 'arguments' */ -#define DUK_STRIDX_CALLER 318 /* 'caller' */ -#define DUK_STRIDX_BIND 319 /* 'bind' */ -#define DUK_STRIDX_CALL 320 /* 'call' */ -#define DUK_STRIDX_APPLY 321 /* 'apply' */ -#define DUK_STRIDX_PROPERTY_IS_ENUMERABLE 322 /* 'propertyIsEnumerable' */ -#define DUK_STRIDX_IS_PROTOTYPE_OF 323 /* 'isPrototypeOf' */ -#define DUK_STRIDX_HAS_OWN_PROPERTY 324 /* 'hasOwnProperty' */ -#define DUK_STRIDX_VALUE_OF 325 /* 'valueOf' */ -#define DUK_STRIDX_TO_LOCALE_STRING 326 /* 'toLocaleString' */ -#define DUK_STRIDX_TO_STRING 327 /* 'toString' */ -#define DUK_STRIDX_CONSTRUCTOR 328 /* 'constructor' */ -#define DUK_STRIDX_SET 329 /* 'set' */ -#define DUK_STRIDX_GET 330 /* 'get' */ -#define DUK_STRIDX_ENUMERABLE 331 /* 'enumerable' */ -#define DUK_STRIDX_CONFIGURABLE 332 /* 'configurable' */ -#define DUK_STRIDX_WRITABLE 333 /* 'writable' */ -#define DUK_STRIDX_VALUE 334 /* 'value' */ -#define DUK_STRIDX_KEYS 335 /* 'keys' */ -#define DUK_STRIDX_IS_EXTENSIBLE 336 /* 'isExtensible' */ -#define DUK_STRIDX_IS_FROZEN 337 /* 'isFrozen' */ -#define DUK_STRIDX_IS_SEALED 338 /* 'isSealed' */ -#define DUK_STRIDX_PREVENT_EXTENSIONS 339 /* 'preventExtensions' */ -#define DUK_STRIDX_FREEZE 340 /* 'freeze' */ -#define DUK_STRIDX_SEAL 341 /* 'seal' */ -#define DUK_STRIDX_DEFINE_PROPERTIES 342 /* 'defineProperties' */ -#define DUK_STRIDX_DEFINE_PROPERTY 343 /* 'defineProperty' */ -#define DUK_STRIDX_CREATE 344 /* 'create' */ -#define DUK_STRIDX_GET_OWN_PROPERTY_NAMES 345 /* 'getOwnPropertyNames' */ -#define DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR 346 /* 'getOwnPropertyDescriptor' */ -#define DUK_STRIDX_GET_PROTOTYPE_OF 347 /* 'getPrototypeOf' */ -#define DUK_STRIDX_PROTOTYPE 348 /* 'prototype' */ -#define DUK_STRIDX_LENGTH 349 /* 'length' */ -#define DUK_STRIDX_ALERT 350 /* 'alert' */ -#define DUK_STRIDX_PRINT 351 /* 'print' */ -#define DUK_STRIDX_UNESCAPE 352 /* 'unescape' */ -#define DUK_STRIDX_ESCAPE 353 /* 'escape' */ -#define DUK_STRIDX_ENCODE_URI_COMPONENT 354 /* 'encodeURIComponent' */ -#define DUK_STRIDX_ENCODE_URI 355 /* 'encodeURI' */ -#define DUK_STRIDX_DECODE_URI_COMPONENT 356 /* 'decodeURIComponent' */ -#define DUK_STRIDX_DECODE_URI 357 /* 'decodeURI' */ -#define DUK_STRIDX_IS_FINITE 358 /* 'isFinite' */ -#define DUK_STRIDX_IS_NAN 359 /* 'isNaN' */ -#define DUK_STRIDX_PARSE_FLOAT 360 /* 'parseFloat' */ -#define DUK_STRIDX_PARSE_INT 361 /* 'parseInt' */ -#define DUK_STRIDX_EVAL 362 /* 'eval' */ -#define DUK_STRIDX_URI_ERROR 363 /* 'URIError' */ -#define DUK_STRIDX_TYPE_ERROR 364 /* 'TypeError' */ -#define DUK_STRIDX_SYNTAX_ERROR 365 /* 'SyntaxError' */ -#define DUK_STRIDX_REFERENCE_ERROR 366 /* 'ReferenceError' */ -#define DUK_STRIDX_RANGE_ERROR 367 /* 'RangeError' */ -#define DUK_STRIDX_EVAL_ERROR 368 /* 'EvalError' */ -#define DUK_STRIDX_BREAK 369 /* 'break' */ -#define DUK_STRIDX_CASE 370 /* 'case' */ -#define DUK_STRIDX_CATCH 371 /* 'catch' */ -#define DUK_STRIDX_CONTINUE 372 /* 'continue' */ -#define DUK_STRIDX_DEBUGGER 373 /* 'debugger' */ -#define DUK_STRIDX_DEFAULT 374 /* 'default' */ -#define DUK_STRIDX_DELETE 375 /* 'delete' */ -#define DUK_STRIDX_DO 376 /* 'do' */ -#define DUK_STRIDX_ELSE 377 /* 'else' */ -#define DUK_STRIDX_FINALLY 378 /* 'finally' */ -#define DUK_STRIDX_FOR 379 /* 'for' */ -#define DUK_STRIDX_LC_FUNCTION 380 /* 'function' */ -#define DUK_STRIDX_IF 381 /* 'if' */ -#define DUK_STRIDX_IN 382 /* 'in' */ -#define DUK_STRIDX_INSTANCEOF 383 /* 'instanceof' */ -#define DUK_STRIDX_NEW 384 /* 'new' */ -#define DUK_STRIDX_RETURN 385 /* 'return' */ -#define DUK_STRIDX_SWITCH 386 /* 'switch' */ -#define DUK_STRIDX_THIS 387 /* 'this' */ -#define DUK_STRIDX_THROW 388 /* 'throw' */ -#define DUK_STRIDX_TRY 389 /* 'try' */ -#define DUK_STRIDX_TYPEOF 390 /* 'typeof' */ -#define DUK_STRIDX_VAR 391 /* 'var' */ -#define DUK_STRIDX_CONST 392 /* 'const' */ -#define DUK_STRIDX_VOID 393 /* 'void' */ -#define DUK_STRIDX_WHILE 394 /* 'while' */ -#define DUK_STRIDX_WITH 395 /* 'with' */ -#define DUK_STRIDX_CLASS 396 /* 'class' */ -#define DUK_STRIDX_ENUM 397 /* 'enum' */ -#define DUK_STRIDX_EXPORT 398 /* 'export' */ -#define DUK_STRIDX_EXTENDS 399 /* 'extends' */ -#define DUK_STRIDX_IMPORT 400 /* 'import' */ -#define DUK_STRIDX_SUPER 401 /* 'super' */ -#define DUK_STRIDX_LC_NULL 402 /* 'null' */ -#define DUK_STRIDX_TRUE 403 /* 'true' */ -#define DUK_STRIDX_FALSE 404 /* 'false' */ -#define DUK_STRIDX_IMPLEMENTS 405 /* 'implements' */ -#define DUK_STRIDX_INTERFACE 406 /* 'interface' */ -#define DUK_STRIDX_LET 407 /* 'let' */ -#define DUK_STRIDX_PACKAGE 408 /* 'package' */ -#define DUK_STRIDX_PRIVATE 409 /* 'private' */ -#define DUK_STRIDX_PROTECTED 410 /* 'protected' */ -#define DUK_STRIDX_PUBLIC 411 /* 'public' */ -#define DUK_STRIDX_STATIC 412 /* 'static' */ -#define DUK_STRIDX_YIELD 413 /* 'yield' */ - -#define DUK_HEAP_STRING_UC_LOGGER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_LOGGER) -#define DUK_HTHREAD_STRING_UC_LOGGER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_LOGGER) -#define DUK_HEAP_STRING_UC_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_THREAD) -#define DUK_HTHREAD_STRING_UC_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_THREAD) -#define DUK_HEAP_STRING_UC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_POINTER) -#define DUK_HTHREAD_STRING_UC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_POINTER) -#define DUK_HEAP_STRING_DEC_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC_ENV) -#define DUK_HTHREAD_STRING_DEC_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC_ENV) -#define DUK_HEAP_STRING_OBJ_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OBJ_ENV) -#define DUK_HTHREAD_STRING_OBJ_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OBJ_ENV) -#define DUK_HEAP_STRING_FLOAT64_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT64_ARRAY) -#define DUK_HTHREAD_STRING_FLOAT64_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT64_ARRAY) -#define DUK_HEAP_STRING_FLOAT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT32_ARRAY) -#define DUK_HTHREAD_STRING_FLOAT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT32_ARRAY) -#define DUK_HEAP_STRING_UINT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT32_ARRAY) -#define DUK_HTHREAD_STRING_UINT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT32_ARRAY) -#define DUK_HEAP_STRING_INT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT32_ARRAY) -#define DUK_HTHREAD_STRING_INT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT32_ARRAY) -#define DUK_HEAP_STRING_UINT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT16_ARRAY) -#define DUK_HTHREAD_STRING_UINT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT16_ARRAY) -#define DUK_HEAP_STRING_INT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT16_ARRAY) -#define DUK_HTHREAD_STRING_INT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT16_ARRAY) -#define DUK_HEAP_STRING_UINT8_CLAMPED_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_CLAMPED_ARRAY) -#define DUK_HTHREAD_STRING_UINT8_CLAMPED_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_CLAMPED_ARRAY) -#define DUK_HEAP_STRING_UINT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_ARRAY) -#define DUK_HTHREAD_STRING_UINT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_ARRAY) -#define DUK_HEAP_STRING_INT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT8_ARRAY) -#define DUK_HTHREAD_STRING_INT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT8_ARRAY) -#define DUK_HEAP_STRING_DATA_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA_VIEW) -#define DUK_HTHREAD_STRING_DATA_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA_VIEW) -#define DUK_HEAP_STRING_ARRAY_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY_BUFFER) -#define DUK_HTHREAD_STRING_ARRAY_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY_BUFFER) -#define DUK_HEAP_STRING_UC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BUFFER) -#define DUK_HTHREAD_STRING_UC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BUFFER) -#define DUK_HEAP_STRING_EMPTY_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EMPTY_STRING) -#define DUK_HTHREAD_STRING_EMPTY_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EMPTY_STRING) -#define DUK_HEAP_STRING_GLOBAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GLOBAL) -#define DUK_HTHREAD_STRING_GLOBAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GLOBAL) -#define DUK_HEAP_STRING_UC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ARGUMENTS) -#define DUK_HTHREAD_STRING_UC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ARGUMENTS) -#define DUK_HEAP_STRING_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON) -#define DUK_HTHREAD_STRING_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON) -#define DUK_HEAP_STRING_MATH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATH) -#define DUK_HTHREAD_STRING_MATH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATH) -#define DUK_HEAP_STRING_UC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ERROR) -#define DUK_HTHREAD_STRING_UC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ERROR) -#define DUK_HEAP_STRING_REG_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REG_EXP) -#define DUK_HTHREAD_STRING_REG_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REG_EXP) -#define DUK_HEAP_STRING_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATE) -#define DUK_HTHREAD_STRING_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATE) -#define DUK_HEAP_STRING_UC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NUMBER) -#define DUK_HTHREAD_STRING_UC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NUMBER) -#define DUK_HEAP_STRING_UC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BOOLEAN) -#define DUK_HTHREAD_STRING_UC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BOOLEAN) -#define DUK_HEAP_STRING_UC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_STRING) -#define DUK_HTHREAD_STRING_UC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_STRING) -#define DUK_HEAP_STRING_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY) -#define DUK_HTHREAD_STRING_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY) -#define DUK_HEAP_STRING_UC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_FUNCTION) -#define DUK_HTHREAD_STRING_UC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_FUNCTION) -#define DUK_HEAP_STRING_UC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_OBJECT) -#define DUK_HTHREAD_STRING_UC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_OBJECT) -#define DUK_HEAP_STRING_UC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NULL) -#define DUK_HTHREAD_STRING_UC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NULL) -#define DUK_HEAP_STRING_UC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_UNDEFINED) -#define DUK_HTHREAD_STRING_UC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_UNDEFINED) -#define DUK_HEAP_STRING_JSON_EXT_FUNCTION2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION2) -#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION2) -#define DUK_HEAP_STRING_JSON_EXT_FUNCTION1(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION1) -#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION1(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION1) -#define DUK_HEAP_STRING_JSON_EXT_NEGINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NEGINF) -#define DUK_HTHREAD_STRING_JSON_EXT_NEGINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NEGINF) -#define DUK_HEAP_STRING_JSON_EXT_POSINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_POSINF) -#define DUK_HTHREAD_STRING_JSON_EXT_POSINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_POSINF) -#define DUK_HEAP_STRING_JSON_EXT_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NAN) -#define DUK_HTHREAD_STRING_JSON_EXT_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NAN) -#define DUK_HEAP_STRING_JSON_EXT_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_UNDEFINED) -#define DUK_HTHREAD_STRING_JSON_EXT_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_UNDEFINED) -#define DUK_HEAP_STRING_TO_LOG_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOG_STRING) -#define DUK_HTHREAD_STRING_TO_LOG_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOG_STRING) -#define DUK_HEAP_STRING_CLOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLOG) -#define DUK_HTHREAD_STRING_CLOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLOG) -#define DUK_HEAP_STRING_LC_L(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_L) -#define DUK_HTHREAD_STRING_LC_L(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_L) -#define DUK_HEAP_STRING_LC_N(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_N) -#define DUK_HTHREAD_STRING_LC_N(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_N) -#define DUK_HEAP_STRING_LC_FATAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FATAL) -#define DUK_HTHREAD_STRING_LC_FATAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FATAL) -#define DUK_HEAP_STRING_LC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ERROR) -#define DUK_HTHREAD_STRING_LC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ERROR) -#define DUK_HEAP_STRING_LC_WARN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_WARN) -#define DUK_HTHREAD_STRING_LC_WARN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_WARN) -#define DUK_HEAP_STRING_LC_DEBUG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_DEBUG) -#define DUK_HTHREAD_STRING_LC_DEBUG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_DEBUG) -#define DUK_HEAP_STRING_LC_TRACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_TRACE) -#define DUK_HTHREAD_STRING_LC_TRACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_TRACE) -#define DUK_HEAP_STRING_RAW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RAW) -#define DUK_HTHREAD_STRING_RAW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RAW) -#define DUK_HEAP_STRING_FMT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FMT) -#define DUK_HTHREAD_STRING_FMT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FMT) -#define DUK_HEAP_STRING_CURRENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CURRENT) -#define DUK_HTHREAD_STRING_CURRENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CURRENT) -#define DUK_HEAP_STRING_RESUME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RESUME) -#define DUK_HTHREAD_STRING_RESUME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RESUME) -#define DUK_HEAP_STRING_COMPACT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPACT) -#define DUK_HTHREAD_STRING_COMPACT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPACT) -#define DUK_HEAP_STRING_JC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JC) -#define DUK_HTHREAD_STRING_JC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JC) -#define DUK_HEAP_STRING_JX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JX) -#define DUK_HTHREAD_STRING_JX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JX) -#define DUK_HEAP_STRING_BASE64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BASE64) -#define DUK_HTHREAD_STRING_BASE64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BASE64) -#define DUK_HEAP_STRING_HEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HEX) -#define DUK_HTHREAD_STRING_HEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HEX) -#define DUK_HEAP_STRING_DEC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC) -#define DUK_HTHREAD_STRING_DEC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC) -#define DUK_HEAP_STRING_ENC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENC) -#define DUK_HTHREAD_STRING_ENC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENC) -#define DUK_HEAP_STRING_FIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FIN) -#define DUK_HTHREAD_STRING_FIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FIN) -#define DUK_HEAP_STRING_GC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GC) -#define DUK_HTHREAD_STRING_GC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GC) -#define DUK_HEAP_STRING_ACT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ACT) -#define DUK_HTHREAD_STRING_ACT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ACT) -#define DUK_HEAP_STRING_LC_INFO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_INFO) -#define DUK_HTHREAD_STRING_LC_INFO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_INFO) -#define DUK_HEAP_STRING_VERSION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VERSION) -#define DUK_HTHREAD_STRING_VERSION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VERSION) -#define DUK_HEAP_STRING_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENV) -#define DUK_HTHREAD_STRING_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENV) -#define DUK_HEAP_STRING_MOD_LOADED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_LOADED) -#define DUK_HTHREAD_STRING_MOD_LOADED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_LOADED) -#define DUK_HEAP_STRING_MOD_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_SEARCH) -#define DUK_HTHREAD_STRING_MOD_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_SEARCH) -#define DUK_HEAP_STRING_ERR_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_THROW) -#define DUK_HTHREAD_STRING_ERR_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_THROW) -#define DUK_HEAP_STRING_ERR_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_CREATE) -#define DUK_HTHREAD_STRING_ERR_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_CREATE) -#define DUK_HEAP_STRING_COMPILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPILE) -#define DUK_HTHREAD_STRING_COMPILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPILE) -#define DUK_HEAP_STRING_INT_REGBASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_REGBASE) -#define DUK_HTHREAD_STRING_INT_REGBASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_REGBASE) -#define DUK_HEAP_STRING_INT_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THREAD) -#define DUK_HTHREAD_STRING_INT_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THREAD) -#define DUK_HEAP_STRING_INT_HANDLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_HANDLER) -#define DUK_HTHREAD_STRING_INT_HANDLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_HANDLER) -#define DUK_HEAP_STRING_INT_FINALIZER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FINALIZER) -#define DUK_HTHREAD_STRING_INT_FINALIZER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FINALIZER) -#define DUK_HEAP_STRING_INT_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_CALLEE) -#define DUK_HTHREAD_STRING_INT_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_CALLEE) -#define DUK_HEAP_STRING_INT_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_MAP) -#define DUK_HTHREAD_STRING_INT_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_MAP) -#define DUK_HEAP_STRING_INT_ARGS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_ARGS) -#define DUK_HTHREAD_STRING_INT_ARGS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_ARGS) -#define DUK_HEAP_STRING_INT_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THIS) -#define DUK_HTHREAD_STRING_INT_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THIS) -#define DUK_HEAP_STRING_INT_PC2LINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_PC2LINE) -#define DUK_HTHREAD_STRING_INT_PC2LINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_PC2LINE) -#define DUK_HEAP_STRING_INT_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_SOURCE) -#define DUK_HTHREAD_STRING_INT_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_SOURCE) -#define DUK_HEAP_STRING_INT_VARENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARENV) -#define DUK_HTHREAD_STRING_INT_VARENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARENV) -#define DUK_HEAP_STRING_INT_LEXENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_LEXENV) -#define DUK_HTHREAD_STRING_INT_LEXENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_LEXENV) -#define DUK_HEAP_STRING_INT_VARMAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARMAP) -#define DUK_HTHREAD_STRING_INT_VARMAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARMAP) -#define DUK_HEAP_STRING_INT_FORMALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FORMALS) -#define DUK_HTHREAD_STRING_INT_FORMALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FORMALS) -#define DUK_HEAP_STRING_INT_BYTECODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_BYTECODE) -#define DUK_HTHREAD_STRING_INT_BYTECODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_BYTECODE) -#define DUK_HEAP_STRING_INT_NEXT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_NEXT) -#define DUK_HTHREAD_STRING_INT_NEXT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_NEXT) -#define DUK_HEAP_STRING_INT_TARGET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TARGET) -#define DUK_HTHREAD_STRING_INT_TARGET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TARGET) -#define DUK_HEAP_STRING_INT_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VALUE) -#define DUK_HTHREAD_STRING_INT_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VALUE) -#define DUK_HEAP_STRING_LC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_POINTER) -#define DUK_HTHREAD_STRING_LC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_POINTER) -#define DUK_HEAP_STRING_INT_TRACEDATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TRACEDATA) -#define DUK_HTHREAD_STRING_INT_TRACEDATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TRACEDATA) -#define DUK_HEAP_STRING_LINE_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LINE_NUMBER) -#define DUK_HTHREAD_STRING_LINE_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LINE_NUMBER) -#define DUK_HEAP_STRING_FILE_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILE_NAME) -#define DUK_HTHREAD_STRING_FILE_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILE_NAME) -#define DUK_HEAP_STRING_PC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PC) -#define DUK_HTHREAD_STRING_PC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PC) -#define DUK_HEAP_STRING_STACK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STACK) -#define DUK_HTHREAD_STRING_STACK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STACK) -#define DUK_HEAP_STRING_THROW_TYPE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THROW_TYPE_ERROR) -#define DUK_HTHREAD_STRING_THROW_TYPE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THROW_TYPE_ERROR) -#define DUK_HEAP_STRING_DUKTAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DUKTAPE) -#define DUK_HTHREAD_STRING_DUKTAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DUKTAPE) -#define DUK_HEAP_STRING_SET_FLOAT64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FLOAT64) -#define DUK_HTHREAD_STRING_SET_FLOAT64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FLOAT64) -#define DUK_HEAP_STRING_SET_FLOAT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FLOAT32) -#define DUK_HTHREAD_STRING_SET_FLOAT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FLOAT32) -#define DUK_HEAP_STRING_SET_UINT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT32) -#define DUK_HTHREAD_STRING_SET_UINT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT32) -#define DUK_HEAP_STRING_SET_INT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT32) -#define DUK_HTHREAD_STRING_SET_INT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT32) -#define DUK_HEAP_STRING_SET_UINT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT16) -#define DUK_HTHREAD_STRING_SET_UINT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT16) -#define DUK_HEAP_STRING_SET_INT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT16) -#define DUK_HTHREAD_STRING_SET_INT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT16) -#define DUK_HEAP_STRING_SET_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT8) -#define DUK_HTHREAD_STRING_SET_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT8) -#define DUK_HEAP_STRING_SET_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT8) -#define DUK_HTHREAD_STRING_SET_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT8) -#define DUK_HEAP_STRING_GET_FLOAT64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FLOAT64) -#define DUK_HTHREAD_STRING_GET_FLOAT64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FLOAT64) -#define DUK_HEAP_STRING_GET_FLOAT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FLOAT32) -#define DUK_HTHREAD_STRING_GET_FLOAT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FLOAT32) -#define DUK_HEAP_STRING_GET_UINT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT32) -#define DUK_HTHREAD_STRING_GET_UINT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT32) -#define DUK_HEAP_STRING_GET_INT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT32) -#define DUK_HTHREAD_STRING_GET_INT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT32) -#define DUK_HEAP_STRING_GET_UINT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT16) -#define DUK_HTHREAD_STRING_GET_UINT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT16) -#define DUK_HEAP_STRING_GET_INT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT16) -#define DUK_HTHREAD_STRING_GET_INT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT16) -#define DUK_HEAP_STRING_GET_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT8) -#define DUK_HTHREAD_STRING_GET_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT8) -#define DUK_HEAP_STRING_GET_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT8) -#define DUK_HTHREAD_STRING_GET_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT8) -#define DUK_HEAP_STRING_SUBARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBARRAY) -#define DUK_HTHREAD_STRING_SUBARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBARRAY) -#define DUK_HEAP_STRING_BYTES_PER_ELEMENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTES_PER_ELEMENT) -#define DUK_HTHREAD_STRING_BYTES_PER_ELEMENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTES_PER_ELEMENT) -#define DUK_HEAP_STRING_BYTE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_OFFSET) -#define DUK_HTHREAD_STRING_BYTE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_OFFSET) -#define DUK_HEAP_STRING_LC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BUFFER) -#define DUK_HTHREAD_STRING_LC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BUFFER) -#define DUK_HEAP_STRING_IS_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_VIEW) -#define DUK_HTHREAD_STRING_IS_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_VIEW) -#define DUK_HEAP_STRING_DATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA) -#define DUK_HTHREAD_STRING_DATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA) -#define DUK_HEAP_STRING_TYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE) -#define DUK_HTHREAD_STRING_TYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE) -#define DUK_HEAP_STRING_WRITE_INT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT_BE) -#define DUK_HTHREAD_STRING_WRITE_INT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT_BE) -#define DUK_HEAP_STRING_WRITE_INT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT_LE) -#define DUK_HTHREAD_STRING_WRITE_INT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT_LE) -#define DUK_HEAP_STRING_WRITE_UINT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT_BE) -#define DUK_HEAP_STRING_WRITE_UINT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT_LE) -#define DUK_HEAP_STRING_WRITE_DOUBLE_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_DOUBLE_BE) -#define DUK_HTHREAD_STRING_WRITE_DOUBLE_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_DOUBLE_BE) -#define DUK_HEAP_STRING_WRITE_DOUBLE_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_DOUBLE_LE) -#define DUK_HTHREAD_STRING_WRITE_DOUBLE_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_DOUBLE_LE) -#define DUK_HEAP_STRING_WRITE_FLOAT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_FLOAT_BE) -#define DUK_HTHREAD_STRING_WRITE_FLOAT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_FLOAT_BE) -#define DUK_HEAP_STRING_WRITE_FLOAT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_FLOAT_LE) -#define DUK_HTHREAD_STRING_WRITE_FLOAT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_FLOAT_LE) -#define DUK_HEAP_STRING_WRITE_INT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT32_BE) -#define DUK_HTHREAD_STRING_WRITE_INT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT32_BE) -#define DUK_HEAP_STRING_WRITE_INT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT32_LE) -#define DUK_HTHREAD_STRING_WRITE_INT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT32_LE) -#define DUK_HEAP_STRING_WRITE_UINT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT32_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT32_BE) -#define DUK_HEAP_STRING_WRITE_UINT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT32_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT32_LE) -#define DUK_HEAP_STRING_WRITE_INT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT16_BE) -#define DUK_HTHREAD_STRING_WRITE_INT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT16_BE) -#define DUK_HEAP_STRING_WRITE_INT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT16_LE) -#define DUK_HTHREAD_STRING_WRITE_INT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT16_LE) -#define DUK_HEAP_STRING_WRITE_UINT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT16_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT16_BE) -#define DUK_HEAP_STRING_WRITE_UINT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT16_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT16_LE) -#define DUK_HEAP_STRING_WRITE_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT8) -#define DUK_HTHREAD_STRING_WRITE_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT8) -#define DUK_HEAP_STRING_WRITE_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT8) -#define DUK_HTHREAD_STRING_WRITE_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT8) -#define DUK_HEAP_STRING_READ_INT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT_BE) -#define DUK_HTHREAD_STRING_READ_INT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT_BE) -#define DUK_HEAP_STRING_READ_INT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT_LE) -#define DUK_HTHREAD_STRING_READ_INT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT_LE) -#define DUK_HEAP_STRING_READ_UINT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT_BE) -#define DUK_HTHREAD_STRING_READ_UINT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT_BE) -#define DUK_HEAP_STRING_READ_UINT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT_LE) -#define DUK_HTHREAD_STRING_READ_UINT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT_LE) -#define DUK_HEAP_STRING_READ_DOUBLE_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_DOUBLE_BE) -#define DUK_HTHREAD_STRING_READ_DOUBLE_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_DOUBLE_BE) -#define DUK_HEAP_STRING_READ_DOUBLE_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_DOUBLE_LE) -#define DUK_HTHREAD_STRING_READ_DOUBLE_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_DOUBLE_LE) -#define DUK_HEAP_STRING_READ_FLOAT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_FLOAT_BE) -#define DUK_HTHREAD_STRING_READ_FLOAT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_FLOAT_BE) -#define DUK_HEAP_STRING_READ_FLOAT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_FLOAT_LE) -#define DUK_HTHREAD_STRING_READ_FLOAT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_FLOAT_LE) -#define DUK_HEAP_STRING_READ_INT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT32_BE) -#define DUK_HTHREAD_STRING_READ_INT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT32_BE) -#define DUK_HEAP_STRING_READ_INT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT32_LE) -#define DUK_HTHREAD_STRING_READ_INT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT32_LE) -#define DUK_HEAP_STRING_READ_UINT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT32_BE) -#define DUK_HTHREAD_STRING_READ_UINT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT32_BE) -#define DUK_HEAP_STRING_READ_UINT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT32_LE) -#define DUK_HTHREAD_STRING_READ_UINT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT32_LE) -#define DUK_HEAP_STRING_READ_INT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT16_BE) -#define DUK_HTHREAD_STRING_READ_INT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT16_BE) -#define DUK_HEAP_STRING_READ_INT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT16_LE) -#define DUK_HTHREAD_STRING_READ_INT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT16_LE) -#define DUK_HEAP_STRING_READ_UINT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT16_BE) -#define DUK_HTHREAD_STRING_READ_UINT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT16_BE) -#define DUK_HEAP_STRING_READ_UINT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT16_LE) -#define DUK_HTHREAD_STRING_READ_UINT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT16_LE) -#define DUK_HEAP_STRING_READ_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT8) -#define DUK_HTHREAD_STRING_READ_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT8) -#define DUK_HEAP_STRING_READ_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT8) -#define DUK_HTHREAD_STRING_READ_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT8) -#define DUK_HEAP_STRING_COPY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COPY) -#define DUK_HTHREAD_STRING_COPY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COPY) -#define DUK_HEAP_STRING_EQUALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EQUALS) -#define DUK_HTHREAD_STRING_EQUALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EQUALS) -#define DUK_HEAP_STRING_FILL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILL) -#define DUK_HTHREAD_STRING_FILL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILL) -#define DUK_HEAP_STRING_WRITE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE) -#define DUK_HTHREAD_STRING_WRITE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE) -#define DUK_HEAP_STRING_COMPARE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPARE) -#define DUK_HTHREAD_STRING_COMPARE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPARE) -#define DUK_HEAP_STRING_BYTE_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_LENGTH) -#define DUK_HTHREAD_STRING_BYTE_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_LENGTH) -#define DUK_HEAP_STRING_IS_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_BUFFER) -#define DUK_HTHREAD_STRING_IS_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_BUFFER) -#define DUK_HEAP_STRING_IS_ENCODING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_ENCODING) -#define DUK_HTHREAD_STRING_IS_ENCODING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_ENCODING) -#define DUK_HEAP_STRING_EXPORTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORTS) -#define DUK_HTHREAD_STRING_EXPORTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORTS) -#define DUK_HEAP_STRING_ID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ID) -#define DUK_HTHREAD_STRING_ID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ID) -#define DUK_HEAP_STRING_REQUIRE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REQUIRE) -#define DUK_HTHREAD_STRING_REQUIRE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REQUIRE) -#define DUK_HEAP_STRING___PROTO__(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX___PROTO__) -#define DUK_HTHREAD_STRING___PROTO__(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX___PROTO__) -#define DUK_HEAP_STRING_SET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_SET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_PROTOTYPE_OF) -#define DUK_HEAP_STRING_OWN_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OWN_KEYS) -#define DUK_HTHREAD_STRING_OWN_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OWN_KEYS) -#define DUK_HEAP_STRING_ENUMERATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERATE) -#define DUK_HTHREAD_STRING_ENUMERATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERATE) -#define DUK_HEAP_STRING_DELETE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE_PROPERTY) -#define DUK_HTHREAD_STRING_DELETE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE_PROPERTY) -#define DUK_HEAP_STRING_HAS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS) -#define DUK_HTHREAD_STRING_HAS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS) -#define DUK_HEAP_STRING_PROXY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROXY) -#define DUK_HTHREAD_STRING_PROXY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROXY) -#define DUK_HEAP_STRING_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLEE) -#define DUK_HTHREAD_STRING_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLEE) -#define DUK_HEAP_STRING_INVALID_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INVALID_DATE) -#define DUK_HTHREAD_STRING_INVALID_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INVALID_DATE) -#define DUK_HEAP_STRING_BRACKETED_ELLIPSIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BRACKETED_ELLIPSIS) -#define DUK_HTHREAD_STRING_BRACKETED_ELLIPSIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BRACKETED_ELLIPSIS) -#define DUK_HEAP_STRING_NEWLINE_TAB(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEWLINE_TAB) -#define DUK_HTHREAD_STRING_NEWLINE_TAB(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEWLINE_TAB) -#define DUK_HEAP_STRING_SPACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPACE) -#define DUK_HTHREAD_STRING_SPACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPACE) -#define DUK_HEAP_STRING_COMMA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMMA) -#define DUK_HTHREAD_STRING_COMMA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMMA) -#define DUK_HEAP_STRING_MINUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_ZERO) -#define DUK_HTHREAD_STRING_MINUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_ZERO) -#define DUK_HEAP_STRING_PLUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PLUS_ZERO) -#define DUK_HTHREAD_STRING_PLUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PLUS_ZERO) -#define DUK_HEAP_STRING_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ZERO) -#define DUK_HTHREAD_STRING_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ZERO) -#define DUK_HEAP_STRING_MINUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_INFINITY) -#define DUK_HTHREAD_STRING_MINUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_INFINITY) -#define DUK_HEAP_STRING_PLUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PLUS_INFINITY) -#define DUK_HTHREAD_STRING_PLUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PLUS_INFINITY) -#define DUK_HEAP_STRING_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INFINITY) -#define DUK_HTHREAD_STRING_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INFINITY) -#define DUK_HEAP_STRING_LC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_OBJECT) -#define DUK_HTHREAD_STRING_LC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_OBJECT) -#define DUK_HEAP_STRING_LC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_STRING) -#define DUK_HTHREAD_STRING_LC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_STRING) -#define DUK_HEAP_STRING_LC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NUMBER) -#define DUK_HTHREAD_STRING_LC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NUMBER) -#define DUK_HEAP_STRING_LC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BOOLEAN) -#define DUK_HTHREAD_STRING_LC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BOOLEAN) -#define DUK_HEAP_STRING_LC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_UNDEFINED) -#define DUK_HTHREAD_STRING_LC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_UNDEFINED) -#define DUK_HEAP_STRING_STRINGIFY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STRINGIFY) -#define DUK_HTHREAD_STRING_STRINGIFY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STRINGIFY) -#define DUK_HEAP_STRING_TAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TAN) -#define DUK_HTHREAD_STRING_TAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TAN) -#define DUK_HEAP_STRING_SQRT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT) -#define DUK_HTHREAD_STRING_SQRT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT) -#define DUK_HEAP_STRING_SIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SIN) -#define DUK_HTHREAD_STRING_SIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SIN) -#define DUK_HEAP_STRING_ROUND(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ROUND) -#define DUK_HTHREAD_STRING_ROUND(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ROUND) -#define DUK_HEAP_STRING_RANDOM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RANDOM) -#define DUK_HTHREAD_STRING_RANDOM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RANDOM) -#define DUK_HEAP_STRING_POW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POW) -#define DUK_HTHREAD_STRING_POW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POW) -#define DUK_HEAP_STRING_MIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MIN) -#define DUK_HTHREAD_STRING_MIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MIN) -#define DUK_HEAP_STRING_MAX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAX) -#define DUK_HTHREAD_STRING_MAX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAX) -#define DUK_HEAP_STRING_LOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG) -#define DUK_HTHREAD_STRING_LOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG) -#define DUK_HEAP_STRING_FLOOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOOR) -#define DUK_HTHREAD_STRING_FLOOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOOR) -#define DUK_HEAP_STRING_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXP) -#define DUK_HTHREAD_STRING_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXP) -#define DUK_HEAP_STRING_COS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COS) -#define DUK_HTHREAD_STRING_COS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COS) -#define DUK_HEAP_STRING_CEIL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CEIL) -#define DUK_HTHREAD_STRING_CEIL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CEIL) -#define DUK_HEAP_STRING_ATAN2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ATAN2) -#define DUK_HTHREAD_STRING_ATAN2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ATAN2) -#define DUK_HEAP_STRING_ATAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ATAN) -#define DUK_HTHREAD_STRING_ATAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ATAN) -#define DUK_HEAP_STRING_ASIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ASIN) -#define DUK_HTHREAD_STRING_ASIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ASIN) -#define DUK_HEAP_STRING_ACOS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ACOS) -#define DUK_HTHREAD_STRING_ACOS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ACOS) -#define DUK_HEAP_STRING_ABS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ABS) -#define DUK_HTHREAD_STRING_ABS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ABS) -#define DUK_HEAP_STRING_SQRT2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT2) -#define DUK_HTHREAD_STRING_SQRT2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT2) -#define DUK_HEAP_STRING_SQRT1_2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT1_2) -#define DUK_HTHREAD_STRING_SQRT1_2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT1_2) -#define DUK_HEAP_STRING_PI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PI) -#define DUK_HTHREAD_STRING_PI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PI) -#define DUK_HEAP_STRING_LOG10E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG10E) -#define DUK_HTHREAD_STRING_LOG10E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG10E) -#define DUK_HEAP_STRING_LOG2E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG2E) -#define DUK_HTHREAD_STRING_LOG2E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG2E) -#define DUK_HEAP_STRING_LN2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LN2) -#define DUK_HTHREAD_STRING_LN2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LN2) -#define DUK_HEAP_STRING_LN10(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LN10) -#define DUK_HTHREAD_STRING_LN10(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LN10) -#define DUK_HEAP_STRING_E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_E) -#define DUK_HTHREAD_STRING_E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_E) -#define DUK_HEAP_STRING_MESSAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MESSAGE) -#define DUK_HTHREAD_STRING_MESSAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MESSAGE) -#define DUK_HEAP_STRING_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAME) -#define DUK_HTHREAD_STRING_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAME) -#define DUK_HEAP_STRING_INPUT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INPUT) -#define DUK_HTHREAD_STRING_INPUT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INPUT) -#define DUK_HEAP_STRING_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX) -#define DUK_HTHREAD_STRING_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX) -#define DUK_HEAP_STRING_ESCAPED_EMPTY_REGEXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) -#define DUK_HTHREAD_STRING_ESCAPED_EMPTY_REGEXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) -#define DUK_HEAP_STRING_LAST_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX) -#define DUK_HTHREAD_STRING_LAST_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX) -#define DUK_HEAP_STRING_MULTILINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MULTILINE) -#define DUK_HTHREAD_STRING_MULTILINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MULTILINE) -#define DUK_HEAP_STRING_IGNORE_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IGNORE_CASE) -#define DUK_HTHREAD_STRING_IGNORE_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IGNORE_CASE) -#define DUK_HEAP_STRING_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOURCE) -#define DUK_HTHREAD_STRING_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOURCE) -#define DUK_HEAP_STRING_TEST(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TEST) -#define DUK_HTHREAD_STRING_TEST(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TEST) -#define DUK_HEAP_STRING_EXEC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXEC) -#define DUK_HTHREAD_STRING_EXEC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXEC) -#define DUK_HEAP_STRING_TO_GMT_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_GMT_STRING) -#define DUK_HTHREAD_STRING_TO_GMT_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_GMT_STRING) -#define DUK_HEAP_STRING_SET_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_YEAR) -#define DUK_HTHREAD_STRING_SET_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_YEAR) -#define DUK_HEAP_STRING_GET_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_YEAR) -#define DUK_HTHREAD_STRING_GET_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_YEAR) -#define DUK_HEAP_STRING_TO_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_JSON) -#define DUK_HTHREAD_STRING_TO_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_JSON) -#define DUK_HEAP_STRING_TO_ISO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_ISO_STRING) -#define DUK_HTHREAD_STRING_TO_ISO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_ISO_STRING) -#define DUK_HEAP_STRING_TO_UTC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UTC_STRING) -#define DUK_HTHREAD_STRING_TO_UTC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UTC_STRING) -#define DUK_HEAP_STRING_SET_UTC_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_FULL_YEAR) -#define DUK_HTHREAD_STRING_SET_UTC_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_FULL_YEAR) -#define DUK_HEAP_STRING_SET_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FULL_YEAR) -#define DUK_HTHREAD_STRING_SET_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FULL_YEAR) -#define DUK_HEAP_STRING_SET_UTC_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MONTH) -#define DUK_HTHREAD_STRING_SET_UTC_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MONTH) -#define DUK_HEAP_STRING_SET_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MONTH) -#define DUK_HTHREAD_STRING_SET_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MONTH) -#define DUK_HEAP_STRING_SET_UTC_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_DATE) -#define DUK_HTHREAD_STRING_SET_UTC_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_DATE) -#define DUK_HEAP_STRING_SET_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_DATE) -#define DUK_HTHREAD_STRING_SET_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_DATE) -#define DUK_HEAP_STRING_SET_UTC_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_HOURS) -#define DUK_HTHREAD_STRING_SET_UTC_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_HOURS) -#define DUK_HEAP_STRING_SET_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_HOURS) -#define DUK_HTHREAD_STRING_SET_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_HOURS) -#define DUK_HEAP_STRING_SET_UTC_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MINUTES) -#define DUK_HTHREAD_STRING_SET_UTC_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MINUTES) -#define DUK_HEAP_STRING_SET_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MINUTES) -#define DUK_HTHREAD_STRING_SET_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MINUTES) -#define DUK_HEAP_STRING_SET_UTC_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_SECONDS) -#define DUK_HTHREAD_STRING_SET_UTC_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_SECONDS) -#define DUK_HEAP_STRING_SET_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_SECONDS) -#define DUK_HTHREAD_STRING_SET_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_SECONDS) -#define DUK_HEAP_STRING_SET_UTC_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MILLISECONDS) -#define DUK_HTHREAD_STRING_SET_UTC_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MILLISECONDS) -#define DUK_HEAP_STRING_SET_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MILLISECONDS) -#define DUK_HTHREAD_STRING_SET_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MILLISECONDS) -#define DUK_HEAP_STRING_SET_TIME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_TIME) -#define DUK_HTHREAD_STRING_SET_TIME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_TIME) -#define DUK_HEAP_STRING_GET_TIMEZONE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_TIMEZONE_OFFSET) -#define DUK_HTHREAD_STRING_GET_TIMEZONE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_TIMEZONE_OFFSET) -#define DUK_HEAP_STRING_GET_UTC_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MILLISECONDS) -#define DUK_HTHREAD_STRING_GET_UTC_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MILLISECONDS) -#define DUK_HEAP_STRING_GET_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MILLISECONDS) -#define DUK_HTHREAD_STRING_GET_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MILLISECONDS) -#define DUK_HEAP_STRING_GET_UTC_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_SECONDS) -#define DUK_HTHREAD_STRING_GET_UTC_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_SECONDS) -#define DUK_HEAP_STRING_GET_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_SECONDS) -#define DUK_HTHREAD_STRING_GET_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_SECONDS) -#define DUK_HEAP_STRING_GET_UTC_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MINUTES) -#define DUK_HTHREAD_STRING_GET_UTC_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MINUTES) -#define DUK_HEAP_STRING_GET_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MINUTES) -#define DUK_HTHREAD_STRING_GET_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MINUTES) -#define DUK_HEAP_STRING_GET_UTC_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_HOURS) -#define DUK_HTHREAD_STRING_GET_UTC_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_HOURS) -#define DUK_HEAP_STRING_GET_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_HOURS) -#define DUK_HTHREAD_STRING_GET_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_HOURS) -#define DUK_HEAP_STRING_GET_UTC_DAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_DAY) -#define DUK_HTHREAD_STRING_GET_UTC_DAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_DAY) -#define DUK_HEAP_STRING_GET_DAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_DAY) -#define DUK_HTHREAD_STRING_GET_DAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_DAY) -#define DUK_HEAP_STRING_GET_UTC_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_DATE) -#define DUK_HTHREAD_STRING_GET_UTC_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_DATE) -#define DUK_HEAP_STRING_GET_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_DATE) -#define DUK_HTHREAD_STRING_GET_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_DATE) -#define DUK_HEAP_STRING_GET_UTC_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MONTH) -#define DUK_HTHREAD_STRING_GET_UTC_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MONTH) -#define DUK_HEAP_STRING_GET_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MONTH) -#define DUK_HTHREAD_STRING_GET_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MONTH) -#define DUK_HEAP_STRING_GET_UTC_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_FULL_YEAR) -#define DUK_HTHREAD_STRING_GET_UTC_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_FULL_YEAR) -#define DUK_HEAP_STRING_GET_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FULL_YEAR) -#define DUK_HTHREAD_STRING_GET_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FULL_YEAR) -#define DUK_HEAP_STRING_GET_TIME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_TIME) -#define DUK_HTHREAD_STRING_GET_TIME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_TIME) -#define DUK_HEAP_STRING_TO_LOCALE_TIME_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_TIME_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_TIME_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_TIME_STRING) -#define DUK_HEAP_STRING_TO_LOCALE_DATE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_DATE_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_DATE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_DATE_STRING) -#define DUK_HEAP_STRING_TO_TIME_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_TIME_STRING) -#define DUK_HTHREAD_STRING_TO_TIME_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_TIME_STRING) -#define DUK_HEAP_STRING_TO_DATE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_DATE_STRING) -#define DUK_HTHREAD_STRING_TO_DATE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_DATE_STRING) -#define DUK_HEAP_STRING_NOW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NOW) -#define DUK_HTHREAD_STRING_NOW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NOW) -#define DUK_HEAP_STRING_UTC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UTC) -#define DUK_HTHREAD_STRING_UTC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UTC) -#define DUK_HEAP_STRING_PARSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE) -#define DUK_HTHREAD_STRING_PARSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE) -#define DUK_HEAP_STRING_TO_PRECISION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_PRECISION) -#define DUK_HTHREAD_STRING_TO_PRECISION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_PRECISION) -#define DUK_HEAP_STRING_TO_EXPONENTIAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_EXPONENTIAL) -#define DUK_HTHREAD_STRING_TO_EXPONENTIAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_EXPONENTIAL) -#define DUK_HEAP_STRING_TO_FIXED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_FIXED) -#define DUK_HTHREAD_STRING_TO_FIXED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_FIXED) -#define DUK_HEAP_STRING_POSITIVE_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POSITIVE_INFINITY) -#define DUK_HTHREAD_STRING_POSITIVE_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POSITIVE_INFINITY) -#define DUK_HEAP_STRING_NEGATIVE_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEGATIVE_INFINITY) -#define DUK_HTHREAD_STRING_NEGATIVE_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEGATIVE_INFINITY) -#define DUK_HEAP_STRING_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAN) -#define DUK_HTHREAD_STRING_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAN) -#define DUK_HEAP_STRING_MIN_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MIN_VALUE) -#define DUK_HTHREAD_STRING_MIN_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MIN_VALUE) -#define DUK_HEAP_STRING_MAX_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAX_VALUE) -#define DUK_HTHREAD_STRING_MAX_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAX_VALUE) -#define DUK_HEAP_STRING_SUBSTR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBSTR) -#define DUK_HTHREAD_STRING_SUBSTR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBSTR) -#define DUK_HEAP_STRING_TRIM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRIM) -#define DUK_HTHREAD_STRING_TRIM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRIM) -#define DUK_HEAP_STRING_TO_LOCALE_UPPER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_UPPER_CASE) -#define DUK_HTHREAD_STRING_TO_LOCALE_UPPER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_UPPER_CASE) -#define DUK_HEAP_STRING_TO_UPPER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UPPER_CASE) -#define DUK_HTHREAD_STRING_TO_UPPER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UPPER_CASE) -#define DUK_HEAP_STRING_TO_LOCALE_LOWER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_LOWER_CASE) -#define DUK_HTHREAD_STRING_TO_LOCALE_LOWER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_LOWER_CASE) -#define DUK_HEAP_STRING_TO_LOWER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOWER_CASE) -#define DUK_HTHREAD_STRING_TO_LOWER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOWER_CASE) -#define DUK_HEAP_STRING_SUBSTRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBSTRING) -#define DUK_HTHREAD_STRING_SUBSTRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBSTRING) -#define DUK_HEAP_STRING_SPLIT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPLIT) -#define DUK_HTHREAD_STRING_SPLIT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPLIT) -#define DUK_HEAP_STRING_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SEARCH) -#define DUK_HTHREAD_STRING_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SEARCH) -#define DUK_HEAP_STRING_REPLACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REPLACE) -#define DUK_HTHREAD_STRING_REPLACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REPLACE) -#define DUK_HEAP_STRING_MATCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATCH) -#define DUK_HTHREAD_STRING_MATCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATCH) -#define DUK_HEAP_STRING_LOCALE_COMPARE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOCALE_COMPARE) -#define DUK_HTHREAD_STRING_LOCALE_COMPARE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOCALE_COMPARE) -#define DUK_HEAP_STRING_CHAR_CODE_AT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CHAR_CODE_AT) -#define DUK_HTHREAD_STRING_CHAR_CODE_AT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CHAR_CODE_AT) -#define DUK_HEAP_STRING_CHAR_AT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CHAR_AT) -#define DUK_HTHREAD_STRING_CHAR_AT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CHAR_AT) -#define DUK_HEAP_STRING_FROM_CHAR_CODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FROM_CHAR_CODE) -#define DUK_HTHREAD_STRING_FROM_CHAR_CODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FROM_CHAR_CODE) -#define DUK_HEAP_STRING_REDUCE_RIGHT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REDUCE_RIGHT) -#define DUK_HTHREAD_STRING_REDUCE_RIGHT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REDUCE_RIGHT) -#define DUK_HEAP_STRING_REDUCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REDUCE) -#define DUK_HTHREAD_STRING_REDUCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REDUCE) -#define DUK_HEAP_STRING_FILTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILTER) -#define DUK_HTHREAD_STRING_FILTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILTER) -#define DUK_HEAP_STRING_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAP) -#define DUK_HTHREAD_STRING_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAP) -#define DUK_HEAP_STRING_FOR_EACH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FOR_EACH) -#define DUK_HTHREAD_STRING_FOR_EACH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FOR_EACH) -#define DUK_HEAP_STRING_SOME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOME) -#define DUK_HTHREAD_STRING_SOME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOME) -#define DUK_HEAP_STRING_EVERY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVERY) -#define DUK_HTHREAD_STRING_EVERY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVERY) -#define DUK_HEAP_STRING_LAST_INDEX_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX_OF) -#define DUK_HTHREAD_STRING_LAST_INDEX_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX_OF) -#define DUK_HEAP_STRING_INDEX_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX_OF) -#define DUK_HTHREAD_STRING_INDEX_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX_OF) -#define DUK_HEAP_STRING_UNSHIFT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UNSHIFT) -#define DUK_HTHREAD_STRING_UNSHIFT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UNSHIFT) -#define DUK_HEAP_STRING_SPLICE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPLICE) -#define DUK_HTHREAD_STRING_SPLICE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPLICE) -#define DUK_HEAP_STRING_SORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SORT) -#define DUK_HTHREAD_STRING_SORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SORT) -#define DUK_HEAP_STRING_SLICE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SLICE) -#define DUK_HTHREAD_STRING_SLICE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SLICE) -#define DUK_HEAP_STRING_SHIFT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SHIFT) -#define DUK_HTHREAD_STRING_SHIFT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SHIFT) -#define DUK_HEAP_STRING_REVERSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REVERSE) -#define DUK_HTHREAD_STRING_REVERSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REVERSE) -#define DUK_HEAP_STRING_PUSH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PUSH) -#define DUK_HTHREAD_STRING_PUSH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PUSH) -#define DUK_HEAP_STRING_POP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POP) -#define DUK_HTHREAD_STRING_POP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POP) -#define DUK_HEAP_STRING_JOIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JOIN) -#define DUK_HTHREAD_STRING_JOIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JOIN) -#define DUK_HEAP_STRING_CONCAT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONCAT) -#define DUK_HTHREAD_STRING_CONCAT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONCAT) -#define DUK_HEAP_STRING_IS_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_ARRAY) -#define DUK_HTHREAD_STRING_IS_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_ARRAY) -#define DUK_HEAP_STRING_LC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ARGUMENTS) -#define DUK_HTHREAD_STRING_LC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ARGUMENTS) -#define DUK_HEAP_STRING_CALLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLER) -#define DUK_HTHREAD_STRING_CALLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLER) -#define DUK_HEAP_STRING_BIND(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BIND) -#define DUK_HTHREAD_STRING_BIND(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BIND) -#define DUK_HEAP_STRING_CALL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALL) -#define DUK_HTHREAD_STRING_CALL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALL) -#define DUK_HEAP_STRING_APPLY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_APPLY) -#define DUK_HTHREAD_STRING_APPLY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_APPLY) -#define DUK_HEAP_STRING_PROPERTY_IS_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROPERTY_IS_ENUMERABLE) -#define DUK_HTHREAD_STRING_PROPERTY_IS_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROPERTY_IS_ENUMERABLE) -#define DUK_HEAP_STRING_IS_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_IS_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_PROTOTYPE_OF) -#define DUK_HEAP_STRING_HAS_OWN_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS_OWN_PROPERTY) -#define DUK_HTHREAD_STRING_HAS_OWN_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS_OWN_PROPERTY) -#define DUK_HEAP_STRING_VALUE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE_OF) -#define DUK_HTHREAD_STRING_VALUE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE_OF) -#define DUK_HEAP_STRING_TO_LOCALE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_STRING) -#define DUK_HEAP_STRING_TO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_STRING) -#define DUK_HTHREAD_STRING_TO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_STRING) -#define DUK_HEAP_STRING_CONSTRUCTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONSTRUCTOR) -#define DUK_HTHREAD_STRING_CONSTRUCTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONSTRUCTOR) -#define DUK_HEAP_STRING_SET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET) -#define DUK_HTHREAD_STRING_SET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET) -#define DUK_HEAP_STRING_GET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET) -#define DUK_HTHREAD_STRING_GET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET) -#define DUK_HEAP_STRING_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERABLE) -#define DUK_HTHREAD_STRING_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERABLE) -#define DUK_HEAP_STRING_CONFIGURABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONFIGURABLE) -#define DUK_HTHREAD_STRING_CONFIGURABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONFIGURABLE) -#define DUK_HEAP_STRING_WRITABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITABLE) -#define DUK_HTHREAD_STRING_WRITABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITABLE) -#define DUK_HEAP_STRING_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE) -#define DUK_HTHREAD_STRING_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE) -#define DUK_HEAP_STRING_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_KEYS) -#define DUK_HTHREAD_STRING_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_KEYS) -#define DUK_HEAP_STRING_IS_EXTENSIBLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_EXTENSIBLE) -#define DUK_HTHREAD_STRING_IS_EXTENSIBLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_EXTENSIBLE) -#define DUK_HEAP_STRING_IS_FROZEN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_FROZEN) -#define DUK_HTHREAD_STRING_IS_FROZEN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_FROZEN) -#define DUK_HEAP_STRING_IS_SEALED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_SEALED) -#define DUK_HTHREAD_STRING_IS_SEALED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_SEALED) -#define DUK_HEAP_STRING_PREVENT_EXTENSIONS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PREVENT_EXTENSIONS) -#define DUK_HTHREAD_STRING_PREVENT_EXTENSIONS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PREVENT_EXTENSIONS) -#define DUK_HEAP_STRING_FREEZE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FREEZE) -#define DUK_HTHREAD_STRING_FREEZE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FREEZE) -#define DUK_HEAP_STRING_SEAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SEAL) -#define DUK_HTHREAD_STRING_SEAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SEAL) -#define DUK_HEAP_STRING_DEFINE_PROPERTIES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTIES) -#define DUK_HTHREAD_STRING_DEFINE_PROPERTIES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTIES) -#define DUK_HEAP_STRING_DEFINE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTY) -#define DUK_HTHREAD_STRING_DEFINE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTY) -#define DUK_HEAP_STRING_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CREATE) -#define DUK_HTHREAD_STRING_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CREATE) -#define DUK_HEAP_STRING_GET_OWN_PROPERTY_NAMES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_OWN_PROPERTY_NAMES) -#define DUK_HTHREAD_STRING_GET_OWN_PROPERTY_NAMES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_OWN_PROPERTY_NAMES) -#define DUK_HEAP_STRING_GET_OWN_PROPERTY_DESCRIPTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR) -#define DUK_HTHREAD_STRING_GET_OWN_PROPERTY_DESCRIPTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR) -#define DUK_HEAP_STRING_GET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_GET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_PROTOTYPE_OF) -#define DUK_HEAP_STRING_PROTOTYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTOTYPE) -#define DUK_HTHREAD_STRING_PROTOTYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTOTYPE) -#define DUK_HEAP_STRING_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LENGTH) -#define DUK_HTHREAD_STRING_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LENGTH) -#define DUK_HEAP_STRING_ALERT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ALERT) -#define DUK_HTHREAD_STRING_ALERT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ALERT) -#define DUK_HEAP_STRING_PRINT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PRINT) -#define DUK_HTHREAD_STRING_PRINT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PRINT) -#define DUK_HEAP_STRING_UNESCAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UNESCAPE) -#define DUK_HTHREAD_STRING_UNESCAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UNESCAPE) -#define DUK_HEAP_STRING_ESCAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPE) -#define DUK_HTHREAD_STRING_ESCAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPE) -#define DUK_HEAP_STRING_ENCODE_URI_COMPONENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENCODE_URI_COMPONENT) -#define DUK_HTHREAD_STRING_ENCODE_URI_COMPONENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENCODE_URI_COMPONENT) -#define DUK_HEAP_STRING_ENCODE_URI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENCODE_URI) -#define DUK_HTHREAD_STRING_ENCODE_URI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENCODE_URI) -#define DUK_HEAP_STRING_DECODE_URI_COMPONENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DECODE_URI_COMPONENT) -#define DUK_HTHREAD_STRING_DECODE_URI_COMPONENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DECODE_URI_COMPONENT) -#define DUK_HEAP_STRING_DECODE_URI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DECODE_URI) -#define DUK_HTHREAD_STRING_DECODE_URI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DECODE_URI) -#define DUK_HEAP_STRING_IS_FINITE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_FINITE) -#define DUK_HTHREAD_STRING_IS_FINITE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_FINITE) -#define DUK_HEAP_STRING_IS_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_NAN) -#define DUK_HTHREAD_STRING_IS_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_NAN) -#define DUK_HEAP_STRING_PARSE_FLOAT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE_FLOAT) -#define DUK_HTHREAD_STRING_PARSE_FLOAT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE_FLOAT) -#define DUK_HEAP_STRING_PARSE_INT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE_INT) -#define DUK_HTHREAD_STRING_PARSE_INT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE_INT) -#define DUK_HEAP_STRING_EVAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL) -#define DUK_HTHREAD_STRING_EVAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL) -#define DUK_HEAP_STRING_URI_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_URI_ERROR) -#define DUK_HTHREAD_STRING_URI_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_URI_ERROR) -#define DUK_HEAP_STRING_TYPE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE_ERROR) -#define DUK_HTHREAD_STRING_TYPE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE_ERROR) -#define DUK_HEAP_STRING_SYNTAX_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SYNTAX_ERROR) -#define DUK_HTHREAD_STRING_SYNTAX_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SYNTAX_ERROR) -#define DUK_HEAP_STRING_REFERENCE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REFERENCE_ERROR) -#define DUK_HTHREAD_STRING_REFERENCE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REFERENCE_ERROR) -#define DUK_HEAP_STRING_RANGE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RANGE_ERROR) -#define DUK_HTHREAD_STRING_RANGE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RANGE_ERROR) -#define DUK_HEAP_STRING_EVAL_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL_ERROR) -#define DUK_HTHREAD_STRING_EVAL_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL_ERROR) -#define DUK_HEAP_STRING_BREAK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BREAK) -#define DUK_HTHREAD_STRING_BREAK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BREAK) -#define DUK_HEAP_STRING_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CASE) -#define DUK_HTHREAD_STRING_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CASE) -#define DUK_HEAP_STRING_CATCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CATCH) -#define DUK_HTHREAD_STRING_CATCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CATCH) -#define DUK_HEAP_STRING_CONTINUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONTINUE) -#define DUK_HTHREAD_STRING_CONTINUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONTINUE) -#define DUK_HEAP_STRING_DEBUGGER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEBUGGER) -#define DUK_HTHREAD_STRING_DEBUGGER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEBUGGER) -#define DUK_HEAP_STRING_DEFAULT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFAULT) -#define DUK_HTHREAD_STRING_DEFAULT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFAULT) -#define DUK_HEAP_STRING_DELETE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE) -#define DUK_HTHREAD_STRING_DELETE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE) -#define DUK_HEAP_STRING_DO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DO) -#define DUK_HTHREAD_STRING_DO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DO) -#define DUK_HEAP_STRING_ELSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ELSE) -#define DUK_HTHREAD_STRING_ELSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ELSE) -#define DUK_HEAP_STRING_FINALLY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FINALLY) -#define DUK_HTHREAD_STRING_FINALLY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FINALLY) -#define DUK_HEAP_STRING_FOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FOR) -#define DUK_HTHREAD_STRING_FOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FOR) -#define DUK_HEAP_STRING_LC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FUNCTION) -#define DUK_HTHREAD_STRING_LC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FUNCTION) -#define DUK_HEAP_STRING_IF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IF) -#define DUK_HTHREAD_STRING_IF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IF) -#define DUK_HEAP_STRING_IN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IN) -#define DUK_HTHREAD_STRING_IN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IN) -#define DUK_HEAP_STRING_INSTANCEOF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INSTANCEOF) -#define DUK_HTHREAD_STRING_INSTANCEOF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INSTANCEOF) -#define DUK_HEAP_STRING_NEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEW) -#define DUK_HTHREAD_STRING_NEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEW) -#define DUK_HEAP_STRING_RETURN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RETURN) -#define DUK_HTHREAD_STRING_RETURN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RETURN) -#define DUK_HEAP_STRING_SWITCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SWITCH) -#define DUK_HTHREAD_STRING_SWITCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SWITCH) -#define DUK_HEAP_STRING_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THIS) -#define DUK_HTHREAD_STRING_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THIS) -#define DUK_HEAP_STRING_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THROW) -#define DUK_HTHREAD_STRING_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THROW) -#define DUK_HEAP_STRING_TRY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRY) -#define DUK_HTHREAD_STRING_TRY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRY) -#define DUK_HEAP_STRING_TYPEOF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPEOF) -#define DUK_HTHREAD_STRING_TYPEOF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPEOF) -#define DUK_HEAP_STRING_VAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VAR) -#define DUK_HTHREAD_STRING_VAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VAR) -#define DUK_HEAP_STRING_CONST(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONST) -#define DUK_HTHREAD_STRING_CONST(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONST) -#define DUK_HEAP_STRING_VOID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VOID) -#define DUK_HTHREAD_STRING_VOID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VOID) -#define DUK_HEAP_STRING_WHILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WHILE) -#define DUK_HTHREAD_STRING_WHILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WHILE) -#define DUK_HEAP_STRING_WITH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WITH) -#define DUK_HTHREAD_STRING_WITH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WITH) -#define DUK_HEAP_STRING_CLASS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLASS) -#define DUK_HTHREAD_STRING_CLASS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLASS) -#define DUK_HEAP_STRING_ENUM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUM) -#define DUK_HTHREAD_STRING_ENUM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUM) -#define DUK_HEAP_STRING_EXPORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORT) -#define DUK_HTHREAD_STRING_EXPORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORT) -#define DUK_HEAP_STRING_EXTENDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXTENDS) -#define DUK_HTHREAD_STRING_EXTENDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXTENDS) -#define DUK_HEAP_STRING_IMPORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IMPORT) -#define DUK_HTHREAD_STRING_IMPORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IMPORT) -#define DUK_HEAP_STRING_SUPER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUPER) -#define DUK_HTHREAD_STRING_SUPER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUPER) -#define DUK_HEAP_STRING_LC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NULL) -#define DUK_HTHREAD_STRING_LC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NULL) -#define DUK_HEAP_STRING_TRUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRUE) -#define DUK_HTHREAD_STRING_TRUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRUE) -#define DUK_HEAP_STRING_FALSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FALSE) -#define DUK_HTHREAD_STRING_FALSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FALSE) -#define DUK_HEAP_STRING_IMPLEMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IMPLEMENTS) -#define DUK_HTHREAD_STRING_IMPLEMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IMPLEMENTS) -#define DUK_HEAP_STRING_INTERFACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INTERFACE) -#define DUK_HTHREAD_STRING_INTERFACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INTERFACE) -#define DUK_HEAP_STRING_LET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LET) -#define DUK_HTHREAD_STRING_LET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LET) -#define DUK_HEAP_STRING_PACKAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PACKAGE) -#define DUK_HTHREAD_STRING_PACKAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PACKAGE) -#define DUK_HEAP_STRING_PRIVATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PRIVATE) -#define DUK_HTHREAD_STRING_PRIVATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PRIVATE) -#define DUK_HEAP_STRING_PROTECTED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTECTED) -#define DUK_HTHREAD_STRING_PROTECTED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTECTED) -#define DUK_HEAP_STRING_PUBLIC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PUBLIC) -#define DUK_HTHREAD_STRING_PUBLIC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PUBLIC) -#define DUK_HEAP_STRING_STATIC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STATIC) -#define DUK_HTHREAD_STRING_STATIC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STATIC) -#define DUK_HEAP_STRING_YIELD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_YIELD) -#define DUK_HTHREAD_STRING_YIELD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_YIELD) +#define DUK__TVAL_SET_FASTINT_I32(v,i) do { \ + duk_int64_t duk__tmp = (duk_int64_t) (i); \ + DUK_TVAL_SET_FASTINT((v), duk__tmp); \ + } while (0) + +/* XXX: clumsy sign extend and masking of 16 topmost bits */ +#if defined(DUK_USE_DOUBLE_ME) +#define DUK__TVAL_GET_FASTINT(v) (((duk_int64_t) ((((duk_uint64_t) (v)->ui[DUK_DBL_IDX_UI0]) << 32) | ((duk_uint64_t) (v)->ui[DUK_DBL_IDX_UI1]))) << 16 >> 16) +#else +#define DUK__TVAL_GET_FASTINT(v) ((((duk_int64_t) (v)->ull[DUK_DBL_IDX_ULL0]) << 16) >> 16) +#endif +#define DUK__TVAL_GET_FASTINT_U32(v) ((v)->ui[DUK_DBL_IDX_UI1]) +#define DUK__TVAL_GET_FASTINT_I32(v) ((duk_int32_t) (v)->ui[DUK_DBL_IDX_UI1]) +#endif /* DUK_USE_FASTINT */ + +#define DUK_TVAL_SET_UNDEFINED(v) do { \ + (v)->us[DUK_DBL_IDX_US0] = (duk_uint16_t) DUK_TAG_UNDEFINED; \ + } while (0) +#define DUK_TVAL_SET_UNUSED(v) do { \ + (v)->us[DUK_DBL_IDX_US0] = (duk_uint16_t) DUK_TAG_UNUSED; \ + } while (0) +#define DUK_TVAL_SET_NULL(v) do { \ + (v)->us[DUK_DBL_IDX_US0] = (duk_uint16_t) DUK_TAG_NULL; \ + } while (0) + +#define DUK_TVAL_SET_BOOLEAN(v,val) DUK_DBLUNION_SET_HIGH32((v), (((duk_uint32_t) DUK_TAG_BOOLEAN) << 16) | ((duk_uint32_t) (val))) + +#define DUK_TVAL_SET_NAN(v) DUK_DBLUNION_SET_NAN_FULL((v)) + +/* Assumes that caller has normalized NaNs, otherwise trouble ahead. */ +#if defined(DUK_USE_FASTINT) +#define DUK_TVAL_SET_DOUBLE(v,d) do { \ + duk_double_t duk__dblval; \ + duk__dblval = (d); \ + DUK_ASSERT_DOUBLE_IS_NORMALIZED(duk__dblval); \ + DUK_DBLUNION_SET_DOUBLE((v), duk__dblval); \ + } while (0) +#define DUK_TVAL_SET_FASTINT(v,i) DUK__TVAL_SET_FASTINT((v), (i)) +#define DUK_TVAL_SET_FASTINT_I32(v,i) DUK__TVAL_SET_FASTINT_I32((v), (i)) +#define DUK_TVAL_SET_FASTINT_U32(v,i) DUK__TVAL_SET_FASTINT_U32((v), (i)) +#define DUK_TVAL_SET_NUMBER_CHKFAST(v,d) duk_tval_set_number_chkfast((v), (d)) +#define DUK_TVAL_SET_NUMBER(v,d) DUK_TVAL_SET_DOUBLE((v), (d)) +#define DUK_TVAL_CHKFAST_INPLACE(v) do { \ + duk_tval *duk__tv; \ + duk_double_t duk__d; \ + duk__tv = (v); \ + if (DUK_TVAL_IS_DOUBLE(duk__tv)) { \ + duk__d = DUK_TVAL_GET_DOUBLE(duk__tv); \ + DUK_TVAL_SET_NUMBER_CHKFAST(duk__tv, duk__d); \ + } \ + } while (0) +#else +#define DUK_TVAL_SET_DOUBLE(v,d) do { \ + duk_double_t duk__dblval; \ + duk__dblval = (d); \ + DUK_ASSERT_DOUBLE_IS_NORMALIZED(duk__dblval); \ + DUK_DBLUNION_SET_DOUBLE((v), duk__dblval); \ + } while (0) +#define DUK_TVAL_SET_FASTINT(v,i) DUK_TVAL_SET_DOUBLE((v), (duk_double_t) (i)) /* XXX: fast int-to-double */ +#define DUK_TVAL_SET_FASTINT_I32(v,i) DUK_TVAL_SET_DOUBLE((v), (duk_double_t) (i)) +#define DUK_TVAL_SET_FASTINT_U32(v,i) DUK_TVAL_SET_DOUBLE((v), (duk_double_t) (i)) +#define DUK_TVAL_SET_NUMBER_CHKFAST(v,d) DUK_TVAL_SET_DOUBLE((v), (d)) +#define DUK_TVAL_SET_NUMBER(v,d) DUK_TVAL_SET_DOUBLE((v), (d)) +#define DUK_TVAL_CHKFAST_INPLACE(v) do { } while (0) +#endif + +#define DUK_TVAL_SET_LIGHTFUNC(v,fp,flags) DUK__TVAL_SET_LIGHTFUNC((v), (fp), (flags)) +#define DUK_TVAL_SET_STRING(v,h) DUK__TVAL_SET_TAGGEDPOINTER((v), (h), DUK_TAG_STRING) +#define DUK_TVAL_SET_OBJECT(v,h) DUK__TVAL_SET_TAGGEDPOINTER((v), (h), DUK_TAG_OBJECT) +#define DUK_TVAL_SET_BUFFER(v,h) DUK__TVAL_SET_TAGGEDPOINTER((v), (h), DUK_TAG_BUFFER) +#define DUK_TVAL_SET_POINTER(v,p) DUK__TVAL_SET_TAGGEDPOINTER((v), (p), DUK_TAG_POINTER) + +#define DUK_TVAL_SET_TVAL(v,x) do { *(v) = *(x); } while (0) + +/* getters */ +#define DUK_TVAL_GET_BOOLEAN(v) ((int) (v)->us[DUK_DBL_IDX_US1]) +#if defined(DUK_USE_FASTINT) +#define DUK_TVAL_GET_DOUBLE(v) ((v)->d) +#define DUK_TVAL_GET_FASTINT(v) DUK__TVAL_GET_FASTINT((v)) +#define DUK_TVAL_GET_FASTINT_U32(v) DUK__TVAL_GET_FASTINT_U32((v)) +#define DUK_TVAL_GET_FASTINT_I32(v) DUK__TVAL_GET_FASTINT_I32((v)) +#define DUK_TVAL_GET_NUMBER(v) duk_tval_get_number_packed((v)) +#else +#define DUK_TVAL_GET_NUMBER(v) ((v)->d) +#define DUK_TVAL_GET_DOUBLE(v) ((v)->d) +#endif +#define DUK_TVAL_GET_LIGHTFUNC(v,out_fp,out_flags) do { \ + (out_flags) = (v)->ui[DUK_DBL_IDX_UI0] & 0xffffUL; \ + (out_fp) = (duk_c_function) (v)->ui[DUK_DBL_IDX_UI1]; \ + } while (0) +#define DUK_TVAL_GET_LIGHTFUNC_FUNCPTR(v) ((duk_c_function) ((v)->ui[DUK_DBL_IDX_UI1])) +#define DUK_TVAL_GET_LIGHTFUNC_FLAGS(v) (((int) (v)->ui[DUK_DBL_IDX_UI0]) & 0xffffUL) +#define DUK_TVAL_GET_STRING(v) ((duk_hstring *) (v)->vp[DUK_DBL_IDX_VP1]) +#define DUK_TVAL_GET_OBJECT(v) ((duk_hobject *) (v)->vp[DUK_DBL_IDX_VP1]) +#define DUK_TVAL_GET_BUFFER(v) ((duk_hbuffer *) (v)->vp[DUK_DBL_IDX_VP1]) +#define DUK_TVAL_GET_POINTER(v) ((void *) (v)->vp[DUK_DBL_IDX_VP1]) +#define DUK_TVAL_GET_HEAPHDR(v) ((duk_heaphdr *) (v)->vp[DUK_DBL_IDX_VP1]) + +/* decoding */ +#define DUK_TVAL_GET_TAG(v) ((duk_small_uint_t) (v)->us[DUK_DBL_IDX_US0]) + +#define DUK_TVAL_IS_UNDEFINED(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_UNDEFINED) +#define DUK_TVAL_IS_UNUSED(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_UNUSED) +#define DUK_TVAL_IS_NULL(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_NULL) +#define DUK_TVAL_IS_BOOLEAN(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_BOOLEAN) +#define DUK_TVAL_IS_BOOLEAN_TRUE(v) ((v)->ui[DUK_DBL_IDX_UI0] == DUK_XTAG_BOOLEAN_TRUE) +#define DUK_TVAL_IS_BOOLEAN_FALSE(v) ((v)->ui[DUK_DBL_IDX_UI0] == DUK_XTAG_BOOLEAN_FALSE) +#define DUK_TVAL_IS_LIGHTFUNC(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_LIGHTFUNC) +#define DUK_TVAL_IS_STRING(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_STRING) +#define DUK_TVAL_IS_OBJECT(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_OBJECT) +#define DUK_TVAL_IS_BUFFER(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_BUFFER) +#define DUK_TVAL_IS_POINTER(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_POINTER) +#if defined(DUK_USE_FASTINT) +/* 0xfff0 is -Infinity */ +#define DUK_TVAL_IS_DOUBLE(v) (DUK_TVAL_GET_TAG((v)) <= 0xfff0UL) +#define DUK_TVAL_IS_FASTINT(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_FASTINT) +#define DUK_TVAL_IS_NUMBER(v) (DUK_TVAL_GET_TAG((v)) <= 0xfff1UL) +#else +#define DUK_TVAL_IS_NUMBER(v) (DUK_TVAL_GET_TAG((v)) <= 0xfff0UL) +#define DUK_TVAL_IS_DOUBLE(v) DUK_TVAL_IS_NUMBER((v)) +#endif + +/* This is performance critical because it appears in every DECREF. */ +#define DUK_TVAL_IS_HEAP_ALLOCATED(v) (DUK_TVAL_GET_TAG((v)) >= DUK_TAG_STRING) + +#if defined(DUK_USE_FASTINT) +DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_packed(duk_tval *tv); +#endif + +#else /* DUK_USE_PACKED_TVAL */ +/* ======================================================================== */ + +/* + * Portable 12-byte representation + */ + +/* Note: not initializing all bytes is normally not an issue: Duktape won't + * read or use the uninitialized bytes so valgrind won't issue warnings. + * In some special cases a harmless valgrind warning may be issued though. + * For example, the DumpHeap debugger command writes out a compiled function's + * 'data' area as is, including any uninitialized bytes, which causes a + * valgrind warning. + */ + +typedef struct duk_tval_struct duk_tval; + +struct duk_tval_struct { + duk_small_uint_t t; + duk_small_uint_t v_extra; + union { + duk_double_t d; + duk_small_int_t i; +#if defined(DUK_USE_FASTINT) + duk_int64_t fi; /* if present, forces 16-byte duk_tval */ +#endif + void *voidptr; + duk_hstring *hstring; + duk_hobject *hobject; + duk_hcompiledfunction *hcompiledfunction; + duk_hnativefunction *hnativefunction; + duk_hthread *hthread; + duk_hbuffer *hbuffer; + duk_heaphdr *heaphdr; + duk_c_function lightfunc; + } v; +}; + +#define DUK__TAG_NUMBER 0 /* not exposed */ +#if defined(DUK_USE_FASTINT) +#define DUK_TAG_FASTINT 1 +#endif +#define DUK_TAG_UNDEFINED 2 +#define DUK_TAG_NULL 3 +#define DUK_TAG_BOOLEAN 4 +#define DUK_TAG_POINTER 5 +#define DUK_TAG_LIGHTFUNC 6 +#define DUK_TAG_UNUSED 7 /* marker; not actual tagged type */ +#define DUK_TAG_STRING 8 /* first heap allocated, match bit boundary */ +#define DUK_TAG_OBJECT 9 +#define DUK_TAG_BUFFER 10 -#define DUK_HEAP_NUM_STRINGS 414 +/* DUK__TAG_NUMBER is intentionally first, as it is the default clause in code + * to support the 8-byte representation. Further, it is a non-heap-allocated + * type so it should come before DUK_TAG_STRING. Finally, it should not break + * the tag value ranges covered by case-clauses in a switch-case. + */ -#define DUK_STRIDX_START_RESERVED 369 -#define DUK_STRIDX_START_STRICT_RESERVED 405 -#define DUK_STRIDX_END_RESERVED 414 /* exclusive endpoint */ +/* setters */ +#define DUK_TVAL_SET_UNDEFINED(tv) do { \ + (tv)->t = DUK_TAG_UNDEFINED; \ + } while (0) -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const duk_c_function duk_bi_native_functions[149]; -DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[1955]; -#ifdef DUK_USE_BUILTIN_INITJS -DUK_INTERNAL_DECL const duk_uint8_t duk_initjs_data[187]; -#endif /* DUK_USE_BUILTIN_INITJS */ -#endif /* !DUK_SINGLE_FILE */ +#define DUK_TVAL_SET_UNUSED(tv) do { \ + (tv)->t = DUK_TAG_UNUSED; \ + } while (0) -#define DUK_BUILTINS_DATA_LENGTH 1955 -#ifdef DUK_USE_BUILTIN_INITJS -#define DUK_BUILTIN_INITJS_DATA_LENGTH 187 -#endif /* DUK_USE_BUILTIN_INITJS */ +#define DUK_TVAL_SET_NULL(tv) do { \ + (tv)->t = DUK_TAG_NULL; \ + } while (0) -#define DUK_BIDX_GLOBAL 0 -#define DUK_BIDX_GLOBAL_ENV 1 -#define DUK_BIDX_OBJECT_CONSTRUCTOR 2 -#define DUK_BIDX_OBJECT_PROTOTYPE 3 -#define DUK_BIDX_FUNCTION_CONSTRUCTOR 4 -#define DUK_BIDX_FUNCTION_PROTOTYPE 5 -#define DUK_BIDX_ARRAY_CONSTRUCTOR 6 -#define DUK_BIDX_ARRAY_PROTOTYPE 7 -#define DUK_BIDX_STRING_CONSTRUCTOR 8 -#define DUK_BIDX_STRING_PROTOTYPE 9 -#define DUK_BIDX_BOOLEAN_CONSTRUCTOR 10 -#define DUK_BIDX_BOOLEAN_PROTOTYPE 11 -#define DUK_BIDX_NUMBER_CONSTRUCTOR 12 -#define DUK_BIDX_NUMBER_PROTOTYPE 13 -#define DUK_BIDX_DATE_CONSTRUCTOR 14 -#define DUK_BIDX_DATE_PROTOTYPE 15 -#define DUK_BIDX_REGEXP_CONSTRUCTOR 16 -#define DUK_BIDX_REGEXP_PROTOTYPE 17 -#define DUK_BIDX_ERROR_CONSTRUCTOR 18 -#define DUK_BIDX_ERROR_PROTOTYPE 19 -#define DUK_BIDX_EVAL_ERROR_CONSTRUCTOR 20 -#define DUK_BIDX_EVAL_ERROR_PROTOTYPE 21 -#define DUK_BIDX_RANGE_ERROR_CONSTRUCTOR 22 -#define DUK_BIDX_RANGE_ERROR_PROTOTYPE 23 -#define DUK_BIDX_REFERENCE_ERROR_CONSTRUCTOR 24 -#define DUK_BIDX_REFERENCE_ERROR_PROTOTYPE 25 -#define DUK_BIDX_SYNTAX_ERROR_CONSTRUCTOR 26 -#define DUK_BIDX_SYNTAX_ERROR_PROTOTYPE 27 -#define DUK_BIDX_TYPE_ERROR_CONSTRUCTOR 28 -#define DUK_BIDX_TYPE_ERROR_PROTOTYPE 29 -#define DUK_BIDX_URI_ERROR_CONSTRUCTOR 30 -#define DUK_BIDX_URI_ERROR_PROTOTYPE 31 -#define DUK_BIDX_MATH 32 -#define DUK_BIDX_JSON 33 -#define DUK_BIDX_TYPE_ERROR_THROWER 34 -#define DUK_BIDX_PROXY_CONSTRUCTOR 35 -#define DUK_BIDX_DUKTAPE 36 -#define DUK_BIDX_THREAD_CONSTRUCTOR 37 -#define DUK_BIDX_THREAD_PROTOTYPE 38 -#define DUK_BIDX_BUFFER_CONSTRUCTOR 39 -#define DUK_BIDX_BUFFER_PROTOTYPE 40 -#define DUK_BIDX_POINTER_CONSTRUCTOR 41 -#define DUK_BIDX_POINTER_PROTOTYPE 42 -#define DUK_BIDX_LOGGER_CONSTRUCTOR 43 -#define DUK_BIDX_LOGGER_PROTOTYPE 44 -#define DUK_BIDX_DOUBLE_ERROR 45 -#define DUK_BIDX_ARRAYBUFFER_CONSTRUCTOR 46 -#define DUK_BIDX_ARRAYBUFFER_PROTOTYPE 47 -#define DUK_BIDX_DATAVIEW_CONSTRUCTOR 48 -#define DUK_BIDX_DATAVIEW_PROTOTYPE 49 -#define DUK_BIDX_TYPEDARRAY_PROTOTYPE 50 -#define DUK_BIDX_INT8ARRAY_CONSTRUCTOR 51 -#define DUK_BIDX_INT8ARRAY_PROTOTYPE 52 -#define DUK_BIDX_UINT8ARRAY_CONSTRUCTOR 53 -#define DUK_BIDX_UINT8ARRAY_PROTOTYPE 54 -#define DUK_BIDX_UINT8CLAMPEDARRAY_CONSTRUCTOR 55 -#define DUK_BIDX_UINT8CLAMPEDARRAY_PROTOTYPE 56 -#define DUK_BIDX_INT16ARRAY_CONSTRUCTOR 57 -#define DUK_BIDX_INT16ARRAY_PROTOTYPE 58 -#define DUK_BIDX_UINT16ARRAY_CONSTRUCTOR 59 -#define DUK_BIDX_UINT16ARRAY_PROTOTYPE 60 -#define DUK_BIDX_INT32ARRAY_CONSTRUCTOR 61 -#define DUK_BIDX_INT32ARRAY_PROTOTYPE 62 -#define DUK_BIDX_UINT32ARRAY_CONSTRUCTOR 63 -#define DUK_BIDX_UINT32ARRAY_PROTOTYPE 64 -#define DUK_BIDX_FLOAT32ARRAY_CONSTRUCTOR 65 -#define DUK_BIDX_FLOAT32ARRAY_PROTOTYPE 66 -#define DUK_BIDX_FLOAT64ARRAY_CONSTRUCTOR 67 -#define DUK_BIDX_FLOAT64ARRAY_PROTOTYPE 68 -#define DUK_BIDX_NODEJS_BUFFER_CONSTRUCTOR 69 -#define DUK_BIDX_NODEJS_BUFFER_PROTOTYPE 70 +#define DUK_TVAL_SET_BOOLEAN(tv,val) do { \ + (tv)->t = DUK_TAG_BOOLEAN; \ + (tv)->v.i = (val); \ + } while (0) -#define DUK_NUM_BUILTINS 71 +#if defined(DUK_USE_FASTINT) +#define DUK_TVAL_SET_DOUBLE(tv,val) do { \ + (tv)->t = DUK__TAG_NUMBER; \ + (tv)->v.d = (val); \ + } while (0) +#define DUK_TVAL_SET_FASTINT(tv,val) do { \ + (tv)->t = DUK_TAG_FASTINT; \ + (tv)->v.fi = (val); \ + } while (0) +#define DUK_TVAL_SET_FASTINT_U32(tv,val) do { \ + (tv)->t = DUK_TAG_FASTINT; \ + (tv)->v.fi = (duk_int64_t) (val); \ + } while (0) +#define DUK_TVAL_SET_FASTINT_I32(tv,val) do { \ + (tv)->t = DUK_TAG_FASTINT; \ + (tv)->v.fi = (duk_int64_t) (val); \ + } while (0) +#define DUK_TVAL_SET_NUMBER_CHKFAST(tv,d) \ + duk_tval_set_number_chkfast((tv), (d)) +#define DUK_TVAL_SET_NUMBER(tv,val) \ + DUK_TVAL_SET_DOUBLE((tv), (val)) +#define DUK_TVAL_CHKFAST_INPLACE(v) do { \ + duk_tval *duk__tv; \ + duk_double_t duk__d; \ + duk__tv = (v); \ + if (DUK_TVAL_IS_DOUBLE(duk__tv)) { \ + duk__d = DUK_TVAL_GET_DOUBLE(duk__tv); \ + DUK_TVAL_SET_NUMBER_CHKFAST(duk__tv, duk__d); \ + } \ + } while (0) +#else +#define DUK_TVAL_SET_DOUBLE(tv,d) \ + DUK_TVAL_SET_NUMBER((tv), (d)) +#define DUK_TVAL_SET_FASTINT(tv,val) \ + DUK_TVAL_SET_NUMBER((tv), (duk_double_t) (val)) /* XXX: fast int-to-double */ +#define DUK_TVAL_SET_FASTINT_U32(tv,val) \ + DUK_TVAL_SET_NUMBER((tv), (duk_double_t) (val)) +#define DUK_TVAL_SET_FASTINT_I32(tv,val) \ + DUK_TVAL_SET_NUMBER((tv), (duk_double_t) (val)) +#define DUK_TVAL_SET_NUMBER(tv,val) do { \ + (tv)->t = DUK__TAG_NUMBER; \ + (tv)->v.d = (val); \ + } while (0) +#define DUK_TVAL_SET_NUMBER_CHKFAST(tv,d) \ + DUK_TVAL_SET_NUMBER((tv), (d)) +#define DUK_TVAL_CHKFAST_INPLACE(v) do { } while (0) +#endif /* DUK_USE_FASTINT */ -#elif defined(DUK_USE_DOUBLE_ME) -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const duk_uint8_t duk_strings_data[2624]; -#endif /* !DUK_SINGLE_FILE */ +#define DUK_TVAL_SET_POINTER(tv,hptr) do { \ + (tv)->t = DUK_TAG_POINTER; \ + (tv)->v.voidptr = (hptr); \ + } while (0) -#define DUK_STRDATA_DATA_LENGTH 2624 -#define DUK_STRDATA_MAX_STRLEN 24 - -#define DUK_STRIDX_UC_LOGGER 0 /* 'Logger' */ -#define DUK_STRIDX_UC_THREAD 1 /* 'Thread' */ -#define DUK_STRIDX_UC_POINTER 2 /* 'Pointer' */ -#define DUK_STRIDX_DEC_ENV 3 /* 'DecEnv' */ -#define DUK_STRIDX_OBJ_ENV 4 /* 'ObjEnv' */ -#define DUK_STRIDX_FLOAT64_ARRAY 5 /* 'Float64Array' */ -#define DUK_STRIDX_FLOAT32_ARRAY 6 /* 'Float32Array' */ -#define DUK_STRIDX_UINT32_ARRAY 7 /* 'Uint32Array' */ -#define DUK_STRIDX_INT32_ARRAY 8 /* 'Int32Array' */ -#define DUK_STRIDX_UINT16_ARRAY 9 /* 'Uint16Array' */ -#define DUK_STRIDX_INT16_ARRAY 10 /* 'Int16Array' */ -#define DUK_STRIDX_UINT8_CLAMPED_ARRAY 11 /* 'Uint8ClampedArray' */ -#define DUK_STRIDX_UINT8_ARRAY 12 /* 'Uint8Array' */ -#define DUK_STRIDX_INT8_ARRAY 13 /* 'Int8Array' */ -#define DUK_STRIDX_DATA_VIEW 14 /* 'DataView' */ -#define DUK_STRIDX_ARRAY_BUFFER 15 /* 'ArrayBuffer' */ -#define DUK_STRIDX_UC_BUFFER 16 /* 'Buffer' */ -#define DUK_STRIDX_EMPTY_STRING 17 /* '' */ -#define DUK_STRIDX_GLOBAL 18 /* 'global' */ -#define DUK_STRIDX_UC_ARGUMENTS 19 /* 'Arguments' */ -#define DUK_STRIDX_JSON 20 /* 'JSON' */ -#define DUK_STRIDX_MATH 21 /* 'Math' */ -#define DUK_STRIDX_UC_ERROR 22 /* 'Error' */ -#define DUK_STRIDX_REG_EXP 23 /* 'RegExp' */ -#define DUK_STRIDX_DATE 24 /* 'Date' */ -#define DUK_STRIDX_UC_NUMBER 25 /* 'Number' */ -#define DUK_STRIDX_UC_BOOLEAN 26 /* 'Boolean' */ -#define DUK_STRIDX_UC_STRING 27 /* 'String' */ -#define DUK_STRIDX_ARRAY 28 /* 'Array' */ -#define DUK_STRIDX_UC_FUNCTION 29 /* 'Function' */ -#define DUK_STRIDX_UC_OBJECT 30 /* 'Object' */ -#define DUK_STRIDX_UC_NULL 31 /* 'Null' */ -#define DUK_STRIDX_UC_UNDEFINED 32 /* 'Undefined' */ -#define DUK_STRIDX_JSON_EXT_FUNCTION2 33 /* '{_func:true}' */ -#define DUK_STRIDX_JSON_EXT_FUNCTION1 34 /* '{"_func":true}' */ -#define DUK_STRIDX_JSON_EXT_NEGINF 35 /* '{"_ninf":true}' */ -#define DUK_STRIDX_JSON_EXT_POSINF 36 /* '{"_inf":true}' */ -#define DUK_STRIDX_JSON_EXT_NAN 37 /* '{"_nan":true}' */ -#define DUK_STRIDX_JSON_EXT_UNDEFINED 38 /* '{"_undef":true}' */ -#define DUK_STRIDX_TO_LOG_STRING 39 /* 'toLogString' */ -#define DUK_STRIDX_CLOG 40 /* 'clog' */ -#define DUK_STRIDX_LC_L 41 /* 'l' */ -#define DUK_STRIDX_LC_N 42 /* 'n' */ -#define DUK_STRIDX_LC_FATAL 43 /* 'fatal' */ -#define DUK_STRIDX_LC_ERROR 44 /* 'error' */ -#define DUK_STRIDX_LC_WARN 45 /* 'warn' */ -#define DUK_STRIDX_LC_DEBUG 46 /* 'debug' */ -#define DUK_STRIDX_LC_TRACE 47 /* 'trace' */ -#define DUK_STRIDX_RAW 48 /* 'raw' */ -#define DUK_STRIDX_FMT 49 /* 'fmt' */ -#define DUK_STRIDX_CURRENT 50 /* 'current' */ -#define DUK_STRIDX_RESUME 51 /* 'resume' */ -#define DUK_STRIDX_COMPACT 52 /* 'compact' */ -#define DUK_STRIDX_JC 53 /* 'jc' */ -#define DUK_STRIDX_JX 54 /* 'jx' */ -#define DUK_STRIDX_BASE64 55 /* 'base64' */ -#define DUK_STRIDX_HEX 56 /* 'hex' */ -#define DUK_STRIDX_DEC 57 /* 'dec' */ -#define DUK_STRIDX_ENC 58 /* 'enc' */ -#define DUK_STRIDX_FIN 59 /* 'fin' */ -#define DUK_STRIDX_GC 60 /* 'gc' */ -#define DUK_STRIDX_ACT 61 /* 'act' */ -#define DUK_STRIDX_LC_INFO 62 /* 'info' */ -#define DUK_STRIDX_VERSION 63 /* 'version' */ -#define DUK_STRIDX_ENV 64 /* 'env' */ -#define DUK_STRIDX_MOD_LOADED 65 /* 'modLoaded' */ -#define DUK_STRIDX_MOD_SEARCH 66 /* 'modSearch' */ -#define DUK_STRIDX_ERR_THROW 67 /* 'errThrow' */ -#define DUK_STRIDX_ERR_CREATE 68 /* 'errCreate' */ -#define DUK_STRIDX_COMPILE 69 /* 'compile' */ -#define DUK_STRIDX_INT_REGBASE 70 /* '\x00Regbase' */ -#define DUK_STRIDX_INT_THREAD 71 /* '\x00Thread' */ -#define DUK_STRIDX_INT_HANDLER 72 /* '\x00Handler' */ -#define DUK_STRIDX_INT_FINALIZER 73 /* '\x00Finalizer' */ -#define DUK_STRIDX_INT_CALLEE 74 /* '\x00Callee' */ -#define DUK_STRIDX_INT_MAP 75 /* '\x00Map' */ -#define DUK_STRIDX_INT_ARGS 76 /* '\x00Args' */ -#define DUK_STRIDX_INT_THIS 77 /* '\x00This' */ -#define DUK_STRIDX_INT_PC2LINE 78 /* '\x00Pc2line' */ -#define DUK_STRIDX_INT_SOURCE 79 /* '\x00Source' */ -#define DUK_STRIDX_INT_VARENV 80 /* '\x00Varenv' */ -#define DUK_STRIDX_INT_LEXENV 81 /* '\x00Lexenv' */ -#define DUK_STRIDX_INT_VARMAP 82 /* '\x00Varmap' */ -#define DUK_STRIDX_INT_FORMALS 83 /* '\x00Formals' */ -#define DUK_STRIDX_INT_BYTECODE 84 /* '\x00Bytecode' */ -#define DUK_STRIDX_INT_NEXT 85 /* '\x00Next' */ -#define DUK_STRIDX_INT_TARGET 86 /* '\x00Target' */ -#define DUK_STRIDX_INT_VALUE 87 /* '\x00Value' */ -#define DUK_STRIDX_LC_POINTER 88 /* 'pointer' */ -#define DUK_STRIDX_INT_TRACEDATA 89 /* '\x00Tracedata' */ -#define DUK_STRIDX_LINE_NUMBER 90 /* 'lineNumber' */ -#define DUK_STRIDX_FILE_NAME 91 /* 'fileName' */ -#define DUK_STRIDX_PC 92 /* 'pc' */ -#define DUK_STRIDX_STACK 93 /* 'stack' */ -#define DUK_STRIDX_THROW_TYPE_ERROR 94 /* 'ThrowTypeError' */ -#define DUK_STRIDX_DUKTAPE 95 /* 'Duktape' */ -#define DUK_STRIDX_SET_FLOAT64 96 /* 'setFloat64' */ -#define DUK_STRIDX_SET_FLOAT32 97 /* 'setFloat32' */ -#define DUK_STRIDX_SET_UINT32 98 /* 'setUint32' */ -#define DUK_STRIDX_SET_INT32 99 /* 'setInt32' */ -#define DUK_STRIDX_SET_UINT16 100 /* 'setUint16' */ -#define DUK_STRIDX_SET_INT16 101 /* 'setInt16' */ -#define DUK_STRIDX_SET_UINT8 102 /* 'setUint8' */ -#define DUK_STRIDX_SET_INT8 103 /* 'setInt8' */ -#define DUK_STRIDX_GET_FLOAT64 104 /* 'getFloat64' */ -#define DUK_STRIDX_GET_FLOAT32 105 /* 'getFloat32' */ -#define DUK_STRIDX_GET_UINT32 106 /* 'getUint32' */ -#define DUK_STRIDX_GET_INT32 107 /* 'getInt32' */ -#define DUK_STRIDX_GET_UINT16 108 /* 'getUint16' */ -#define DUK_STRIDX_GET_INT16 109 /* 'getInt16' */ -#define DUK_STRIDX_GET_UINT8 110 /* 'getUint8' */ -#define DUK_STRIDX_GET_INT8 111 /* 'getInt8' */ -#define DUK_STRIDX_SUBARRAY 112 /* 'subarray' */ -#define DUK_STRIDX_BYTES_PER_ELEMENT 113 /* 'BYTES_PER_ELEMENT' */ -#define DUK_STRIDX_BYTE_OFFSET 114 /* 'byteOffset' */ -#define DUK_STRIDX_LC_BUFFER 115 /* 'buffer' */ -#define DUK_STRIDX_IS_VIEW 116 /* 'isView' */ -#define DUK_STRIDX_DATA 117 /* 'data' */ -#define DUK_STRIDX_TYPE 118 /* 'type' */ -#define DUK_STRIDX_WRITE_INT_BE 119 /* 'writeIntBE' */ -#define DUK_STRIDX_WRITE_INT_LE 120 /* 'writeIntLE' */ -#define DUK_STRIDX_WRITE_UINT_BE 121 /* 'writeUIntBE' */ -#define DUK_STRIDX_WRITE_UINT_LE 122 /* 'writeUIntLE' */ -#define DUK_STRIDX_WRITE_DOUBLE_BE 123 /* 'writeDoubleBE' */ -#define DUK_STRIDX_WRITE_DOUBLE_LE 124 /* 'writeDoubleLE' */ -#define DUK_STRIDX_WRITE_FLOAT_BE 125 /* 'writeFloatBE' */ -#define DUK_STRIDX_WRITE_FLOAT_LE 126 /* 'writeFloatLE' */ -#define DUK_STRIDX_WRITE_INT32_BE 127 /* 'writeInt32BE' */ -#define DUK_STRIDX_WRITE_INT32_LE 128 /* 'writeInt32LE' */ -#define DUK_STRIDX_WRITE_UINT32_BE 129 /* 'writeUInt32BE' */ -#define DUK_STRIDX_WRITE_UINT32_LE 130 /* 'writeUInt32LE' */ -#define DUK_STRIDX_WRITE_INT16_BE 131 /* 'writeInt16BE' */ -#define DUK_STRIDX_WRITE_INT16_LE 132 /* 'writeInt16LE' */ -#define DUK_STRIDX_WRITE_UINT16_BE 133 /* 'writeUInt16BE' */ -#define DUK_STRIDX_WRITE_UINT16_LE 134 /* 'writeUInt16LE' */ -#define DUK_STRIDX_WRITE_INT8 135 /* 'writeInt8' */ -#define DUK_STRIDX_WRITE_UINT8 136 /* 'writeUInt8' */ -#define DUK_STRIDX_READ_INT_BE 137 /* 'readIntBE' */ -#define DUK_STRIDX_READ_INT_LE 138 /* 'readIntLE' */ -#define DUK_STRIDX_READ_UINT_BE 139 /* 'readUIntBE' */ -#define DUK_STRIDX_READ_UINT_LE 140 /* 'readUIntLE' */ -#define DUK_STRIDX_READ_DOUBLE_BE 141 /* 'readDoubleBE' */ -#define DUK_STRIDX_READ_DOUBLE_LE 142 /* 'readDoubleLE' */ -#define DUK_STRIDX_READ_FLOAT_BE 143 /* 'readFloatBE' */ -#define DUK_STRIDX_READ_FLOAT_LE 144 /* 'readFloatLE' */ -#define DUK_STRIDX_READ_INT32_BE 145 /* 'readInt32BE' */ -#define DUK_STRIDX_READ_INT32_LE 146 /* 'readInt32LE' */ -#define DUK_STRIDX_READ_UINT32_BE 147 /* 'readUInt32BE' */ -#define DUK_STRIDX_READ_UINT32_LE 148 /* 'readUInt32LE' */ -#define DUK_STRIDX_READ_INT16_BE 149 /* 'readInt16BE' */ -#define DUK_STRIDX_READ_INT16_LE 150 /* 'readInt16LE' */ -#define DUK_STRIDX_READ_UINT16_BE 151 /* 'readUInt16BE' */ -#define DUK_STRIDX_READ_UINT16_LE 152 /* 'readUInt16LE' */ -#define DUK_STRIDX_READ_INT8 153 /* 'readInt8' */ -#define DUK_STRIDX_READ_UINT8 154 /* 'readUInt8' */ -#define DUK_STRIDX_COPY 155 /* 'copy' */ -#define DUK_STRIDX_EQUALS 156 /* 'equals' */ -#define DUK_STRIDX_FILL 157 /* 'fill' */ -#define DUK_STRIDX_WRITE 158 /* 'write' */ -#define DUK_STRIDX_COMPARE 159 /* 'compare' */ -#define DUK_STRIDX_BYTE_LENGTH 160 /* 'byteLength' */ -#define DUK_STRIDX_IS_BUFFER 161 /* 'isBuffer' */ -#define DUK_STRIDX_IS_ENCODING 162 /* 'isEncoding' */ -#define DUK_STRIDX_EXPORTS 163 /* 'exports' */ -#define DUK_STRIDX_ID 164 /* 'id' */ -#define DUK_STRIDX_REQUIRE 165 /* 'require' */ -#define DUK_STRIDX___PROTO__ 166 /* '__proto__' */ -#define DUK_STRIDX_SET_PROTOTYPE_OF 167 /* 'setPrototypeOf' */ -#define DUK_STRIDX_OWN_KEYS 168 /* 'ownKeys' */ -#define DUK_STRIDX_ENUMERATE 169 /* 'enumerate' */ -#define DUK_STRIDX_DELETE_PROPERTY 170 /* 'deleteProperty' */ -#define DUK_STRIDX_HAS 171 /* 'has' */ -#define DUK_STRIDX_PROXY 172 /* 'Proxy' */ -#define DUK_STRIDX_CALLEE 173 /* 'callee' */ -#define DUK_STRIDX_INVALID_DATE 174 /* 'Invalid Date' */ -#define DUK_STRIDX_BRACKETED_ELLIPSIS 175 /* '[...]' */ -#define DUK_STRIDX_NEWLINE_TAB 176 /* '\n\t' */ -#define DUK_STRIDX_SPACE 177 /* ' ' */ -#define DUK_STRIDX_COMMA 178 /* ',' */ -#define DUK_STRIDX_MINUS_ZERO 179 /* '-0' */ -#define DUK_STRIDX_PLUS_ZERO 180 /* '+0' */ -#define DUK_STRIDX_ZERO 181 /* '0' */ -#define DUK_STRIDX_MINUS_INFINITY 182 /* '-Infinity' */ -#define DUK_STRIDX_PLUS_INFINITY 183 /* '+Infinity' */ -#define DUK_STRIDX_INFINITY 184 /* 'Infinity' */ -#define DUK_STRIDX_LC_OBJECT 185 /* 'object' */ -#define DUK_STRIDX_LC_STRING 186 /* 'string' */ -#define DUK_STRIDX_LC_NUMBER 187 /* 'number' */ -#define DUK_STRIDX_LC_BOOLEAN 188 /* 'boolean' */ -#define DUK_STRIDX_LC_UNDEFINED 189 /* 'undefined' */ -#define DUK_STRIDX_STRINGIFY 190 /* 'stringify' */ -#define DUK_STRIDX_TAN 191 /* 'tan' */ -#define DUK_STRIDX_SQRT 192 /* 'sqrt' */ -#define DUK_STRIDX_SIN 193 /* 'sin' */ -#define DUK_STRIDX_ROUND 194 /* 'round' */ -#define DUK_STRIDX_RANDOM 195 /* 'random' */ -#define DUK_STRIDX_POW 196 /* 'pow' */ -#define DUK_STRIDX_MIN 197 /* 'min' */ -#define DUK_STRIDX_MAX 198 /* 'max' */ -#define DUK_STRIDX_LOG 199 /* 'log' */ -#define DUK_STRIDX_FLOOR 200 /* 'floor' */ -#define DUK_STRIDX_EXP 201 /* 'exp' */ -#define DUK_STRIDX_COS 202 /* 'cos' */ -#define DUK_STRIDX_CEIL 203 /* 'ceil' */ -#define DUK_STRIDX_ATAN2 204 /* 'atan2' */ -#define DUK_STRIDX_ATAN 205 /* 'atan' */ -#define DUK_STRIDX_ASIN 206 /* 'asin' */ -#define DUK_STRIDX_ACOS 207 /* 'acos' */ -#define DUK_STRIDX_ABS 208 /* 'abs' */ -#define DUK_STRIDX_SQRT2 209 /* 'SQRT2' */ -#define DUK_STRIDX_SQRT1_2 210 /* 'SQRT1_2' */ -#define DUK_STRIDX_PI 211 /* 'PI' */ -#define DUK_STRIDX_LOG10E 212 /* 'LOG10E' */ -#define DUK_STRIDX_LOG2E 213 /* 'LOG2E' */ -#define DUK_STRIDX_LN2 214 /* 'LN2' */ -#define DUK_STRIDX_LN10 215 /* 'LN10' */ -#define DUK_STRIDX_E 216 /* 'E' */ -#define DUK_STRIDX_MESSAGE 217 /* 'message' */ -#define DUK_STRIDX_NAME 218 /* 'name' */ -#define DUK_STRIDX_INPUT 219 /* 'input' */ -#define DUK_STRIDX_INDEX 220 /* 'index' */ -#define DUK_STRIDX_ESCAPED_EMPTY_REGEXP 221 /* '(?:)' */ -#define DUK_STRIDX_LAST_INDEX 222 /* 'lastIndex' */ -#define DUK_STRIDX_MULTILINE 223 /* 'multiline' */ -#define DUK_STRIDX_IGNORE_CASE 224 /* 'ignoreCase' */ -#define DUK_STRIDX_SOURCE 225 /* 'source' */ -#define DUK_STRIDX_TEST 226 /* 'test' */ -#define DUK_STRIDX_EXEC 227 /* 'exec' */ -#define DUK_STRIDX_TO_GMT_STRING 228 /* 'toGMTString' */ -#define DUK_STRIDX_SET_YEAR 229 /* 'setYear' */ -#define DUK_STRIDX_GET_YEAR 230 /* 'getYear' */ -#define DUK_STRIDX_TO_JSON 231 /* 'toJSON' */ -#define DUK_STRIDX_TO_ISO_STRING 232 /* 'toISOString' */ -#define DUK_STRIDX_TO_UTC_STRING 233 /* 'toUTCString' */ -#define DUK_STRIDX_SET_UTC_FULL_YEAR 234 /* 'setUTCFullYear' */ -#define DUK_STRIDX_SET_FULL_YEAR 235 /* 'setFullYear' */ -#define DUK_STRIDX_SET_UTC_MONTH 236 /* 'setUTCMonth' */ -#define DUK_STRIDX_SET_MONTH 237 /* 'setMonth' */ -#define DUK_STRIDX_SET_UTC_DATE 238 /* 'setUTCDate' */ -#define DUK_STRIDX_SET_DATE 239 /* 'setDate' */ -#define DUK_STRIDX_SET_UTC_HOURS 240 /* 'setUTCHours' */ -#define DUK_STRIDX_SET_HOURS 241 /* 'setHours' */ -#define DUK_STRIDX_SET_UTC_MINUTES 242 /* 'setUTCMinutes' */ -#define DUK_STRIDX_SET_MINUTES 243 /* 'setMinutes' */ -#define DUK_STRIDX_SET_UTC_SECONDS 244 /* 'setUTCSeconds' */ -#define DUK_STRIDX_SET_SECONDS 245 /* 'setSeconds' */ -#define DUK_STRIDX_SET_UTC_MILLISECONDS 246 /* 'setUTCMilliseconds' */ -#define DUK_STRIDX_SET_MILLISECONDS 247 /* 'setMilliseconds' */ -#define DUK_STRIDX_SET_TIME 248 /* 'setTime' */ -#define DUK_STRIDX_GET_TIMEZONE_OFFSET 249 /* 'getTimezoneOffset' */ -#define DUK_STRIDX_GET_UTC_MILLISECONDS 250 /* 'getUTCMilliseconds' */ -#define DUK_STRIDX_GET_MILLISECONDS 251 /* 'getMilliseconds' */ -#define DUK_STRIDX_GET_UTC_SECONDS 252 /* 'getUTCSeconds' */ -#define DUK_STRIDX_GET_SECONDS 253 /* 'getSeconds' */ -#define DUK_STRIDX_GET_UTC_MINUTES 254 /* 'getUTCMinutes' */ -#define DUK_STRIDX_GET_MINUTES 255 /* 'getMinutes' */ -#define DUK_STRIDX_GET_UTC_HOURS 256 /* 'getUTCHours' */ -#define DUK_STRIDX_GET_HOURS 257 /* 'getHours' */ -#define DUK_STRIDX_GET_UTC_DAY 258 /* 'getUTCDay' */ -#define DUK_STRIDX_GET_DAY 259 /* 'getDay' */ -#define DUK_STRIDX_GET_UTC_DATE 260 /* 'getUTCDate' */ -#define DUK_STRIDX_GET_DATE 261 /* 'getDate' */ -#define DUK_STRIDX_GET_UTC_MONTH 262 /* 'getUTCMonth' */ -#define DUK_STRIDX_GET_MONTH 263 /* 'getMonth' */ -#define DUK_STRIDX_GET_UTC_FULL_YEAR 264 /* 'getUTCFullYear' */ -#define DUK_STRIDX_GET_FULL_YEAR 265 /* 'getFullYear' */ -#define DUK_STRIDX_GET_TIME 266 /* 'getTime' */ -#define DUK_STRIDX_TO_LOCALE_TIME_STRING 267 /* 'toLocaleTimeString' */ -#define DUK_STRIDX_TO_LOCALE_DATE_STRING 268 /* 'toLocaleDateString' */ -#define DUK_STRIDX_TO_TIME_STRING 269 /* 'toTimeString' */ -#define DUK_STRIDX_TO_DATE_STRING 270 /* 'toDateString' */ -#define DUK_STRIDX_NOW 271 /* 'now' */ -#define DUK_STRIDX_UTC 272 /* 'UTC' */ -#define DUK_STRIDX_PARSE 273 /* 'parse' */ -#define DUK_STRIDX_TO_PRECISION 274 /* 'toPrecision' */ -#define DUK_STRIDX_TO_EXPONENTIAL 275 /* 'toExponential' */ -#define DUK_STRIDX_TO_FIXED 276 /* 'toFixed' */ -#define DUK_STRIDX_POSITIVE_INFINITY 277 /* 'POSITIVE_INFINITY' */ -#define DUK_STRIDX_NEGATIVE_INFINITY 278 /* 'NEGATIVE_INFINITY' */ -#define DUK_STRIDX_NAN 279 /* 'NaN' */ -#define DUK_STRIDX_MIN_VALUE 280 /* 'MIN_VALUE' */ -#define DUK_STRIDX_MAX_VALUE 281 /* 'MAX_VALUE' */ -#define DUK_STRIDX_SUBSTR 282 /* 'substr' */ -#define DUK_STRIDX_TRIM 283 /* 'trim' */ -#define DUK_STRIDX_TO_LOCALE_UPPER_CASE 284 /* 'toLocaleUpperCase' */ -#define DUK_STRIDX_TO_UPPER_CASE 285 /* 'toUpperCase' */ -#define DUK_STRIDX_TO_LOCALE_LOWER_CASE 286 /* 'toLocaleLowerCase' */ -#define DUK_STRIDX_TO_LOWER_CASE 287 /* 'toLowerCase' */ -#define DUK_STRIDX_SUBSTRING 288 /* 'substring' */ -#define DUK_STRIDX_SPLIT 289 /* 'split' */ -#define DUK_STRIDX_SEARCH 290 /* 'search' */ -#define DUK_STRIDX_REPLACE 291 /* 'replace' */ -#define DUK_STRIDX_MATCH 292 /* 'match' */ -#define DUK_STRIDX_LOCALE_COMPARE 293 /* 'localeCompare' */ -#define DUK_STRIDX_CHAR_CODE_AT 294 /* 'charCodeAt' */ -#define DUK_STRIDX_CHAR_AT 295 /* 'charAt' */ -#define DUK_STRIDX_FROM_CHAR_CODE 296 /* 'fromCharCode' */ -#define DUK_STRIDX_REDUCE_RIGHT 297 /* 'reduceRight' */ -#define DUK_STRIDX_REDUCE 298 /* 'reduce' */ -#define DUK_STRIDX_FILTER 299 /* 'filter' */ -#define DUK_STRIDX_MAP 300 /* 'map' */ -#define DUK_STRIDX_FOR_EACH 301 /* 'forEach' */ -#define DUK_STRIDX_SOME 302 /* 'some' */ -#define DUK_STRIDX_EVERY 303 /* 'every' */ -#define DUK_STRIDX_LAST_INDEX_OF 304 /* 'lastIndexOf' */ -#define DUK_STRIDX_INDEX_OF 305 /* 'indexOf' */ -#define DUK_STRIDX_UNSHIFT 306 /* 'unshift' */ -#define DUK_STRIDX_SPLICE 307 /* 'splice' */ -#define DUK_STRIDX_SORT 308 /* 'sort' */ -#define DUK_STRIDX_SLICE 309 /* 'slice' */ -#define DUK_STRIDX_SHIFT 310 /* 'shift' */ -#define DUK_STRIDX_REVERSE 311 /* 'reverse' */ -#define DUK_STRIDX_PUSH 312 /* 'push' */ -#define DUK_STRIDX_POP 313 /* 'pop' */ -#define DUK_STRIDX_JOIN 314 /* 'join' */ -#define DUK_STRIDX_CONCAT 315 /* 'concat' */ -#define DUK_STRIDX_IS_ARRAY 316 /* 'isArray' */ -#define DUK_STRIDX_LC_ARGUMENTS 317 /* 'arguments' */ -#define DUK_STRIDX_CALLER 318 /* 'caller' */ -#define DUK_STRIDX_BIND 319 /* 'bind' */ -#define DUK_STRIDX_CALL 320 /* 'call' */ -#define DUK_STRIDX_APPLY 321 /* 'apply' */ -#define DUK_STRIDX_PROPERTY_IS_ENUMERABLE 322 /* 'propertyIsEnumerable' */ -#define DUK_STRIDX_IS_PROTOTYPE_OF 323 /* 'isPrototypeOf' */ -#define DUK_STRIDX_HAS_OWN_PROPERTY 324 /* 'hasOwnProperty' */ -#define DUK_STRIDX_VALUE_OF 325 /* 'valueOf' */ -#define DUK_STRIDX_TO_LOCALE_STRING 326 /* 'toLocaleString' */ -#define DUK_STRIDX_TO_STRING 327 /* 'toString' */ -#define DUK_STRIDX_CONSTRUCTOR 328 /* 'constructor' */ -#define DUK_STRIDX_SET 329 /* 'set' */ -#define DUK_STRIDX_GET 330 /* 'get' */ -#define DUK_STRIDX_ENUMERABLE 331 /* 'enumerable' */ -#define DUK_STRIDX_CONFIGURABLE 332 /* 'configurable' */ -#define DUK_STRIDX_WRITABLE 333 /* 'writable' */ -#define DUK_STRIDX_VALUE 334 /* 'value' */ -#define DUK_STRIDX_KEYS 335 /* 'keys' */ -#define DUK_STRIDX_IS_EXTENSIBLE 336 /* 'isExtensible' */ -#define DUK_STRIDX_IS_FROZEN 337 /* 'isFrozen' */ -#define DUK_STRIDX_IS_SEALED 338 /* 'isSealed' */ -#define DUK_STRIDX_PREVENT_EXTENSIONS 339 /* 'preventExtensions' */ -#define DUK_STRIDX_FREEZE 340 /* 'freeze' */ -#define DUK_STRIDX_SEAL 341 /* 'seal' */ -#define DUK_STRIDX_DEFINE_PROPERTIES 342 /* 'defineProperties' */ -#define DUK_STRIDX_DEFINE_PROPERTY 343 /* 'defineProperty' */ -#define DUK_STRIDX_CREATE 344 /* 'create' */ -#define DUK_STRIDX_GET_OWN_PROPERTY_NAMES 345 /* 'getOwnPropertyNames' */ -#define DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR 346 /* 'getOwnPropertyDescriptor' */ -#define DUK_STRIDX_GET_PROTOTYPE_OF 347 /* 'getPrototypeOf' */ -#define DUK_STRIDX_PROTOTYPE 348 /* 'prototype' */ -#define DUK_STRIDX_LENGTH 349 /* 'length' */ -#define DUK_STRIDX_ALERT 350 /* 'alert' */ -#define DUK_STRIDX_PRINT 351 /* 'print' */ -#define DUK_STRIDX_UNESCAPE 352 /* 'unescape' */ -#define DUK_STRIDX_ESCAPE 353 /* 'escape' */ -#define DUK_STRIDX_ENCODE_URI_COMPONENT 354 /* 'encodeURIComponent' */ -#define DUK_STRIDX_ENCODE_URI 355 /* 'encodeURI' */ -#define DUK_STRIDX_DECODE_URI_COMPONENT 356 /* 'decodeURIComponent' */ -#define DUK_STRIDX_DECODE_URI 357 /* 'decodeURI' */ -#define DUK_STRIDX_IS_FINITE 358 /* 'isFinite' */ -#define DUK_STRIDX_IS_NAN 359 /* 'isNaN' */ -#define DUK_STRIDX_PARSE_FLOAT 360 /* 'parseFloat' */ -#define DUK_STRIDX_PARSE_INT 361 /* 'parseInt' */ -#define DUK_STRIDX_EVAL 362 /* 'eval' */ -#define DUK_STRIDX_URI_ERROR 363 /* 'URIError' */ -#define DUK_STRIDX_TYPE_ERROR 364 /* 'TypeError' */ -#define DUK_STRIDX_SYNTAX_ERROR 365 /* 'SyntaxError' */ -#define DUK_STRIDX_REFERENCE_ERROR 366 /* 'ReferenceError' */ -#define DUK_STRIDX_RANGE_ERROR 367 /* 'RangeError' */ -#define DUK_STRIDX_EVAL_ERROR 368 /* 'EvalError' */ -#define DUK_STRIDX_BREAK 369 /* 'break' */ -#define DUK_STRIDX_CASE 370 /* 'case' */ -#define DUK_STRIDX_CATCH 371 /* 'catch' */ -#define DUK_STRIDX_CONTINUE 372 /* 'continue' */ -#define DUK_STRIDX_DEBUGGER 373 /* 'debugger' */ -#define DUK_STRIDX_DEFAULT 374 /* 'default' */ -#define DUK_STRIDX_DELETE 375 /* 'delete' */ -#define DUK_STRIDX_DO 376 /* 'do' */ -#define DUK_STRIDX_ELSE 377 /* 'else' */ -#define DUK_STRIDX_FINALLY 378 /* 'finally' */ -#define DUK_STRIDX_FOR 379 /* 'for' */ -#define DUK_STRIDX_LC_FUNCTION 380 /* 'function' */ -#define DUK_STRIDX_IF 381 /* 'if' */ -#define DUK_STRIDX_IN 382 /* 'in' */ -#define DUK_STRIDX_INSTANCEOF 383 /* 'instanceof' */ -#define DUK_STRIDX_NEW 384 /* 'new' */ -#define DUK_STRIDX_RETURN 385 /* 'return' */ -#define DUK_STRIDX_SWITCH 386 /* 'switch' */ -#define DUK_STRIDX_THIS 387 /* 'this' */ -#define DUK_STRIDX_THROW 388 /* 'throw' */ -#define DUK_STRIDX_TRY 389 /* 'try' */ -#define DUK_STRIDX_TYPEOF 390 /* 'typeof' */ -#define DUK_STRIDX_VAR 391 /* 'var' */ -#define DUK_STRIDX_CONST 392 /* 'const' */ -#define DUK_STRIDX_VOID 393 /* 'void' */ -#define DUK_STRIDX_WHILE 394 /* 'while' */ -#define DUK_STRIDX_WITH 395 /* 'with' */ -#define DUK_STRIDX_CLASS 396 /* 'class' */ -#define DUK_STRIDX_ENUM 397 /* 'enum' */ -#define DUK_STRIDX_EXPORT 398 /* 'export' */ -#define DUK_STRIDX_EXTENDS 399 /* 'extends' */ -#define DUK_STRIDX_IMPORT 400 /* 'import' */ -#define DUK_STRIDX_SUPER 401 /* 'super' */ -#define DUK_STRIDX_LC_NULL 402 /* 'null' */ -#define DUK_STRIDX_TRUE 403 /* 'true' */ -#define DUK_STRIDX_FALSE 404 /* 'false' */ -#define DUK_STRIDX_IMPLEMENTS 405 /* 'implements' */ -#define DUK_STRIDX_INTERFACE 406 /* 'interface' */ -#define DUK_STRIDX_LET 407 /* 'let' */ -#define DUK_STRIDX_PACKAGE 408 /* 'package' */ -#define DUK_STRIDX_PRIVATE 409 /* 'private' */ -#define DUK_STRIDX_PROTECTED 410 /* 'protected' */ -#define DUK_STRIDX_PUBLIC 411 /* 'public' */ -#define DUK_STRIDX_STATIC 412 /* 'static' */ -#define DUK_STRIDX_YIELD 413 /* 'yield' */ - -#define DUK_HEAP_STRING_UC_LOGGER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_LOGGER) -#define DUK_HTHREAD_STRING_UC_LOGGER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_LOGGER) -#define DUK_HEAP_STRING_UC_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_THREAD) -#define DUK_HTHREAD_STRING_UC_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_THREAD) -#define DUK_HEAP_STRING_UC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_POINTER) -#define DUK_HTHREAD_STRING_UC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_POINTER) -#define DUK_HEAP_STRING_DEC_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC_ENV) -#define DUK_HTHREAD_STRING_DEC_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC_ENV) -#define DUK_HEAP_STRING_OBJ_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OBJ_ENV) -#define DUK_HTHREAD_STRING_OBJ_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OBJ_ENV) -#define DUK_HEAP_STRING_FLOAT64_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT64_ARRAY) -#define DUK_HTHREAD_STRING_FLOAT64_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT64_ARRAY) -#define DUK_HEAP_STRING_FLOAT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT32_ARRAY) -#define DUK_HTHREAD_STRING_FLOAT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT32_ARRAY) -#define DUK_HEAP_STRING_UINT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT32_ARRAY) -#define DUK_HTHREAD_STRING_UINT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT32_ARRAY) -#define DUK_HEAP_STRING_INT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT32_ARRAY) -#define DUK_HTHREAD_STRING_INT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT32_ARRAY) -#define DUK_HEAP_STRING_UINT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT16_ARRAY) -#define DUK_HTHREAD_STRING_UINT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT16_ARRAY) -#define DUK_HEAP_STRING_INT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT16_ARRAY) -#define DUK_HTHREAD_STRING_INT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT16_ARRAY) -#define DUK_HEAP_STRING_UINT8_CLAMPED_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_CLAMPED_ARRAY) -#define DUK_HTHREAD_STRING_UINT8_CLAMPED_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_CLAMPED_ARRAY) -#define DUK_HEAP_STRING_UINT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_ARRAY) -#define DUK_HTHREAD_STRING_UINT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_ARRAY) -#define DUK_HEAP_STRING_INT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT8_ARRAY) -#define DUK_HTHREAD_STRING_INT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT8_ARRAY) -#define DUK_HEAP_STRING_DATA_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA_VIEW) -#define DUK_HTHREAD_STRING_DATA_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA_VIEW) -#define DUK_HEAP_STRING_ARRAY_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY_BUFFER) -#define DUK_HTHREAD_STRING_ARRAY_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY_BUFFER) -#define DUK_HEAP_STRING_UC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BUFFER) -#define DUK_HTHREAD_STRING_UC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BUFFER) -#define DUK_HEAP_STRING_EMPTY_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EMPTY_STRING) -#define DUK_HTHREAD_STRING_EMPTY_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EMPTY_STRING) -#define DUK_HEAP_STRING_GLOBAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GLOBAL) -#define DUK_HTHREAD_STRING_GLOBAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GLOBAL) -#define DUK_HEAP_STRING_UC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ARGUMENTS) -#define DUK_HTHREAD_STRING_UC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ARGUMENTS) -#define DUK_HEAP_STRING_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON) -#define DUK_HTHREAD_STRING_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON) -#define DUK_HEAP_STRING_MATH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATH) -#define DUK_HTHREAD_STRING_MATH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATH) -#define DUK_HEAP_STRING_UC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ERROR) -#define DUK_HTHREAD_STRING_UC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ERROR) -#define DUK_HEAP_STRING_REG_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REG_EXP) -#define DUK_HTHREAD_STRING_REG_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REG_EXP) -#define DUK_HEAP_STRING_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATE) -#define DUK_HTHREAD_STRING_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATE) -#define DUK_HEAP_STRING_UC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NUMBER) -#define DUK_HTHREAD_STRING_UC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NUMBER) -#define DUK_HEAP_STRING_UC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BOOLEAN) -#define DUK_HTHREAD_STRING_UC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BOOLEAN) -#define DUK_HEAP_STRING_UC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_STRING) -#define DUK_HTHREAD_STRING_UC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_STRING) -#define DUK_HEAP_STRING_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY) -#define DUK_HTHREAD_STRING_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY) -#define DUK_HEAP_STRING_UC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_FUNCTION) -#define DUK_HTHREAD_STRING_UC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_FUNCTION) -#define DUK_HEAP_STRING_UC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_OBJECT) -#define DUK_HTHREAD_STRING_UC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_OBJECT) -#define DUK_HEAP_STRING_UC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NULL) -#define DUK_HTHREAD_STRING_UC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NULL) -#define DUK_HEAP_STRING_UC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_UNDEFINED) -#define DUK_HTHREAD_STRING_UC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_UNDEFINED) -#define DUK_HEAP_STRING_JSON_EXT_FUNCTION2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION2) -#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION2) -#define DUK_HEAP_STRING_JSON_EXT_FUNCTION1(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION1) -#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION1(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION1) -#define DUK_HEAP_STRING_JSON_EXT_NEGINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NEGINF) -#define DUK_HTHREAD_STRING_JSON_EXT_NEGINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NEGINF) -#define DUK_HEAP_STRING_JSON_EXT_POSINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_POSINF) -#define DUK_HTHREAD_STRING_JSON_EXT_POSINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_POSINF) -#define DUK_HEAP_STRING_JSON_EXT_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NAN) -#define DUK_HTHREAD_STRING_JSON_EXT_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NAN) -#define DUK_HEAP_STRING_JSON_EXT_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_UNDEFINED) -#define DUK_HTHREAD_STRING_JSON_EXT_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_UNDEFINED) -#define DUK_HEAP_STRING_TO_LOG_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOG_STRING) -#define DUK_HTHREAD_STRING_TO_LOG_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOG_STRING) -#define DUK_HEAP_STRING_CLOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLOG) -#define DUK_HTHREAD_STRING_CLOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLOG) -#define DUK_HEAP_STRING_LC_L(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_L) -#define DUK_HTHREAD_STRING_LC_L(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_L) -#define DUK_HEAP_STRING_LC_N(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_N) -#define DUK_HTHREAD_STRING_LC_N(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_N) -#define DUK_HEAP_STRING_LC_FATAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FATAL) -#define DUK_HTHREAD_STRING_LC_FATAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FATAL) -#define DUK_HEAP_STRING_LC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ERROR) -#define DUK_HTHREAD_STRING_LC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ERROR) -#define DUK_HEAP_STRING_LC_WARN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_WARN) -#define DUK_HTHREAD_STRING_LC_WARN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_WARN) -#define DUK_HEAP_STRING_LC_DEBUG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_DEBUG) -#define DUK_HTHREAD_STRING_LC_DEBUG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_DEBUG) -#define DUK_HEAP_STRING_LC_TRACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_TRACE) -#define DUK_HTHREAD_STRING_LC_TRACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_TRACE) -#define DUK_HEAP_STRING_RAW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RAW) -#define DUK_HTHREAD_STRING_RAW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RAW) -#define DUK_HEAP_STRING_FMT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FMT) -#define DUK_HTHREAD_STRING_FMT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FMT) -#define DUK_HEAP_STRING_CURRENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CURRENT) -#define DUK_HTHREAD_STRING_CURRENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CURRENT) -#define DUK_HEAP_STRING_RESUME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RESUME) -#define DUK_HTHREAD_STRING_RESUME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RESUME) -#define DUK_HEAP_STRING_COMPACT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPACT) -#define DUK_HTHREAD_STRING_COMPACT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPACT) -#define DUK_HEAP_STRING_JC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JC) -#define DUK_HTHREAD_STRING_JC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JC) -#define DUK_HEAP_STRING_JX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JX) -#define DUK_HTHREAD_STRING_JX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JX) -#define DUK_HEAP_STRING_BASE64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BASE64) -#define DUK_HTHREAD_STRING_BASE64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BASE64) -#define DUK_HEAP_STRING_HEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HEX) -#define DUK_HTHREAD_STRING_HEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HEX) -#define DUK_HEAP_STRING_DEC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC) -#define DUK_HTHREAD_STRING_DEC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC) -#define DUK_HEAP_STRING_ENC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENC) -#define DUK_HTHREAD_STRING_ENC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENC) -#define DUK_HEAP_STRING_FIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FIN) -#define DUK_HTHREAD_STRING_FIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FIN) -#define DUK_HEAP_STRING_GC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GC) -#define DUK_HTHREAD_STRING_GC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GC) -#define DUK_HEAP_STRING_ACT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ACT) -#define DUK_HTHREAD_STRING_ACT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ACT) -#define DUK_HEAP_STRING_LC_INFO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_INFO) -#define DUK_HTHREAD_STRING_LC_INFO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_INFO) -#define DUK_HEAP_STRING_VERSION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VERSION) -#define DUK_HTHREAD_STRING_VERSION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VERSION) -#define DUK_HEAP_STRING_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENV) -#define DUK_HTHREAD_STRING_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENV) -#define DUK_HEAP_STRING_MOD_LOADED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_LOADED) -#define DUK_HTHREAD_STRING_MOD_LOADED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_LOADED) -#define DUK_HEAP_STRING_MOD_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_SEARCH) -#define DUK_HTHREAD_STRING_MOD_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_SEARCH) -#define DUK_HEAP_STRING_ERR_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_THROW) -#define DUK_HTHREAD_STRING_ERR_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_THROW) -#define DUK_HEAP_STRING_ERR_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_CREATE) -#define DUK_HTHREAD_STRING_ERR_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_CREATE) -#define DUK_HEAP_STRING_COMPILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPILE) -#define DUK_HTHREAD_STRING_COMPILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPILE) -#define DUK_HEAP_STRING_INT_REGBASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_REGBASE) -#define DUK_HTHREAD_STRING_INT_REGBASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_REGBASE) -#define DUK_HEAP_STRING_INT_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THREAD) -#define DUK_HTHREAD_STRING_INT_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THREAD) -#define DUK_HEAP_STRING_INT_HANDLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_HANDLER) -#define DUK_HTHREAD_STRING_INT_HANDLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_HANDLER) -#define DUK_HEAP_STRING_INT_FINALIZER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FINALIZER) -#define DUK_HTHREAD_STRING_INT_FINALIZER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FINALIZER) -#define DUK_HEAP_STRING_INT_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_CALLEE) -#define DUK_HTHREAD_STRING_INT_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_CALLEE) -#define DUK_HEAP_STRING_INT_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_MAP) -#define DUK_HTHREAD_STRING_INT_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_MAP) -#define DUK_HEAP_STRING_INT_ARGS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_ARGS) -#define DUK_HTHREAD_STRING_INT_ARGS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_ARGS) -#define DUK_HEAP_STRING_INT_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THIS) -#define DUK_HTHREAD_STRING_INT_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THIS) -#define DUK_HEAP_STRING_INT_PC2LINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_PC2LINE) -#define DUK_HTHREAD_STRING_INT_PC2LINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_PC2LINE) -#define DUK_HEAP_STRING_INT_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_SOURCE) -#define DUK_HTHREAD_STRING_INT_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_SOURCE) -#define DUK_HEAP_STRING_INT_VARENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARENV) -#define DUK_HTHREAD_STRING_INT_VARENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARENV) -#define DUK_HEAP_STRING_INT_LEXENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_LEXENV) -#define DUK_HTHREAD_STRING_INT_LEXENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_LEXENV) -#define DUK_HEAP_STRING_INT_VARMAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARMAP) -#define DUK_HTHREAD_STRING_INT_VARMAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARMAP) -#define DUK_HEAP_STRING_INT_FORMALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FORMALS) -#define DUK_HTHREAD_STRING_INT_FORMALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FORMALS) -#define DUK_HEAP_STRING_INT_BYTECODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_BYTECODE) -#define DUK_HTHREAD_STRING_INT_BYTECODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_BYTECODE) -#define DUK_HEAP_STRING_INT_NEXT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_NEXT) -#define DUK_HTHREAD_STRING_INT_NEXT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_NEXT) -#define DUK_HEAP_STRING_INT_TARGET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TARGET) -#define DUK_HTHREAD_STRING_INT_TARGET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TARGET) -#define DUK_HEAP_STRING_INT_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VALUE) -#define DUK_HTHREAD_STRING_INT_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VALUE) -#define DUK_HEAP_STRING_LC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_POINTER) -#define DUK_HTHREAD_STRING_LC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_POINTER) -#define DUK_HEAP_STRING_INT_TRACEDATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TRACEDATA) -#define DUK_HTHREAD_STRING_INT_TRACEDATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TRACEDATA) -#define DUK_HEAP_STRING_LINE_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LINE_NUMBER) -#define DUK_HTHREAD_STRING_LINE_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LINE_NUMBER) -#define DUK_HEAP_STRING_FILE_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILE_NAME) -#define DUK_HTHREAD_STRING_FILE_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILE_NAME) -#define DUK_HEAP_STRING_PC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PC) -#define DUK_HTHREAD_STRING_PC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PC) -#define DUK_HEAP_STRING_STACK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STACK) -#define DUK_HTHREAD_STRING_STACK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STACK) -#define DUK_HEAP_STRING_THROW_TYPE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THROW_TYPE_ERROR) -#define DUK_HTHREAD_STRING_THROW_TYPE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THROW_TYPE_ERROR) -#define DUK_HEAP_STRING_DUKTAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DUKTAPE) -#define DUK_HTHREAD_STRING_DUKTAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DUKTAPE) -#define DUK_HEAP_STRING_SET_FLOAT64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FLOAT64) -#define DUK_HTHREAD_STRING_SET_FLOAT64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FLOAT64) -#define DUK_HEAP_STRING_SET_FLOAT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FLOAT32) -#define DUK_HTHREAD_STRING_SET_FLOAT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FLOAT32) -#define DUK_HEAP_STRING_SET_UINT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT32) -#define DUK_HTHREAD_STRING_SET_UINT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT32) -#define DUK_HEAP_STRING_SET_INT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT32) -#define DUK_HTHREAD_STRING_SET_INT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT32) -#define DUK_HEAP_STRING_SET_UINT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT16) -#define DUK_HTHREAD_STRING_SET_UINT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT16) -#define DUK_HEAP_STRING_SET_INT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT16) -#define DUK_HTHREAD_STRING_SET_INT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT16) -#define DUK_HEAP_STRING_SET_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UINT8) -#define DUK_HTHREAD_STRING_SET_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UINT8) -#define DUK_HEAP_STRING_SET_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_INT8) -#define DUK_HTHREAD_STRING_SET_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_INT8) -#define DUK_HEAP_STRING_GET_FLOAT64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FLOAT64) -#define DUK_HTHREAD_STRING_GET_FLOAT64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FLOAT64) -#define DUK_HEAP_STRING_GET_FLOAT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FLOAT32) -#define DUK_HTHREAD_STRING_GET_FLOAT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FLOAT32) -#define DUK_HEAP_STRING_GET_UINT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT32) -#define DUK_HTHREAD_STRING_GET_UINT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT32) -#define DUK_HEAP_STRING_GET_INT32(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT32) -#define DUK_HTHREAD_STRING_GET_INT32(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT32) -#define DUK_HEAP_STRING_GET_UINT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT16) -#define DUK_HTHREAD_STRING_GET_UINT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT16) -#define DUK_HEAP_STRING_GET_INT16(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT16) -#define DUK_HTHREAD_STRING_GET_INT16(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT16) -#define DUK_HEAP_STRING_GET_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UINT8) -#define DUK_HTHREAD_STRING_GET_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UINT8) -#define DUK_HEAP_STRING_GET_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_INT8) -#define DUK_HTHREAD_STRING_GET_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_INT8) -#define DUK_HEAP_STRING_SUBARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBARRAY) -#define DUK_HTHREAD_STRING_SUBARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBARRAY) -#define DUK_HEAP_STRING_BYTES_PER_ELEMENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTES_PER_ELEMENT) -#define DUK_HTHREAD_STRING_BYTES_PER_ELEMENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTES_PER_ELEMENT) -#define DUK_HEAP_STRING_BYTE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_OFFSET) -#define DUK_HTHREAD_STRING_BYTE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_OFFSET) -#define DUK_HEAP_STRING_LC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BUFFER) -#define DUK_HTHREAD_STRING_LC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BUFFER) -#define DUK_HEAP_STRING_IS_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_VIEW) -#define DUK_HTHREAD_STRING_IS_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_VIEW) -#define DUK_HEAP_STRING_DATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA) -#define DUK_HTHREAD_STRING_DATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA) -#define DUK_HEAP_STRING_TYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE) -#define DUK_HTHREAD_STRING_TYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE) -#define DUK_HEAP_STRING_WRITE_INT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT_BE) -#define DUK_HTHREAD_STRING_WRITE_INT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT_BE) -#define DUK_HEAP_STRING_WRITE_INT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT_LE) -#define DUK_HTHREAD_STRING_WRITE_INT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT_LE) -#define DUK_HEAP_STRING_WRITE_UINT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT_BE) -#define DUK_HEAP_STRING_WRITE_UINT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT_LE) -#define DUK_HEAP_STRING_WRITE_DOUBLE_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_DOUBLE_BE) -#define DUK_HTHREAD_STRING_WRITE_DOUBLE_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_DOUBLE_BE) -#define DUK_HEAP_STRING_WRITE_DOUBLE_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_DOUBLE_LE) -#define DUK_HTHREAD_STRING_WRITE_DOUBLE_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_DOUBLE_LE) -#define DUK_HEAP_STRING_WRITE_FLOAT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_FLOAT_BE) -#define DUK_HTHREAD_STRING_WRITE_FLOAT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_FLOAT_BE) -#define DUK_HEAP_STRING_WRITE_FLOAT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_FLOAT_LE) -#define DUK_HTHREAD_STRING_WRITE_FLOAT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_FLOAT_LE) -#define DUK_HEAP_STRING_WRITE_INT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT32_BE) -#define DUK_HTHREAD_STRING_WRITE_INT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT32_BE) -#define DUK_HEAP_STRING_WRITE_INT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT32_LE) -#define DUK_HTHREAD_STRING_WRITE_INT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT32_LE) -#define DUK_HEAP_STRING_WRITE_UINT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT32_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT32_BE) -#define DUK_HEAP_STRING_WRITE_UINT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT32_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT32_LE) -#define DUK_HEAP_STRING_WRITE_INT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT16_BE) -#define DUK_HTHREAD_STRING_WRITE_INT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT16_BE) -#define DUK_HEAP_STRING_WRITE_INT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT16_LE) -#define DUK_HTHREAD_STRING_WRITE_INT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT16_LE) -#define DUK_HEAP_STRING_WRITE_UINT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT16_BE) -#define DUK_HTHREAD_STRING_WRITE_UINT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT16_BE) -#define DUK_HEAP_STRING_WRITE_UINT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT16_LE) -#define DUK_HTHREAD_STRING_WRITE_UINT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT16_LE) -#define DUK_HEAP_STRING_WRITE_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_INT8) -#define DUK_HTHREAD_STRING_WRITE_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_INT8) -#define DUK_HEAP_STRING_WRITE_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE_UINT8) -#define DUK_HTHREAD_STRING_WRITE_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE_UINT8) -#define DUK_HEAP_STRING_READ_INT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT_BE) -#define DUK_HTHREAD_STRING_READ_INT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT_BE) -#define DUK_HEAP_STRING_READ_INT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT_LE) -#define DUK_HTHREAD_STRING_READ_INT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT_LE) -#define DUK_HEAP_STRING_READ_UINT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT_BE) -#define DUK_HTHREAD_STRING_READ_UINT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT_BE) -#define DUK_HEAP_STRING_READ_UINT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT_LE) -#define DUK_HTHREAD_STRING_READ_UINT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT_LE) -#define DUK_HEAP_STRING_READ_DOUBLE_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_DOUBLE_BE) -#define DUK_HTHREAD_STRING_READ_DOUBLE_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_DOUBLE_BE) -#define DUK_HEAP_STRING_READ_DOUBLE_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_DOUBLE_LE) -#define DUK_HTHREAD_STRING_READ_DOUBLE_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_DOUBLE_LE) -#define DUK_HEAP_STRING_READ_FLOAT_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_FLOAT_BE) -#define DUK_HTHREAD_STRING_READ_FLOAT_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_FLOAT_BE) -#define DUK_HEAP_STRING_READ_FLOAT_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_FLOAT_LE) -#define DUK_HTHREAD_STRING_READ_FLOAT_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_FLOAT_LE) -#define DUK_HEAP_STRING_READ_INT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT32_BE) -#define DUK_HTHREAD_STRING_READ_INT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT32_BE) -#define DUK_HEAP_STRING_READ_INT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT32_LE) -#define DUK_HTHREAD_STRING_READ_INT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT32_LE) -#define DUK_HEAP_STRING_READ_UINT32_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT32_BE) -#define DUK_HTHREAD_STRING_READ_UINT32_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT32_BE) -#define DUK_HEAP_STRING_READ_UINT32_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT32_LE) -#define DUK_HTHREAD_STRING_READ_UINT32_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT32_LE) -#define DUK_HEAP_STRING_READ_INT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT16_BE) -#define DUK_HTHREAD_STRING_READ_INT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT16_BE) -#define DUK_HEAP_STRING_READ_INT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT16_LE) -#define DUK_HTHREAD_STRING_READ_INT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT16_LE) -#define DUK_HEAP_STRING_READ_UINT16_BE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT16_BE) -#define DUK_HTHREAD_STRING_READ_UINT16_BE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT16_BE) -#define DUK_HEAP_STRING_READ_UINT16_LE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT16_LE) -#define DUK_HTHREAD_STRING_READ_UINT16_LE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT16_LE) -#define DUK_HEAP_STRING_READ_INT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_INT8) -#define DUK_HTHREAD_STRING_READ_INT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_INT8) -#define DUK_HEAP_STRING_READ_UINT8(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_READ_UINT8) -#define DUK_HTHREAD_STRING_READ_UINT8(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_READ_UINT8) -#define DUK_HEAP_STRING_COPY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COPY) -#define DUK_HTHREAD_STRING_COPY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COPY) -#define DUK_HEAP_STRING_EQUALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EQUALS) -#define DUK_HTHREAD_STRING_EQUALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EQUALS) -#define DUK_HEAP_STRING_FILL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILL) -#define DUK_HTHREAD_STRING_FILL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILL) -#define DUK_HEAP_STRING_WRITE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITE) -#define DUK_HTHREAD_STRING_WRITE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITE) -#define DUK_HEAP_STRING_COMPARE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPARE) -#define DUK_HTHREAD_STRING_COMPARE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPARE) -#define DUK_HEAP_STRING_BYTE_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_LENGTH) -#define DUK_HTHREAD_STRING_BYTE_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_LENGTH) -#define DUK_HEAP_STRING_IS_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_BUFFER) -#define DUK_HTHREAD_STRING_IS_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_BUFFER) -#define DUK_HEAP_STRING_IS_ENCODING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_ENCODING) -#define DUK_HTHREAD_STRING_IS_ENCODING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_ENCODING) -#define DUK_HEAP_STRING_EXPORTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORTS) -#define DUK_HTHREAD_STRING_EXPORTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORTS) -#define DUK_HEAP_STRING_ID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ID) -#define DUK_HTHREAD_STRING_ID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ID) -#define DUK_HEAP_STRING_REQUIRE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REQUIRE) -#define DUK_HTHREAD_STRING_REQUIRE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REQUIRE) -#define DUK_HEAP_STRING___PROTO__(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX___PROTO__) -#define DUK_HTHREAD_STRING___PROTO__(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX___PROTO__) -#define DUK_HEAP_STRING_SET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_SET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_PROTOTYPE_OF) -#define DUK_HEAP_STRING_OWN_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OWN_KEYS) -#define DUK_HTHREAD_STRING_OWN_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OWN_KEYS) -#define DUK_HEAP_STRING_ENUMERATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERATE) -#define DUK_HTHREAD_STRING_ENUMERATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERATE) -#define DUK_HEAP_STRING_DELETE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE_PROPERTY) -#define DUK_HTHREAD_STRING_DELETE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE_PROPERTY) -#define DUK_HEAP_STRING_HAS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS) -#define DUK_HTHREAD_STRING_HAS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS) -#define DUK_HEAP_STRING_PROXY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROXY) -#define DUK_HTHREAD_STRING_PROXY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROXY) -#define DUK_HEAP_STRING_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLEE) -#define DUK_HTHREAD_STRING_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLEE) -#define DUK_HEAP_STRING_INVALID_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INVALID_DATE) -#define DUK_HTHREAD_STRING_INVALID_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INVALID_DATE) -#define DUK_HEAP_STRING_BRACKETED_ELLIPSIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BRACKETED_ELLIPSIS) -#define DUK_HTHREAD_STRING_BRACKETED_ELLIPSIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BRACKETED_ELLIPSIS) -#define DUK_HEAP_STRING_NEWLINE_TAB(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEWLINE_TAB) -#define DUK_HTHREAD_STRING_NEWLINE_TAB(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEWLINE_TAB) -#define DUK_HEAP_STRING_SPACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPACE) -#define DUK_HTHREAD_STRING_SPACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPACE) -#define DUK_HEAP_STRING_COMMA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMMA) -#define DUK_HTHREAD_STRING_COMMA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMMA) -#define DUK_HEAP_STRING_MINUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_ZERO) -#define DUK_HTHREAD_STRING_MINUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_ZERO) -#define DUK_HEAP_STRING_PLUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PLUS_ZERO) -#define DUK_HTHREAD_STRING_PLUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PLUS_ZERO) -#define DUK_HEAP_STRING_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ZERO) -#define DUK_HTHREAD_STRING_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ZERO) -#define DUK_HEAP_STRING_MINUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_INFINITY) -#define DUK_HTHREAD_STRING_MINUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_INFINITY) -#define DUK_HEAP_STRING_PLUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PLUS_INFINITY) -#define DUK_HTHREAD_STRING_PLUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PLUS_INFINITY) -#define DUK_HEAP_STRING_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INFINITY) -#define DUK_HTHREAD_STRING_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INFINITY) -#define DUK_HEAP_STRING_LC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_OBJECT) -#define DUK_HTHREAD_STRING_LC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_OBJECT) -#define DUK_HEAP_STRING_LC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_STRING) -#define DUK_HTHREAD_STRING_LC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_STRING) -#define DUK_HEAP_STRING_LC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NUMBER) -#define DUK_HTHREAD_STRING_LC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NUMBER) +#define DUK_TVAL_SET_LIGHTFUNC(tv,fp,flags) do { \ + (tv)->t = DUK_TAG_LIGHTFUNC; \ + (tv)->v_extra = (flags); \ + (tv)->v.lightfunc = (duk_c_function) (fp); \ + } while (0) + +#define DUK_TVAL_SET_STRING(tv,hptr) do { \ + (tv)->t = DUK_TAG_STRING; \ + (tv)->v.hstring = (hptr); \ + } while (0) + +#define DUK_TVAL_SET_OBJECT(tv,hptr) do { \ + (tv)->t = DUK_TAG_OBJECT; \ + (tv)->v.hobject = (hptr); \ + } while (0) + +#define DUK_TVAL_SET_BUFFER(tv,hptr) do { \ + (tv)->t = DUK_TAG_BUFFER; \ + (tv)->v.hbuffer = (hptr); \ + } while (0) + +#define DUK_TVAL_SET_NAN(tv) do { \ + /* in non-packed representation we don't care about which NaN is used */ \ + (tv)->t = DUK__TAG_NUMBER; \ + (tv)->v.d = DUK_DOUBLE_NAN; \ + } while (0) + +#define DUK_TVAL_SET_TVAL(v,x) do { *(v) = *(x); } while (0) + +/* getters */ +#define DUK_TVAL_GET_BOOLEAN(tv) ((tv)->v.i) +#if defined(DUK_USE_FASTINT) +#define DUK_TVAL_GET_DOUBLE(tv) ((tv)->v.d) +#define DUK_TVAL_GET_FASTINT(tv) ((tv)->v.fi) +#define DUK_TVAL_GET_FASTINT_U32(tv) ((duk_uint32_t) ((tv)->v.fi)) +#define DUK_TVAL_GET_FASTINT_I32(tv) ((duk_int32_t) ((tv)->v.fi)) +#if 0 +#define DUK_TVAL_GET_NUMBER(tv) (DUK_TVAL_IS_FASTINT((tv)) ? \ + (duk_double_t) DUK_TVAL_GET_FASTINT((tv)) : \ + DUK_TVAL_GET_DOUBLE((tv))) +#define DUK_TVAL_GET_NUMBER(tv) duk_tval_get_number_unpacked((tv)) +#else +/* This seems reasonable overall. */ +#define DUK_TVAL_GET_NUMBER(tv) (DUK_TVAL_IS_FASTINT((tv)) ? \ + duk_tval_get_number_unpacked_fastint((tv)) : \ + DUK_TVAL_GET_DOUBLE((tv))) +#endif +#else +#define DUK_TVAL_GET_NUMBER(tv) ((tv)->v.d) +#define DUK_TVAL_GET_DOUBLE(tv) ((tv)->v.d) +#endif /* DUK_USE_FASTINT */ +#define DUK_TVAL_GET_POINTER(tv) ((tv)->v.voidptr) +#define DUK_TVAL_GET_LIGHTFUNC(tv,out_fp,out_flags) do { \ + (out_flags) = (duk_uint32_t) (tv)->v_extra; \ + (out_fp) = (tv)->v.lightfunc; \ + } while (0) +#define DUK_TVAL_GET_LIGHTFUNC_FUNCPTR(tv) ((tv)->v.lightfunc) +#define DUK_TVAL_GET_LIGHTFUNC_FLAGS(tv) ((duk_uint32_t) ((tv)->v_extra)) +#define DUK_TVAL_GET_STRING(tv) ((tv)->v.hstring) +#define DUK_TVAL_GET_OBJECT(tv) ((tv)->v.hobject) +#define DUK_TVAL_GET_BUFFER(tv) ((tv)->v.hbuffer) +#define DUK_TVAL_GET_HEAPHDR(tv) ((tv)->v.heaphdr) + +/* decoding */ +#define DUK_TVAL_GET_TAG(tv) ((tv)->t) +#define DUK_TVAL_IS_UNDEFINED(tv) ((tv)->t == DUK_TAG_UNDEFINED) +#define DUK_TVAL_IS_UNUSED(tv) ((tv)->t == DUK_TAG_UNUSED) +#define DUK_TVAL_IS_NULL(tv) ((tv)->t == DUK_TAG_NULL) +#define DUK_TVAL_IS_BOOLEAN(tv) ((tv)->t == DUK_TAG_BOOLEAN) +#define DUK_TVAL_IS_BOOLEAN_TRUE(tv) (((tv)->t == DUK_TAG_BOOLEAN) && ((tv)->v.i != 0)) +#define DUK_TVAL_IS_BOOLEAN_FALSE(tv) (((tv)->t == DUK_TAG_BOOLEAN) && ((tv)->v.i == 0)) +#if defined(DUK_USE_FASTINT) +#define DUK_TVAL_IS_DOUBLE(tv) ((tv)->t == DUK__TAG_NUMBER) +#define DUK_TVAL_IS_FASTINT(tv) ((tv)->t == DUK_TAG_FASTINT) +#define DUK_TVAL_IS_NUMBER(tv) ((tv)->t == DUK__TAG_NUMBER || \ + (tv)->t == DUK_TAG_FASTINT) +#else +#define DUK_TVAL_IS_NUMBER(tv) ((tv)->t == DUK__TAG_NUMBER) +#define DUK_TVAL_IS_DOUBLE(v) DUK_TVAL_IS_NUMBER((v)) +#endif /* DUK_USE_FASTINT */ +#define DUK_TVAL_IS_POINTER(tv) ((tv)->t == DUK_TAG_POINTER) +#define DUK_TVAL_IS_LIGHTFUNC(tv) ((tv)->t == DUK_TAG_LIGHTFUNC) +#define DUK_TVAL_IS_STRING(tv) ((tv)->t == DUK_TAG_STRING) +#define DUK_TVAL_IS_OBJECT(tv) ((tv)->t == DUK_TAG_OBJECT) +#define DUK_TVAL_IS_BUFFER(tv) ((tv)->t == DUK_TAG_BUFFER) + +/* This is performance critical because it's needed for every DECREF. + * Take advantage of the fact that the first heap allocated tag is 8, + * so that bit 3 is set for all heap allocated tags (and never set for + * non-heap-allocated tags). + */ +#if 0 +#define DUK_TVAL_IS_HEAP_ALLOCATED(tv) ((tv)->t >= DUK_TAG_STRING) +#endif +#define DUK_TVAL_IS_HEAP_ALLOCATED(tv) ((tv)->t & 0x08) + +#if defined(DUK_USE_FASTINT) +#if 0 +DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_unpacked(duk_tval *tv); +#endif +DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_unpacked_fastint(duk_tval *tv); +#endif + +#endif /* DUK_USE_PACKED_TVAL */ + +/* + * Convenience (independent of representation) + */ + +#define DUK_TVAL_SET_BOOLEAN_TRUE(v) DUK_TVAL_SET_BOOLEAN(v, 1) +#define DUK_TVAL_SET_BOOLEAN_FALSE(v) DUK_TVAL_SET_BOOLEAN(v, 0) + +/* Lightfunc flags packing and unpacking. */ +/* Sign extend: 0x0000##00 -> 0x##000000 -> sign extend to 0xssssss## */ +#define DUK_LFUNC_FLAGS_GET_MAGIC(lf_flags) \ + ((((duk_int32_t) (lf_flags)) << 16) >> 24) +#define DUK_LFUNC_FLAGS_GET_LENGTH(lf_flags) \ + (((lf_flags) >> 4) & 0x0f) +#define DUK_LFUNC_FLAGS_GET_NARGS(lf_flags) \ + ((lf_flags) & 0x0f) +#define DUK_LFUNC_FLAGS_PACK(magic,length,nargs) \ + (((magic) & 0xff) << 8) | ((length) << 4) | (nargs) + +#define DUK_LFUNC_NARGS_VARARGS 0x0f /* varargs marker */ +#define DUK_LFUNC_NARGS_MIN 0x00 +#define DUK_LFUNC_NARGS_MAX 0x0e /* max, excl. varargs marker */ +#define DUK_LFUNC_LENGTH_MIN 0x00 +#define DUK_LFUNC_LENGTH_MAX 0x0f +#define DUK_LFUNC_MAGIC_MIN (-0x80) +#define DUK_LFUNC_MAGIC_MAX 0x7f + +/* fastint constants etc */ +#if defined(DUK_USE_FASTINT) +#define DUK_FASTINT_MIN (-0x800000000000LL) +#define DUK_FASTINT_MAX 0x7fffffffffffLL +#define DUK_FASTINT_BITS 48 + +DUK_INTERNAL_DECL void duk_tval_set_number_chkfast(duk_tval *tv, duk_double_t x); +#endif + +#endif /* DUK_TVAL_H_INCLUDED */ +#line 1 "duk_builtins.h" +/* + * Automatically generated by genbuiltins.py, do not edit! + */ + +#ifndef DUK_BUILTINS_H_INCLUDED +#define DUK_BUILTINS_H_INCLUDED + +#if defined(DUK_USE_ROM_STRINGS) +#error ROM support not enabled, rerun make_dist.py with --rom-support +#else /* DUK_USE_ROM_STRINGS */ +#define DUK_STRIDX_UC_UNDEFINED 0 /* 'Undefined' */ +#define DUK_HEAP_STRING_UC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_UNDEFINED) +#define DUK_HTHREAD_STRING_UC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_UNDEFINED) +#define DUK_STRIDX_UC_NULL 1 /* 'Null' */ +#define DUK_HEAP_STRING_UC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NULL) +#define DUK_HTHREAD_STRING_UC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NULL) +#define DUK_STRIDX_UC_ARGUMENTS 2 /* 'Arguments' */ +#define DUK_HEAP_STRING_UC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ARGUMENTS) +#define DUK_HTHREAD_STRING_UC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ARGUMENTS) +#define DUK_STRIDX_UC_OBJECT 3 /* 'Object' */ +#define DUK_HEAP_STRING_UC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_OBJECT) +#define DUK_HTHREAD_STRING_UC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_OBJECT) +#define DUK_STRIDX_UC_FUNCTION 4 /* 'Function' */ +#define DUK_HEAP_STRING_UC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_FUNCTION) +#define DUK_HTHREAD_STRING_UC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_FUNCTION) +#define DUK_STRIDX_ARRAY 5 /* 'Array' */ +#define DUK_HEAP_STRING_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY) +#define DUK_HTHREAD_STRING_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY) +#define DUK_STRIDX_UC_STRING 6 /* 'String' */ +#define DUK_HEAP_STRING_UC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_STRING) +#define DUK_HTHREAD_STRING_UC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_STRING) +#define DUK_STRIDX_UC_BOOLEAN 7 /* 'Boolean' */ +#define DUK_HEAP_STRING_UC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BOOLEAN) +#define DUK_HTHREAD_STRING_UC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BOOLEAN) +#define DUK_STRIDX_UC_NUMBER 8 /* 'Number' */ +#define DUK_HEAP_STRING_UC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_NUMBER) +#define DUK_HTHREAD_STRING_UC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_NUMBER) +#define DUK_STRIDX_DATE 9 /* 'Date' */ +#define DUK_HEAP_STRING_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATE) +#define DUK_HTHREAD_STRING_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATE) +#define DUK_STRIDX_REG_EXP 10 /* 'RegExp' */ +#define DUK_HEAP_STRING_REG_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REG_EXP) +#define DUK_HTHREAD_STRING_REG_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REG_EXP) +#define DUK_STRIDX_UC_ERROR 11 /* 'Error' */ +#define DUK_HEAP_STRING_UC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_ERROR) +#define DUK_HTHREAD_STRING_UC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_ERROR) +#define DUK_STRIDX_MATH 12 /* 'Math' */ +#define DUK_HEAP_STRING_MATH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATH) +#define DUK_HTHREAD_STRING_MATH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATH) +#define DUK_STRIDX_JSON 13 /* 'JSON' */ +#define DUK_HEAP_STRING_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON) +#define DUK_HTHREAD_STRING_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON) +#define DUK_STRIDX_EMPTY_STRING 14 /* '' */ +#define DUK_HEAP_STRING_EMPTY_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EMPTY_STRING) +#define DUK_HTHREAD_STRING_EMPTY_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EMPTY_STRING) +#define DUK_STRIDX_ARRAY_BUFFER 15 /* 'ArrayBuffer' */ +#define DUK_HEAP_STRING_ARRAY_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ARRAY_BUFFER) +#define DUK_HTHREAD_STRING_ARRAY_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ARRAY_BUFFER) +#define DUK_STRIDX_DATA_VIEW 16 /* 'DataView' */ +#define DUK_HEAP_STRING_DATA_VIEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA_VIEW) +#define DUK_HTHREAD_STRING_DATA_VIEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA_VIEW) +#define DUK_STRIDX_INT8_ARRAY 17 /* 'Int8Array' */ +#define DUK_HEAP_STRING_INT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT8_ARRAY) +#define DUK_HTHREAD_STRING_INT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT8_ARRAY) +#define DUK_STRIDX_UINT8_ARRAY 18 /* 'Uint8Array' */ +#define DUK_HEAP_STRING_UINT8_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_ARRAY) +#define DUK_HTHREAD_STRING_UINT8_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_ARRAY) +#define DUK_STRIDX_UINT8_CLAMPED_ARRAY 19 /* 'Uint8ClampedArray' */ +#define DUK_HEAP_STRING_UINT8_CLAMPED_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT8_CLAMPED_ARRAY) +#define DUK_HTHREAD_STRING_UINT8_CLAMPED_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT8_CLAMPED_ARRAY) +#define DUK_STRIDX_INT16_ARRAY 20 /* 'Int16Array' */ +#define DUK_HEAP_STRING_INT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT16_ARRAY) +#define DUK_HTHREAD_STRING_INT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT16_ARRAY) +#define DUK_STRIDX_UINT16_ARRAY 21 /* 'Uint16Array' */ +#define DUK_HEAP_STRING_UINT16_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT16_ARRAY) +#define DUK_HTHREAD_STRING_UINT16_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT16_ARRAY) +#define DUK_STRIDX_INT32_ARRAY 22 /* 'Int32Array' */ +#define DUK_HEAP_STRING_INT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT32_ARRAY) +#define DUK_HTHREAD_STRING_INT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT32_ARRAY) +#define DUK_STRIDX_UINT32_ARRAY 23 /* 'Uint32Array' */ +#define DUK_HEAP_STRING_UINT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UINT32_ARRAY) +#define DUK_HTHREAD_STRING_UINT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UINT32_ARRAY) +#define DUK_STRIDX_FLOAT32_ARRAY 24 /* 'Float32Array' */ +#define DUK_HEAP_STRING_FLOAT32_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT32_ARRAY) +#define DUK_HTHREAD_STRING_FLOAT32_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT32_ARRAY) +#define DUK_STRIDX_FLOAT64_ARRAY 25 /* 'Float64Array' */ +#define DUK_HEAP_STRING_FLOAT64_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOAT64_ARRAY) +#define DUK_HTHREAD_STRING_FLOAT64_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOAT64_ARRAY) +#define DUK_STRIDX_GLOBAL 26 /* 'global' */ +#define DUK_HEAP_STRING_GLOBAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GLOBAL) +#define DUK_HTHREAD_STRING_GLOBAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GLOBAL) +#define DUK_STRIDX_OBJ_ENV 27 /* 'ObjEnv' */ +#define DUK_HEAP_STRING_OBJ_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OBJ_ENV) +#define DUK_HTHREAD_STRING_OBJ_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OBJ_ENV) +#define DUK_STRIDX_DEC_ENV 28 /* 'DecEnv' */ +#define DUK_HEAP_STRING_DEC_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEC_ENV) +#define DUK_HTHREAD_STRING_DEC_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEC_ENV) +#define DUK_STRIDX_UC_BUFFER 29 /* 'Buffer' */ +#define DUK_HEAP_STRING_UC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_BUFFER) +#define DUK_HTHREAD_STRING_UC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_BUFFER) +#define DUK_STRIDX_UC_POINTER 30 /* 'Pointer' */ +#define DUK_HEAP_STRING_UC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_POINTER) +#define DUK_HTHREAD_STRING_UC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_POINTER) +#define DUK_STRIDX_UC_THREAD 31 /* 'Thread' */ +#define DUK_HEAP_STRING_UC_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UC_THREAD) +#define DUK_HTHREAD_STRING_UC_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UC_THREAD) +#define DUK_STRIDX_EVAL 32 /* 'eval' */ +#define DUK_HEAP_STRING_EVAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL) +#define DUK_HTHREAD_STRING_EVAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL) +#define DUK_STRIDX_DEFINE_PROPERTY 33 /* 'defineProperty' */ +#define DUK_HEAP_STRING_DEFINE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTY) +#define DUK_HTHREAD_STRING_DEFINE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTY) +#define DUK_STRIDX_VALUE 34 /* 'value' */ +#define DUK_HEAP_STRING_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE) +#define DUK_HTHREAD_STRING_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE) +#define DUK_STRIDX_WRITABLE 35 /* 'writable' */ +#define DUK_HEAP_STRING_WRITABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITABLE) +#define DUK_HTHREAD_STRING_WRITABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITABLE) +#define DUK_STRIDX_CONFIGURABLE 36 /* 'configurable' */ +#define DUK_HEAP_STRING_CONFIGURABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONFIGURABLE) +#define DUK_HTHREAD_STRING_CONFIGURABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONFIGURABLE) +#define DUK_STRIDX_ENUMERABLE 37 /* 'enumerable' */ +#define DUK_HEAP_STRING_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERABLE) +#define DUK_HTHREAD_STRING_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERABLE) +#define DUK_STRIDX_JOIN 38 /* 'join' */ +#define DUK_HEAP_STRING_JOIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JOIN) +#define DUK_HTHREAD_STRING_JOIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JOIN) +#define DUK_STRIDX_TO_LOCALE_STRING 39 /* 'toLocaleString' */ +#define DUK_HEAP_STRING_TO_LOCALE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_STRING) +#define DUK_HTHREAD_STRING_TO_LOCALE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_STRING) +#define DUK_STRIDX_VALUE_OF 40 /* 'valueOf' */ +#define DUK_HEAP_STRING_VALUE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE_OF) +#define DUK_HTHREAD_STRING_VALUE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE_OF) +#define DUK_STRIDX_TO_UTC_STRING 41 /* 'toUTCString' */ +#define DUK_HEAP_STRING_TO_UTC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UTC_STRING) +#define DUK_HTHREAD_STRING_TO_UTC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UTC_STRING) +#define DUK_STRIDX_TO_ISO_STRING 42 /* 'toISOString' */ +#define DUK_HEAP_STRING_TO_ISO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_ISO_STRING) +#define DUK_HTHREAD_STRING_TO_ISO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_ISO_STRING) +#define DUK_STRIDX_TO_GMT_STRING 43 /* 'toGMTString' */ +#define DUK_HEAP_STRING_TO_GMT_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_GMT_STRING) +#define DUK_HTHREAD_STRING_TO_GMT_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_GMT_STRING) +#define DUK_STRIDX_SOURCE 44 /* 'source' */ +#define DUK_HEAP_STRING_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOURCE) +#define DUK_HTHREAD_STRING_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOURCE) +#define DUK_STRIDX_IGNORE_CASE 45 /* 'ignoreCase' */ +#define DUK_HEAP_STRING_IGNORE_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IGNORE_CASE) +#define DUK_HTHREAD_STRING_IGNORE_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IGNORE_CASE) +#define DUK_STRIDX_MULTILINE 46 /* 'multiline' */ +#define DUK_HEAP_STRING_MULTILINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MULTILINE) +#define DUK_HTHREAD_STRING_MULTILINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MULTILINE) +#define DUK_STRIDX_LAST_INDEX 47 /* 'lastIndex' */ +#define DUK_HEAP_STRING_LAST_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX) +#define DUK_HTHREAD_STRING_LAST_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX) +#define DUK_STRIDX_ESCAPED_EMPTY_REGEXP 48 /* '(?:)' */ +#define DUK_HEAP_STRING_ESCAPED_EMPTY_REGEXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) +#define DUK_HTHREAD_STRING_ESCAPED_EMPTY_REGEXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) +#define DUK_STRIDX_INDEX 49 /* 'index' */ +#define DUK_HEAP_STRING_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX) +#define DUK_HTHREAD_STRING_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX) +#define DUK_STRIDX_PROTOTYPE 50 /* 'prototype' */ +#define DUK_HEAP_STRING_PROTOTYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTOTYPE) +#define DUK_HTHREAD_STRING_PROTOTYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTOTYPE) +#define DUK_STRIDX_CONSTRUCTOR 51 /* 'constructor' */ +#define DUK_HEAP_STRING_CONSTRUCTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONSTRUCTOR) +#define DUK_HTHREAD_STRING_CONSTRUCTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONSTRUCTOR) +#define DUK_STRIDX_MESSAGE 52 /* 'message' */ +#define DUK_HEAP_STRING_MESSAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MESSAGE) +#define DUK_HTHREAD_STRING_MESSAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MESSAGE) +#define DUK_STRIDX_LC_BOOLEAN 53 /* 'boolean' */ #define DUK_HEAP_STRING_LC_BOOLEAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BOOLEAN) #define DUK_HTHREAD_STRING_LC_BOOLEAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BOOLEAN) +#define DUK_STRIDX_LC_NUMBER 54 /* 'number' */ +#define DUK_HEAP_STRING_LC_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NUMBER) +#define DUK_HTHREAD_STRING_LC_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NUMBER) +#define DUK_STRIDX_LC_STRING 55 /* 'string' */ +#define DUK_HEAP_STRING_LC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_STRING) +#define DUK_HTHREAD_STRING_LC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_STRING) +#define DUK_STRIDX_LC_OBJECT 56 /* 'object' */ +#define DUK_HEAP_STRING_LC_OBJECT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_OBJECT) +#define DUK_HTHREAD_STRING_LC_OBJECT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_OBJECT) +#define DUK_STRIDX_LC_UNDEFINED 57 /* 'undefined' */ #define DUK_HEAP_STRING_LC_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_UNDEFINED) #define DUK_HTHREAD_STRING_LC_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_UNDEFINED) -#define DUK_HEAP_STRING_STRINGIFY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STRINGIFY) -#define DUK_HTHREAD_STRING_STRINGIFY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STRINGIFY) -#define DUK_HEAP_STRING_TAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TAN) -#define DUK_HTHREAD_STRING_TAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TAN) -#define DUK_HEAP_STRING_SQRT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT) -#define DUK_HTHREAD_STRING_SQRT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT) -#define DUK_HEAP_STRING_SIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SIN) -#define DUK_HTHREAD_STRING_SIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SIN) -#define DUK_HEAP_STRING_ROUND(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ROUND) -#define DUK_HTHREAD_STRING_ROUND(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ROUND) -#define DUK_HEAP_STRING_RANDOM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RANDOM) -#define DUK_HTHREAD_STRING_RANDOM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RANDOM) -#define DUK_HEAP_STRING_POW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POW) -#define DUK_HTHREAD_STRING_POW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POW) -#define DUK_HEAP_STRING_MIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MIN) -#define DUK_HTHREAD_STRING_MIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MIN) -#define DUK_HEAP_STRING_MAX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAX) -#define DUK_HTHREAD_STRING_MAX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAX) -#define DUK_HEAP_STRING_LOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG) -#define DUK_HTHREAD_STRING_LOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG) -#define DUK_HEAP_STRING_FLOOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FLOOR) -#define DUK_HTHREAD_STRING_FLOOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FLOOR) -#define DUK_HEAP_STRING_EXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXP) -#define DUK_HTHREAD_STRING_EXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXP) -#define DUK_HEAP_STRING_COS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COS) -#define DUK_HTHREAD_STRING_COS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COS) -#define DUK_HEAP_STRING_CEIL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CEIL) -#define DUK_HTHREAD_STRING_CEIL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CEIL) -#define DUK_HEAP_STRING_ATAN2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ATAN2) -#define DUK_HTHREAD_STRING_ATAN2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ATAN2) -#define DUK_HEAP_STRING_ATAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ATAN) -#define DUK_HTHREAD_STRING_ATAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ATAN) -#define DUK_HEAP_STRING_ASIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ASIN) -#define DUK_HTHREAD_STRING_ASIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ASIN) -#define DUK_HEAP_STRING_ACOS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ACOS) -#define DUK_HTHREAD_STRING_ACOS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ACOS) -#define DUK_HEAP_STRING_ABS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ABS) -#define DUK_HTHREAD_STRING_ABS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ABS) -#define DUK_HEAP_STRING_SQRT2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT2) -#define DUK_HTHREAD_STRING_SQRT2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT2) -#define DUK_HEAP_STRING_SQRT1_2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SQRT1_2) -#define DUK_HTHREAD_STRING_SQRT1_2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SQRT1_2) -#define DUK_HEAP_STRING_PI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PI) -#define DUK_HTHREAD_STRING_PI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PI) -#define DUK_HEAP_STRING_LOG10E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG10E) -#define DUK_HTHREAD_STRING_LOG10E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG10E) -#define DUK_HEAP_STRING_LOG2E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOG2E) -#define DUK_HTHREAD_STRING_LOG2E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOG2E) -#define DUK_HEAP_STRING_LN2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LN2) -#define DUK_HTHREAD_STRING_LN2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LN2) -#define DUK_HEAP_STRING_LN10(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LN10) -#define DUK_HTHREAD_STRING_LN10(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LN10) -#define DUK_HEAP_STRING_E(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_E) -#define DUK_HTHREAD_STRING_E(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_E) -#define DUK_HEAP_STRING_MESSAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MESSAGE) -#define DUK_HTHREAD_STRING_MESSAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MESSAGE) -#define DUK_HEAP_STRING_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAME) -#define DUK_HTHREAD_STRING_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAME) -#define DUK_HEAP_STRING_INPUT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INPUT) -#define DUK_HTHREAD_STRING_INPUT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INPUT) -#define DUK_HEAP_STRING_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX) -#define DUK_HTHREAD_STRING_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX) -#define DUK_HEAP_STRING_ESCAPED_EMPTY_REGEXP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) -#define DUK_HTHREAD_STRING_ESCAPED_EMPTY_REGEXP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPED_EMPTY_REGEXP) -#define DUK_HEAP_STRING_LAST_INDEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX) -#define DUK_HTHREAD_STRING_LAST_INDEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX) -#define DUK_HEAP_STRING_MULTILINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MULTILINE) -#define DUK_HTHREAD_STRING_MULTILINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MULTILINE) -#define DUK_HEAP_STRING_IGNORE_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IGNORE_CASE) -#define DUK_HTHREAD_STRING_IGNORE_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IGNORE_CASE) -#define DUK_HEAP_STRING_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOURCE) -#define DUK_HTHREAD_STRING_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOURCE) -#define DUK_HEAP_STRING_TEST(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TEST) -#define DUK_HTHREAD_STRING_TEST(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TEST) -#define DUK_HEAP_STRING_EXEC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXEC) -#define DUK_HTHREAD_STRING_EXEC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXEC) -#define DUK_HEAP_STRING_TO_GMT_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_GMT_STRING) -#define DUK_HTHREAD_STRING_TO_GMT_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_GMT_STRING) -#define DUK_HEAP_STRING_SET_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_YEAR) -#define DUK_HTHREAD_STRING_SET_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_YEAR) -#define DUK_HEAP_STRING_GET_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_YEAR) -#define DUK_HTHREAD_STRING_GET_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_YEAR) -#define DUK_HEAP_STRING_TO_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_JSON) -#define DUK_HTHREAD_STRING_TO_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_JSON) -#define DUK_HEAP_STRING_TO_ISO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_ISO_STRING) -#define DUK_HTHREAD_STRING_TO_ISO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_ISO_STRING) -#define DUK_HEAP_STRING_TO_UTC_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UTC_STRING) -#define DUK_HTHREAD_STRING_TO_UTC_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UTC_STRING) -#define DUK_HEAP_STRING_SET_UTC_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_FULL_YEAR) -#define DUK_HTHREAD_STRING_SET_UTC_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_FULL_YEAR) -#define DUK_HEAP_STRING_SET_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_FULL_YEAR) -#define DUK_HTHREAD_STRING_SET_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_FULL_YEAR) -#define DUK_HEAP_STRING_SET_UTC_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MONTH) -#define DUK_HTHREAD_STRING_SET_UTC_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MONTH) -#define DUK_HEAP_STRING_SET_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MONTH) -#define DUK_HTHREAD_STRING_SET_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MONTH) -#define DUK_HEAP_STRING_SET_UTC_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_DATE) -#define DUK_HTHREAD_STRING_SET_UTC_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_DATE) -#define DUK_HEAP_STRING_SET_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_DATE) -#define DUK_HTHREAD_STRING_SET_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_DATE) -#define DUK_HEAP_STRING_SET_UTC_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_HOURS) -#define DUK_HTHREAD_STRING_SET_UTC_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_HOURS) -#define DUK_HEAP_STRING_SET_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_HOURS) -#define DUK_HTHREAD_STRING_SET_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_HOURS) -#define DUK_HEAP_STRING_SET_UTC_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MINUTES) -#define DUK_HTHREAD_STRING_SET_UTC_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MINUTES) -#define DUK_HEAP_STRING_SET_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MINUTES) -#define DUK_HTHREAD_STRING_SET_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MINUTES) -#define DUK_HEAP_STRING_SET_UTC_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_SECONDS) -#define DUK_HTHREAD_STRING_SET_UTC_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_SECONDS) -#define DUK_HEAP_STRING_SET_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_SECONDS) -#define DUK_HTHREAD_STRING_SET_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_SECONDS) -#define DUK_HEAP_STRING_SET_UTC_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_UTC_MILLISECONDS) -#define DUK_HTHREAD_STRING_SET_UTC_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_UTC_MILLISECONDS) -#define DUK_HEAP_STRING_SET_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_MILLISECONDS) -#define DUK_HTHREAD_STRING_SET_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_MILLISECONDS) -#define DUK_HEAP_STRING_SET_TIME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_TIME) -#define DUK_HTHREAD_STRING_SET_TIME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_TIME) -#define DUK_HEAP_STRING_GET_TIMEZONE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_TIMEZONE_OFFSET) -#define DUK_HTHREAD_STRING_GET_TIMEZONE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_TIMEZONE_OFFSET) -#define DUK_HEAP_STRING_GET_UTC_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MILLISECONDS) -#define DUK_HTHREAD_STRING_GET_UTC_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MILLISECONDS) -#define DUK_HEAP_STRING_GET_MILLISECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MILLISECONDS) -#define DUK_HTHREAD_STRING_GET_MILLISECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MILLISECONDS) -#define DUK_HEAP_STRING_GET_UTC_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_SECONDS) -#define DUK_HTHREAD_STRING_GET_UTC_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_SECONDS) -#define DUK_HEAP_STRING_GET_SECONDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_SECONDS) -#define DUK_HTHREAD_STRING_GET_SECONDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_SECONDS) -#define DUK_HEAP_STRING_GET_UTC_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MINUTES) -#define DUK_HTHREAD_STRING_GET_UTC_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MINUTES) -#define DUK_HEAP_STRING_GET_MINUTES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MINUTES) -#define DUK_HTHREAD_STRING_GET_MINUTES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MINUTES) -#define DUK_HEAP_STRING_GET_UTC_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_HOURS) -#define DUK_HTHREAD_STRING_GET_UTC_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_HOURS) -#define DUK_HEAP_STRING_GET_HOURS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_HOURS) -#define DUK_HTHREAD_STRING_GET_HOURS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_HOURS) -#define DUK_HEAP_STRING_GET_UTC_DAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_DAY) -#define DUK_HTHREAD_STRING_GET_UTC_DAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_DAY) -#define DUK_HEAP_STRING_GET_DAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_DAY) -#define DUK_HTHREAD_STRING_GET_DAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_DAY) -#define DUK_HEAP_STRING_GET_UTC_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_DATE) -#define DUK_HTHREAD_STRING_GET_UTC_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_DATE) -#define DUK_HEAP_STRING_GET_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_DATE) -#define DUK_HTHREAD_STRING_GET_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_DATE) -#define DUK_HEAP_STRING_GET_UTC_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_MONTH) -#define DUK_HTHREAD_STRING_GET_UTC_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_MONTH) -#define DUK_HEAP_STRING_GET_MONTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_MONTH) -#define DUK_HTHREAD_STRING_GET_MONTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_MONTH) -#define DUK_HEAP_STRING_GET_UTC_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_UTC_FULL_YEAR) -#define DUK_HTHREAD_STRING_GET_UTC_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_UTC_FULL_YEAR) -#define DUK_HEAP_STRING_GET_FULL_YEAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_FULL_YEAR) -#define DUK_HTHREAD_STRING_GET_FULL_YEAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_FULL_YEAR) -#define DUK_HEAP_STRING_GET_TIME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_TIME) -#define DUK_HTHREAD_STRING_GET_TIME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_TIME) -#define DUK_HEAP_STRING_TO_LOCALE_TIME_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_TIME_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_TIME_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_TIME_STRING) -#define DUK_HEAP_STRING_TO_LOCALE_DATE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_DATE_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_DATE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_DATE_STRING) -#define DUK_HEAP_STRING_TO_TIME_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_TIME_STRING) -#define DUK_HTHREAD_STRING_TO_TIME_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_TIME_STRING) -#define DUK_HEAP_STRING_TO_DATE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_DATE_STRING) -#define DUK_HTHREAD_STRING_TO_DATE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_DATE_STRING) -#define DUK_HEAP_STRING_NOW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NOW) -#define DUK_HTHREAD_STRING_NOW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NOW) -#define DUK_HEAP_STRING_UTC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UTC) -#define DUK_HTHREAD_STRING_UTC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UTC) -#define DUK_HEAP_STRING_PARSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE) -#define DUK_HTHREAD_STRING_PARSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE) -#define DUK_HEAP_STRING_TO_PRECISION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_PRECISION) -#define DUK_HTHREAD_STRING_TO_PRECISION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_PRECISION) -#define DUK_HEAP_STRING_TO_EXPONENTIAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_EXPONENTIAL) -#define DUK_HTHREAD_STRING_TO_EXPONENTIAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_EXPONENTIAL) -#define DUK_HEAP_STRING_TO_FIXED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_FIXED) -#define DUK_HTHREAD_STRING_TO_FIXED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_FIXED) -#define DUK_HEAP_STRING_POSITIVE_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POSITIVE_INFINITY) -#define DUK_HTHREAD_STRING_POSITIVE_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POSITIVE_INFINITY) -#define DUK_HEAP_STRING_NEGATIVE_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEGATIVE_INFINITY) -#define DUK_HTHREAD_STRING_NEGATIVE_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEGATIVE_INFINITY) +#define DUK_STRIDX_NAN 58 /* 'NaN' */ #define DUK_HEAP_STRING_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAN) #define DUK_HTHREAD_STRING_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAN) -#define DUK_HEAP_STRING_MIN_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MIN_VALUE) -#define DUK_HTHREAD_STRING_MIN_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MIN_VALUE) -#define DUK_HEAP_STRING_MAX_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAX_VALUE) -#define DUK_HTHREAD_STRING_MAX_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAX_VALUE) -#define DUK_HEAP_STRING_SUBSTR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBSTR) -#define DUK_HTHREAD_STRING_SUBSTR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBSTR) -#define DUK_HEAP_STRING_TRIM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRIM) -#define DUK_HTHREAD_STRING_TRIM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRIM) -#define DUK_HEAP_STRING_TO_LOCALE_UPPER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_UPPER_CASE) -#define DUK_HTHREAD_STRING_TO_LOCALE_UPPER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_UPPER_CASE) -#define DUK_HEAP_STRING_TO_UPPER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_UPPER_CASE) -#define DUK_HTHREAD_STRING_TO_UPPER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_UPPER_CASE) -#define DUK_HEAP_STRING_TO_LOCALE_LOWER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_LOWER_CASE) -#define DUK_HTHREAD_STRING_TO_LOCALE_LOWER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_LOWER_CASE) -#define DUK_HEAP_STRING_TO_LOWER_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOWER_CASE) -#define DUK_HTHREAD_STRING_TO_LOWER_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOWER_CASE) -#define DUK_HEAP_STRING_SUBSTRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUBSTRING) -#define DUK_HTHREAD_STRING_SUBSTRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUBSTRING) -#define DUK_HEAP_STRING_SPLIT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPLIT) -#define DUK_HTHREAD_STRING_SPLIT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPLIT) -#define DUK_HEAP_STRING_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SEARCH) -#define DUK_HTHREAD_STRING_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SEARCH) -#define DUK_HEAP_STRING_REPLACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REPLACE) -#define DUK_HTHREAD_STRING_REPLACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REPLACE) -#define DUK_HEAP_STRING_MATCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MATCH) -#define DUK_HTHREAD_STRING_MATCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MATCH) -#define DUK_HEAP_STRING_LOCALE_COMPARE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LOCALE_COMPARE) -#define DUK_HTHREAD_STRING_LOCALE_COMPARE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LOCALE_COMPARE) -#define DUK_HEAP_STRING_CHAR_CODE_AT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CHAR_CODE_AT) -#define DUK_HTHREAD_STRING_CHAR_CODE_AT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CHAR_CODE_AT) -#define DUK_HEAP_STRING_CHAR_AT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CHAR_AT) -#define DUK_HTHREAD_STRING_CHAR_AT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CHAR_AT) -#define DUK_HEAP_STRING_FROM_CHAR_CODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FROM_CHAR_CODE) -#define DUK_HTHREAD_STRING_FROM_CHAR_CODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FROM_CHAR_CODE) -#define DUK_HEAP_STRING_REDUCE_RIGHT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REDUCE_RIGHT) -#define DUK_HTHREAD_STRING_REDUCE_RIGHT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REDUCE_RIGHT) -#define DUK_HEAP_STRING_REDUCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REDUCE) -#define DUK_HTHREAD_STRING_REDUCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REDUCE) -#define DUK_HEAP_STRING_FILTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILTER) -#define DUK_HTHREAD_STRING_FILTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILTER) -#define DUK_HEAP_STRING_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MAP) -#define DUK_HTHREAD_STRING_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MAP) -#define DUK_HEAP_STRING_FOR_EACH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FOR_EACH) -#define DUK_HTHREAD_STRING_FOR_EACH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FOR_EACH) -#define DUK_HEAP_STRING_SOME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SOME) -#define DUK_HTHREAD_STRING_SOME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SOME) -#define DUK_HEAP_STRING_EVERY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVERY) -#define DUK_HTHREAD_STRING_EVERY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVERY) -#define DUK_HEAP_STRING_LAST_INDEX_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LAST_INDEX_OF) -#define DUK_HTHREAD_STRING_LAST_INDEX_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LAST_INDEX_OF) -#define DUK_HEAP_STRING_INDEX_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INDEX_OF) -#define DUK_HTHREAD_STRING_INDEX_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INDEX_OF) -#define DUK_HEAP_STRING_UNSHIFT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UNSHIFT) -#define DUK_HTHREAD_STRING_UNSHIFT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UNSHIFT) -#define DUK_HEAP_STRING_SPLICE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPLICE) -#define DUK_HTHREAD_STRING_SPLICE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPLICE) -#define DUK_HEAP_STRING_SORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SORT) -#define DUK_HTHREAD_STRING_SORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SORT) -#define DUK_HEAP_STRING_SLICE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SLICE) -#define DUK_HTHREAD_STRING_SLICE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SLICE) -#define DUK_HEAP_STRING_SHIFT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SHIFT) -#define DUK_HTHREAD_STRING_SHIFT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SHIFT) -#define DUK_HEAP_STRING_REVERSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REVERSE) -#define DUK_HTHREAD_STRING_REVERSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REVERSE) -#define DUK_HEAP_STRING_PUSH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PUSH) -#define DUK_HTHREAD_STRING_PUSH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PUSH) -#define DUK_HEAP_STRING_POP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_POP) -#define DUK_HTHREAD_STRING_POP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_POP) -#define DUK_HEAP_STRING_JOIN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JOIN) -#define DUK_HTHREAD_STRING_JOIN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JOIN) -#define DUK_HEAP_STRING_CONCAT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONCAT) -#define DUK_HTHREAD_STRING_CONCAT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONCAT) -#define DUK_HEAP_STRING_IS_ARRAY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_ARRAY) -#define DUK_HTHREAD_STRING_IS_ARRAY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_ARRAY) +#define DUK_STRIDX_INFINITY 59 /* 'Infinity' */ +#define DUK_HEAP_STRING_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INFINITY) +#define DUK_HTHREAD_STRING_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INFINITY) +#define DUK_STRIDX_MINUS_INFINITY 60 /* '-Infinity' */ +#define DUK_HEAP_STRING_MINUS_INFINITY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_INFINITY) +#define DUK_HTHREAD_STRING_MINUS_INFINITY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_INFINITY) +#define DUK_STRIDX_MINUS_ZERO 61 /* '-0' */ +#define DUK_HEAP_STRING_MINUS_ZERO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MINUS_ZERO) +#define DUK_HTHREAD_STRING_MINUS_ZERO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MINUS_ZERO) +#define DUK_STRIDX_COMMA 62 /* ',' */ +#define DUK_HEAP_STRING_COMMA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMMA) +#define DUK_HTHREAD_STRING_COMMA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMMA) +#define DUK_STRIDX_SPACE 63 /* ' ' */ +#define DUK_HEAP_STRING_SPACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SPACE) +#define DUK_HTHREAD_STRING_SPACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SPACE) +#define DUK_STRIDX_NEWLINE_4SPACE 64 /* '\n ' */ +#define DUK_HEAP_STRING_NEWLINE_4SPACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEWLINE_4SPACE) +#define DUK_HTHREAD_STRING_NEWLINE_4SPACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEWLINE_4SPACE) +#define DUK_STRIDX_BRACKETED_ELLIPSIS 65 /* '[...]' */ +#define DUK_HEAP_STRING_BRACKETED_ELLIPSIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BRACKETED_ELLIPSIS) +#define DUK_HTHREAD_STRING_BRACKETED_ELLIPSIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BRACKETED_ELLIPSIS) +#define DUK_STRIDX_INVALID_DATE 66 /* 'Invalid Date' */ +#define DUK_HEAP_STRING_INVALID_DATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INVALID_DATE) +#define DUK_HTHREAD_STRING_INVALID_DATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INVALID_DATE) +#define DUK_STRIDX_LC_ARGUMENTS 67 /* 'arguments' */ #define DUK_HEAP_STRING_LC_ARGUMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ARGUMENTS) #define DUK_HTHREAD_STRING_LC_ARGUMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ARGUMENTS) +#define DUK_STRIDX_CALLEE 68 /* 'callee' */ +#define DUK_HEAP_STRING_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLEE) +#define DUK_HTHREAD_STRING_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLEE) +#define DUK_STRIDX_CALLER 69 /* 'caller' */ #define DUK_HEAP_STRING_CALLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALLER) #define DUK_HTHREAD_STRING_CALLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALLER) -#define DUK_HEAP_STRING_BIND(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BIND) -#define DUK_HTHREAD_STRING_BIND(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BIND) -#define DUK_HEAP_STRING_CALL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CALL) -#define DUK_HTHREAD_STRING_CALL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CALL) -#define DUK_HEAP_STRING_APPLY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_APPLY) -#define DUK_HTHREAD_STRING_APPLY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_APPLY) -#define DUK_HEAP_STRING_PROPERTY_IS_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROPERTY_IS_ENUMERABLE) -#define DUK_HTHREAD_STRING_PROPERTY_IS_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROPERTY_IS_ENUMERABLE) -#define DUK_HEAP_STRING_IS_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_IS_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_PROTOTYPE_OF) -#define DUK_HEAP_STRING_HAS_OWN_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS_OWN_PROPERTY) -#define DUK_HTHREAD_STRING_HAS_OWN_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS_OWN_PROPERTY) -#define DUK_HEAP_STRING_VALUE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE_OF) -#define DUK_HTHREAD_STRING_VALUE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE_OF) -#define DUK_HEAP_STRING_TO_LOCALE_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOCALE_STRING) -#define DUK_HTHREAD_STRING_TO_LOCALE_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOCALE_STRING) -#define DUK_HEAP_STRING_TO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_STRING) -#define DUK_HTHREAD_STRING_TO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_STRING) -#define DUK_HEAP_STRING_CONSTRUCTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONSTRUCTOR) -#define DUK_HTHREAD_STRING_CONSTRUCTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONSTRUCTOR) -#define DUK_HEAP_STRING_SET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET) -#define DUK_HTHREAD_STRING_SET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET) +#define DUK_STRIDX_HAS 70 /* 'has' */ +#define DUK_HEAP_STRING_HAS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HAS) +#define DUK_HTHREAD_STRING_HAS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HAS) +#define DUK_STRIDX_GET 71 /* 'get' */ #define DUK_HEAP_STRING_GET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET) #define DUK_HTHREAD_STRING_GET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET) -#define DUK_HEAP_STRING_ENUMERABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERABLE) -#define DUK_HTHREAD_STRING_ENUMERABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERABLE) -#define DUK_HEAP_STRING_CONFIGURABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONFIGURABLE) -#define DUK_HTHREAD_STRING_CONFIGURABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONFIGURABLE) -#define DUK_HEAP_STRING_WRITABLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WRITABLE) -#define DUK_HTHREAD_STRING_WRITABLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WRITABLE) -#define DUK_HEAP_STRING_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VALUE) -#define DUK_HTHREAD_STRING_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VALUE) -#define DUK_HEAP_STRING_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_KEYS) -#define DUK_HTHREAD_STRING_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_KEYS) -#define DUK_HEAP_STRING_IS_EXTENSIBLE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_EXTENSIBLE) -#define DUK_HTHREAD_STRING_IS_EXTENSIBLE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_EXTENSIBLE) -#define DUK_HEAP_STRING_IS_FROZEN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_FROZEN) -#define DUK_HTHREAD_STRING_IS_FROZEN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_FROZEN) -#define DUK_HEAP_STRING_IS_SEALED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_SEALED) -#define DUK_HTHREAD_STRING_IS_SEALED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_SEALED) -#define DUK_HEAP_STRING_PREVENT_EXTENSIONS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PREVENT_EXTENSIONS) -#define DUK_HTHREAD_STRING_PREVENT_EXTENSIONS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PREVENT_EXTENSIONS) -#define DUK_HEAP_STRING_FREEZE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FREEZE) -#define DUK_HTHREAD_STRING_FREEZE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FREEZE) -#define DUK_HEAP_STRING_SEAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SEAL) -#define DUK_HTHREAD_STRING_SEAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SEAL) -#define DUK_HEAP_STRING_DEFINE_PROPERTIES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTIES) -#define DUK_HTHREAD_STRING_DEFINE_PROPERTIES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTIES) -#define DUK_HEAP_STRING_DEFINE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFINE_PROPERTY) -#define DUK_HTHREAD_STRING_DEFINE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFINE_PROPERTY) -#define DUK_HEAP_STRING_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CREATE) -#define DUK_HTHREAD_STRING_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CREATE) -#define DUK_HEAP_STRING_GET_OWN_PROPERTY_NAMES(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_OWN_PROPERTY_NAMES) -#define DUK_HTHREAD_STRING_GET_OWN_PROPERTY_NAMES(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_OWN_PROPERTY_NAMES) -#define DUK_HEAP_STRING_GET_OWN_PROPERTY_DESCRIPTOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR) -#define DUK_HTHREAD_STRING_GET_OWN_PROPERTY_DESCRIPTOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_OWN_PROPERTY_DESCRIPTOR) -#define DUK_HEAP_STRING_GET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_GET_PROTOTYPE_OF) -#define DUK_HTHREAD_STRING_GET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_GET_PROTOTYPE_OF) -#define DUK_HEAP_STRING_PROTOTYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTOTYPE) -#define DUK_HTHREAD_STRING_PROTOTYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTOTYPE) +#define DUK_STRIDX_DELETE_PROPERTY 72 /* 'deleteProperty' */ +#define DUK_HEAP_STRING_DELETE_PROPERTY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE_PROPERTY) +#define DUK_HTHREAD_STRING_DELETE_PROPERTY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE_PROPERTY) +#define DUK_STRIDX_ENUMERATE 73 /* 'enumerate' */ +#define DUK_HEAP_STRING_ENUMERATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUMERATE) +#define DUK_HTHREAD_STRING_ENUMERATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUMERATE) +#define DUK_STRIDX_OWN_KEYS 74 /* 'ownKeys' */ +#define DUK_HEAP_STRING_OWN_KEYS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_OWN_KEYS) +#define DUK_HTHREAD_STRING_OWN_KEYS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_OWN_KEYS) +#define DUK_STRIDX_SET_PROTOTYPE_OF 75 /* 'setPrototypeOf' */ +#define DUK_HEAP_STRING_SET_PROTOTYPE_OF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET_PROTOTYPE_OF) +#define DUK_HTHREAD_STRING_SET_PROTOTYPE_OF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET_PROTOTYPE_OF) +#define DUK_STRIDX___PROTO__ 76 /* '__proto__' */ +#define DUK_HEAP_STRING___PROTO__(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX___PROTO__) +#define DUK_HTHREAD_STRING___PROTO__(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX___PROTO__) +#define DUK_STRIDX_REQUIRE 77 /* 'require' */ +#define DUK_HEAP_STRING_REQUIRE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REQUIRE) +#define DUK_HTHREAD_STRING_REQUIRE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REQUIRE) +#define DUK_STRIDX_ID 78 /* 'id' */ +#define DUK_HEAP_STRING_ID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ID) +#define DUK_HTHREAD_STRING_ID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ID) +#define DUK_STRIDX_EXPORTS 79 /* 'exports' */ +#define DUK_HEAP_STRING_EXPORTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORTS) +#define DUK_HTHREAD_STRING_EXPORTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORTS) +#define DUK_STRIDX_FILENAME 80 /* 'filename' */ +#define DUK_HEAP_STRING_FILENAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILENAME) +#define DUK_HTHREAD_STRING_FILENAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILENAME) +#define DUK_STRIDX_TO_STRING 81 /* 'toString' */ +#define DUK_HEAP_STRING_TO_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_STRING) +#define DUK_HTHREAD_STRING_TO_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_STRING) +#define DUK_STRIDX_TO_JSON 82 /* 'toJSON' */ +#define DUK_HEAP_STRING_TO_JSON(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_JSON) +#define DUK_HTHREAD_STRING_TO_JSON(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_JSON) +#define DUK_STRIDX_TYPE 83 /* 'type' */ +#define DUK_HEAP_STRING_TYPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE) +#define DUK_HTHREAD_STRING_TYPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE) +#define DUK_STRIDX_DATA 84 /* 'data' */ +#define DUK_HEAP_STRING_DATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DATA) +#define DUK_HTHREAD_STRING_DATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DATA) +#define DUK_STRIDX_LENGTH 85 /* 'length' */ #define DUK_HEAP_STRING_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LENGTH) #define DUK_HTHREAD_STRING_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LENGTH) -#define DUK_HEAP_STRING_ALERT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ALERT) -#define DUK_HTHREAD_STRING_ALERT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ALERT) -#define DUK_HEAP_STRING_PRINT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PRINT) -#define DUK_HTHREAD_STRING_PRINT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PRINT) -#define DUK_HEAP_STRING_UNESCAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_UNESCAPE) -#define DUK_HTHREAD_STRING_UNESCAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_UNESCAPE) -#define DUK_HEAP_STRING_ESCAPE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ESCAPE) -#define DUK_HTHREAD_STRING_ESCAPE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ESCAPE) -#define DUK_HEAP_STRING_ENCODE_URI_COMPONENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENCODE_URI_COMPONENT) -#define DUK_HTHREAD_STRING_ENCODE_URI_COMPONENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENCODE_URI_COMPONENT) -#define DUK_HEAP_STRING_ENCODE_URI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENCODE_URI) -#define DUK_HTHREAD_STRING_ENCODE_URI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENCODE_URI) -#define DUK_HEAP_STRING_DECODE_URI_COMPONENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DECODE_URI_COMPONENT) -#define DUK_HTHREAD_STRING_DECODE_URI_COMPONENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DECODE_URI_COMPONENT) -#define DUK_HEAP_STRING_DECODE_URI(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DECODE_URI) -#define DUK_HTHREAD_STRING_DECODE_URI(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DECODE_URI) -#define DUK_HEAP_STRING_IS_FINITE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_FINITE) -#define DUK_HTHREAD_STRING_IS_FINITE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_FINITE) -#define DUK_HEAP_STRING_IS_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IS_NAN) -#define DUK_HTHREAD_STRING_IS_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IS_NAN) -#define DUK_HEAP_STRING_PARSE_FLOAT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE_FLOAT) -#define DUK_HTHREAD_STRING_PARSE_FLOAT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE_FLOAT) -#define DUK_HEAP_STRING_PARSE_INT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PARSE_INT) -#define DUK_HTHREAD_STRING_PARSE_INT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PARSE_INT) -#define DUK_HEAP_STRING_EVAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL) -#define DUK_HTHREAD_STRING_EVAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL) -#define DUK_HEAP_STRING_URI_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_URI_ERROR) -#define DUK_HTHREAD_STRING_URI_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_URI_ERROR) -#define DUK_HEAP_STRING_TYPE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPE_ERROR) -#define DUK_HTHREAD_STRING_TYPE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPE_ERROR) -#define DUK_HEAP_STRING_SYNTAX_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SYNTAX_ERROR) -#define DUK_HTHREAD_STRING_SYNTAX_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SYNTAX_ERROR) -#define DUK_HEAP_STRING_REFERENCE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_REFERENCE_ERROR) -#define DUK_HTHREAD_STRING_REFERENCE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_REFERENCE_ERROR) -#define DUK_HEAP_STRING_RANGE_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RANGE_ERROR) -#define DUK_HTHREAD_STRING_RANGE_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RANGE_ERROR) -#define DUK_HEAP_STRING_EVAL_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EVAL_ERROR) -#define DUK_HTHREAD_STRING_EVAL_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EVAL_ERROR) +#define DUK_STRIDX_BYTE_LENGTH 86 /* 'byteLength' */ +#define DUK_HEAP_STRING_BYTE_LENGTH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_LENGTH) +#define DUK_HTHREAD_STRING_BYTE_LENGTH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_LENGTH) +#define DUK_STRIDX_BYTE_OFFSET 87 /* 'byteOffset' */ +#define DUK_HEAP_STRING_BYTE_OFFSET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTE_OFFSET) +#define DUK_HTHREAD_STRING_BYTE_OFFSET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTE_OFFSET) +#define DUK_STRIDX_BYTES_PER_ELEMENT 88 /* 'BYTES_PER_ELEMENT' */ +#define DUK_HEAP_STRING_BYTES_PER_ELEMENT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BYTES_PER_ELEMENT) +#define DUK_HTHREAD_STRING_BYTES_PER_ELEMENT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BYTES_PER_ELEMENT) +#define DUK_STRIDX_SET 89 /* 'set' */ +#define DUK_HEAP_STRING_SET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SET) +#define DUK_HTHREAD_STRING_SET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SET) +#define DUK_STRIDX_STACK 90 /* 'stack' */ +#define DUK_HEAP_STRING_STACK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STACK) +#define DUK_HTHREAD_STRING_STACK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STACK) +#define DUK_STRIDX_PC 91 /* 'pc' */ +#define DUK_HEAP_STRING_PC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PC) +#define DUK_HTHREAD_STRING_PC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PC) +#define DUK_STRIDX_LINE_NUMBER 92 /* 'lineNumber' */ +#define DUK_HEAP_STRING_LINE_NUMBER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LINE_NUMBER) +#define DUK_HTHREAD_STRING_LINE_NUMBER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LINE_NUMBER) +#define DUK_STRIDX_INT_TRACEDATA 93 /* '\xffTracedata' */ +#define DUK_HEAP_STRING_INT_TRACEDATA(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TRACEDATA) +#define DUK_HTHREAD_STRING_INT_TRACEDATA(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TRACEDATA) +#define DUK_STRIDX_NAME 94 /* 'name' */ +#define DUK_HEAP_STRING_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NAME) +#define DUK_HTHREAD_STRING_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NAME) +#define DUK_STRIDX_FILE_NAME 95 /* 'fileName' */ +#define DUK_HEAP_STRING_FILE_NAME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FILE_NAME) +#define DUK_HTHREAD_STRING_FILE_NAME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FILE_NAME) +#define DUK_STRIDX_LC_BUFFER 96 /* 'buffer' */ +#define DUK_HEAP_STRING_LC_BUFFER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_BUFFER) +#define DUK_HTHREAD_STRING_LC_BUFFER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_BUFFER) +#define DUK_STRIDX_LC_POINTER 97 /* 'pointer' */ +#define DUK_HEAP_STRING_LC_POINTER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_POINTER) +#define DUK_HTHREAD_STRING_LC_POINTER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_POINTER) +#define DUK_STRIDX_INT_VALUE 98 /* '\xffValue' */ +#define DUK_HEAP_STRING_INT_VALUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VALUE) +#define DUK_HTHREAD_STRING_INT_VALUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VALUE) +#define DUK_STRIDX_INT_NEXT 99 /* '\xffNext' */ +#define DUK_HEAP_STRING_INT_NEXT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_NEXT) +#define DUK_HTHREAD_STRING_INT_NEXT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_NEXT) +#define DUK_STRIDX_INT_BYTECODE 100 /* '\xffBytecode' */ +#define DUK_HEAP_STRING_INT_BYTECODE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_BYTECODE) +#define DUK_HTHREAD_STRING_INT_BYTECODE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_BYTECODE) +#define DUK_STRIDX_INT_FORMALS 101 /* '\xffFormals' */ +#define DUK_HEAP_STRING_INT_FORMALS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FORMALS) +#define DUK_HTHREAD_STRING_INT_FORMALS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FORMALS) +#define DUK_STRIDX_INT_VARMAP 102 /* '\xffVarmap' */ +#define DUK_HEAP_STRING_INT_VARMAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARMAP) +#define DUK_HTHREAD_STRING_INT_VARMAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARMAP) +#define DUK_STRIDX_INT_LEXENV 103 /* '\xffLexenv' */ +#define DUK_HEAP_STRING_INT_LEXENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_LEXENV) +#define DUK_HTHREAD_STRING_INT_LEXENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_LEXENV) +#define DUK_STRIDX_INT_VARENV 104 /* '\xffVarenv' */ +#define DUK_HEAP_STRING_INT_VARENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_VARENV) +#define DUK_HTHREAD_STRING_INT_VARENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_VARENV) +#define DUK_STRIDX_INT_SOURCE 105 /* '\xffSource' */ +#define DUK_HEAP_STRING_INT_SOURCE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_SOURCE) +#define DUK_HTHREAD_STRING_INT_SOURCE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_SOURCE) +#define DUK_STRIDX_INT_PC2LINE 106 /* '\xffPc2line' */ +#define DUK_HEAP_STRING_INT_PC2LINE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_PC2LINE) +#define DUK_HTHREAD_STRING_INT_PC2LINE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_PC2LINE) +#define DUK_STRIDX_INT_ARGS 107 /* '\xffArgs' */ +#define DUK_HEAP_STRING_INT_ARGS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_ARGS) +#define DUK_HTHREAD_STRING_INT_ARGS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_ARGS) +#define DUK_STRIDX_INT_MAP 108 /* '\xffMap' */ +#define DUK_HEAP_STRING_INT_MAP(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_MAP) +#define DUK_HTHREAD_STRING_INT_MAP(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_MAP) +#define DUK_STRIDX_INT_FINALIZER 109 /* '\xffFinalizer' */ +#define DUK_HEAP_STRING_INT_FINALIZER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_FINALIZER) +#define DUK_HTHREAD_STRING_INT_FINALIZER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_FINALIZER) +#define DUK_STRIDX_INT_HANDLER 110 /* '\xffHandler' */ +#define DUK_HEAP_STRING_INT_HANDLER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_HANDLER) +#define DUK_HTHREAD_STRING_INT_HANDLER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_HANDLER) +#define DUK_STRIDX_INT_CALLEE 111 /* '\xffCallee' */ +#define DUK_HEAP_STRING_INT_CALLEE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_CALLEE) +#define DUK_HTHREAD_STRING_INT_CALLEE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_CALLEE) +#define DUK_STRIDX_INT_THREAD 112 /* '\xffThread' */ +#define DUK_HEAP_STRING_INT_THREAD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THREAD) +#define DUK_HTHREAD_STRING_INT_THREAD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THREAD) +#define DUK_STRIDX_INT_REGBASE 113 /* '\xffRegbase' */ +#define DUK_HEAP_STRING_INT_REGBASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_REGBASE) +#define DUK_HTHREAD_STRING_INT_REGBASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_REGBASE) +#define DUK_STRIDX_INT_TARGET 114 /* '\xffTarget' */ +#define DUK_HEAP_STRING_INT_TARGET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_TARGET) +#define DUK_HTHREAD_STRING_INT_TARGET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_TARGET) +#define DUK_STRIDX_INT_THIS 115 /* '\xffThis' */ +#define DUK_HEAP_STRING_INT_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INT_THIS) +#define DUK_HTHREAD_STRING_INT_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INT_THIS) +#define DUK_STRIDX_COMPILE 116 /* 'compile' */ +#define DUK_HEAP_STRING_COMPILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_COMPILE) +#define DUK_HTHREAD_STRING_COMPILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_COMPILE) +#define DUK_STRIDX_INPUT 117 /* 'input' */ +#define DUK_HEAP_STRING_INPUT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INPUT) +#define DUK_HTHREAD_STRING_INPUT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INPUT) +#define DUK_STRIDX_ERR_CREATE 118 /* 'errCreate' */ +#define DUK_HEAP_STRING_ERR_CREATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_CREATE) +#define DUK_HTHREAD_STRING_ERR_CREATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_CREATE) +#define DUK_STRIDX_ERR_THROW 119 /* 'errThrow' */ +#define DUK_HEAP_STRING_ERR_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ERR_THROW) +#define DUK_HTHREAD_STRING_ERR_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ERR_THROW) +#define DUK_STRIDX_MOD_SEARCH 120 /* 'modSearch' */ +#define DUK_HEAP_STRING_MOD_SEARCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_SEARCH) +#define DUK_HTHREAD_STRING_MOD_SEARCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_SEARCH) +#define DUK_STRIDX_MOD_LOADED 121 /* 'modLoaded' */ +#define DUK_HEAP_STRING_MOD_LOADED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_MOD_LOADED) +#define DUK_HTHREAD_STRING_MOD_LOADED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_MOD_LOADED) +#define DUK_STRIDX_ENV 122 /* 'env' */ +#define DUK_HEAP_STRING_ENV(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENV) +#define DUK_HTHREAD_STRING_ENV(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENV) +#define DUK_STRIDX_HEX 123 /* 'hex' */ +#define DUK_HEAP_STRING_HEX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_HEX) +#define DUK_HTHREAD_STRING_HEX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_HEX) +#define DUK_STRIDX_BASE64 124 /* 'base64' */ +#define DUK_HEAP_STRING_BASE64(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BASE64) +#define DUK_HTHREAD_STRING_BASE64(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BASE64) +#define DUK_STRIDX_JX 125 /* 'jx' */ +#define DUK_HEAP_STRING_JX(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JX) +#define DUK_HTHREAD_STRING_JX(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JX) +#define DUK_STRIDX_JC 126 /* 'jc' */ +#define DUK_HEAP_STRING_JC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JC) +#define DUK_HTHREAD_STRING_JC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JC) +#define DUK_STRIDX_RESUME 127 /* 'resume' */ +#define DUK_HEAP_STRING_RESUME(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RESUME) +#define DUK_HTHREAD_STRING_RESUME(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RESUME) +#define DUK_STRIDX_FMT 128 /* 'fmt' */ +#define DUK_HEAP_STRING_FMT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FMT) +#define DUK_HTHREAD_STRING_FMT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FMT) +#define DUK_STRIDX_RAW 129 /* 'raw' */ +#define DUK_HEAP_STRING_RAW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RAW) +#define DUK_HTHREAD_STRING_RAW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RAW) +#define DUK_STRIDX_LC_TRACE 130 /* 'trace' */ +#define DUK_HEAP_STRING_LC_TRACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_TRACE) +#define DUK_HTHREAD_STRING_LC_TRACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_TRACE) +#define DUK_STRIDX_LC_DEBUG 131 /* 'debug' */ +#define DUK_HEAP_STRING_LC_DEBUG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_DEBUG) +#define DUK_HTHREAD_STRING_LC_DEBUG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_DEBUG) +#define DUK_STRIDX_LC_INFO 132 /* 'info' */ +#define DUK_HEAP_STRING_LC_INFO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_INFO) +#define DUK_HTHREAD_STRING_LC_INFO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_INFO) +#define DUK_STRIDX_LC_WARN 133 /* 'warn' */ +#define DUK_HEAP_STRING_LC_WARN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_WARN) +#define DUK_HTHREAD_STRING_LC_WARN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_WARN) +#define DUK_STRIDX_LC_ERROR 134 /* 'error' */ +#define DUK_HEAP_STRING_LC_ERROR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_ERROR) +#define DUK_HTHREAD_STRING_LC_ERROR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_ERROR) +#define DUK_STRIDX_LC_FATAL 135 /* 'fatal' */ +#define DUK_HEAP_STRING_LC_FATAL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FATAL) +#define DUK_HTHREAD_STRING_LC_FATAL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FATAL) +#define DUK_STRIDX_LC_N 136 /* 'n' */ +#define DUK_HEAP_STRING_LC_N(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_N) +#define DUK_HTHREAD_STRING_LC_N(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_N) +#define DUK_STRIDX_LC_L 137 /* 'l' */ +#define DUK_HEAP_STRING_LC_L(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_L) +#define DUK_HTHREAD_STRING_LC_L(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_L) +#define DUK_STRIDX_CLOG 138 /* 'clog' */ +#define DUK_HEAP_STRING_CLOG(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLOG) +#define DUK_HTHREAD_STRING_CLOG(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLOG) +#define DUK_STRIDX_TO_LOG_STRING 139 /* 'toLogString' */ +#define DUK_HEAP_STRING_TO_LOG_STRING(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TO_LOG_STRING) +#define DUK_HTHREAD_STRING_TO_LOG_STRING(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TO_LOG_STRING) +#define DUK_STRIDX_JSON_EXT_UNDEFINED 140 /* '{"_undef":true}' */ +#define DUK_HEAP_STRING_JSON_EXT_UNDEFINED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_UNDEFINED) +#define DUK_HTHREAD_STRING_JSON_EXT_UNDEFINED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_UNDEFINED) +#define DUK_STRIDX_JSON_EXT_NAN 141 /* '{"_nan":true}' */ +#define DUK_HEAP_STRING_JSON_EXT_NAN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NAN) +#define DUK_HTHREAD_STRING_JSON_EXT_NAN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NAN) +#define DUK_STRIDX_JSON_EXT_POSINF 142 /* '{"_inf":true}' */ +#define DUK_HEAP_STRING_JSON_EXT_POSINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_POSINF) +#define DUK_HTHREAD_STRING_JSON_EXT_POSINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_POSINF) +#define DUK_STRIDX_JSON_EXT_NEGINF 143 /* '{"_ninf":true}' */ +#define DUK_HEAP_STRING_JSON_EXT_NEGINF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_NEGINF) +#define DUK_HTHREAD_STRING_JSON_EXT_NEGINF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_NEGINF) +#define DUK_STRIDX_JSON_EXT_FUNCTION1 144 /* '{"_func":true}' */ +#define DUK_HEAP_STRING_JSON_EXT_FUNCTION1(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION1) +#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION1(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION1) +#define DUK_STRIDX_JSON_EXT_FUNCTION2 145 /* '{_func:true}' */ +#define DUK_HEAP_STRING_JSON_EXT_FUNCTION2(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_JSON_EXT_FUNCTION2) +#define DUK_HTHREAD_STRING_JSON_EXT_FUNCTION2(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_JSON_EXT_FUNCTION2) +#define DUK_STRIDX_BREAK 146 /* 'break' */ #define DUK_HEAP_STRING_BREAK(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_BREAK) #define DUK_HTHREAD_STRING_BREAK(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_BREAK) +#define DUK_STRIDX_CASE 147 /* 'case' */ #define DUK_HEAP_STRING_CASE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CASE) #define DUK_HTHREAD_STRING_CASE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CASE) +#define DUK_STRIDX_CATCH 148 /* 'catch' */ #define DUK_HEAP_STRING_CATCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CATCH) #define DUK_HTHREAD_STRING_CATCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CATCH) +#define DUK_STRIDX_CONTINUE 149 /* 'continue' */ #define DUK_HEAP_STRING_CONTINUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONTINUE) #define DUK_HTHREAD_STRING_CONTINUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONTINUE) +#define DUK_STRIDX_DEBUGGER 150 /* 'debugger' */ #define DUK_HEAP_STRING_DEBUGGER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEBUGGER) #define DUK_HTHREAD_STRING_DEBUGGER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEBUGGER) +#define DUK_STRIDX_DEFAULT 151 /* 'default' */ #define DUK_HEAP_STRING_DEFAULT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DEFAULT) #define DUK_HTHREAD_STRING_DEFAULT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DEFAULT) +#define DUK_STRIDX_DELETE 152 /* 'delete' */ #define DUK_HEAP_STRING_DELETE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DELETE) #define DUK_HTHREAD_STRING_DELETE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DELETE) +#define DUK_STRIDX_DO 153 /* 'do' */ #define DUK_HEAP_STRING_DO(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_DO) #define DUK_HTHREAD_STRING_DO(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_DO) +#define DUK_STRIDX_ELSE 154 /* 'else' */ #define DUK_HEAP_STRING_ELSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ELSE) #define DUK_HTHREAD_STRING_ELSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ELSE) +#define DUK_STRIDX_FINALLY 155 /* 'finally' */ #define DUK_HEAP_STRING_FINALLY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FINALLY) #define DUK_HTHREAD_STRING_FINALLY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FINALLY) +#define DUK_STRIDX_FOR 156 /* 'for' */ #define DUK_HEAP_STRING_FOR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FOR) #define DUK_HTHREAD_STRING_FOR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FOR) +#define DUK_STRIDX_LC_FUNCTION 157 /* 'function' */ #define DUK_HEAP_STRING_LC_FUNCTION(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_FUNCTION) #define DUK_HTHREAD_STRING_LC_FUNCTION(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_FUNCTION) +#define DUK_STRIDX_IF 158 /* 'if' */ #define DUK_HEAP_STRING_IF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IF) #define DUK_HTHREAD_STRING_IF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IF) +#define DUK_STRIDX_IN 159 /* 'in' */ #define DUK_HEAP_STRING_IN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IN) #define DUK_HTHREAD_STRING_IN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IN) +#define DUK_STRIDX_INSTANCEOF 160 /* 'instanceof' */ #define DUK_HEAP_STRING_INSTANCEOF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INSTANCEOF) #define DUK_HTHREAD_STRING_INSTANCEOF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INSTANCEOF) +#define DUK_STRIDX_NEW 161 /* 'new' */ #define DUK_HEAP_STRING_NEW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_NEW) #define DUK_HTHREAD_STRING_NEW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_NEW) +#define DUK_STRIDX_RETURN 162 /* 'return' */ #define DUK_HEAP_STRING_RETURN(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_RETURN) #define DUK_HTHREAD_STRING_RETURN(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_RETURN) +#define DUK_STRIDX_SWITCH 163 /* 'switch' */ #define DUK_HEAP_STRING_SWITCH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SWITCH) #define DUK_HTHREAD_STRING_SWITCH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SWITCH) +#define DUK_STRIDX_THIS 164 /* 'this' */ #define DUK_HEAP_STRING_THIS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THIS) #define DUK_HTHREAD_STRING_THIS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THIS) +#define DUK_STRIDX_THROW 165 /* 'throw' */ #define DUK_HEAP_STRING_THROW(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_THROW) #define DUK_HTHREAD_STRING_THROW(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_THROW) +#define DUK_STRIDX_TRY 166 /* 'try' */ #define DUK_HEAP_STRING_TRY(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRY) #define DUK_HTHREAD_STRING_TRY(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRY) +#define DUK_STRIDX_TYPEOF 167 /* 'typeof' */ #define DUK_HEAP_STRING_TYPEOF(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TYPEOF) #define DUK_HTHREAD_STRING_TYPEOF(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TYPEOF) +#define DUK_STRIDX_VAR 168 /* 'var' */ #define DUK_HEAP_STRING_VAR(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VAR) #define DUK_HTHREAD_STRING_VAR(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VAR) +#define DUK_STRIDX_CONST 169 /* 'const' */ #define DUK_HEAP_STRING_CONST(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CONST) #define DUK_HTHREAD_STRING_CONST(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CONST) +#define DUK_STRIDX_VOID 170 /* 'void' */ #define DUK_HEAP_STRING_VOID(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_VOID) #define DUK_HTHREAD_STRING_VOID(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_VOID) +#define DUK_STRIDX_WHILE 171 /* 'while' */ #define DUK_HEAP_STRING_WHILE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WHILE) #define DUK_HTHREAD_STRING_WHILE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WHILE) +#define DUK_STRIDX_WITH 172 /* 'with' */ #define DUK_HEAP_STRING_WITH(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_WITH) #define DUK_HTHREAD_STRING_WITH(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_WITH) +#define DUK_STRIDX_CLASS 173 /* 'class' */ #define DUK_HEAP_STRING_CLASS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_CLASS) #define DUK_HTHREAD_STRING_CLASS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_CLASS) +#define DUK_STRIDX_ENUM 174 /* 'enum' */ #define DUK_HEAP_STRING_ENUM(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_ENUM) #define DUK_HTHREAD_STRING_ENUM(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_ENUM) +#define DUK_STRIDX_EXPORT 175 /* 'export' */ #define DUK_HEAP_STRING_EXPORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXPORT) #define DUK_HTHREAD_STRING_EXPORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXPORT) +#define DUK_STRIDX_EXTENDS 176 /* 'extends' */ #define DUK_HEAP_STRING_EXTENDS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_EXTENDS) #define DUK_HTHREAD_STRING_EXTENDS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_EXTENDS) +#define DUK_STRIDX_IMPORT 177 /* 'import' */ #define DUK_HEAP_STRING_IMPORT(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IMPORT) #define DUK_HTHREAD_STRING_IMPORT(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IMPORT) +#define DUK_STRIDX_SUPER 178 /* 'super' */ #define DUK_HEAP_STRING_SUPER(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_SUPER) #define DUK_HTHREAD_STRING_SUPER(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_SUPER) +#define DUK_STRIDX_LC_NULL 179 /* 'null' */ #define DUK_HEAP_STRING_LC_NULL(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LC_NULL) #define DUK_HTHREAD_STRING_LC_NULL(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LC_NULL) +#define DUK_STRIDX_TRUE 180 /* 'true' */ #define DUK_HEAP_STRING_TRUE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_TRUE) #define DUK_HTHREAD_STRING_TRUE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_TRUE) +#define DUK_STRIDX_FALSE 181 /* 'false' */ #define DUK_HEAP_STRING_FALSE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_FALSE) #define DUK_HTHREAD_STRING_FALSE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_FALSE) +#define DUK_STRIDX_IMPLEMENTS 182 /* 'implements' */ #define DUK_HEAP_STRING_IMPLEMENTS(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_IMPLEMENTS) #define DUK_HTHREAD_STRING_IMPLEMENTS(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_IMPLEMENTS) +#define DUK_STRIDX_INTERFACE 183 /* 'interface' */ #define DUK_HEAP_STRING_INTERFACE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_INTERFACE) #define DUK_HTHREAD_STRING_INTERFACE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_INTERFACE) +#define DUK_STRIDX_LET 184 /* 'let' */ #define DUK_HEAP_STRING_LET(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_LET) #define DUK_HTHREAD_STRING_LET(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_LET) +#define DUK_STRIDX_PACKAGE 185 /* 'package' */ #define DUK_HEAP_STRING_PACKAGE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PACKAGE) #define DUK_HTHREAD_STRING_PACKAGE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PACKAGE) +#define DUK_STRIDX_PRIVATE 186 /* 'private' */ #define DUK_HEAP_STRING_PRIVATE(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PRIVATE) #define DUK_HTHREAD_STRING_PRIVATE(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PRIVATE) +#define DUK_STRIDX_PROTECTED 187 /* 'protected' */ #define DUK_HEAP_STRING_PROTECTED(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PROTECTED) #define DUK_HTHREAD_STRING_PROTECTED(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PROTECTED) +#define DUK_STRIDX_PUBLIC 188 /* 'public' */ #define DUK_HEAP_STRING_PUBLIC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_PUBLIC) #define DUK_HTHREAD_STRING_PUBLIC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_PUBLIC) +#define DUK_STRIDX_STATIC 189 /* 'static' */ #define DUK_HEAP_STRING_STATIC(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_STATIC) #define DUK_HTHREAD_STRING_STATIC(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_STATIC) +#define DUK_STRIDX_YIELD 190 /* 'yield' */ #define DUK_HEAP_STRING_YIELD(heap) DUK_HEAP_GET_STRING((heap),DUK_STRIDX_YIELD) #define DUK_HTHREAD_STRING_YIELD(thr) DUK_HTHREAD_GET_STRING((thr),DUK_STRIDX_YIELD) -#define DUK_HEAP_NUM_STRINGS 414 +#define DUK_HEAP_NUM_STRINGS 191 +#define DUK_STRIDX_START_RESERVED 146 +#define DUK_STRIDX_START_STRICT_RESERVED 182 +#define DUK_STRIDX_END_RESERVED 191 /* exclusive endpoint */ -#define DUK_STRIDX_START_RESERVED 369 -#define DUK_STRIDX_START_STRICT_RESERVED 405 -#define DUK_STRIDX_END_RESERVED 414 /* exclusive endpoint */ +/* To convert a heap stridx to a token number, subtract + * DUK_STRIDX_START_RESERVED and add DUK_TOK_START_RESERVED. + */ +#if !defined(DUK_SINGLE_FILE) +DUK_INTERNAL_DECL const duk_uint8_t duk_strings_data[1049]; +#endif /* !DUK_SINGLE_FILE */ +#define DUK_STRDATA_MAX_STRLEN 17 +#define DUK_STRDATA_DATA_LENGTH 1049 +#endif /* DUK_USE_ROM_STRINGS */ +#if defined(DUK_USE_ROM_OBJECTS) +#error ROM support not enabled, rerun make_dist.py with --rom-support +#else +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_function_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_boolean_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_constructor_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_type_error_thrower(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_proxy_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_pointer_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_arraybuffer_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_dataview_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_typedarray_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_constructor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_eval(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_parse_int(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_parse_float(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_is_nan(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_is_finite(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_decode_uri(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_decode_uri_component(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_encode_uri(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_encode_uri_component(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_escape(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_unescape(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_print_helper(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_require(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_getprototype_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_setprototype_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_get_own_property_descriptor(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_keys_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_create(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_define_property(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_define_properties(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_seal_freeze_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_prevent_extensions(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_is_extensible(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_to_locale_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_value_of(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_has_own_property(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_is_prototype_of(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_property_is_enumerable(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_apply(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_call(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_bind(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_constructor_is_array(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_join_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_concat(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_pop(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_push(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_reverse(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_shift(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_slice(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_sort(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_splice(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_unshift(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_indexof_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_iter_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_reduce_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_constructor_from_char_code(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_char_at(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_char_code_at(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_concat(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_indexof_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_locale_compare(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_match(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_replace(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_search(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_slice(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_split(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_substring(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_caseconv_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_trim(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_substr(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_boolean_prototype_tostring_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_locale_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_value_of(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_fixed(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_exponential(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_precision(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor_parse(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor_utc(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor_now(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_tostring_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_to_json(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_value_of(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_get_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_get_timezone_offset(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_set_time(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_set_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_exec(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_test(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_stack_getter(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_stack_setter(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_filename_getter(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_filename_setter(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_linenumber_getter(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_linenumber_setter(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_to_string(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_onearg_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_twoarg_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_max(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_min(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_random(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_json_object_parse(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_json_object_stringify(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_info(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_act(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_gc(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_fin(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_enc(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_dec(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_compact(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_yield(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_resume(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_current(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_prototype_tostring_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_pointer_prototype_tostring_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_prototype_fmt(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_prototype_raw(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_prototype_log_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_arraybuffer_isview(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_slice_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_readfield(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_writefield(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_typedarray_set(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_concat(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_is_encoding(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_is_buffer(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_byte_length(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_compare_shared(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_tostring(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_tojson(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_fill(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_copy(duk_context *ctx); +DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_write(duk_context *ctx); #if !defined(DUK_SINGLE_FILE) DUK_INTERNAL_DECL const duk_c_function duk_bi_native_functions[149]; -DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[1955]; -#ifdef DUK_USE_BUILTIN_INITJS +#endif /* !DUK_SINGLE_FILE */ +#if defined(DUK_USE_BUILTIN_INITJS) +#if !defined(DUK_SINGLE_FILE) DUK_INTERNAL_DECL const duk_uint8_t duk_initjs_data[187]; -#endif /* DUK_USE_BUILTIN_INITJS */ #endif /* !DUK_SINGLE_FILE */ - -#define DUK_BUILTINS_DATA_LENGTH 1955 -#ifdef DUK_USE_BUILTIN_INITJS #define DUK_BUILTIN_INITJS_DATA_LENGTH 187 #endif /* DUK_USE_BUILTIN_INITJS */ - #define DUK_BIDX_GLOBAL 0 #define DUK_BIDX_GLOBAL_ENV 1 #define DUK_BIDX_OBJECT_CONSTRUCTOR 2 @@ -4398,14 +1704,30 @@ DUK_INTERNAL_DECL const duk_uint8_t duk_initjs_data[187]; #define DUK_BIDX_FLOAT64ARRAY_PROTOTYPE 68 #define DUK_BIDX_NODEJS_BUFFER_CONSTRUCTOR 69 #define DUK_BIDX_NODEJS_BUFFER_PROTOTYPE 70 - #define DUK_NUM_BUILTINS 71 - +#define DUK_NUM_BIDX_BUILTINS 71 +#define DUK_NUM_ALL_BUILTINS 71 +#if defined(DUK_USE_DOUBLE_LE) +#if !defined(DUK_SINGLE_FILE) +DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[3833]; +#endif /* !DUK_SINGLE_FILE */ +#define DUK_BUILTINS_DATA_LENGTH 3833 +#elif defined(DUK_USE_DOUBLE_BE) +#if !defined(DUK_SINGLE_FILE) +DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[3833]; +#endif /* !DUK_SINGLE_FILE */ +#define DUK_BUILTINS_DATA_LENGTH 3833 +#elif defined(DUK_USE_DOUBLE_ME) +#if !defined(DUK_SINGLE_FILE) +DUK_INTERNAL_DECL const duk_uint8_t duk_builtins_data[3833]; +#endif /* !DUK_SINGLE_FILE */ +#define DUK_BUILTINS_DATA_LENGTH 3833 #else #error invalid endianness defines #endif +#endif /* DUK_USE_ROM_OBJECTS */ #endif /* DUK_BUILTINS_H_INCLUDED */ -#line 51 "duk_internal.h" +#line 52 "duk_internal.h" #line 1 "duk_util.h" /* @@ -4926,12 +2248,12 @@ DUK_INTERNAL_DECL duk_uint8_t *duk_bw_insert_ensure_area(duk_hthread *thr, duk_b DUK_INTERNAL_DECL void duk_bw_remove_raw_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t off, duk_size_t len); /* No duk_bw_remove_ensure_slice(), functionality would be identical. */ -DUK_INTERNAL_DECL DUK_INLINE duk_uint16_t duk_raw_read_u16_be(duk_uint8_t **p); -DUK_INTERNAL_DECL DUK_INLINE duk_uint32_t duk_raw_read_u32_be(duk_uint8_t **p); -DUK_INTERNAL_DECL DUK_INLINE duk_double_t duk_raw_read_double_be(duk_uint8_t **p); -DUK_INTERNAL_DECL DUK_INLINE void duk_raw_write_u16_be(duk_uint8_t **p, duk_uint16_t val); -DUK_INTERNAL_DECL DUK_INLINE void duk_raw_write_u32_be(duk_uint8_t **p, duk_uint32_t val); -DUK_INTERNAL_DECL DUK_INLINE void duk_raw_write_double_be(duk_uint8_t **p, duk_double_t val); +DUK_INTERNAL_DECL duk_uint16_t duk_raw_read_u16_be(duk_uint8_t **p); +DUK_INTERNAL_DECL duk_uint32_t duk_raw_read_u32_be(duk_uint8_t **p); +DUK_INTERNAL_DECL duk_double_t duk_raw_read_double_be(duk_uint8_t **p); +DUK_INTERNAL_DECL void duk_raw_write_u16_be(duk_uint8_t **p, duk_uint16_t val); +DUK_INTERNAL_DECL void duk_raw_write_u32_be(duk_uint8_t **p, duk_uint32_t val); +DUK_INTERNAL_DECL void duk_raw_write_double_be(duk_uint8_t **p, duk_double_t val); #if defined(DUK_USE_DEBUGGER_SUPPORT) /* For now only needed by the debugger. */ DUK_INTERNAL void duk_byteswap_bytes(duk_uint8_t *p, duk_small_uint_t len); @@ -5009,7 +2331,6 @@ DUK_INTERNAL_DECL const char *duk_str_not_configurable; #define DUK_STR_ALLOC_FAILED duk_str_alloc_failed #define DUK_STR_POP_TOO_MANY duk_str_pop_too_many #define DUK_STR_WRONG_BUFFER_TYPE duk_str_wrong_buffer_type -#define DUK_STR_FAILED_TO_EXTEND_VALSTACK duk_str_failed_to_extend_valstack #define DUK_STR_ENCODE_FAILED duk_str_encode_failed #define DUK_STR_DECODE_FAILED duk_str_decode_failed #define DUK_STR_NO_SOURCECODE duk_str_no_sourcecode @@ -5032,7 +2353,6 @@ DUK_INTERNAL_DECL const char *duk_str_sprintf_too_long; DUK_INTERNAL_DECL const char *duk_str_alloc_failed; DUK_INTERNAL_DECL const char *duk_str_pop_too_many; DUK_INTERNAL_DECL const char *duk_str_wrong_buffer_type; -DUK_INTERNAL_DECL const char *duk_str_failed_to_extend_valstack; DUK_INTERNAL_DECL const char *duk_str_encode_failed; DUK_INTERNAL_DECL const char *duk_str_decode_failed; DUK_INTERNAL_DECL const char *duk_str_no_sourcecode; @@ -5057,7 +2377,6 @@ DUK_INTERNAL_DECL const char *duk_str_cyclic_input; #endif /* !DUK_SINGLE_FILE */ #define DUK_STR_PROXY_REVOKED duk_str_proxy_revoked -#define DUK_STR_OBJECT_RESIZE_FAILED duk_str_object_resize_failed #define DUK_STR_INVALID_BASE duk_str_invalid_base #define DUK_STR_STRICT_CALLER_READ duk_str_strict_caller_read #define DUK_STR_PROXY_REJECTED duk_str_proxy_rejected @@ -5071,7 +2390,6 @@ DUK_INTERNAL_DECL const char *duk_str_cyclic_input; #if !defined(DUK_SINGLE_FILE) DUK_INTERNAL_DECL const char *duk_str_proxy_revoked; -DUK_INTERNAL_DECL const char *duk_str_object_resize_failed; DUK_INTERNAL_DECL const char *duk_str_invalid_base; DUK_INTERNAL_DECL const char *duk_str_strict_caller_read; DUK_INTERNAL_DECL const char *duk_str_proxy_rejected; @@ -5136,12 +2454,6 @@ DUK_INTERNAL_DECL const char *duk_str_invalid_getset_name; DUK_INTERNAL_DECL const char *duk_str_func_name_required; #endif /* !DUK_SINGLE_FILE */ -#define DUK_STR_INTERNAL_ERROR_EXEC_LONGJMP duk_str_internal_error_exec_longjmp - -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const char *duk_str_internal_error_exec_longjmp; -#endif /* !DUK_SINGLE_FILE */ - #define DUK_STR_INVALID_QUANTIFIER_NO_ATOM duk_str_invalid_quantifier_no_atom #define DUK_STR_INVALID_QUANTIFIER_VALUES duk_str_invalid_quantifier_values #define DUK_STR_QUANTIFIER_TOO_MANY_COPIES duk_str_quantifier_too_many_copies @@ -5150,9 +2462,6 @@ DUK_INTERNAL_DECL const char *duk_str_internal_error_exec_longjmp; #define DUK_STR_UNEXPECTED_REGEXP_TOKEN duk_str_unexpected_regexp_token #define DUK_STR_INVALID_REGEXP_FLAGS duk_str_invalid_regexp_flags #define DUK_STR_INVALID_BACKREFS duk_str_invalid_backrefs -#define DUK_STR_REGEXP_BACKTRACK_FAILED duk_str_regexp_backtrack_failed -#define DUK_STR_REGEXP_ADVANCE_FAILED duk_str_regexp_advance_failed -#define DUK_STR_REGEXP_INTERNAL_ERROR duk_str_regexp_internal_error #if !defined(DUK_SINGLE_FILE) DUK_INTERNAL_DECL const char *duk_str_invalid_quantifier_no_atom; @@ -5163,15 +2472,11 @@ DUK_INTERNAL_DECL const char *duk_str_unexpected_end_of_pattern; DUK_INTERNAL_DECL const char *duk_str_unexpected_regexp_token; DUK_INTERNAL_DECL const char *duk_str_invalid_regexp_flags; DUK_INTERNAL_DECL const char *duk_str_invalid_backrefs; -DUK_INTERNAL_DECL const char *duk_str_regexp_backtrack_failed; -DUK_INTERNAL_DECL const char *duk_str_regexp_advance_failed; -DUK_INTERNAL_DECL const char *duk_str_regexp_internal_error; #endif /* !DUK_SINGLE_FILE */ #define DUK_STR_VALSTACK_LIMIT duk_str_valstack_limit #define DUK_STR_CALLSTACK_LIMIT duk_str_callstack_limit #define DUK_STR_CATCHSTACK_LIMIT duk_str_catchstack_limit -#define DUK_STR_OBJECT_PROPERTY_LIMIT duk_str_object_property_limit #define DUK_STR_PROTOTYPE_CHAIN_LIMIT duk_str_prototype_chain_limit #define DUK_STR_BOUND_CHAIN_LIMIT duk_str_bound_chain_limit #define DUK_STR_C_CALLSTACK_LIMIT duk_str_c_callstack_limit @@ -5189,7 +2494,6 @@ DUK_INTERNAL_DECL const char *duk_str_regexp_internal_error; DUK_INTERNAL_DECL const char *duk_str_valstack_limit; DUK_INTERNAL_DECL const char *duk_str_callstack_limit; DUK_INTERNAL_DECL const char *duk_str_catchstack_limit; -DUK_INTERNAL_DECL const char *duk_str_object_property_limit; DUK_INTERNAL_DECL const char *duk_str_prototype_chain_limit; DUK_INTERNAL_DECL const char *duk_str_bound_chain_limit; DUK_INTERNAL_DECL const char *duk_str_c_callstack_limit; @@ -5204,12 +2508,8 @@ DUK_INTERNAL_DECL const char *duk_str_regexp_executor_recursion_limit; DUK_INTERNAL_DECL const char *duk_str_regexp_executor_step_limit; #endif /* !DUK_SINGLE_FILE */ -#define DUK_STR_ANON duk_str_anon -#define DUK_STR_REALLOC_FAILED duk_str_realloc_failed - #if !defined(DUK_SINGLE_FILE) DUK_INTERNAL_DECL const char *duk_str_anon; -DUK_INTERNAL_DECL const char *duk_str_realloc_failed; #endif /* !DUK_SINGLE_FILE */ #endif /* DUK_ERRMSG_H_INCLUDED */ @@ -5968,711 +3268,201 @@ struct duk_compiler_func { duk_bufwriter_ctx bw_code; /* bufwriter for code */ - duk_hstring *h_name; /* function name (borrowed reference), ends up in _name */ - /* h_code: held in bw_code */ - duk_hobject *h_consts; /* array */ - duk_hobject *h_funcs; /* array of function templates: [func1, offset1, line1, func2, offset2, line2] - * offset/line points to closing brace to allow skipping on pass 2 - */ - duk_hobject *h_decls; /* array of declarations: [ name1, val1, name2, val2, ... ] - * valN = (typeN) | (fnum << 8), where fnum is inner func number (0 for vars) - * record function and variable declarations in pass 1 - */ - duk_hobject *h_labelnames; /* array of active label names */ - duk_hbuffer_dynamic *h_labelinfos; /* C array of duk_labelinfo */ - duk_hobject *h_argnames; /* array of formal argument names (-> _Formals) */ - duk_hobject *h_varmap; /* variable map for pass 2 (identifier -> register number or null (unmapped)) */ - - /* value stack indices for tracking objects */ - /* code_idx: not needed */ - duk_idx_t consts_idx; - duk_idx_t funcs_idx; - duk_idx_t decls_idx; - duk_idx_t labelnames_idx; - duk_idx_t labelinfos_idx; - duk_idx_t argnames_idx; - duk_idx_t varmap_idx; - - /* temp reg handling */ - duk_reg_t temp_first; /* first register that is a temporary (below: variables) */ - duk_reg_t temp_next; /* next temporary register to allocate */ - duk_reg_t temp_max; /* highest value of temp_reg (temp_max - 1 is highest used reg) */ - - /* shuffle registers if large number of regs/consts */ - duk_reg_t shuffle1; - duk_reg_t shuffle2; - duk_reg_t shuffle3; - - /* stats for current expression being parsed */ - duk_int_t nud_count; - duk_int_t led_count; - duk_int_t paren_level; /* parenthesis count, 0 = top level */ - duk_bool_t expr_lhs; /* expression is left-hand-side compatible */ - duk_bool_t allow_in; /* current paren level allows 'in' token */ - - /* misc */ - duk_int_t stmt_next; /* statement id allocation (running counter) */ - duk_int_t label_next; /* label id allocation (running counter) */ - duk_int_t catch_depth; /* catch stack depth */ - duk_int_t with_depth; /* with stack depth (affects identifier lookups) */ - duk_int_t fnum_next; /* inner function numbering */ - duk_int_t num_formals; /* number of formal arguments */ - duk_reg_t reg_stmt_value; /* register for writing value of 'non-empty' statements (global or eval code), -1 is marker */ -#if defined(DUK_USE_DEBUGGER_SUPPORT) - duk_int_t min_line; /* XXX: typing (duk_hcompiledfunction has duk_uint32_t) */ - duk_int_t max_line; -#endif - - /* status booleans */ - duk_bool_t is_function; /* is an actual function (not global/eval code) */ - duk_bool_t is_eval; /* is eval code */ - duk_bool_t is_global; /* is global code */ - duk_bool_t is_setget; /* is a setter/getter */ - duk_bool_t is_decl; /* is a function declaration (as opposed to function expression) */ - duk_bool_t is_strict; /* function is strict */ - duk_bool_t is_notail; /* function must not be tail called */ - duk_bool_t in_directive_prologue; /* parsing in "directive prologue", recognize directives */ - duk_bool_t in_scanning; /* parsing in "scanning" phase (first pass) */ - duk_bool_t may_direct_eval; /* function may call direct eval */ - duk_bool_t id_access_arguments; /* function refers to 'arguments' identifier */ - duk_bool_t id_access_slow; /* function makes one or more slow path accesses */ - duk_bool_t is_arguments_shadowed; /* argument/function declaration shadows 'arguments' */ - duk_bool_t needs_shuffle; /* function needs shuffle registers */ - duk_bool_t reject_regexp_in_adv; /* reject RegExp literal on next advance() call; needed for handling IdentifierName productions */ -}; - -struct duk_compiler_ctx { - duk_hthread *thr; - - /* filename being compiled (ends up in functions' '_filename' property) */ - duk_hstring *h_filename; /* borrowed reference */ - - /* lexing (tokenization) state (contains two valstack slot indices) */ - duk_lexer_ctx lex; - - /* current and previous token for parsing */ - duk_token prev_token; - duk_token curr_token; - duk_idx_t tok11_idx; /* curr_token slot1 (matches 'lex' slot1_idx) */ - duk_idx_t tok12_idx; /* curr_token slot2 (matches 'lex' slot2_idx) */ - duk_idx_t tok21_idx; /* prev_token slot1 */ - duk_idx_t tok22_idx; /* prev_token slot2 */ - - /* recursion limit */ - duk_int_t recursion_depth; - duk_int_t recursion_limit; - - /* code emission temporary */ - duk_int_t emit_jumpslot_pc; - - /* current function being compiled (embedded instead of pointer for more compact access) */ - duk_compiler_func curr_func; -}; - -/* - * Prototypes - */ - -#define DUK_JS_COMPILE_FLAG_EVAL (1 << 0) /* source is eval code (not global) */ -#define DUK_JS_COMPILE_FLAG_STRICT (1 << 1) /* strict outer context */ -#define DUK_JS_COMPILE_FLAG_FUNCEXPR (1 << 2) /* source is a function expression (used for Function constructor) */ - -DUK_INTERNAL_DECL void duk_js_compile(duk_hthread *thr, const duk_uint8_t *src_buffer, duk_size_t src_length, duk_small_uint_t flags); - -#endif /* DUK_JS_COMPILER_H_INCLUDED */ -#line 1 "duk_regexp.h" -/* - * Regular expression structs, constants, and bytecode defines. - */ - -#ifndef DUK_REGEXP_H_INCLUDED -#define DUK_REGEXP_H_INCLUDED - -/* maximum bytecode copies for {n,m} quantifiers */ -#define DUK_RE_MAX_ATOM_COPIES 1000 - -/* regexp compilation limits */ -#define DUK_RE_COMPILE_TOKEN_LIMIT 100000000L /* 1e8 */ - -/* regexp execution limits */ -#define DUK_RE_EXECUTE_STEPS_LIMIT 1000000000L /* 1e9 */ - -/* regexp opcodes */ -#define DUK_REOP_MATCH 1 -#define DUK_REOP_CHAR 2 -#define DUK_REOP_PERIOD 3 -#define DUK_REOP_RANGES 4 -#define DUK_REOP_INVRANGES 5 -#define DUK_REOP_JUMP 6 -#define DUK_REOP_SPLIT1 7 -#define DUK_REOP_SPLIT2 8 -#define DUK_REOP_SQMINIMAL 9 -#define DUK_REOP_SQGREEDY 10 -#define DUK_REOP_SAVE 11 -#define DUK_REOP_WIPERANGE 12 -#define DUK_REOP_LOOKPOS 13 -#define DUK_REOP_LOOKNEG 14 -#define DUK_REOP_BACKREFERENCE 15 -#define DUK_REOP_ASSERT_START 16 -#define DUK_REOP_ASSERT_END 17 -#define DUK_REOP_ASSERT_WORD_BOUNDARY 18 -#define DUK_REOP_ASSERT_NOT_WORD_BOUNDARY 19 - -/* flags */ -#define DUK_RE_FLAG_GLOBAL (1 << 0) -#define DUK_RE_FLAG_IGNORE_CASE (1 << 1) -#define DUK_RE_FLAG_MULTILINE (1 << 2) - -struct duk_re_matcher_ctx { - duk_hthread *thr; - - duk_uint32_t re_flags; - const duk_uint8_t *input; - const duk_uint8_t *input_end; - const duk_uint8_t *bytecode; - const duk_uint8_t *bytecode_end; - const duk_uint8_t **saved; /* allocated from valstack (fixed buffer) */ - duk_uint32_t nsaved; - duk_uint32_t recursion_depth; - duk_uint32_t recursion_limit; - duk_uint32_t steps_count; - duk_uint32_t steps_limit; -}; - -struct duk_re_compiler_ctx { - duk_hthread *thr; - - duk_uint32_t re_flags; - duk_lexer_ctx lex; - duk_re_token curr_token; - duk_bufwriter_ctx bw; - duk_uint32_t captures; /* highest capture number emitted so far (used as: ++captures) */ - duk_uint32_t highest_backref; - duk_uint32_t recursion_depth; - duk_uint32_t recursion_limit; - duk_uint32_t nranges; /* internal temporary value, used for char classes */ -}; - -/* - * Prototypes - */ - -DUK_INTERNAL_DECL void duk_regexp_compile(duk_hthread *thr); -DUK_INTERNAL_DECL void duk_regexp_create_instance(duk_hthread *thr); -DUK_INTERNAL_DECL void duk_regexp_match(duk_hthread *thr); -DUK_INTERNAL_DECL void duk_regexp_match_force_global(duk_hthread *thr); /* hacky helper for String.prototype.split() */ - -#endif /* DUK_REGEXP_H_INCLUDED */ -#line 1 "duk_tval.h" -/* - * Tagged type definition (duk_tval) and accessor macros. - * - * Access all fields through the accessor macros, as the representation - * is quite tricky. - * - * There are two packed type alternatives: an 8-byte representation - * based on an IEEE double (preferred for compactness), and a 12-byte - * representation (portability). The latter is needed also in e.g. - * 64-bit environments (it usually pads to 16 bytes per value). - * - * Selecting the tagged type format involves many trade-offs (memory - * use, size and performance of generated code, portability, etc), - * see doc/types.rst for a detailed discussion (especially of how the - * IEEE double format is used to pack tagged values). - * - * NB: because macro arguments are often expressions, macros should - * avoid evaluating their argument more than once. - */ - -#ifndef DUK_TVAL_H_INCLUDED -#define DUK_TVAL_H_INCLUDED - -/* sanity */ -#if !defined(DUK_USE_DOUBLE_LE) && !defined(DUK_USE_DOUBLE_ME) && !defined(DUK_USE_DOUBLE_BE) -#error unsupported: cannot determine byte order variant -#endif - -#ifdef DUK_USE_PACKED_TVAL -/* ======================================================================== */ - -/* - * Packed 8-byte representation - */ - -/* use duk_double_union as duk_tval directly */ -typedef union duk_double_union duk_tval; - -/* tags */ -#define DUK_TAG_NORMALIZED_NAN 0x7ff8UL /* the NaN variant we use */ -/* avoid tag 0xfff0, no risk of confusion with negative infinity */ -#if defined(DUK_USE_FASTINT) -#define DUK_TAG_FASTINT 0xfff1UL /* embed: integer value */ -#endif -#define DUK_TAG_UNUSED 0xfff2UL /* marker; not actual tagged value */ -#define DUK_TAG_UNDEFINED 0xfff3UL /* embed: nothing */ -#define DUK_TAG_NULL 0xfff4UL /* embed: nothing */ -#define DUK_TAG_BOOLEAN 0xfff5UL /* embed: 0 or 1 (false or true) */ -/* DUK_TAG_NUMBER would logically go here, but it has multiple 'tags' */ -#define DUK_TAG_POINTER 0xfff6UL /* embed: void ptr */ -#define DUK_TAG_LIGHTFUNC 0xfff7UL /* embed: func ptr */ -#define DUK_TAG_STRING 0xfff8UL /* embed: duk_hstring ptr */ -#define DUK_TAG_OBJECT 0xfff9UL /* embed: duk_hobject ptr */ -#define DUK_TAG_BUFFER 0xfffaUL /* embed: duk_hbuffer ptr */ - -/* for convenience */ -#define DUK_XTAG_BOOLEAN_FALSE 0xfff50000UL -#define DUK_XTAG_BOOLEAN_TRUE 0xfff50001UL - -/* two casts to avoid gcc warning: "warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]" */ -#ifdef DUK_USE_64BIT_OPS -#ifdef DUK_USE_DOUBLE_ME -#define DUK__TVAL_SET_TAGGEDPOINTER(v,h,tag) do { \ - (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) (tag)) << 16) | (((duk_uint64_t) (duk_uint32_t) (h)) << 32); \ - } while (0) -#else -#define DUK__TVAL_SET_TAGGEDPOINTER(v,h,tag) do { \ - (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) (tag)) << 48) | ((duk_uint64_t) (duk_uint32_t) (h)); \ - } while (0) -#endif -#else /* DUK_USE_64BIT_OPS */ -#define DUK__TVAL_SET_TAGGEDPOINTER(v,h,tag) do { \ - (v)->ui[DUK_DBL_IDX_UI0] = ((duk_uint32_t) (tag)) << 16; \ - (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (h); \ - } while (0) -#endif /* DUK_USE_64BIT_OPS */ - -#ifdef DUK_USE_64BIT_OPS -/* Double casting for pointer to avoid gcc warning (cast from pointer to integer of different size) */ -#ifdef DUK_USE_DOUBLE_ME -#define DUK__TVAL_SET_LIGHTFUNC(v,fp,flags) do { \ - (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_LIGHTFUNC) << 16) | \ - ((duk_uint64_t) (flags)) | \ - (((duk_uint64_t) (duk_uint32_t) (fp)) << 32); \ - } while (0) -#else -#define DUK__TVAL_SET_LIGHTFUNC(v,fp,flags) do { \ - (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_LIGHTFUNC) << 48) | \ - (((duk_uint64_t) (flags)) << 32) | \ - ((duk_uint64_t) (duk_uint32_t) (fp)); \ - } while (0) -#endif -#else /* DUK_USE_64BIT_OPS */ -#define DUK__TVAL_SET_LIGHTFUNC(v,fp,flags) do { \ - (v)->ui[DUK_DBL_IDX_UI0] = (((duk_uint32_t) DUK_TAG_LIGHTFUNC) << 16) | ((duk_uint32_t) (flags)); \ - (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (fp); \ - } while (0) -#endif /* DUK_USE_64BIT_OPS */ - -#if defined(DUK_USE_FASTINT) -/* Note: masking is done for 'i' to deal with negative numbers correctly */ -#ifdef DUK_USE_DOUBLE_ME -#define DUK__TVAL_SET_FASTINT(v,i) do { \ - (v)->ui[DUK_DBL_IDX_UI0] = ((duk_uint32_t) DUK_TAG_FASTINT) << 16 | (((duk_uint32_t) ((i) >> 32)) & 0x0000ffffUL); \ - (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (i); \ - } while (0) -#define DUK__TVAL_SET_FASTINT_U32(v,i) do { \ - (v)->ui[DUK_DBL_IDX_UI0] = ((duk_uint32_t) DUK_TAG_FASTINT) << 16; \ - (v)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (i); \ - } while (0) -#else -#define DUK__TVAL_SET_FASTINT(v,i) do { \ - (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_FASTINT) << 48) | (((duk_uint64_t) (i)) & 0x0000ffffffffffffULL); \ - } while (0) -#define DUK__TVAL_SET_FASTINT_U32(v,i) do { \ - (v)->ull[DUK_DBL_IDX_ULL0] = (((duk_uint64_t) DUK_TAG_FASTINT) << 48) | (duk_uint64_t) (i); \ - } while (0) -#endif - -#define DUK__TVAL_SET_FASTINT_I32(v,i) do { \ - duk_int64_t duk__tmp = (duk_int64_t) (i); \ - DUK_TVAL_SET_FASTINT((v), duk__tmp); \ - } while (0) - -/* XXX: clumsy sign extend and masking of 16 topmost bits */ -#ifdef DUK_USE_DOUBLE_ME -#define DUK__TVAL_GET_FASTINT(v) (((duk_int64_t) ((((duk_uint64_t) (v)->ui[DUK_DBL_IDX_UI0]) << 32) | ((duk_uint64_t) (v)->ui[DUK_DBL_IDX_UI1]))) << 16 >> 16) -#else -#define DUK__TVAL_GET_FASTINT(v) ((((duk_int64_t) (v)->ull[DUK_DBL_IDX_ULL0]) << 16) >> 16) -#endif -#define DUK__TVAL_GET_FASTINT_U32(v) ((v)->ui[DUK_DBL_IDX_UI1]) -#define DUK__TVAL_GET_FASTINT_I32(v) ((duk_int32_t) (v)->ui[DUK_DBL_IDX_UI1]) -#endif /* DUK_USE_FASTINT */ - -#define DUK_TVAL_SET_UNDEFINED(v) do { \ - (v)->us[DUK_DBL_IDX_US0] = (duk_uint16_t) DUK_TAG_UNDEFINED; \ - } while (0) -#define DUK_TVAL_SET_UNUSED(v) do { \ - (v)->us[DUK_DBL_IDX_US0] = (duk_uint16_t) DUK_TAG_UNUSED; \ - } while (0) -#define DUK_TVAL_SET_NULL(v) do { \ - (v)->us[DUK_DBL_IDX_US0] = (duk_uint16_t) DUK_TAG_NULL; \ - } while (0) - -#define DUK_TVAL_SET_BOOLEAN(v,val) DUK_DBLUNION_SET_HIGH32((v), (((duk_uint32_t) DUK_TAG_BOOLEAN) << 16) | ((duk_uint32_t) (val))) - -#define DUK_TVAL_SET_NAN(v) DUK_DBLUNION_SET_NAN_FULL((v)) - -/* Assumes that caller has normalized NaNs, otherwise trouble ahead. */ -#if defined(DUK_USE_FASTINT) -#define DUK_TVAL_SET_DOUBLE(v,d) do { \ - duk_double_t duk__dblval; \ - duk__dblval = (d); \ - DUK_ASSERT_DOUBLE_IS_NORMALIZED(duk__dblval); \ - DUK_DBLUNION_SET_DOUBLE((v), duk__dblval); \ - } while (0) -#define DUK_TVAL_SET_FASTINT(v,i) DUK__TVAL_SET_FASTINT((v), (i)) -#define DUK_TVAL_SET_FASTINT_I32(v,i) DUK__TVAL_SET_FASTINT_I32((v), (i)) -#define DUK_TVAL_SET_FASTINT_U32(v,i) DUK__TVAL_SET_FASTINT_U32((v), (i)) -#define DUK_TVAL_SET_NUMBER_CHKFAST(v,d) duk_tval_set_number_chkfast((v), (d)) -#define DUK_TVAL_SET_NUMBER(v,d) DUK_TVAL_SET_DOUBLE((v), (d)) -#define DUK_TVAL_CHKFAST_INPLACE(v) do { \ - duk_tval *duk__tv; \ - duk_double_t duk__d; \ - duk__tv = (v); \ - if (DUK_TVAL_IS_DOUBLE(duk__tv)) { \ - duk__d = DUK_TVAL_GET_DOUBLE(duk__tv); \ - DUK_TVAL_SET_NUMBER_CHKFAST(duk__tv, duk__d); \ - } \ - } while (0) -#else -#define DUK_TVAL_SET_DOUBLE(v,d) do { \ - duk_double_t duk__dblval; \ - duk__dblval = (d); \ - DUK_ASSERT_DOUBLE_IS_NORMALIZED(duk__dblval); \ - DUK_DBLUNION_SET_DOUBLE((v), duk__dblval); \ - } while (0) -#define DUK_TVAL_SET_NUMBER_CHKFAST(v,d) DUK_TVAL_SET_DOUBLE((v), (d)) -#define DUK_TVAL_SET_NUMBER(v,d) DUK_TVAL_SET_DOUBLE((v), (d)) -#define DUK_TVAL_CHKFAST_INPLACE(v) do { } while (0) -#endif - -#define DUK_TVAL_SET_LIGHTFUNC(v,fp,flags) DUK__TVAL_SET_LIGHTFUNC((v), (fp), (flags)) -#define DUK_TVAL_SET_STRING(v,h) DUK__TVAL_SET_TAGGEDPOINTER((v), (h), DUK_TAG_STRING) -#define DUK_TVAL_SET_OBJECT(v,h) DUK__TVAL_SET_TAGGEDPOINTER((v), (h), DUK_TAG_OBJECT) -#define DUK_TVAL_SET_BUFFER(v,h) DUK__TVAL_SET_TAGGEDPOINTER((v), (h), DUK_TAG_BUFFER) -#define DUK_TVAL_SET_POINTER(v,p) DUK__TVAL_SET_TAGGEDPOINTER((v), (p), DUK_TAG_POINTER) - -#define DUK_TVAL_SET_TVAL(v,x) do { *(v) = *(x); } while (0) - -/* getters */ -#define DUK_TVAL_GET_BOOLEAN(v) ((int) (v)->us[DUK_DBL_IDX_US1]) -#if defined(DUK_USE_FASTINT) -#define DUK_TVAL_GET_DOUBLE(v) ((v)->d) -#define DUK_TVAL_GET_FASTINT(v) DUK__TVAL_GET_FASTINT((v)) -#define DUK_TVAL_GET_FASTINT_U32(v) DUK__TVAL_GET_FASTINT_U32((v)) -#define DUK_TVAL_GET_FASTINT_I32(v) DUK__TVAL_GET_FASTINT_I32((v)) -#define DUK_TVAL_GET_NUMBER(v) duk_tval_get_number_packed((v)) -#else -#define DUK_TVAL_GET_NUMBER(v) ((v)->d) -#define DUK_TVAL_GET_DOUBLE(v) ((v)->d) -#endif -#define DUK_TVAL_GET_LIGHTFUNC(v,out_fp,out_flags) do { \ - (out_flags) = (v)->ui[DUK_DBL_IDX_UI0] & 0xffffUL; \ - (out_fp) = (duk_c_function) (v)->ui[DUK_DBL_IDX_UI1]; \ - } while (0) -#define DUK_TVAL_GET_LIGHTFUNC_FUNCPTR(v) ((duk_c_function) ((v)->ui[DUK_DBL_IDX_UI1])) -#define DUK_TVAL_GET_LIGHTFUNC_FLAGS(v) (((int) (v)->ui[DUK_DBL_IDX_UI0]) & 0xffffUL) -#define DUK_TVAL_GET_STRING(v) ((duk_hstring *) (v)->vp[DUK_DBL_IDX_VP1]) -#define DUK_TVAL_GET_OBJECT(v) ((duk_hobject *) (v)->vp[DUK_DBL_IDX_VP1]) -#define DUK_TVAL_GET_BUFFER(v) ((duk_hbuffer *) (v)->vp[DUK_DBL_IDX_VP1]) -#define DUK_TVAL_GET_POINTER(v) ((void *) (v)->vp[DUK_DBL_IDX_VP1]) -#define DUK_TVAL_GET_HEAPHDR(v) ((duk_heaphdr *) (v)->vp[DUK_DBL_IDX_VP1]) - -/* decoding */ -#define DUK_TVAL_GET_TAG(v) ((duk_small_uint_t) (v)->us[DUK_DBL_IDX_US0]) - -#define DUK_TVAL_IS_UNDEFINED(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_UNDEFINED) -#define DUK_TVAL_IS_UNUSED(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_UNUSED) -#define DUK_TVAL_IS_NULL(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_NULL) -#define DUK_TVAL_IS_BOOLEAN(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_BOOLEAN) -#define DUK_TVAL_IS_BOOLEAN_TRUE(v) ((v)->ui[DUK_DBL_IDX_UI0] == DUK_XTAG_BOOLEAN_TRUE) -#define DUK_TVAL_IS_BOOLEAN_FALSE(v) ((v)->ui[DUK_DBL_IDX_UI0] == DUK_XTAG_BOOLEAN_FALSE) -#define DUK_TVAL_IS_LIGHTFUNC(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_LIGHTFUNC) -#define DUK_TVAL_IS_STRING(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_STRING) -#define DUK_TVAL_IS_OBJECT(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_OBJECT) -#define DUK_TVAL_IS_BUFFER(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_BUFFER) -#define DUK_TVAL_IS_POINTER(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_POINTER) -#if defined(DUK_USE_FASTINT) -/* 0xfff0 is -Infinity */ -#define DUK_TVAL_IS_DOUBLE(v) (DUK_TVAL_GET_TAG((v)) <= 0xfff0UL) -#define DUK_TVAL_IS_FASTINT(v) (DUK_TVAL_GET_TAG((v)) == DUK_TAG_FASTINT) -#define DUK_TVAL_IS_NUMBER(v) (DUK_TVAL_GET_TAG((v)) <= 0xfff1UL) -#else -#define DUK_TVAL_IS_NUMBER(v) (DUK_TVAL_GET_TAG((v)) <= 0xfff0UL) -#define DUK_TVAL_IS_DOUBLE(v) DUK_TVAL_IS_NUMBER((v)) -#endif - -/* This is performance critical because it appears in every DECREF. */ -#define DUK_TVAL_IS_HEAP_ALLOCATED(v) (DUK_TVAL_GET_TAG((v)) >= DUK_TAG_STRING) - -#if defined(DUK_USE_FASTINT) -DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_packed(duk_tval *tv); -#endif - -#else /* DUK_USE_PACKED_TVAL */ -/* ======================================================================== */ + duk_hstring *h_name; /* function name (borrowed reference), ends up in _name */ + /* h_code: held in bw_code */ + duk_hobject *h_consts; /* array */ + duk_hobject *h_funcs; /* array of function templates: [func1, offset1, line1, func2, offset2, line2] + * offset/line points to closing brace to allow skipping on pass 2 + */ + duk_hobject *h_decls; /* array of declarations: [ name1, val1, name2, val2, ... ] + * valN = (typeN) | (fnum << 8), where fnum is inner func number (0 for vars) + * record function and variable declarations in pass 1 + */ + duk_hobject *h_labelnames; /* array of active label names */ + duk_hbuffer_dynamic *h_labelinfos; /* C array of duk_labelinfo */ + duk_hobject *h_argnames; /* array of formal argument names (-> _Formals) */ + duk_hobject *h_varmap; /* variable map for pass 2 (identifier -> register number or null (unmapped)) */ -/* - * Portable 12-byte representation - */ + /* value stack indices for tracking objects */ + /* code_idx: not needed */ + duk_idx_t consts_idx; + duk_idx_t funcs_idx; + duk_idx_t decls_idx; + duk_idx_t labelnames_idx; + duk_idx_t labelinfos_idx; + duk_idx_t argnames_idx; + duk_idx_t varmap_idx; -/* Note: not initializing all bytes is normally not an issue: Duktape won't - * read or use the uninitialized bytes so valgrind won't issue warnings. - * In some special cases a harmless valgrind warning may be issued though. - * For example, the DumpHeap debugger command writes out a compiled function's - * 'data' area as is, including any uninitialized bytes, which causes a - * valgrind warning. - */ + /* temp reg handling */ + duk_reg_t temp_first; /* first register that is a temporary (below: variables) */ + duk_reg_t temp_next; /* next temporary register to allocate */ + duk_reg_t temp_max; /* highest value of temp_reg (temp_max - 1 is highest used reg) */ -typedef struct duk_tval_struct duk_tval; + /* shuffle registers if large number of regs/consts */ + duk_reg_t shuffle1; + duk_reg_t shuffle2; + duk_reg_t shuffle3; -struct duk_tval_struct { - duk_small_uint_t t; - duk_small_uint_t v_extra; - union { - duk_double_t d; - duk_small_int_t i; -#if defined(DUK_USE_FASTINT) - duk_int64_t fi; /* if present, forces 16-byte duk_tval */ -#endif - void *voidptr; - duk_hstring *hstring; - duk_hobject *hobject; - duk_hcompiledfunction *hcompiledfunction; - duk_hnativefunction *hnativefunction; - duk_hthread *hthread; - duk_hbuffer *hbuffer; - duk_heaphdr *heaphdr; - duk_c_function lightfunc; - } v; -}; + /* stats for current expression being parsed */ + duk_int_t nud_count; + duk_int_t led_count; + duk_int_t paren_level; /* parenthesis count, 0 = top level */ + duk_bool_t expr_lhs; /* expression is left-hand-side compatible */ + duk_bool_t allow_in; /* current paren level allows 'in' token */ -#define DUK__TAG_NUMBER 0 /* not exposed */ -#if defined(DUK_USE_FASTINT) -#define DUK_TAG_FASTINT 1 + /* misc */ + duk_int_t stmt_next; /* statement id allocation (running counter) */ + duk_int_t label_next; /* label id allocation (running counter) */ + duk_int_t catch_depth; /* catch stack depth */ + duk_int_t with_depth; /* with stack depth (affects identifier lookups) */ + duk_int_t fnum_next; /* inner function numbering */ + duk_int_t num_formals; /* number of formal arguments */ + duk_reg_t reg_stmt_value; /* register for writing value of 'non-empty' statements (global or eval code), -1 is marker */ +#if defined(DUK_USE_DEBUGGER_SUPPORT) + duk_int_t min_line; /* XXX: typing (duk_hcompiledfunction has duk_uint32_t) */ + duk_int_t max_line; #endif -#define DUK_TAG_UNDEFINED 2 -#define DUK_TAG_NULL 3 -#define DUK_TAG_BOOLEAN 4 -#define DUK_TAG_POINTER 5 -#define DUK_TAG_LIGHTFUNC 6 -#define DUK_TAG_UNUSED 7 /* marker; not actual tagged type */ -#define DUK_TAG_STRING 8 /* first heap allocated, match bit boundary */ -#define DUK_TAG_OBJECT 9 -#define DUK_TAG_BUFFER 10 -/* DUK__TAG_NUMBER is intentionally first, as it is the default clause in code - * to support the 8-byte representation. Further, it is a non-heap-allocated - * type so it should come before DUK_TAG_STRING. Finally, it should not break - * the tag value ranges covered by case-clauses in a switch-case. - */ + /* status booleans */ + duk_bool_t is_function; /* is an actual function (not global/eval code) */ + duk_bool_t is_eval; /* is eval code */ + duk_bool_t is_global; /* is global code */ + duk_bool_t is_setget; /* is a setter/getter */ + duk_bool_t is_decl; /* is a function declaration (as opposed to function expression) */ + duk_bool_t is_strict; /* function is strict */ + duk_bool_t is_notail; /* function must not be tail called */ + duk_bool_t in_directive_prologue; /* parsing in "directive prologue", recognize directives */ + duk_bool_t in_scanning; /* parsing in "scanning" phase (first pass) */ + duk_bool_t may_direct_eval; /* function may call direct eval */ + duk_bool_t id_access_arguments; /* function refers to 'arguments' identifier */ + duk_bool_t id_access_slow; /* function makes one or more slow path accesses */ + duk_bool_t is_arguments_shadowed; /* argument/function declaration shadows 'arguments' */ + duk_bool_t needs_shuffle; /* function needs shuffle registers */ + duk_bool_t reject_regexp_in_adv; /* reject RegExp literal on next advance() call; needed for handling IdentifierName productions */ +}; -/* setters */ -#define DUK_TVAL_SET_UNDEFINED(tv) do { \ - (tv)->t = DUK_TAG_UNDEFINED; \ - } while (0) +struct duk_compiler_ctx { + duk_hthread *thr; -#define DUK_TVAL_SET_UNUSED(tv) do { \ - (tv)->t = DUK_TAG_UNUSED; \ - } while (0) + /* filename being compiled (ends up in functions' '_filename' property) */ + duk_hstring *h_filename; /* borrowed reference */ -#define DUK_TVAL_SET_NULL(tv) do { \ - (tv)->t = DUK_TAG_NULL; \ - } while (0) + /* lexing (tokenization) state (contains two valstack slot indices) */ + duk_lexer_ctx lex; -#define DUK_TVAL_SET_BOOLEAN(tv,val) do { \ - (tv)->t = DUK_TAG_BOOLEAN; \ - (tv)->v.i = (val); \ - } while (0) + /* current and previous token for parsing */ + duk_token prev_token; + duk_token curr_token; + duk_idx_t tok11_idx; /* curr_token slot1 (matches 'lex' slot1_idx) */ + duk_idx_t tok12_idx; /* curr_token slot2 (matches 'lex' slot2_idx) */ + duk_idx_t tok21_idx; /* prev_token slot1 */ + duk_idx_t tok22_idx; /* prev_token slot2 */ -#if defined(DUK_USE_FASTINT) -#define DUK_TVAL_SET_DOUBLE(tv,val) do { \ - (tv)->t = DUK__TAG_NUMBER; \ - (tv)->v.d = (val); \ - } while (0) -#define DUK_TVAL_SET_FASTINT(tv,val) do { \ - (tv)->t = DUK_TAG_FASTINT; \ - (tv)->v.fi = (val); \ - } while (0) -#define DUK_TVAL_SET_FASTINT_U32(tv,val) do { \ - (tv)->t = DUK_TAG_FASTINT; \ - (tv)->v.fi = (duk_int64_t) (val); \ - } while (0) -#define DUK_TVAL_SET_FASTINT_I32(tv,val) do { \ - (tv)->t = DUK_TAG_FASTINT; \ - (tv)->v.fi = (duk_int64_t) (val); \ - } while (0) -#define DUK_TVAL_SET_NUMBER_CHKFAST(tv,d) \ - duk_tval_set_number_chkfast((tv), (d)) -#define DUK_TVAL_SET_NUMBER(tv,val) \ - DUK_TVAL_SET_DOUBLE((tv), (val)) -#define DUK_TVAL_CHKFAST_INPLACE(v) do { \ - duk_tval *duk__tv; \ - duk_double_t duk__d; \ - duk__tv = (v); \ - if (DUK_TVAL_IS_DOUBLE(duk__tv)) { \ - duk__d = DUK_TVAL_GET_DOUBLE(duk__tv); \ - DUK_TVAL_SET_NUMBER_CHKFAST(duk__tv, duk__d); \ - } \ - } while (0) -#else -#define DUK_TVAL_SET_NUMBER(tv,val) do { \ - (tv)->t = DUK__TAG_NUMBER; \ - (tv)->v.d = (val); \ - } while (0) -#define DUK_TVAL_SET_NUMBER_CHKFAST(tv,d) \ - DUK_TVAL_SET_NUMBER((tv), (d)) -#define DUK_TVAL_SET_DOUBLE(v,d) \ - DUK_TVAL_SET_NUMBER((tv), (d)) -#define DUK_TVAL_CHKFAST_INPLACE(v) do { } while (0) -#endif /* DUK_USE_FASTINT */ + /* recursion limit */ + duk_int_t recursion_depth; + duk_int_t recursion_limit; -#define DUK_TVAL_SET_POINTER(tv,hptr) do { \ - (tv)->t = DUK_TAG_POINTER; \ - (tv)->v.voidptr = (hptr); \ - } while (0) + /* code emission temporary */ + duk_int_t emit_jumpslot_pc; -#define DUK_TVAL_SET_LIGHTFUNC(tv,fp,flags) do { \ - (tv)->t = DUK_TAG_LIGHTFUNC; \ - (tv)->v_extra = (flags); \ - (tv)->v.lightfunc = (duk_c_function) (fp); \ - } while (0) + /* current function being compiled (embedded instead of pointer for more compact access) */ + duk_compiler_func curr_func; +}; -#define DUK_TVAL_SET_STRING(tv,hptr) do { \ - (tv)->t = DUK_TAG_STRING; \ - (tv)->v.hstring = (hptr); \ - } while (0) +/* + * Prototypes + */ -#define DUK_TVAL_SET_OBJECT(tv,hptr) do { \ - (tv)->t = DUK_TAG_OBJECT; \ - (tv)->v.hobject = (hptr); \ - } while (0) +#define DUK_JS_COMPILE_FLAG_EVAL (1 << 0) /* source is eval code (not global) */ +#define DUK_JS_COMPILE_FLAG_STRICT (1 << 1) /* strict outer context */ +#define DUK_JS_COMPILE_FLAG_FUNCEXPR (1 << 2) /* source is a function expression (used for Function constructor) */ -#define DUK_TVAL_SET_BUFFER(tv,hptr) do { \ - (tv)->t = DUK_TAG_BUFFER; \ - (tv)->v.hbuffer = (hptr); \ - } while (0) +DUK_INTERNAL_DECL void duk_js_compile(duk_hthread *thr, const duk_uint8_t *src_buffer, duk_size_t src_length, duk_small_uint_t flags); -#define DUK_TVAL_SET_NAN(tv) do { \ - /* in non-packed representation we don't care about which NaN is used */ \ - (tv)->t = DUK__TAG_NUMBER; \ - (tv)->v.d = DUK_DOUBLE_NAN; \ - } while (0) +#endif /* DUK_JS_COMPILER_H_INCLUDED */ +#line 1 "duk_regexp.h" +/* + * Regular expression structs, constants, and bytecode defines. + */ -#define DUK_TVAL_SET_TVAL(v,x) do { *(v) = *(x); } while (0) +#ifndef DUK_REGEXP_H_INCLUDED +#define DUK_REGEXP_H_INCLUDED -/* getters */ -#define DUK_TVAL_GET_BOOLEAN(tv) ((tv)->v.i) -#if defined(DUK_USE_FASTINT) -#define DUK_TVAL_GET_DOUBLE(tv) ((tv)->v.d) -#define DUK_TVAL_GET_FASTINT(tv) ((tv)->v.fi) -#define DUK_TVAL_GET_FASTINT_U32(tv) ((duk_uint32_t) ((tv)->v.fi)) -#define DUK_TVAL_GET_FASTINT_I32(tv) ((duk_int32_t) ((tv)->v.fi)) -#if 0 -#define DUK_TVAL_GET_NUMBER(tv) (DUK_TVAL_IS_FASTINT((tv)) ? \ - (duk_double_t) DUK_TVAL_GET_FASTINT((tv)) : \ - DUK_TVAL_GET_DOUBLE((tv))) -#define DUK_TVAL_GET_NUMBER(tv) duk_tval_get_number_unpacked((tv)) -#else -/* This seems reasonable overall. */ -#define DUK_TVAL_GET_NUMBER(tv) (DUK_TVAL_IS_FASTINT((tv)) ? \ - duk_tval_get_number_unpacked_fastint((tv)) : \ - DUK_TVAL_GET_DOUBLE((tv))) -#endif -#else -#define DUK_TVAL_GET_NUMBER(tv) ((tv)->v.d) -#define DUK_TVAL_GET_DOUBLE(tv) ((tv)->v.d) -#endif /* DUK_USE_FASTINT */ -#define DUK_TVAL_GET_POINTER(tv) ((tv)->v.voidptr) -#define DUK_TVAL_GET_LIGHTFUNC(tv,out_fp,out_flags) do { \ - (out_flags) = (duk_uint32_t) (tv)->v_extra; \ - (out_fp) = (tv)->v.lightfunc; \ - } while (0) -#define DUK_TVAL_GET_LIGHTFUNC_FUNCPTR(tv) ((tv)->v.lightfunc) -#define DUK_TVAL_GET_LIGHTFUNC_FLAGS(tv) ((duk_uint32_t) ((tv)->v_extra)) -#define DUK_TVAL_GET_STRING(tv) ((tv)->v.hstring) -#define DUK_TVAL_GET_OBJECT(tv) ((tv)->v.hobject) -#define DUK_TVAL_GET_BUFFER(tv) ((tv)->v.hbuffer) -#define DUK_TVAL_GET_HEAPHDR(tv) ((tv)->v.heaphdr) +/* maximum bytecode copies for {n,m} quantifiers */ +#define DUK_RE_MAX_ATOM_COPIES 1000 -/* decoding */ -#define DUK_TVAL_GET_TAG(tv) ((tv)->t) -#define DUK_TVAL_IS_UNDEFINED(tv) ((tv)->t == DUK_TAG_UNDEFINED) -#define DUK_TVAL_IS_UNUSED(tv) ((tv)->t == DUK_TAG_UNUSED) -#define DUK_TVAL_IS_NULL(tv) ((tv)->t == DUK_TAG_NULL) -#define DUK_TVAL_IS_BOOLEAN(tv) ((tv)->t == DUK_TAG_BOOLEAN) -#define DUK_TVAL_IS_BOOLEAN_TRUE(tv) (((tv)->t == DUK_TAG_BOOLEAN) && ((tv)->v.i != 0)) -#define DUK_TVAL_IS_BOOLEAN_FALSE(tv) (((tv)->t == DUK_TAG_BOOLEAN) && ((tv)->v.i == 0)) -#if defined(DUK_USE_FASTINT) -#define DUK_TVAL_IS_DOUBLE(tv) ((tv)->t == DUK__TAG_NUMBER) -#define DUK_TVAL_IS_FASTINT(tv) ((tv)->t == DUK_TAG_FASTINT) -#define DUK_TVAL_IS_NUMBER(tv) ((tv)->t == DUK__TAG_NUMBER || \ - (tv)->t == DUK_TAG_FASTINT) -#else -#define DUK_TVAL_IS_NUMBER(tv) ((tv)->t == DUK__TAG_NUMBER) -#define DUK_TVAL_IS_DOUBLE(v) DUK_TVAL_IS_NUMBER((v)) -#endif /* DUK_USE_FASTINT */ -#define DUK_TVAL_IS_POINTER(tv) ((tv)->t == DUK_TAG_POINTER) -#define DUK_TVAL_IS_LIGHTFUNC(tv) ((tv)->t == DUK_TAG_LIGHTFUNC) -#define DUK_TVAL_IS_STRING(tv) ((tv)->t == DUK_TAG_STRING) -#define DUK_TVAL_IS_OBJECT(tv) ((tv)->t == DUK_TAG_OBJECT) -#define DUK_TVAL_IS_BUFFER(tv) ((tv)->t == DUK_TAG_BUFFER) +/* regexp compilation limits */ +#define DUK_RE_COMPILE_TOKEN_LIMIT 100000000L /* 1e8 */ -/* This is performance critical because it's needed for every DECREF. - * Take advantage of the fact that the first heap allocated tag is 8, - * so that bit 3 is set for all heap allocated tags (and never set for - * non-heap-allocated tags). - */ -#if 0 -#define DUK_TVAL_IS_HEAP_ALLOCATED(tv) ((tv)->t >= DUK_TAG_STRING) -#endif -#define DUK_TVAL_IS_HEAP_ALLOCATED(tv) ((tv)->t & 0x08) +/* regexp execution limits */ +#define DUK_RE_EXECUTE_STEPS_LIMIT 1000000000L /* 1e9 */ -#if defined(DUK_USE_FASTINT) -#if 0 -DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_unpacked(duk_tval *tv); -#endif -DUK_INTERNAL_DECL duk_double_t duk_tval_get_number_unpacked_fastint(duk_tval *tv); -#endif +/* regexp opcodes */ +#define DUK_REOP_MATCH 1 +#define DUK_REOP_CHAR 2 +#define DUK_REOP_PERIOD 3 +#define DUK_REOP_RANGES 4 +#define DUK_REOP_INVRANGES 5 +#define DUK_REOP_JUMP 6 +#define DUK_REOP_SPLIT1 7 +#define DUK_REOP_SPLIT2 8 +#define DUK_REOP_SQMINIMAL 9 +#define DUK_REOP_SQGREEDY 10 +#define DUK_REOP_SAVE 11 +#define DUK_REOP_WIPERANGE 12 +#define DUK_REOP_LOOKPOS 13 +#define DUK_REOP_LOOKNEG 14 +#define DUK_REOP_BACKREFERENCE 15 +#define DUK_REOP_ASSERT_START 16 +#define DUK_REOP_ASSERT_END 17 +#define DUK_REOP_ASSERT_WORD_BOUNDARY 18 +#define DUK_REOP_ASSERT_NOT_WORD_BOUNDARY 19 -#endif /* DUK_USE_PACKED_TVAL */ +/* flags */ +#define DUK_RE_FLAG_GLOBAL (1 << 0) +#define DUK_RE_FLAG_IGNORE_CASE (1 << 1) +#define DUK_RE_FLAG_MULTILINE (1 << 2) -/* - * Convenience (independent of representation) - */ +struct duk_re_matcher_ctx { + duk_hthread *thr; -#define DUK_TVAL_SET_BOOLEAN_TRUE(v) DUK_TVAL_SET_BOOLEAN(v, 1) -#define DUK_TVAL_SET_BOOLEAN_FALSE(v) DUK_TVAL_SET_BOOLEAN(v, 0) + duk_uint32_t re_flags; + const duk_uint8_t *input; + const duk_uint8_t *input_end; + const duk_uint8_t *bytecode; + const duk_uint8_t *bytecode_end; + const duk_uint8_t **saved; /* allocated from valstack (fixed buffer) */ + duk_uint32_t nsaved; + duk_uint32_t recursion_depth; + duk_uint32_t recursion_limit; + duk_uint32_t steps_count; + duk_uint32_t steps_limit; +}; -/* Lightfunc flags packing and unpacking. */ -/* Sign extend: 0x0000##00 -> 0x##000000 -> sign extend to 0xssssss## */ -#define DUK_LFUNC_FLAGS_GET_MAGIC(lf_flags) \ - ((((duk_int32_t) (lf_flags)) << 16) >> 24) -#define DUK_LFUNC_FLAGS_GET_LENGTH(lf_flags) \ - (((lf_flags) >> 4) & 0x0f) -#define DUK_LFUNC_FLAGS_GET_NARGS(lf_flags) \ - ((lf_flags) & 0x0f) -#define DUK_LFUNC_FLAGS_PACK(magic,length,nargs) \ - (((magic) & 0xff) << 8) | ((length) << 4) | (nargs) +struct duk_re_compiler_ctx { + duk_hthread *thr; -#define DUK_LFUNC_NARGS_VARARGS 0x0f /* varargs marker */ -#define DUK_LFUNC_NARGS_MIN 0x00 -#define DUK_LFUNC_NARGS_MAX 0x0e /* max, excl. varargs marker */ -#define DUK_LFUNC_LENGTH_MIN 0x00 -#define DUK_LFUNC_LENGTH_MAX 0x0f -#define DUK_LFUNC_MAGIC_MIN (-0x80) -#define DUK_LFUNC_MAGIC_MAX 0x7f + duk_uint32_t re_flags; + duk_lexer_ctx lex; + duk_re_token curr_token; + duk_bufwriter_ctx bw; + duk_uint32_t captures; /* highest capture number emitted so far (used as: ++captures) */ + duk_uint32_t highest_backref; + duk_uint32_t recursion_depth; + duk_uint32_t recursion_limit; + duk_uint32_t nranges; /* internal temporary value, used for char classes */ +}; -/* fastint constants etc */ -#if defined(DUK_USE_FASTINT) -#define DUK_FASTINT_MIN (-0x800000000000LL) -#define DUK_FASTINT_MAX 0x7fffffffffffLL -#define DUK_FASTINT_BITS 48 +/* + * Prototypes + */ -DUK_INTERNAL_DECL void duk_tval_set_number_chkfast(duk_tval *tv, duk_double_t x); -#endif +DUK_INTERNAL_DECL void duk_regexp_compile(duk_hthread *thr); +DUK_INTERNAL_DECL void duk_regexp_create_instance(duk_hthread *thr); +DUK_INTERNAL_DECL void duk_regexp_match(duk_hthread *thr); +DUK_INTERNAL_DECL void duk_regexp_match_force_global(duk_hthread *thr); /* hacky helper for String.prototype.split() */ -#endif /* DUK_TVAL_H_INCLUDED */ +#endif /* DUK_REGEXP_H_INCLUDED */ #line 1 "duk_heaphdr.h" /* * Heap header definition and assorted macros, including ref counting. @@ -6752,6 +3542,7 @@ struct duk_heaphdr_string { #if defined(DUK_USE_REFERENCE_COUNTING) #if defined(DUK_USE_REFCOUNT16) duk_uint16_t h_refcount16; + duk_uint16_t h_strextra16; /* round out to 8 bytes */ #else duk_size_t h_refcount; #endif @@ -6762,8 +3553,8 @@ struct duk_heaphdr_string { #define DUK_HEAPHDR_FLAGS_FLAG_MASK (~DUK_HEAPHDR_FLAGS_TYPE_MASK) /* 2 bits for heap type */ -#define DUK_HEAPHDR_FLAGS_HEAP_START 2 /* 4 heap flags */ -#define DUK_HEAPHDR_FLAGS_USER_START 6 /* 26 user flags */ +#define DUK_HEAPHDR_FLAGS_HEAP_START 2 /* 5 heap flags */ +#define DUK_HEAPHDR_FLAGS_USER_START 7 /* 25 user flags */ #define DUK_HEAPHDR_HEAP_FLAG_NUMBER(n) (DUK_HEAPHDR_FLAGS_HEAP_START + (n)) #define DUK_HEAPHDR_USER_FLAG_NUMBER(n) (DUK_HEAPHDR_FLAGS_USER_START + (n)) @@ -6774,6 +3565,7 @@ struct duk_heaphdr_string { #define DUK_HEAPHDR_FLAG_TEMPROOT DUK_HEAPHDR_HEAP_FLAG(1) /* mark-and-sweep: children not processed */ #define DUK_HEAPHDR_FLAG_FINALIZABLE DUK_HEAPHDR_HEAP_FLAG(2) /* mark-and-sweep: finalizable (on current pass) */ #define DUK_HEAPHDR_FLAG_FINALIZED DUK_HEAPHDR_HEAP_FLAG(3) /* mark-and-sweep: finalized (on previous pass) */ +#define DUK_HEAPHDR_FLAG_READONLY DUK_HEAPHDR_HEAP_FLAG(4) /* read-only object, in code section */ #define DUK_HTYPE_MIN 1 #define DUK_HTYPE_STRING 1 @@ -6884,6 +3676,10 @@ struct duk_heaphdr_string { #define DUK_HEAPHDR_CLEAR_FINALIZED(h) DUK_HEAPHDR_CLEAR_FLAG_BITS((h),DUK_HEAPHDR_FLAG_FINALIZED) #define DUK_HEAPHDR_HAS_FINALIZED(h) DUK_HEAPHDR_CHECK_FLAG_BITS((h),DUK_HEAPHDR_FLAG_FINALIZED) +#define DUK_HEAPHDR_SET_READONLY(h) DUK_HEAPHDR_SET_FLAG_BITS((h),DUK_HEAPHDR_FLAG_READONLY) +#define DUK_HEAPHDR_CLEAR_READONLY(h) DUK_HEAPHDR_CLEAR_FLAG_BITS((h),DUK_HEAPHDR_FLAG_READONLY) +#define DUK_HEAPHDR_HAS_READONLY(h) DUK_HEAPHDR_CHECK_FLAG_BITS((h),DUK_HEAPHDR_FLAG_READONLY) + /* get or set a range of flags; m=first bit number, n=number of bits */ #define DUK_HEAPHDR_GET_FLAG_RANGE(h,m,n) (((h)->h_flags >> (m)) & ((1UL << (n)) - 1UL)) @@ -6907,6 +3703,27 @@ struct duk_heaphdr_string { #define DUK_HEAPHDR_STRING_INIT_NULLS(h) /* currently nop */ +/* + * Assert helpers + */ + +/* Check that prev/next links are consistent: if e.g. h->prev is != NULL, + * h->prev->next should point back to h. + */ +#if defined(DUK_USE_DOUBLE_LINKED_HEAP) && defined(DUK_USE_ASSERTIONS) +#define DUK_ASSERT_HEAPHDR_LINKS(heap,h) do { \ + if ((h) != NULL) { \ + duk_heaphdr *h__prev, *h__next; \ + h__prev = DUK_HEAPHDR_GET_PREV((heap), (h)); \ + h__next = DUK_HEAPHDR_GET_NEXT((heap), (h)); \ + DUK_ASSERT(h__prev == NULL || (DUK_HEAPHDR_GET_NEXT((heap), h__prev) == (h))); \ + DUK_ASSERT(h__next == NULL || (DUK_HEAPHDR_GET_PREV((heap), h__next) == (h))); \ + } \ + } while (0) +#else +#define DUK_ASSERT_HEAPHDR_LINKS(heap,h) do {} while (0) +#endif + /* * Reference counting helper macros. The macros take a thread argument * and must thus always be executed in a specific thread context. The @@ -6920,6 +3737,20 @@ struct duk_heaphdr_string { #if defined(DUK_USE_REFERENCE_COUNTING) +#if defined(DUK_USE_ROM_OBJECTS) +/* With ROM objects "needs refcount update" is true when the value is + * heap allocated and is not a ROM object. + */ +/* XXX: double evaluation for 'tv' argument. */ +#define DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv) \ + (DUK_TVAL_IS_HEAP_ALLOCATED((tv)) && !DUK_HEAPHDR_HAS_READONLY(DUK_TVAL_GET_HEAPHDR((tv)))) +#define DUK_HEAPHDR_NEEDS_REFCOUNT_UPDATE(h) (!DUK_HEAPHDR_HAS_READONLY((h))) +#else /* DUK_USE_ROM_OBJECTS */ +/* Without ROM objects "needs refcount update" == is heap allocated. */ +#define DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv) DUK_TVAL_IS_HEAP_ALLOCATED((tv)) +#define DUK_HEAPHDR_NEEDS_REFCOUNT_UPDATE(h) 1 +#endif /* DUK_USE_ROM_OBJECTS */ + /* Fast variants, inline refcount operations except for refzero handling. * Can be used explicitly when speed is always more important than size. * For a good compiler and a single file build, these are basically the @@ -6928,7 +3759,7 @@ struct duk_heaphdr_string { #define DUK_TVAL_INCREF_FAST(thr,tv) do { \ duk_tval *duk__tv = (tv); \ DUK_ASSERT(duk__tv != NULL); \ - if (DUK_TVAL_IS_HEAP_ALLOCATED(duk__tv)) { \ + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(duk__tv)) { \ duk_heaphdr *duk__h = DUK_TVAL_GET_HEAPHDR(duk__tv); \ DUK_ASSERT(duk__h != NULL); \ DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(duk__h)); \ @@ -6938,7 +3769,7 @@ struct duk_heaphdr_string { #define DUK_TVAL_DECREF_FAST(thr,tv) do { \ duk_tval *duk__tv = (tv); \ DUK_ASSERT(duk__tv != NULL); \ - if (DUK_TVAL_IS_HEAP_ALLOCATED(duk__tv)) { \ + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(duk__tv)) { \ duk_heaphdr *duk__h = DUK_TVAL_GET_HEAPHDR(duk__tv); \ DUK_ASSERT(duk__h != NULL); \ DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(duk__h)); \ @@ -6952,15 +3783,19 @@ struct duk_heaphdr_string { duk_heaphdr *duk__h = (duk_heaphdr *) (h); \ DUK_ASSERT(duk__h != NULL); \ DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(duk__h)); \ - DUK_HEAPHDR_PREINC_REFCOUNT(duk__h); \ + if (DUK_HEAPHDR_NEEDS_REFCOUNT_UPDATE(duk__h)) { \ + DUK_HEAPHDR_PREINC_REFCOUNT(duk__h); \ + } \ } while (0) #define DUK_HEAPHDR_DECREF_FAST(thr,h) do { \ duk_heaphdr *duk__h = (duk_heaphdr *) (h); \ DUK_ASSERT(duk__h != NULL); \ DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(duk__h)); \ DUK_ASSERT(DUK_HEAPHDR_GET_REFCOUNT(duk__h) > 0); \ - if (DUK_HEAPHDR_PREDEC_REFCOUNT(duk__h) == 0) { \ - duk_heaphdr_refzero((thr), duk__h); \ + if (DUK_HEAPHDR_NEEDS_REFCOUNT_UPDATE(duk__h)) { \ + if (DUK_HEAPHDR_PREDEC_REFCOUNT(duk__h) == 0) { \ + duk_heaphdr_refzero((thr), duk__h); \ + } \ } \ } while (0) @@ -7103,6 +3938,9 @@ struct duk_heaphdr_string { DUK_TVAL_SET_FASTINT_U32(tv__dst, (newval)); \ DUK_TVAL_DECREF((thr), &tv__tmp); /* side effects */ \ } while (0) +#else +#define DUK_TVAL_SET_DOUBLE_CAST_UPDREF(thr,tvptr_dst,newval) \ + DUK_TVAL_SET_DOUBLE_UPDREF((thr), (tvptr_dst), (duk_double_t) (newval)) #endif /* DUK_USE_FASTINT */ #define DUK_TVAL_SET_LIGHTFUNC_UPDREF_ALT0(thr,tvptr_dst,lf_v,lf_fp,lf_flags) do { \ @@ -7167,7 +4005,7 @@ struct duk_heaphdr_string { duk_tval *tv__dst, *tv__src; duk_heaphdr *h__obj; \ tv__dst = (tvptr_dst); tv__src = (tvptr_src); \ DUK_TVAL_INCREF_FAST((thr), tv__src); \ - if (DUK_TVAL_IS_HEAP_ALLOCATED(tv__dst)) { \ + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv__dst)) { \ h__obj = DUK_TVAL_GET_HEAPHDR(tv__dst); \ DUK_ASSERT(h__obj != NULL); \ DUK_TVAL_SET_TVAL(tv__dst, tv__src); \ @@ -7190,6 +4028,10 @@ struct duk_heaphdr_string { #define DUK_TVAL_SET_FASTINT_UPDREF DUK_TVAL_SET_FASTINT_UPDREF_ALT0 #define DUK_TVAL_SET_FASTINT_I32_UPDREF DUK_TVAL_SET_FASTINT_I32_UPDREF_ALT0 #define DUK_TVAL_SET_FASTINT_U32_UPDREF DUK_TVAL_SET_FASTINT_U32_UPDREF_ALT0 +#else +#define DUK_TVAL_SET_FASTINT_UPDREF DUK_TVAL_SET_DOUBLE_CAST_UPDREF /* XXX: fast int-to-double */ +#define DUK_TVAL_SET_FASTINT_I32_UPDREF DUK_TVAL_SET_DOUBLE_CAST_UPDREF +#define DUK_TVAL_SET_FASTINT_U32_UPDREF DUK_TVAL_SET_DOUBLE_CAST_UPDREF #endif /* DUK_USE_FASTINT */ #define DUK_TVAL_SET_LIGHTFUNC_UPDREF DUK_TVAL_SET_LIGHTFUNC_UPDREF_ALT0 #define DUK_TVAL_SET_STRING_UPDREF DUK_TVAL_SET_STRING_UPDREF_ALT0 @@ -7300,6 +4142,9 @@ struct duk_heaphdr_string { DUK_TVAL_SET_FASTINT_U32(tv__dst, (newval)); \ DUK_UNREF((thr)); \ } while (0) +#else +#define DUK_TVAL_SET_DOUBLE_CAST_UPDREF(thr,tvptr_dst,newval) \ + DUK_TVAL_SET_DOUBLE_UPDREF((thr), (tvptr_dst), (duk_double_t) (newval)) #endif /* DUK_USE_FASTINT */ #define DUK_TVAL_SET_LIGHTFUNC_UPDREF_ALT0(thr,tvptr_dst,lf_v,lf_fp,lf_flags) do { \ @@ -7351,6 +4196,10 @@ struct duk_heaphdr_string { #define DUK_TVAL_SET_FASTINT_UPDREF DUK_TVAL_SET_FASTINT_UPDREF_ALT0 #define DUK_TVAL_SET_FASTINT_I32_UPDREF DUK_TVAL_SET_FASTINT_I32_UPDREF_ALT0 #define DUK_TVAL_SET_FASTINT_U32_UPDREF DUK_TVAL_SET_FASTINT_U32_UPDREF_ALT0 +#else +#define DUK_TVAL_SET_FASTINT_UPDREF DUK_TVAL_SET_DOUBLE_CAST_UPDREF /* XXX: fast-int-to-double */ +#define DUK_TVAL_SET_FASTINT_I32_UPDREF DUK_TVAL_SET_DOUBLE_CAST_UPDREF +#define DUK_TVAL_SET_FASTINT_U32_UPDREF DUK_TVAL_SET_DOUBLE_CAST_UPDREF #endif /* DUK_USE_FASTINT */ #define DUK_TVAL_SET_LIGHTFUNC_UPDREF DUK_TVAL_SET_LIGHTFUNC_UPDREF_ALT0 #define DUK_TVAL_SET_STRING_UPDREF DUK_TVAL_SET_STRING_UPDREF_ALT0 @@ -7541,6 +4390,24 @@ DUK_INTERNAL_DECL void duk_xdef_prop_stridx_thrower(duk_context *ctx, duk_idx_t /* Set object 'length'. */ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_size_t length); +/* Raw internal valstack access macros: access is unsafe so call site + * must have a guarantee that the index is valid. When that is the case, + * using these macro results in faster and smaller code than duk_get_tval(). + * Both 'ctx' and 'idx' are evaluted multiple times, but only for asserts. + */ +#define DUK_ASSERT_VALID_NEGIDX(ctx,idx) \ + (DUK_ASSERT_EXPR((idx) < 0), DUK_ASSERT_EXPR(duk_is_valid_index((ctx), (idx)))) +#define DUK_ASSERT_VALID_POSIDX(ctx,idx) \ + (DUK_ASSERT_EXPR((idx) >= 0), DUK_ASSERT_EXPR(duk_is_valid_index((ctx), (idx)))) +#define DUK_GET_TVAL_NEGIDX(ctx,idx) \ + (DUK_ASSERT_VALID_NEGIDX((ctx),(idx)), ((duk_hthread *) (ctx))->valstack_top + (idx)) +#define DUK_GET_TVAL_POSIDX(ctx,idx) \ + (DUK_ASSERT_VALID_POSIDX((ctx),(idx)), ((duk_hthread *) (ctx))->valstack_bottom + (idx)) +#define DUK_GET_HOBJECT_NEGIDX(ctx,idx) \ + (DUK_ASSERT_VALID_NEGIDX((ctx),(idx)), DUK_TVAL_GET_OBJECT(((duk_hthread *) (ctx))->valstack_top + (idx))) +#define DUK_GET_HOBJECT_POSIDX(ctx,idx) \ + (DUK_ASSERT_VALID_POSIDX((ctx),(idx)), DUK_TVAL_GET_OBJECT(((duk_hthread *) (ctx))->valstack_bottom + (idx))) + #endif /* DUK_API_INTERNAL_H_INCLUDED */ #line 1 "duk_hstring.h" /* @@ -7583,13 +4450,15 @@ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_siz * needed right now. */ -#define DUK_HSTRING_FLAG_ARRIDX DUK_HEAPHDR_USER_FLAG(0) /* string is a valid array index */ -#define DUK_HSTRING_FLAG_INTERNAL DUK_HEAPHDR_USER_FLAG(1) /* string is internal */ -#define DUK_HSTRING_FLAG_RESERVED_WORD DUK_HEAPHDR_USER_FLAG(2) /* string is a reserved word (non-strict) */ -#define DUK_HSTRING_FLAG_STRICT_RESERVED_WORD DUK_HEAPHDR_USER_FLAG(3) /* string is a reserved word (strict) */ -#define DUK_HSTRING_FLAG_EVAL_OR_ARGUMENTS DUK_HEAPHDR_USER_FLAG(4) /* string is 'eval' or 'arguments' */ -#define DUK_HSTRING_FLAG_EXTDATA DUK_HEAPHDR_USER_FLAG(5) /* string data is external (duk_hstring_external) */ +#define DUK_HSTRING_FLAG_ASCII DUK_HEAPHDR_USER_FLAG(0) /* string is ASCII, clen == blen */ +#define DUK_HSTRING_FLAG_ARRIDX DUK_HEAPHDR_USER_FLAG(1) /* string is a valid array index */ +#define DUK_HSTRING_FLAG_INTERNAL DUK_HEAPHDR_USER_FLAG(2) /* string is internal */ +#define DUK_HSTRING_FLAG_RESERVED_WORD DUK_HEAPHDR_USER_FLAG(3) /* string is a reserved word (non-strict) */ +#define DUK_HSTRING_FLAG_STRICT_RESERVED_WORD DUK_HEAPHDR_USER_FLAG(4) /* string is a reserved word (strict) */ +#define DUK_HSTRING_FLAG_EVAL_OR_ARGUMENTS DUK_HEAPHDR_USER_FLAG(5) /* string is 'eval' or 'arguments' */ +#define DUK_HSTRING_FLAG_EXTDATA DUK_HEAPHDR_USER_FLAG(6) /* string data is external (duk_hstring_external) */ +#define DUK_HSTRING_HAS_ASCII(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_ASCII) #define DUK_HSTRING_HAS_ARRIDX(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_ARRIDX) #define DUK_HSTRING_HAS_INTERNAL(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_INTERNAL) #define DUK_HSTRING_HAS_RESERVED_WORD(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_RESERVED_WORD) @@ -7597,6 +4466,7 @@ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_siz #define DUK_HSTRING_HAS_EVAL_OR_ARGUMENTS(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_EVAL_OR_ARGUMENTS) #define DUK_HSTRING_HAS_EXTDATA(x) DUK_HEAPHDR_CHECK_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_EXTDATA) +#define DUK_HSTRING_SET_ASCII(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_ASCII) #define DUK_HSTRING_SET_ARRIDX(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_ARRIDX) #define DUK_HSTRING_SET_INTERNAL(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_INTERNAL) #define DUK_HSTRING_SET_RESERVED_WORD(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_RESERVED_WORD) @@ -7604,6 +4474,7 @@ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_siz #define DUK_HSTRING_SET_EVAL_OR_ARGUMENTS(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_EVAL_OR_ARGUMENTS) #define DUK_HSTRING_SET_EXTDATA(x) DUK_HEAPHDR_SET_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_EXTDATA) +#define DUK_HSTRING_CLEAR_ASCII(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_ASCII) #define DUK_HSTRING_CLEAR_ARRIDX(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_ARRIDX) #define DUK_HSTRING_CLEAR_INTERNAL(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_INTERNAL) #define DUK_HSTRING_CLEAR_RESERVED_WORD(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_RESERVED_WORD) @@ -7611,7 +4482,12 @@ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_siz #define DUK_HSTRING_CLEAR_EVAL_OR_ARGUMENTS(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_EVAL_OR_ARGUMENTS) #define DUK_HSTRING_CLEAR_EXTDATA(x) DUK_HEAPHDR_CLEAR_FLAG_BITS(&(x)->hdr, DUK_HSTRING_FLAG_EXTDATA) +#if 0 /* Slightly smaller code without explicit flag, but explicit flag + * is very useful when 'clen' is dropped. + */ #define DUK_HSTRING_IS_ASCII(x) (DUK_HSTRING_GET_BYTELEN((x)) == DUK_HSTRING_GET_CHARLEN((x))) +#endif +#define DUK_HSTRING_IS_ASCII(x) DUK_HSTRING_HAS_ASCII((x)) #define DUK_HSTRING_IS_EMPTY(x) (DUK_HSTRING_GET_BYTELEN((x)) == 0) #if defined(DUK_USE_STRHASH16) @@ -7627,15 +4503,22 @@ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_siz #endif #if defined(DUK_USE_STRLEN16) -#define DUK_HSTRING_GET_BYTELEN(x) ((x)->blen16) +#define DUK_HSTRING_GET_BYTELEN(x) ((x)->hdr.h_strextra16) #define DUK_HSTRING_SET_BYTELEN(x,v) do { \ - (x)->blen16 = (v); \ + (x)->hdr.h_strextra16 = (v); \ } while (0) +#if defined(DUK_USE_HSTRING_CLEN) #define DUK_HSTRING_GET_CHARLEN(x) ((x)->clen16) #define DUK_HSTRING_SET_CHARLEN(x,v) do { \ (x)->clen16 = (v); \ } while (0) #else +#define DUK_HSTRING_GET_CHARLEN(x) duk_hstring_get_charlen((x)) +#define DUK_HSTRING_SET_CHARLEN(x,v) do { \ + DUK_ASSERT(0); /* should never be called */ \ + } while (0) +#endif +#else #define DUK_HSTRING_GET_BYTELEN(x) ((x)->blen) #define DUK_HSTRING_SET_BYTELEN(x,v) do { \ (x)->blen = (v); \ @@ -7651,7 +4534,7 @@ DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_siz ((x)->extdata) #define DUK_HSTRING_GET_DATA(x) \ (DUK_HSTRING_HAS_EXTDATA((x)) ? \ - DUK_HSTRING_GET_EXTDATA((duk_hstring_external *) (x)) : ((const duk_uint8_t *) ((x) + 1))) + DUK_HSTRING_GET_EXTDATA((const duk_hstring_external *) (x)) : ((const duk_uint8_t *) ((x) + 1))) #else #define DUK_HSTRING_GET_DATA(x) \ ((const duk_uint8_t *) ((x) + 1)) @@ -7698,14 +4581,18 @@ struct duk_hstring { /* length in bytes (not counting NUL term) */ #if defined(DUK_USE_STRLEN16) - duk_uint16_t blen16; + /* placed in duk_heaphdr_string */ #else duk_uint32_t blen; #endif /* length in codepoints (must be E5 compatible) */ #if defined(DUK_USE_STRLEN16) +#if defined(DUK_USE_HSTRING_CLEN) duk_uint16_t clen16; +#else + /* computed live */ +#endif #else duk_uint32_t clen; #endif @@ -7737,6 +4624,10 @@ struct duk_hstring_external { DUK_INTERNAL_DECL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr, duk_hstring *h, duk_uint_t pos); +#if !defined(DUK_USE_HSTRING_CLEN) +DUK_INTERNAL_DECL duk_size_t duk_hstring_get_charlen(duk_hstring *h); +#endif + #endif /* DUK_HSTRING_H_INCLUDED */ #line 1 "duk_hobject.h" /* @@ -7773,7 +4664,9 @@ DUK_INTERNAL_DECL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr #ifndef DUK_HOBJECT_H_INCLUDED #define DUK_HOBJECT_H_INCLUDED -/* there are currently 26 flag bits available */ +/* Object flag. There are currently 26 flag bits available. Make sure + * this stays in sync with debugger object inspection code. + */ #define DUK_HOBJECT_FLAG_EXTENSIBLE DUK_HEAPHDR_USER_FLAG(0) /* object is extensible */ #define DUK_HOBJECT_FLAG_CONSTRUCTABLE DUK_HEAPHDR_USER_FLAG(1) /* object is constructable */ #define DUK_HOBJECT_FLAG_BOUND DUK_HEAPHDR_USER_FLAG(2) /* object established using Function.prototype.bind() */ @@ -7794,7 +4687,7 @@ DUK_INTERNAL_DECL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr #define DUK_HOBJECT_FLAG_EXOTIC_DUKFUNC DUK_HEAPHDR_USER_FLAG(18) /* Duktape/C (nativefunction) object, exotic 'length' */ #define DUK_HOBJECT_FLAG_EXOTIC_PROXYOBJ DUK_HEAPHDR_USER_FLAG(19) /* 'Proxy' object */ -#define DUK_HOBJECT_FLAG_CLASS_BASE DUK_HEAPHDR_USER_FLAG_NUMBER(21) +#define DUK_HOBJECT_FLAG_CLASS_BASE DUK_HEAPHDR_USER_FLAG_NUMBER(20) #define DUK_HOBJECT_FLAG_CLASS_BITS 5 #define DUK_HOBJECT_GET_CLASS_NUMBER(h) \ @@ -8015,6 +4908,10 @@ DUK_INTERNAL_DECL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr DUK_PROPDESC_FLAG_ENUMERABLE | \ DUK_PROPDESC_FLAG_CONFIGURABLE) +/* flags for duk_hobject_get_own_propdesc() and variants */ +#define DUK_GETDESC_FLAG_PUSH_VALUE (1 << 0) /* push value to stack */ +#define DUK_GETDESC_FLAG_IGNORE_PROTOLOOP (1 << 1) /* don't throw for prototype loop */ + /* * Macro for object validity check * @@ -8197,7 +5094,7 @@ DUK_INTERNAL_DECL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr #error invalid hobject layout defines #endif /* hobject property layout */ -#define DUK_HOBJECT_E_ALLOC_SIZE(h) \ +#define DUK_HOBJECT_P_ALLOC_SIZE(h) \ DUK_HOBJECT_P_COMPUTE_SIZE(DUK_HOBJECT_GET_ESIZE((h)), DUK_HOBJECT_GET_ASIZE((h)), DUK_HOBJECT_GET_HSIZE((h))) #define DUK_HOBJECT_E_GET_KEY(heap,h,i) (DUK_HOBJECT_E_GET_KEY_BASE((heap), (h))[(i)]) @@ -8576,6 +5473,7 @@ DUK_INTERNAL_DECL void duk_hobject_find_existing_entry(duk_heap *heap, duk_hobje DUK_INTERNAL_DECL duk_tval *duk_hobject_find_existing_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_hstring *key); DUK_INTERNAL_DECL duk_tval *duk_hobject_find_existing_entry_tval_ptr_and_attrs(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *out_attrs); DUK_INTERNAL_DECL duk_tval *duk_hobject_find_existing_array_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_uarridx_t i); +DUK_INTERNAL_DECL duk_bool_t duk_hobject_get_own_propdesc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags); /* XXX: when optimizing for guaranteed property slots, use a guaranteed * slot for internal value; this call can then access it directly. @@ -9189,6 +6087,10 @@ DUK_INTERNAL_DECL void duk_hbufferobject_validated_write(duk_context *ctx, duk_h * Thread defines */ +#if defined(DUK_USE_ROM_STRINGS) +#define DUK_HTHREAD_GET_STRING(thr,idx) \ + ((duk_hstring *) DUK_LOSE_CONST(duk_rom_strings_stridx[(idx)])) +#else /* DUK_USE_ROM_STRINGS */ #if defined(DUK_USE_HEAPPTR16) #define DUK_HTHREAD_GET_STRING(thr,idx) \ ((duk_hstring *) DUK_USE_HEAPPTR_DEC16((thr)->heap->heap_udata, (thr)->strs16[(idx)])) @@ -9196,6 +6098,7 @@ DUK_INTERNAL_DECL void duk_hbufferobject_validated_write(duk_context *ctx, duk_h #define DUK_HTHREAD_GET_STRING(thr,idx) \ ((thr)->strs[(idx)]) #endif +#endif /* DUK_USE_ROM_STRINGS */ #define DUK_HTHREAD_GET_CURRENT_ACTIVATION(thr) (&(thr)->callstack[(thr)->callstack_top - 1]) @@ -9393,15 +6296,23 @@ struct duk_hthread { * is no intermediate structure for a thread group / compartment. * This takes quite a lot of space, currently 43x4 = 172 bytes on * 32-bit platforms. + * + * In some cases the builtins array could be ROM based, but it's + * sometimes edited (e.g. for sandboxing) so it's better to keep + * this array in RAM. */ duk_hobject *builtins[DUK_NUM_BUILTINS]; /* Convenience copies from heap/vm for faster access. */ +#if defined(DUK_USE_ROM_STRINGS) + /* No field needed when strings are in ROM. */ +#else #if defined(DUK_USE_HEAPPTR16) duk_uint16_t *strs16; #else duk_hstring **strs; #endif +#endif }; /* @@ -9498,7 +6409,10 @@ DUK_INTERNAL_DECL void duk_hthread_sync_and_null_currpc(duk_hthread *thr); /* size stored in duk_heaphdr unused flag bits */ #define DUK_HBUFFER_GET_SIZE(x) ((x)->hdr.h_flags >> 16) #define DUK_HBUFFER_SET_SIZE(x,v) do { \ - (x)->hdr.h_flags = ((x)->hdr.h_flags & 0x0000ffffUL) | ((v) << 16); \ + duk_size_t duk__v; \ + duk__v = (v); \ + DUK_ASSERT(duk__v <= 0xffffUL); \ + (x)->hdr.h_flags = ((x)->hdr.h_flags & 0x0000ffffUL) | (((duk_uint32_t) duk__v) << 16); \ } while (0) #define DUK_HBUFFER_ADD_SIZE(x,dv) do { \ (x)->hdr.h_flags += ((dv) << 16); \ @@ -9920,6 +6834,10 @@ DUK_INTERNAL_DECL void duk_hbuffer_reset(duk_hthread *thr, duk_hbuffer_dynamic * */ /* heap string indices are autogenerated in duk_strings.h */ +#if defined(DUK_USE_ROM_STRINGS) +#define DUK_HEAP_GET_STRING(heap,idx) \ + ((duk_hstring *) DUK_LOSE_CONST(duk_rom_strings_stridx[(idx)])) +#else /* DUK_USE_ROM_STRINGS */ #if defined(DUK_USE_HEAPPTR16) #define DUK_HEAP_GET_STRING(heap,idx) \ ((duk_hstring *) DUK_USE_HEAPPTR_DEC16((heap)->heap_udata, (heap)->strs16[(idx)])) @@ -9927,6 +6845,7 @@ DUK_INTERNAL_DECL void duk_hbuffer_reset(duk_hthread *thr, duk_hbuffer_dynamic * #define DUK_HEAP_GET_STRING(heap,idx) \ ((heap)->strs[(idx)]) #endif +#endif /* DUK_USE_ROM_STRINGS */ /* * Raw memory calls: relative to heap, but no GC interaction @@ -10041,6 +6960,7 @@ struct duk_breakpoint { (heap)->dbg_state_dirty = 1; \ DUK_HEAP_CLEAR_STEP_STATE((heap)); \ } while (0) +#define DUK_HEAP_IS_PAUSED(heap) ((heap)->dbg_paused) #endif /* DUK_USE_DEBUGGER_SUPPORT */ /* @@ -10064,9 +6984,7 @@ struct duk_strcache { */ struct duk_ljstate { -#if !defined(DUK_USE_CPP_EXCEPTIONS) duk_jmpbuf *jmpbuf_ptr; /* current setjmp() catchpoint */ -#endif duk_small_uint_t type; /* longjmp type */ duk_bool_t iserror; /* isError flag for yield */ duk_tval value1; /* 1st related value (type specific) */ @@ -10195,6 +7113,7 @@ struct duk_heap { duk_debug_peek_function dbg_peek_cb; duk_debug_read_flush_function dbg_read_flush_cb; duk_debug_write_flush_function dbg_write_flush_cb; + duk_debug_request_function dbg_request_cb; duk_debug_detached_function dbg_detached_cb; void *dbg_udata; @@ -10247,11 +7166,15 @@ struct duk_heap { duk_strcache strcache[DUK_HEAP_STRCACHE_SIZE]; /* built-in strings */ +#if defined(DUK_USE_ROM_STRINGS) + /* No field needed when strings are in ROM. */ +#else #if defined(DUK_USE_HEAPPTR16) duk_uint16_t strs16[DUK_HEAP_NUM_STRINGS]; #else duk_hstring *strs[DUK_HEAP_NUM_STRINGS]; #endif +#endif }; /* @@ -10353,44 +7276,77 @@ DUK_INTERNAL_DECL duk_uint32_t duk_heap_hashstring(duk_heap *heap, const duk_uin /* Debugger protocol version is defined in the public API header. */ -#define DUK_DBG_MARKER_EOM 0x00 -#define DUK_DBG_MARKER_REQUEST 0x01 -#define DUK_DBG_MARKER_REPLY 0x02 -#define DUK_DBG_MARKER_ERROR 0x03 -#define DUK_DBG_MARKER_NOTIFY 0x04 - -#define DUK_DBG_ERR_UNKNOWN 0x00 -#define DUK_DBG_ERR_UNSUPPORTED 0x01 -#define DUK_DBG_ERR_TOOMANY 0x02 -#define DUK_DBG_ERR_NOTFOUND 0x03 - -/* Initiated by Duktape */ -#define DUK_DBG_CMD_STATUS 0x01 -#define DUK_DBG_CMD_PRINT 0x02 -#define DUK_DBG_CMD_ALERT 0x03 -#define DUK_DBG_CMD_LOG 0x04 -#define DUK_DBG_CMD_THROW 0x05 -#define DUK_DBG_CMD_DETACHING 0x06 - -/* Initiated by debug client */ -#define DUK_DBG_CMD_BASICINFO 0x10 -#define DUK_DBG_CMD_TRIGGERSTATUS 0x11 -#define DUK_DBG_CMD_PAUSE 0x12 -#define DUK_DBG_CMD_RESUME 0x13 -#define DUK_DBG_CMD_STEPINTO 0x14 -#define DUK_DBG_CMD_STEPOVER 0x15 -#define DUK_DBG_CMD_STEPOUT 0x16 -#define DUK_DBG_CMD_LISTBREAK 0x17 -#define DUK_DBG_CMD_ADDBREAK 0x18 -#define DUK_DBG_CMD_DELBREAK 0x19 -#define DUK_DBG_CMD_GETVAR 0x1a -#define DUK_DBG_CMD_PUTVAR 0x1b -#define DUK_DBG_CMD_GETCALLSTACK 0x1c -#define DUK_DBG_CMD_GETLOCALS 0x1d -#define DUK_DBG_CMD_EVAL 0x1e -#define DUK_DBG_CMD_DETACH 0x1f -#define DUK_DBG_CMD_DUMPHEAP 0x20 -#define DUK_DBG_CMD_GETBYTECODE 0x21 +/* Initial bytes for markers. */ +#define DUK_DBG_IB_EOM 0x00 +#define DUK_DBG_IB_REQUEST 0x01 +#define DUK_DBG_IB_REPLY 0x02 +#define DUK_DBG_IB_ERROR 0x03 +#define DUK_DBG_IB_NOTIFY 0x04 + +/* Other initial bytes. */ +#define DUK_DBG_IB_INT4 0x10 +#define DUK_DBG_IB_STR4 0x11 +#define DUK_DBG_IB_STR2 0x12 +#define DUK_DBG_IB_BUF4 0x13 +#define DUK_DBG_IB_BUF2 0x14 +#define DUK_DBG_IB_UNUSED 0x15 +#define DUK_DBG_IB_UNDEFINED 0x16 +#define DUK_DBG_IB_NULL 0x17 +#define DUK_DBG_IB_TRUE 0x18 +#define DUK_DBG_IB_FALSE 0x19 +#define DUK_DBG_IB_NUMBER 0x1a +#define DUK_DBG_IB_OBJECT 0x1b +#define DUK_DBG_IB_POINTER 0x1c +#define DUK_DBG_IB_LIGHTFUNC 0x1d +#define DUK_DBG_IB_HEAPPTR 0x1e +/* The short string/integer initial bytes starting from 0x60 don't have + * defines now. + */ + +/* Error codes. */ +#define DUK_DBG_ERR_UNKNOWN 0x00 +#define DUK_DBG_ERR_UNSUPPORTED 0x01 +#define DUK_DBG_ERR_TOOMANY 0x02 +#define DUK_DBG_ERR_NOTFOUND 0x03 +#define DUK_DBG_ERR_APPLICATION 0x04 + +/* Commands and notifys initiated by Duktape. */ +#define DUK_DBG_CMD_STATUS 0x01 +#define DUK_DBG_CMD_PRINT 0x02 +#define DUK_DBG_CMD_ALERT 0x03 +#define DUK_DBG_CMD_LOG 0x04 +#define DUK_DBG_CMD_THROW 0x05 +#define DUK_DBG_CMD_DETACHING 0x06 +#define DUK_DBG_CMD_APPNOTIFY 0x07 + +/* Commands initiated by debug client. */ +#define DUK_DBG_CMD_BASICINFO 0x10 +#define DUK_DBG_CMD_TRIGGERSTATUS 0x11 +#define DUK_DBG_CMD_PAUSE 0x12 +#define DUK_DBG_CMD_RESUME 0x13 +#define DUK_DBG_CMD_STEPINTO 0x14 +#define DUK_DBG_CMD_STEPOVER 0x15 +#define DUK_DBG_CMD_STEPOUT 0x16 +#define DUK_DBG_CMD_LISTBREAK 0x17 +#define DUK_DBG_CMD_ADDBREAK 0x18 +#define DUK_DBG_CMD_DELBREAK 0x19 +#define DUK_DBG_CMD_GETVAR 0x1a +#define DUK_DBG_CMD_PUTVAR 0x1b +#define DUK_DBG_CMD_GETCALLSTACK 0x1c +#define DUK_DBG_CMD_GETLOCALS 0x1d +#define DUK_DBG_CMD_EVAL 0x1e +#define DUK_DBG_CMD_DETACH 0x1f +#define DUK_DBG_CMD_DUMPHEAP 0x20 +#define DUK_DBG_CMD_GETBYTECODE 0x21 +#define DUK_DBG_CMD_APPREQUEST 0x22 +#define DUK_DBG_CMD_GETHEAPOBJINFO 0x23 +#define DUK_DBG_CMD_GETOBJPROPDESC 0x24 +#define DUK_DBG_CMD_GETOBJPROPDESCRANGE 0x25 + +/* The low 8 bits map directly to duk_hobject.h DUK_PROPDESC_FLAG_xxx. + * The remaining flags are specific to the debugger. + */ +#define DUK_DBG_PROPFLAG_INTERNAL (1 << 8) #if defined(DUK_USE_DEBUGGER_SUPPORT) DUK_INTERNAL_DECL void duk_debug_do_detach(duk_heap *heap); @@ -10408,12 +7364,22 @@ DUK_INTERNAL_DECL duk_hstring *duk_debug_read_hstring(duk_hthread *thr); /* XXX: exposed duk_debug_read_pointer */ /* XXX: exposed duk_debug_read_buffer */ /* XXX: exposed duk_debug_read_hbuffer */ -DUK_INTERNAL_DECL void duk_debug_read_tval(duk_hthread *thr); +#if 0 +DUK_INTERNAL_DECL duk_heaphdr *duk_debug_read_heapptr(duk_hthread *thr); +#endif +#if defined(DUK_USE_DEBUGGER_INSPECT) +DUK_INTERNAL_DECL duk_heaphdr *duk_debug_read_any_ptr(duk_hthread *thr); +#endif +DUK_INTERNAL_DECL duk_tval *duk_debug_read_tval(duk_hthread *thr); DUK_INTERNAL_DECL void duk_debug_write_bytes(duk_hthread *thr, const duk_uint8_t *data, duk_size_t length); DUK_INTERNAL_DECL void duk_debug_write_byte(duk_hthread *thr, duk_uint8_t x); DUK_INTERNAL_DECL void duk_debug_write_unused(duk_hthread *thr); DUK_INTERNAL_DECL void duk_debug_write_undefined(duk_hthread *thr); +#if defined(DUK_USE_DEBUGGER_INSPECT) +DUK_INTERNAL_DECL void duk_debug_write_null(duk_hthread *thr); +#endif +DUK_INTERNAL_DECL void duk_debug_write_boolean(duk_hthread *thr, duk_uint_t val); DUK_INTERNAL_DECL void duk_debug_write_int(duk_hthread *thr, duk_int32_t x); DUK_INTERNAL_DECL void duk_debug_write_uint(duk_hthread *thr, duk_uint32_t x); DUK_INTERNAL_DECL void duk_debug_write_string(duk_hthread *thr, const char *data, duk_size_t length); @@ -10422,12 +7388,11 @@ DUK_INTERNAL_DECL void duk_debug_write_hstring(duk_hthread *thr, duk_hstring *h) DUK_INTERNAL_DECL void duk_debug_write_buffer(duk_hthread *thr, const char *data, duk_size_t length); DUK_INTERNAL_DECL void duk_debug_write_hbuffer(duk_hthread *thr, duk_hbuffer *h); DUK_INTERNAL_DECL void duk_debug_write_pointer(duk_hthread *thr, void *ptr); -#if defined(DUK_USE_DEBUGGER_DUMPHEAP) +#if defined(DUK_USE_DEBUGGER_DUMPHEAP) || defined(DUK_USE_DEBUGGER_INSPECT) DUK_INTERNAL_DECL void duk_debug_write_heapptr(duk_hthread *thr, duk_heaphdr *h); #endif DUK_INTERNAL_DECL void duk_debug_write_hobject(duk_hthread *thr, duk_hobject *obj); DUK_INTERNAL_DECL void duk_debug_write_tval(duk_hthread *thr, duk_tval *tv); - #if 0 /* unused */ DUK_INTERNAL_DECL void duk_debug_write_request(duk_hthread *thr, duk_small_uint_t command); #endif @@ -10671,58 +7636,97 @@ DUK_INTERNAL_DECL duk_bool_t duk_fb_is_full(duk_fixedbuffer *fb); * catchpoint record in the duk_heap. The 'curr_thread' of the duk_heap * identifies the throwing thread. * - * Error formatting is not always necessary but there are no separate calls - * (to minimize code size). Error object creation will consume a considerable - * amount of time, compared to which formatting is probably trivial. Note - * that special formatting (provided by DUK_DEBUG macros) is NOT available. + * Error formatting is usually unnecessary. The error macros provide a + * zero argument version (no formatting) and separate macros for small + * argument counts. Variadic macros are not used to avoid portability + * issues and avoid the need for stash-based workarounds when they're not + * available. Vararg calls are avoided for non-formatted error calls + * because vararg call sites are larger than normal, and there are a lot + * of call sites with no formatting. + * + * Note that special formatting provided by debug macros is NOT available. * * The _RAW variants allow the caller to specify file and line. This makes * it easier to write checked calls which want to use the call site of the * checked function, not the error macro call inside the checked function. - * - * We prefer the standard variadic macros; if they are not available, we - * fall back to awkward hacks. */ #if defined(DUK_USE_VERBOSE_ERRORS) -#if defined(DUK_USE_VARIADIC_MACROS) - -/* __VA_ARGS__ has comma issues for empty lists, so we mandate at least 1 argument for '...' (format string) */ -#define DUK_ERROR(thr,err,...) duk_err_handle_error(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (err), __VA_ARGS__) -#define DUK_ERROR_RAW(file,line,thr,err,...) duk_err_handle_error((file), (line), (thr), (err), __VA_ARGS__) +/* Because there are quite many call sites, pack error code (require at most + * 8-bit) into a single argument. + */ +#define DUK_ERROR(thr,err,msg) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) DUK_LINE_MACRO; \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error((thr), DUK_FILE_MACRO, (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (msg)); \ + } while (0) +#define DUK_ERROR_RAW(thr,file,line,err,msg) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) (line); \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error((thr), (file), (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (msg)); \ + } while (0) -#else /* DUK_USE_VARIADIC_MACROS */ +#define DUK_ERROR_FMT1(thr,err,fmt,arg1) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) DUK_LINE_MACRO; \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), DUK_FILE_MACRO, (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1)); \ + } while (0) +#define DUK_ERROR_RAW_FMT1(thr,file,line,err,fmt,arg1) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) (line); \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), (file), (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1)); \ + } while (0) -/* Parameter passing here is not thread safe. We rely on the __FILE__ - * pointer being a constant which can be passed through a global. - */ +#define DUK_ERROR_FMT2(thr,err,fmt,arg1,arg2) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) DUK_LINE_MACRO; \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), DUK_FILE_MACRO, (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1), (arg2)); \ + } while (0) +#define DUK_ERROR_RAW_FMT2(thr,file,line,err,fmt,arg1,arg2) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) (line); \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), (file), (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1), (arg2)); \ + } while (0) -#define DUK_ERROR \ - (void) (duk_err_file_stash = (const char *) DUK_FILE_MACRO, \ - duk_err_line_stash = (duk_int_t) DUK_LINE_MACRO, \ - duk_err_handle_error_stash) /* arguments follow */ -#define DUK_ERROR_RAW duk_err_handle_error +#define DUK_ERROR_FMT3(thr,err,fmt,arg1,arg2,arg3) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) DUK_LINE_MACRO; \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), DUK_FILE_MACRO, (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1), (arg2), (arg3)); \ + } while (0) +#define DUK_ERROR_RAW_FMT3(thr,file,line,err,fmt,arg1,arg2,arg3) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) (line); \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), (file), (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1), (arg2), (arg3)); \ + } while (0) -#endif /* DUK_USE_VARIADIC_MACROS */ +#define DUK_ERROR_FMT4(thr,err,fmt,arg1,arg2,arg3,arg4) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) DUK_LINE_MACRO; \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), DUK_FILE_MACRO, (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1), (arg2), (arg3), (arg4)); \ + } while (0) +#define DUK_ERROR_RAW_FMT4(thr,file,line,err,fmt,arg1,arg2,arg3,arg4) do { \ + duk_errcode_t duk__err = (err); duk_int_t duk__line = (duk_int_t) (line); \ + DUK_ASSERT(duk__err >= 0 && duk__err <= 0xff); DUK_ASSERT(duk__line >= 0 && duk__line <= 0x00ffffffL); \ + duk_err_handle_error_fmt((thr), (file), (((duk_uint_t) duk__err) << 24) | ((duk_uint_t) duk__line), (fmt), (arg1), (arg2), (arg3), (arg4)); \ + } while (0) #else /* DUK_USE_VERBOSE_ERRORS */ -#if defined(DUK_USE_VARIADIC_MACROS) +#define DUK_ERROR(thr,err,msg) duk_err_handle_error((thr), (err)) +#define DUK_ERROR_RAW(thr,file,line,err,msg) duk_err_handle_error((thr), (err)) -#define DUK_ERROR(thr,err,...) duk_err_handle_error((thr), (err)) -#define DUK_ERROR_RAW(file,line,thr,err,...) duk_err_handle_error((thr), (err)) +#define DUK_ERROR_FMT1(thr,err,fmt,arg1) DUK_ERROR((thr),(err),(fmt)) +#define DUK_ERROR_RAW_FMT1(thr,file,line,err,fmt,arg1) DUK_ERROR_RAW((thr),(file),(line),(err),(fmt)) -#else /* DUK_USE_VARIADIC_MACROS */ +#define DUK_ERROR_FMT2(thr,err,fmt,arg1,arg2) DUK_ERROR((thr),(err),(fmt)) +#define DUK_ERROR_RAW_FMT2(thr,file,line,err,fmt,arg1,arg2) DUK_ERROR_RAW((thr),(file),(line),(err),(fmt)) -/* This is sub-optimal because arguments will be passed but ignored, and the strings - * will go into the object file. Can't think of how to do this portably and still - * relatively conveniently. - */ -#define DUK_ERROR duk_err_handle_error_nonverbose1 -#define DUK_ERROR_RAW duk_err_handle_error_nonverbose2 +#define DUK_ERROR_FMT3(thr,err,fmt,arg1,arg2,arg3) DUK_ERROR((thr),(err),(fmt)) +#define DUK_ERROR_RAW_FMT3(thr,file,line,err,fmt,arg1,arg2,arg3) DUK_ERROR_RAW((thr),(file),(line),(err),(fmt)) -#endif /* DUK_USE_VARIADIC_MACROS */ +#define DUK_ERROR_FMT4(thr,err,fmt,arg1,arg2,arg3,arg4) DUK_ERROR((thr),(err),(fmt)) +#define DUK_ERROR_RAW_FMT4(thr,file,line,err,fmt,arg1,arg2,arg3,arg4) DUK_ERROR_RAW((thr),(file),(line),(err),(fmt)) #endif /* DUK_USE_VERBOSE_ERRORS */ @@ -10857,65 +7861,127 @@ DUK_INTERNAL_DECL duk_bool_t duk_fb_is_full(duk_fixedbuffer *fb); * The goal is to provide verbose and configurable error messages. Call * sites should be clean in source code and compile to a small footprint. * Small footprint is also useful for performance because small cold paths - * reduce code cache pressure. + * reduce code cache pressure. Adding macros here only makes sense if there + * are enough call sites to get concrete benefits. */ #if defined(DUK_USE_VERBOSE_ERRORS) +/* Verbose errors with key/value summaries (non-paranoid) or without key/value + * summaries (paranoid, for some security sensitive environments), the paranoid + * vs. non-paranoid distinction affects only a few specific errors. + */ #if defined(DUK_USE_PARANOID_ERRORS) -/* Verbose but paranoid errors. */ - #define DUK_ERROR_REQUIRE_TYPE_INDEX(thr,index,expectname,lowmemstr) do { \ - duk_err_require_type_index(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (index), (expectname)); \ + duk_err_require_type_index((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (index), (expectname)); \ } while (0) -#else -/* Verbose errors with key/value summaries. */ - +#else /* DUK_USE_PARANOID_ERRORS */ #define DUK_ERROR_REQUIRE_TYPE_INDEX(thr,index,expectname,lowmemstr) do { \ - duk_err_require_type_index(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (index), (expectname)); \ + duk_err_require_type_index((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (index), (expectname)); \ } while (0) -#endif +#endif /* DUK_USE_PARANOID_ERRORS */ + +#define DUK_ERROR_UNIMPLEMENTED(thr,msg) do { \ + DUK_ERROR((thr), DUK_ERR_UNIMPLEMENTED_ERROR, (msg)); \ + } while (0) +#define DUK_ERROR_UNIMPLEMENTED_DEFMSG(thr) do { \ + duk_err_unimplemented_defmsg((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO); \ + } while (0) +#define DUK_ERROR_UNSUPPORTED(thr,msg) do { \ + DUK_ERROR((thr), DUK_ERR_UNSUPPORTED_ERROR, (msg)); \ + } while (0) +#define DUK_ERROR_UNSUPPORTED_DEFMSG(thr) do { \ + duk_err_unsupported_defmsg((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO); \ + } while (0) +#define DUK_ERROR_INTERNAL(thr,msg) do { \ + duk_err_internal((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (msg)); \ + } while (0) +#define DUK_ERROR_INTERNAL_DEFMSG(thr) do { \ + duk_err_internal_defmsg((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO); \ + } while (0) +#define DUK_ERROR_ALLOC(thr,msg) do { \ + duk_err_alloc((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (msg)); \ + } while (0) +#define DUK_ERROR_ALLOC_DEFMSG(thr) do { \ + DUK_ERROR_ALLOC((thr), DUK_STR_ALLOC_FAILED); \ + } while (0) +/* DUK_ERR_ASSERTION_ERROR: no macros needed */ #define DUK_ERROR_API_INDEX(thr,index) do { \ - duk_err_api_index(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (index)); \ + duk_err_api_index((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (index)); \ } while (0) #define DUK_ERROR_API(thr,msg) do { \ - duk_err_api(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (msg)); \ + duk_err_api((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (msg)); \ } while (0) -#else -/* Non-verbose errors for low memory targets. */ +/* DUK_ERR_UNCAUGHT_ERROR: no macros needed */ +/* DUK_ERR_ERROR: no macros needed */ +/* DUK_ERR_EVAL: no macros needed */ +#define DUK_ERROR_RANGE(thr,msg) do { \ + duk_err_range((thr), DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (msg)); \ + } while (0) +/* DUK_ERR_REFERENCE_ERROR: no macros needed */ +#define DUK_ERROR_SYNTAX(thr,msg) do { \ + DUK_ERROR((thr), DUK_ERR_SYNTAX_ERROR, (msg)); \ + } while (0) +#define DUK_ERROR_TYPE(thr,msg) do { \ + DUK_ERROR((thr), DUK_ERR_TYPE_ERROR, (msg)); \ + } while (0) +/* DUK_ERR_URI_ERROR: no macros needed */ +#else /* DUK_USE_VERBOSE_ERRORS */ +/* Non-verbose errors for low memory targets: no file, line, or message. */ #define DUK_ERROR_REQUIRE_TYPE_INDEX(thr,index,expectname,lowmemstr) do { \ - duk_err_require_type_index(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (lowmemstr)); \ + duk_err_type((thr)); \ + } while (0) + +#define DUK_ERROR_UNIMPLEMENTED(thr,msg) do { \ + duk_err_unimplemented((thr)); \ + } while (0) +#define DUK_ERROR_UNIMPLEMENTED_DEFMSG(thr) do { \ + duk_err_unimplemented((thr)); \ + } while (0) +#define DUK_ERROR_UNSUPPORTED(thr,msg) do { \ + duk_err_unsupported((thr)); \ + } while (0) +#define DUK_ERROR_UNSUPPORTED_DEFMSG(thr) do { \ + duk_err_unsupported((thr)); \ + } while (0) +#define DUK_ERROR_INTERNAL(thr,msg) do { \ + duk_err_internal((thr)); \ + } while (0) +#define DUK_ERROR_INTERNAL_DEFMSG(thr) do { \ + duk_err_internal((thr)); \ + } while (0) +#define DUK_ERROR_ALLOC(thr,msg) do { \ + duk_err_alloc((thr)); \ + } while (0) +#define DUK_ERROR_ALLOC_DEFMSG(thr) do { \ + duk_err_alloc((thr)); \ } while (0) #define DUK_ERROR_API_INDEX(thr,index) do { \ - duk_err_api_index(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr)); \ + duk_err_api((thr)); \ } while (0) #define DUK_ERROR_API(thr,msg) do { \ - duk_err_api(DUK_FILE_MACRO, (duk_int_t) DUK_LINE_MACRO, (thr), (msg)); \ + duk_err_api((thr)); \ } while (0) -#endif +#define DUK_ERROR_RANGE(thr,msg) do { \ + duk_err_range((thr)); \ + } while (0) +#define DUK_ERROR_SYNTAX(thr,msg) do { \ + duk_err_syntax((thr)); \ + } while (0) +#define DUK_ERROR_TYPE(thr,msg) do { \ + duk_err_type((thr)); \ + } while (0) +#endif /* DUK_USE_VERBOSE_ERRORS */ /* * Prototypes */ #if defined(DUK_USE_VERBOSE_ERRORS) -#if defined(DUK_USE_VARIADIC_MACROS) -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, ...)); -#else /* DUK_USE_VARIADIC_MACROS */ -#if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL const char *duk_err_file_stash; -DUK_INTERNAL_DECL duk_int_t duk_err_line_stash; -#endif /* !DUK_SINGLE_FILE */ -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, ...)); -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error_stash(duk_hthread *thr, duk_errcode_t code, const char *fmt, ...)); -#endif /* DUK_USE_VARIADIC_MACROS */ +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error(duk_hthread *thr, const char *filename, duk_uint_t line_and_code, const char *msg)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error_fmt(duk_hthread *thr, const char *filename, duk_uint_t line_and_code, const char *fmt, ...)); #else /* DUK_USE_VERBOSE_ERRORS */ -#if defined(DUK_USE_VARIADIC_MACROS) DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error(duk_hthread *thr, duk_errcode_t code)); -#else /* DUK_USE_VARIADIC_MACROS */ -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error_nonverbose1(duk_hthread *thr, duk_errcode_t code, const char *fmt, ...)); -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_handle_error_nonverbose2(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, ...)); -#endif /* DUK_USE_VARIADIC_MACROS */ #endif /* DUK_USE_VERBOSE_ERRORS */ #if defined(DUK_USE_VERBOSE_ERRORS) @@ -10935,17 +8001,28 @@ DUK_INTERNAL_DECL void duk_err_augment_error_throw(duk_hthread *thr); #if defined(DUK_USE_VERBOSE_ERRORS) #if defined(DUK_USE_PARANOID_ERRORS) -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_require_type_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, duk_idx_t index, const char *expect_name)); -#else -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_require_type_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, duk_idx_t index, const char *expect_name)); -#endif -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, duk_idx_t index)); -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api(const char *filename, duk_int_t linenumber, duk_hthread *thr, const char *message)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_require_type_index(duk_hthread *thr, const char *filename, duk_int_t linenumber, duk_idx_t index, const char *expect_name)); #else -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_require_type_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, const char *error_msg)); -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api_index(const char *filename, duk_int_t linenumber, duk_hthread *thr)); -DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api(const char *filename, duk_int_t linenumber, duk_hthread *thr, const char *message)); -#endif +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_require_type_index(duk_hthread *thr, const char *filename, duk_int_t linenumber, duk_idx_t index, const char *expect_name)); +#endif +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api_index(duk_hthread *thr, const char *filename, duk_int_t linenumber, duk_idx_t index)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_range(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_unimplemented_defmsg(duk_hthread *thr, const char *filename, duk_int_t linenumber)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_unsupported_defmsg(duk_hthread *thr, const char *filename, duk_int_t linenumber)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_internal_defmsg(duk_hthread *thr, const char *filename, duk_int_t linenumber)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_internal(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_alloc(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message)); +#else /* DUK_VERBOSE_ERRORS */ +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_range(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_syntax(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_type(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_api(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_unimplemented(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_unsupported(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_internal(duk_hthread *thr)); +DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_alloc(duk_hthread *thr)); +#endif /* DUK_VERBOSE_ERRORS */ DUK_NORETURN(DUK_INTERNAL_DECL void duk_err_longjmp(duk_hthread *thr)); @@ -11195,13 +8272,14 @@ extern const duk_uint16_t duk_unicode_re_canon_lookup[65536]; /* duk_unicode_support.c */ #if !defined(DUK_SINGLE_FILE) -DUK_INTERNAL_DECL duk_uint8_t duk_unicode_xutf8_markers[7]; -DUK_INTERNAL_DECL duk_uint16_t duk_unicode_re_ranges_digit[2]; -DUK_INTERNAL_DECL duk_uint16_t duk_unicode_re_ranges_white[22]; -DUK_INTERNAL_DECL duk_uint16_t duk_unicode_re_ranges_wordchar[8]; -DUK_INTERNAL_DECL duk_uint16_t duk_unicode_re_ranges_not_digit[4]; -DUK_INTERNAL_DECL duk_uint16_t duk_unicode_re_ranges_not_white[24]; -DUK_INTERNAL_DECL duk_uint16_t duk_unicode_re_ranges_not_wordchar[10]; +DUK_INTERNAL_DECL const duk_uint8_t duk_unicode_xutf8_markers[7]; +DUK_INTERNAL_DECL const duk_uint16_t duk_unicode_re_ranges_digit[2]; +DUK_INTERNAL_DECL const duk_uint16_t duk_unicode_re_ranges_white[22]; +DUK_INTERNAL_DECL const duk_uint16_t duk_unicode_re_ranges_wordchar[8]; +DUK_INTERNAL_DECL const duk_uint16_t duk_unicode_re_ranges_not_digit[4]; +DUK_INTERNAL_DECL const duk_uint16_t duk_unicode_re_ranges_not_white[24]; +DUK_INTERNAL_DECL const duk_uint16_t duk_unicode_re_ranges_not_wordchar[10]; +DUK_INTERNAL_DECL const duk_int8_t duk_is_idchar_tab[128]; #endif /* !DUK_SINGLE_FILE */ /* @@ -11383,7 +8461,8 @@ DUK_INTERNAL_DECL void duk_js_push_closure(duk_hthread *thr, duk_hcompiledfunction *fun_temp, duk_hobject *outer_var_env, - duk_hobject *outer_lex_env); + duk_hobject *outer_lex_env, + duk_bool_t add_auto_proto); /* call handling */ DUK_INTERNAL_DECL duk_int_t duk_handle_call_protected(duk_hthread *thr, duk_idx_t num_stack_args, duk_small_uint_t call_flags); @@ -11488,7 +8567,8 @@ DUK_INTERNAL_DECL void duk_numconv_parse(duk_context *ctx, duk_small_int_t radix #endif /* DUK_NUMCONV_H_INCLUDED */ #line 1 "duk_bi_protos.h" /* - * Prototypes for all built-in functions. + * Prototypes for built-in functions not automatically covered by the + * header declarations emitted by genbuiltins.py. */ #ifndef DUK_BUILTIN_PROTOS_H_INCLUDED @@ -11508,62 +8588,6 @@ DUK_INTERNAL_DECL void duk_numconv_parse(duk_context *ctx, duk_small_int_t radix */ #define DUK_BI_COMMONJS_MODULE_ID_LIMIT 256 -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_constructor_is_array(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_to_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_concat(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_join_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_pop(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_push(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_reverse(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_shift(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_slice(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_sort(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_splice(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_unshift(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_indexof_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_iter_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_array_prototype_reduce_shared(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_boolean_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_boolean_prototype_tostring_shared(duk_context *ctx); - -/* XXX: naming is inconsistent with other builtins, "prototype" not used as - * part of function name. - */ -DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_prototype_tostring_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_readfield(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_writefield(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_compare_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_buffer_slice_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_arraybuffer_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_arraybuffer_isview(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_dataview_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_typedarray_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_typedarray_set(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_concat(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_is_encoding(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_is_buffer(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_byte_length(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_tostring(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_tojson(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_fill(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_copy(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_nodejs_buffer_write(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor_parse(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor_utc(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_constructor_now(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_tostring_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_value_of(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_to_json(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_get_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_get_timezone_offset(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_set_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_date_prototype_set_time(duk_context *ctx); /* Helpers exposed for internal use */ DUK_INTERNAL_DECL void duk_bi_date_timeval_to_parts(duk_double_t d, duk_int_t *parts, duk_double_t *dparts, duk_small_uint_t flags); DUK_INTERNAL_DECL duk_double_t duk_bi_date_get_timeval_from_dparts(duk_double_t *dparts, duk_small_uint_t flags); @@ -11598,44 +8622,6 @@ DUK_INTERNAL_DECL duk_bool_t duk_bi_date_parse_string_getdate(duk_context *ctx, DUK_INTERNAL_DECL duk_bool_t duk_bi_date_format_parts_strftime(duk_context *ctx, duk_int_t *parts, duk_int_t tzoffset, duk_small_uint_t flags); #endif -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_info(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_act(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_gc(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_fin(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_enc(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_dec(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_duktape_object_compact(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_constructor_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_to_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_stack_getter(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_filename_getter(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_linenumber_getter(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_stack_setter(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_filename_setter(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_error_prototype_linenumber_setter(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_function_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_to_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_apply(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_call(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_function_prototype_bind(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_eval(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_parse_int(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_parse_float(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_is_nan(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_is_finite(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_decode_uri(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_decode_uri_component(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_encode_uri(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_encode_uri_component(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_escape(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_unescape(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_print_helper(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_require(duk_context *ctx); - DUK_INTERNAL_DECL void duk_bi_json_parse_helper(duk_context *ctx, duk_idx_t idx_value, @@ -11647,87 +8633,6 @@ void duk_bi_json_stringify_helper(duk_context *ctx, duk_idx_t idx_replacer, duk_idx_t idx_space, duk_small_uint_t flags); -DUK_INTERNAL_DECL duk_ret_t duk_bi_json_object_parse(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_json_object_stringify(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_onearg_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_twoarg_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_max(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_min(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_math_object_random(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_locale_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_value_of(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_fixed(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_exponential(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_number_prototype_to_precision(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_getprototype_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_setprototype_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_get_own_property_descriptor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_create(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_define_property(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_define_properties(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_seal_freeze_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_prevent_extensions(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_is_sealed_frozen_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_is_extensible(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_constructor_keys_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_to_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_to_locale_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_value_of(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_has_own_property(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_is_prototype_of(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_object_prototype_property_is_enumerable(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_pointer_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_pointer_prototype_tostring_shared(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_exec(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_test(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_regexp_prototype_to_string(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_constructor_from_char_code(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_to_string(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_char_at(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_char_code_at(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_concat(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_indexof_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_locale_compare(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_match(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_replace(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_search(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_slice(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_split(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_substring(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_caseconv_shared(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_trim(duk_context *ctx); -/* Note: present even if DUK_USE_SECTION_B undefined given because genbuiltins.py - * will point to it. - */ -DUK_INTERNAL_DECL duk_ret_t duk_bi_string_prototype_substr(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_proxy_constructor(duk_context *ctx); -#if 0 /* unimplemented now */ -DUK_INTERNAL_DECL duk_ret_t duk_bi_proxy_constructor_revocable(duk_context *ctx); -#endif - -DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_resume(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_yield(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_current(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_constructor(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_prototype_fmt(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_prototype_raw(duk_context *ctx); -DUK_INTERNAL_DECL duk_ret_t duk_bi_logger_prototype_log_shared(duk_context *ctx); - -DUK_INTERNAL_DECL duk_ret_t duk_bi_type_error_thrower(duk_context *ctx); #endif /* DUK_BUILTIN_PROTOS_H_INCLUDED */ #line 1 "duk_selftest.h" @@ -11746,6 +8651,89 @@ DUK_INTERNAL_DECL void duk_selftest_run_tests(void); #line 78 "duk_internal.h" #endif /* DUK_INTERNAL_H_INCLUDED */ +#line 1 "duk_replacements.c" +/* + * Replacements for missing platform functions. + * + * Unlike the originals, fpclassify() and signbit() replacements don't + * work on any floating point types, only doubles. The C typing here + * mimics the standard prototypes. + */ + +/* include removed: duk_internal.h */ + +#if defined(DUK_USE_COMPUTED_NAN) +DUK_INTERNAL double duk_computed_nan; +#endif + +#if defined(DUK_USE_COMPUTED_INFINITY) +DUK_INTERNAL double duk_computed_infinity; +#endif + +#if defined(DUK_USE_REPL_FPCLASSIFY) +DUK_INTERNAL int duk_repl_fpclassify(double x) { + duk_double_union u; + duk_uint_fast16_t expt; + duk_small_int_t mzero; + + u.d = x; + expt = (duk_uint_fast16_t) (u.us[DUK_DBL_IDX_US0] & 0x7ff0UL); + if (expt > 0x0000UL && expt < 0x7ff0UL) { + /* expt values [0x001,0x7fe] = normal */ + return DUK_FP_NORMAL; + } + + mzero = (u.ui[DUK_DBL_IDX_UI1] == 0 && (u.ui[DUK_DBL_IDX_UI0] & 0x000fffffUL) == 0); + if (expt == 0x0000UL) { + /* expt 0x000 is zero/subnormal */ + if (mzero) { + return DUK_FP_ZERO; + } else { + return DUK_FP_SUBNORMAL; + } + } else { + /* expt 0xfff is infinite/nan */ + if (mzero) { + return DUK_FP_INFINITE; + } else { + return DUK_FP_NAN; + } + } +} +#endif + +#if defined(DUK_USE_REPL_SIGNBIT) +DUK_INTERNAL int duk_repl_signbit(double x) { + duk_double_union u; + u.d = x; + return (int) (u.uc[DUK_DBL_IDX_UC0] & 0x80UL); +} +#endif + +#if defined(DUK_USE_REPL_ISFINITE) +DUK_INTERNAL int duk_repl_isfinite(double x) { + int c = DUK_FPCLASSIFY(x); + if (c == DUK_FP_NAN || c == DUK_FP_INFINITE) { + return 0; + } else { + return 1; + } +} +#endif + +#if defined(DUK_USE_REPL_ISNAN) +DUK_INTERNAL int duk_repl_isnan(double x) { + int c = DUK_FPCLASSIFY(x); + return (c == DUK_FP_NAN); +} +#endif + +#if defined(DUK_USE_REPL_ISINF) +DUK_INTERNAL int duk_repl_isinf(double x) { + int c = DUK_FPCLASSIFY(x); + return (c == DUK_FP_INFINITE); +} +#endif #line 1 "duk_strings.c" /* * Shared error message strings @@ -11780,7 +8768,6 @@ DUK_INTERNAL const char *duk_str_sprintf_too_long = "sprintf message too long"; DUK_INTERNAL const char *duk_str_alloc_failed = "alloc failed"; DUK_INTERNAL const char *duk_str_pop_too_many = "attempt to pop too many entries"; DUK_INTERNAL const char *duk_str_wrong_buffer_type = "wrong buffer type"; -DUK_INTERNAL const char *duk_str_failed_to_extend_valstack = "failed to extend valstack"; DUK_INTERNAL const char *duk_str_encode_failed = "encode failed"; DUK_INTERNAL const char *duk_str_decode_failed = "decode failed"; DUK_INTERNAL const char *duk_str_no_sourcecode = "no sourcecode"; @@ -11798,7 +8785,6 @@ DUK_INTERNAL const char *duk_str_cyclic_input = "cyclic input"; /* Object property access */ DUK_INTERNAL const char *duk_str_proxy_revoked = "proxy revoked"; -DUK_INTERNAL const char *duk_str_object_resize_failed = "object resize failed"; DUK_INTERNAL const char *duk_str_invalid_base = "invalid base value"; DUK_INTERNAL const char *duk_str_strict_caller_read = "attempt to read strict 'caller'"; DUK_INTERNAL const char *duk_str_proxy_rejected = "proxy rejected"; @@ -11836,9 +8822,6 @@ DUK_INTERNAL const char *duk_str_invalid_func_name = "invalid function name"; DUK_INTERNAL const char *duk_str_invalid_getset_name = "invalid getter/setter name"; DUK_INTERNAL const char *duk_str_func_name_required = "function name required"; -/* Executor */ -DUK_INTERNAL const char *duk_str_internal_error_exec_longjmp = "internal error in bytecode executor longjmp handler"; - /* Regexp */ DUK_INTERNAL const char *duk_str_invalid_quantifier_no_atom = "quantifier without preceding atom"; DUK_INTERNAL const char *duk_str_invalid_quantifier_values = "quantifier values invalid (qmin > qmax)"; @@ -11848,15 +8831,11 @@ DUK_INTERNAL const char *duk_str_unexpected_end_of_pattern = "unexpected end of DUK_INTERNAL const char *duk_str_unexpected_regexp_token = "unexpected token in regexp"; DUK_INTERNAL const char *duk_str_invalid_regexp_flags = "invalid regexp flags"; DUK_INTERNAL const char *duk_str_invalid_backrefs = "invalid backreference(s)"; -DUK_INTERNAL const char *duk_str_regexp_backtrack_failed = "regexp backtrack failed"; -DUK_INTERNAL const char *duk_str_regexp_advance_failed = "regexp advance failed"; -DUK_INTERNAL const char *duk_str_regexp_internal_error = "regexp internal error"; /* Limits */ DUK_INTERNAL const char *duk_str_valstack_limit = "valstack limit"; DUK_INTERNAL const char *duk_str_callstack_limit = "callstack limit"; DUK_INTERNAL const char *duk_str_catchstack_limit = "catchstack limit"; -DUK_INTERNAL const char *duk_str_object_property_limit = "object property limit"; DUK_INTERNAL const char *duk_str_prototype_chain_limit = "prototype chain limit"; DUK_INTERNAL const char *duk_str_bound_chain_limit = "function call bound chain limit"; DUK_INTERNAL const char *duk_str_c_callstack_limit = "C call stack depth limit"; @@ -11871,8 +8850,6 @@ DUK_INTERNAL const char *duk_str_regexp_executor_recursion_limit = "regexp execu DUK_INTERNAL const char *duk_str_regexp_executor_step_limit = "regexp step limit"; /* Misc */ -DUK_INTERNAL const char *duk_str_anon = "anon"; -DUK_INTERNAL const char *duk_str_realloc_failed = "realloc failed"; #line 1 "duk_debug_macros.c" /* * Debugging macro calls. @@ -12025,527 +9002,66 @@ DUK_INTERNAL void duk_debug_log(const char *fmt, ...) { /* include removed: duk_internal.h */ -#if defined(DUK_USE_DOUBLE_LE) -DUK_INTERNAL const duk_uint8_t duk_strings_data[2624] = { -55,86,227,24,145,55,102,120,144,3,63,94,228,54,100,137,186,50,11,164,109, -77,215,5,61,35,106,206,149,110,4,254,219,237,58,8,196,24,103,74,183,2,127, -103,246,93,4,98,12,47,180,67,103,246,127,101,208,70,32,194,186,134,207,236, -254,203,160,140,65,133,246,136,108,254,199,237,186,8,196,24,87,80,217,253, -143,219,116,17,136,49,30,209,13,159,220,116,75,3,30,65,244,17,136,48,174, -209,13,159,220,116,17,136,48,158,161,179,251,142,130,49,6,17,209,130,96, -237,80,75,47,160,140,65,142,134,133,41,34,110,134,133,41,34,3,25,110,8,22, -158,130,38,163,8,217,200,158,76,156,210,117,128,153,203,210,70,46,137,187, -18,27,164,187,201,209,130,100,55,91,70,4,145,63,66,231,44,128,105,187,41, -197,13,49,122,8,196,24,71,75,70,138,104,115,77,215,5,36,20,201,214,209,107, -79,104,209,144,168,105,6,207,251,209,104,209,125,212,227,66,127,235,191, -239,232,180,90,52,95,69,247,83,141,9,255,174,255,191,162,211,80,210,253,23, -221,78,52,39,254,183,254,254,139,72,105,126,139,238,167,26,19,255,91,255, -127,69,166,129,191,69,247,83,141,9,255,175,255,191,162,213,26,50,23,232, -190,234,113,161,63,245,115,119,86,227,118,83,138,26,98,9,110,48,86,22,148, -160,152,22,82,70,46,137,44,8,180,163,32,104,98,206,32,17,7,16,88,101,100, -206,42,70,36,108,205,18,74,140,33,196,230,60,2,152,146,33,38,230,8,36,79, -182,251,65,156,151,24,200,33,145,162,25,80,209,24,67,0,166,68,52,174,61,73, -25,33,205,25,27,84,177,195,234,220,1,144,105,99,135,217,16,17,17,208,72, -199,179,60,93,100,146,49,232,162,64,76,135,19,152,244,44,136,223,98,67,4, -18,33,247,217,158,36,0,209,190,156,13,26,201,21,111,165,67,64,180,100,145, -62,250,32,45,100,33,55,214,1,229,223,65,19,72,187,236,206,137,35,125,120, -190,201,104,105,15,190,201,212,136,136,125,246,160,137,27,83,239,171,37, -200,218,159,125,168,34,192,61,27,233,93,22,1,114,78,250,28,76,130,112,200, -93,245,164,188,207,190,204,17,49,38,109,246,160,93,8,119,185,13,153,34,173, -246,113,0,136,48,76,10,90,26,78,182,140,9,34,130,161,100,235,64,194,9,226, -44,166,1,41,221,153,226,235,118,120,121,58,72,197,209,63,71,69,76,15,34, -164,73,244,171,112,39,246,223,104,169,18,125,42,220,9,253,159,217,38,68, -159,104,134,207,236,254,201,18,36,250,134,207,236,254,201,50,36,251,68,54, -127,99,246,200,145,39,212,54,127,99,246,200,145,39,218,33,179,251,131,200, -147,234,27,63,184,81,137,62,149,110,4,254,219,237,20,98,79,165,91,129,63, -179,251,36,152,147,237,16,217,253,159,217,32,196,159,80,217,253,159,217,36, -196,159,104,134,207,236,126,217,6,36,250,134,207,236,126,217,6,36,251,68, -54,127,112,115,18,125,67,103,247,8,149,2,8,196,24,143,131,137,146,90,121, -35,162,44,140,35,102,160,226,100,235,138,89,18,102,13,10,82,68,200,151,106, -130,88,131,4,192,73,225,228,85,162,137,147,168,108,252,18,42,209,68,201, -212,54,126,89,23,104,162,100,245,17,230,207,193,34,237,20,76,158,162,60, -217,249,100,109,162,137,147,163,117,2,178,120,36,109,162,137,147,163,117,2, -178,121,100,101,162,137,147,165,91,129,63,4,140,180,81,50,116,171,112,39, -229,145,150,138,38,78,161,179,251,63,178,240,72,203,69,19,39,80,217,253, -159,217,121,100,109,162,137,147,212,71,155,63,179,251,47,4,141,180,81,50, -122,136,243,103,246,127,101,229,145,150,138,38,78,161,179,251,31,182,240, -72,203,69,19,39,80,217,253,143,219,121,100,109,162,137,147,212,71,155,63, -177,251,111,4,141,180,81,50,122,136,243,103,246,63,109,229,145,54,138,38, -78,161,179,251,133,90,40,153,61,68,121,179,251,132,196,128,31,80,217,248, -36,76,72,1,245,13,159,150,69,68,128,31,168,143,54,126,9,21,18,0,126,162,60, -217,249,100,100,72,1,244,110,160,86,79,4,140,137,0,62,141,212,10,201,229, -145,113,32,7,210,173,192,159,130,69,196,128,31,74,183,2,126,89,23,18,0,125, -67,103,246,127,101,224,145,113,32,7,212,54,127,103,246,94,89,25,18,0,126, -162,60,217,253,159,217,120,36,100,72,1,250,136,243,103,246,127,101,229,145, -113,32,7,212,54,127,99,246,222,9,23,18,0,125,67,103,246,63,109,229,145,145, -32,7,234,35,205,159,216,253,183,130,70,68,128,31,168,143,54,127,99,246,222, -89,17,18,0,125,67,103,247,9,137,0,63,81,30,108,254,224,130,115,240,98,66, -128,92,136,84,45,101,180,81,50,28,78,99,193,18,40,56,153,58,178,52,211,58, -17,46,134,133,41,34,164,75,164,104,156,52,52,199,37,222,232,206,66,64,207, -18,66,136,137,19,173,62,46,155,181,167,72,147,235,226,233,186,120,121,58, -226,157,214,111,84,76,73,36,109,24,72,130,100,112,200,178,76,157,124,92, -242,70,120,25,193,34,245,241,117,240,97,1,107,33,25,212,54,160,90,7,244,29, -24,38,66,254,223,215,125,119,215,126,232,190,43,226,67,244,1,250,193,125, -111,216,11,234,254,192,63,96,159,173,234,26,84,53,19,194,126,175,168,105, -80,212,79,8,234,26,84,53,19,193,156,20,144,83,52,167,20,52,198,109,24,18, -68,225,115,150,64,53,52,104,200,84,52,131,76,167,20,52,200,46,7,48,52,146, -132,102,57,33,165,139,168,209,154,32,104,220,193,189,214,27,16,209,176,23, -26,220,98,149,110,116,70,75,188,98,116,136,34,33,101,4,192,223,178,32,38,6, -144,18,67,72,1,58,67,0,100,95,74,17,159,217,31,210,132,103,246,58,251,33, -121,232,55,150,227,125,143,216,16,190,91,141,246,68,31,150,223,178,39,150, -223,177,251,0,244,135,97,37,32,24,132,104,24,66,161,175,164,202,134,140, -151,39,212,125,255,221,125,74,86,9,79,168,104,201,116,178,139,154,22,134, -145,72,51,93,18,116,64,145,13,39,82,34,33,38,73,76,132,185,4,185,187,198, -100,229,233,197,13,49,228,73,247,4,4,78,98,79,184,32,34,105,187,201,147, -154,185,187,200,147,165,233,197,13,50,230,239,82,98,151,167,20,52,206,145, -39,234,76,69,245,22,190,224,128,138,228,73,244,180,90,251,130,2,43,145,39, -234,76,76,243,155,51,162,68,159,88,230,204,234,145,39,234,76,67,240,38,67, -200,147,232,193,50,46,68,159,169,49,31,206,164,100,137,18,125,59,169,25,54, -68,159,169,49,51,200,109,38,73,42,68,159,88,134,210,100,147,100,73,250,147, -20,188,65,57,163,146,164,73,246,68,19,154,57,74,68,159,169,49,51,200,90, -209,34,9,205,28,159,34,79,172,66,214,137,16,78,104,228,121,18,125,154,24, -72,152,147,236,208,194,101,205,39,92,82,200,147,145,137,63,82,98,103,144, -181,162,68,19,154,57,60,196,159,88,133,173,18,32,156,209,201,166,36,253,73, -138,94,32,156,209,201,70,36,251,34,9,205,28,154,98,79,212,152,153,228,54, -147,36,148,98,79,172,67,105,50,73,102,36,253,73,136,254,117,35,36,24,147, -233,221,72,201,38,36,253,73,136,126,6,12,98,79,163,6,20,98,79,212,152,135, -224,76,135,49,39,209,130,100,89,137,63,82,98,103,156,217,157,6,36,250,199, -54,103,113,137,63,82,98,47,168,181,247,4,4,86,98,79,165,162,215,220,16,17, -57,137,62,205,12,36,166,238,173,194,2,201,217,161,132,236,167,20,52,210, -155,186,183,8,11,39,70,9,147,178,156,80,211,50,110,236,208,194,118,83,138, -26,102,77,221,24,38,78,202,113,67,76,54,186,195,245,38,34,188,17,145,23,55, -117,241,32,145,36,57,173,155,186,75,189,205,35,102,128,44,243,119,74,139, -144,113,243,221,36,77,21,38,144,210,161,168,158,35,230,144,192,154,42,77, -33,165,67,81,60,15,173,7,90,159,49,13,213,64,186,17,62,96,47,170,129,116, -33,165,64,202,113,36,226,134,70,110,234,220,32,44,157,163,222,72,244,64, -145,23,55,118,143,121,35,209,2,68,140,221,213,184,64,89,58,183,88,145,232, -129,34,46,110,234,221,98,71,162,4,136,153,80,50,156,80,211,22,79,90,38,105, -16,17,17,207,18,61,96,17,10,192,76,71,106,220,32,44,157,19,152,240,68,138, -17,193,30,137,195,39,65,51,8,224,143,65,54,22,46,103,68,112,71,162,112,200, -184,144,116,17,59,20,24,243,52,72,58,8,134,42,23,50,68,108,3,206,87,71,164, -0,142,73,57,132,41,42,72,225,107,4,167,212,52,100,191,92,83,161,163,37,250, -226,158,141,145,208,89,154,79,90,4,66,73,209,153,100,180,8,133,145,208,89, -158,36,169,35,34,17,244,145,198,247,60,137,114,26,97,57,162,4,206,137,116, -17,136,48,144,68,212,97,27,57,24,64,90,201,18,5,13,25,4,5,172,160,123,215, -138,62,46,121,35,60,117,18,233,27,70,18,32,10,200,212,75,175,139,166,233, -225,228,235,138,227,130,93,117,155,215,197,207,36,103,131,212,11,161,58, -226,186,110,234,220,32,44,157,148,226,134,153,19,119,101,56,161,166,88,156, -217,78,52,20,221,17,200,147,25,137,53,17,180,97,34,0,172,140,19,154,84,26, -145,0,86,68,90,40,152,2,178,22,160,93,8,69,19,18,98,37,210,94,100,108,144, -21,145,8,151,75,23,100,141,66,37,217,16,11,32,226,248,146,164,108,250,75, -204,141,146,28,217,24,177,33,50,66,72,128,92,6,66,161,164,235,226,231,146, -51,65,36,225,144,168,105,58,248,185,228,140,240,97,68,128,153,38,98,79,174, -179,122,248,185,228,140,241,214,129,132,150,12,73,245,214,111,95,23,60,145, -158,58,50,72,81,67,230,232,184,196,159,95,23,77,211,195,201,215,21,47,139, -166,233,225,228,50,200,211,76,229,2,201,25,149,241,67,102,138,52,146,16,30, -67,18,66,3,201,34,52,78,25,61,72,160,94,115,30,230,145,179,73,26,39,12,158, -164,81,33,144,78,25,61,72,160,94,115,30,230,145,179,72,200,39,12,158,164, -80,132,75,165,67,81,50,21,18,235,65,214,169,224,140,137,210,173,192,154,30, -8,200,157,67,102,66,84,11,71,169,20,19,209,139,162,158,207,15,39,73,24,186, -43,236,176,217,130,253,36,98,232,187,177,33,73,18,52,68,233,35,23,69,93, -136,26,98,116,145,139,162,158,146,160,95,73,24,186,37,12,72,5,16,64,145,10, -32,76,71,64,156,217,161,180,34,6,64,208,198,36,78,50,20,20,92,204,50,44, -147,32,134,226,17,114,33,202,134,129,107,192,202,232,160,180,104,166,135, -52,72,40,144,213,33,178,152,26,34,56,163,105,44,104,146,116,139,77,43,34, -98,57,38,116,72,179,60,93,97,206,56,52,240,242,56,163,168,34,81,57,178,153, -42,228,12,182,58,22,66,89,19,57,68,176,74,68,35,104,195,18,239,116,102,114, -94,100,104,228,100,49,238,140,203,42,60,145,35,104,181,146,113,161,10,80, -46,68,82,24,245,145,132,108,228,148,54,100,137,64,34,13,100,153,222,1,40,6, -33,223,20,84,19,34,95,23,76,130,153,6,103,208,43,64,141,41,130,104,17,112, -130,44,96, +#if defined(DUK_USE_ROM_STRINGS) +#error ROM support not enabled, rerun make_dist.py with --rom-support +#else /* DUK_USE_ROM_STRINGS */ +DUK_INTERNAL const duk_uint8_t duk_strings_data[1049] = { +79,104,209,144,168,105,6,78,182,139,90,122,8,154,140,35,103,35,117,193,73, +5,52,116,180,104,166,135,52,189,4,98,12,27,178,156,80,211,31,161,115,150, +64,52,221,109,24,18,68,157,24,38,67,118,36,55,73,119,151,164,140,93,18,117, +128,153,201,228,201,205,2,250,8,196,24,232,104,82,146,40,232,193,48,118, +168,37,147,212,54,127,113,208,70,32,194,187,68,54,127,113,208,70,32,196, +123,68,54,127,113,209,44,12,121,7,208,70,32,194,186,134,207,236,126,219, +160,140,65,133,246,136,108,254,199,237,186,8,196,24,87,80,217,253,159,217, +116,17,136,48,190,209,13,159,217,253,151,65,24,131,12,233,86,224,79,236, +254,203,160,140,65,134,116,171,112,39,246,223,105,208,70,32,193,140,183,4, +11,55,92,20,244,141,169,186,50,11,164,109,77,208,208,165,36,79,215,185,13, +153,34,110,204,241,32,6,66,84,11,112,200,84,52,157,124,92,242,70,120,45,64, +186,17,22,138,38,0,172,140,19,154,84,26,145,0,86,69,17,180,97,34,0,172,132, +75,144,215,77,221,91,132,5,147,178,156,80,211,30,160,93,9,215,21,115,119, +169,49,75,211,138,26,101,205,222,68,157,47,78,40,105,151,55,120,204,156, +189,56,161,166,52,157,72,136,138,65,154,232,147,162,4,136,150,81,115,66, +208,210,37,96,148,250,134,140,151,39,212,125,255,221,125,73,80,209,146,233, +124,93,55,79,15,34,196,230,202,113,160,166,232,157,132,148,128,98,28,46, +114,200,6,153,180,96,73,19,74,113,67,76,103,5,36,20,211,70,140,133,67,72, +49,245,160,235,81,212,52,168,106,39,132,253,111,80,210,161,168,158,5,245, +191,96,31,172,15,208,23,226,190,131,232,62,131,232,11,251,127,93,245,223, +93,251,172,234,27,80,45,3,250,14,140,19,34,65,19,81,132,108,228,97,1,107, +33,12,32,45,100,136,206,9,12,196,155,134,69,146,100,235,226,231,146,51,194, +72,218,48,145,4,200,119,89,189,81,49,39,72,147,235,226,233,186,120,121,58, +226,167,90,124,93,55,107,71,137,33,68,68,130,64,206,75,189,209,156,144,84, +44,141,3,8,137,187,178,156,80,211,26,110,242,100,230,146,120,121,8,48,76,6, +89,26,105,157,65,196,201,213,145,166,153,212,28,76,157,113,75,34,78,62,14, +38,73,105,228,142,136,178,48,141,152,228,73,150,83,0,148,39,137,75,67,73, +214,209,129,36,85,190,206,32,17,6,9,128,141,3,8,130,161,100,235,64,194,24, +52,41,73,19,189,200,108,201,19,111,181,2,232,66,239,173,37,230,157,244,56, +153,4,225,145,27,233,93,22,1,114,62,251,80,69,128,121,247,213,146,228,109, +79,190,212,17,35,106,125,246,78,164,68,68,111,175,23,217,45,13,33,119,208, +68,210,38,250,192,61,91,233,80,208,45,25,36,81,190,156,13,26,201,19,239, +162,2,214,66,31,125,153,226,64,13,27,236,72,96,130,68,62,251,48,68,196,153, +119,217,157,18,56,156,199,161,100,42,26,250,77,36,140,122,40,144,19,34,9, +24,246,103,139,172,150,56,125,145,1,17,29,44,112,250,183,0,100,24,200,218, +140,228,185,130,9,19,237,190,208,73,184,146,35,68,146,163,8,50,178,99,136, +44,89,196,2,33,70,64,208,196,67,74,226,88,17,105,73,24,186,37,40,38,5,133, +161,89,4,183,25,115,119,86,227,118,83,138,26,103,255,223,209,106,141,25,11, +244,95,117,56,208,159,250,223,251,250,45,52,13,250,47,186,156,104,79,253, +111,253,253,22,144,210,253,23,221,78,52,39,254,187,254,254,139,77,67,75, +244,95,117,56,208,159,250,239,251,250,45,22,141,23,209,125,212,227,66,127, +235,63,239,69,163,69,247,83,141,9,255,165,12,72,5,16,64,145,10,32,76,71,64, +156,217,161,180,34,6,64,208,198,36,78,50,20,20,92,204,50,44,147,32,134,226, +17,114,33,202,134,129,107,192,202,232,160,180,104,166,135,52,72,40,144,213, +33,178,152,26,34,56,163,105,44,104,146,116,139,77,43,34,98,57,38,116,72, +179,60,93,97,206,56,52,240,242,56,163,168,34,81,57,178,153,42,228,12,182, +58,22,66,89,19,57,68,176,74,68,35,104,195,18,239,116,102,114,94,100,104, +228,100,49,238,140,203,42,60,145,35,104,181,146,113,161,10,80,46,68,82,24, +245,145,132,108,228,148,54,100,137,64,34,13,100,153,222,1,40,6,33,223,20, +84,19,34,95,23,76,130,153,6,103,208,43,64,141,41,130,104,17,112,130,44,96, }; +#endif /* DUK_USE_ROM_STRINGS */ -/* to convert a heap stridx to a token number, subtract - * DUK_STRIDX_START_RESERVED and add DUK_TOK_START_RESERVED. - */ - -/* native functions: 149 */ -DUK_INTERNAL const duk_c_function duk_bi_native_functions[149] = { - duk_bi_array_constructor, - duk_bi_array_constructor_is_array, - duk_bi_array_prototype_concat, - duk_bi_array_prototype_indexof_shared, - duk_bi_array_prototype_iter_shared, - duk_bi_array_prototype_join_shared, - duk_bi_array_prototype_pop, - duk_bi_array_prototype_push, - duk_bi_array_prototype_reduce_shared, - duk_bi_array_prototype_reverse, - duk_bi_array_prototype_shift, - duk_bi_array_prototype_slice, - duk_bi_array_prototype_sort, - duk_bi_array_prototype_splice, - duk_bi_array_prototype_to_string, - duk_bi_array_prototype_unshift, - duk_bi_arraybuffer_constructor, - duk_bi_arraybuffer_isview, - duk_bi_boolean_constructor, - duk_bi_boolean_prototype_tostring_shared, - duk_bi_buffer_compare_shared, - duk_bi_buffer_constructor, - duk_bi_buffer_prototype_tostring_shared, - duk_bi_buffer_readfield, - duk_bi_buffer_slice_shared, - duk_bi_buffer_writefield, - duk_bi_dataview_constructor, - duk_bi_date_constructor, - duk_bi_date_constructor_now, - duk_bi_date_constructor_parse, - duk_bi_date_constructor_utc, - duk_bi_date_prototype_get_shared, - duk_bi_date_prototype_get_timezone_offset, - duk_bi_date_prototype_set_shared, - duk_bi_date_prototype_set_time, - duk_bi_date_prototype_to_json, - duk_bi_date_prototype_tostring_shared, - duk_bi_date_prototype_value_of, - duk_bi_duktape_object_act, - duk_bi_duktape_object_compact, - duk_bi_duktape_object_dec, - duk_bi_duktape_object_enc, - duk_bi_duktape_object_fin, - duk_bi_duktape_object_gc, - duk_bi_duktape_object_info, - duk_bi_error_constructor_shared, - duk_bi_error_prototype_filename_getter, - duk_bi_error_prototype_filename_setter, - duk_bi_error_prototype_linenumber_getter, - duk_bi_error_prototype_linenumber_setter, - duk_bi_error_prototype_stack_getter, - duk_bi_error_prototype_stack_setter, - duk_bi_error_prototype_to_string, - duk_bi_function_constructor, - duk_bi_function_prototype, - duk_bi_function_prototype_apply, - duk_bi_function_prototype_bind, - duk_bi_function_prototype_call, - duk_bi_function_prototype_to_string, - duk_bi_global_object_decode_uri, - duk_bi_global_object_decode_uri_component, - duk_bi_global_object_encode_uri, - duk_bi_global_object_encode_uri_component, - duk_bi_global_object_escape, - duk_bi_global_object_eval, - duk_bi_global_object_is_finite, - duk_bi_global_object_is_nan, - duk_bi_global_object_parse_float, - duk_bi_global_object_parse_int, - duk_bi_global_object_print_helper, - duk_bi_global_object_require, - duk_bi_global_object_unescape, - duk_bi_json_object_parse, - duk_bi_json_object_stringify, - duk_bi_logger_constructor, - duk_bi_logger_prototype_fmt, - duk_bi_logger_prototype_log_shared, - duk_bi_logger_prototype_raw, - duk_bi_math_object_max, - duk_bi_math_object_min, - duk_bi_math_object_onearg_shared, - duk_bi_math_object_random, - duk_bi_math_object_twoarg_shared, - duk_bi_nodejs_buffer_byte_length, - duk_bi_nodejs_buffer_concat, - duk_bi_nodejs_buffer_constructor, - duk_bi_nodejs_buffer_copy, - duk_bi_nodejs_buffer_fill, - duk_bi_nodejs_buffer_is_buffer, - duk_bi_nodejs_buffer_is_encoding, - duk_bi_nodejs_buffer_tojson, - duk_bi_nodejs_buffer_tostring, - duk_bi_nodejs_buffer_write, - duk_bi_number_constructor, - duk_bi_number_prototype_to_exponential, - duk_bi_number_prototype_to_fixed, - duk_bi_number_prototype_to_locale_string, - duk_bi_number_prototype_to_precision, - duk_bi_number_prototype_to_string, - duk_bi_number_prototype_value_of, - duk_bi_object_constructor, - duk_bi_object_constructor_create, - duk_bi_object_constructor_define_properties, - duk_bi_object_constructor_define_property, - duk_bi_object_constructor_get_own_property_descriptor, - duk_bi_object_constructor_is_extensible, - duk_bi_object_constructor_is_sealed_frozen_shared, - duk_bi_object_constructor_keys_shared, - duk_bi_object_constructor_prevent_extensions, - duk_bi_object_constructor_seal_freeze_shared, - duk_bi_object_getprototype_shared, - duk_bi_object_prototype_has_own_property, - duk_bi_object_prototype_is_prototype_of, - duk_bi_object_prototype_property_is_enumerable, - duk_bi_object_prototype_to_locale_string, - duk_bi_object_prototype_to_string, - duk_bi_object_prototype_value_of, - duk_bi_object_setprototype_shared, - duk_bi_pointer_constructor, - duk_bi_pointer_prototype_tostring_shared, - duk_bi_proxy_constructor, - duk_bi_regexp_constructor, - duk_bi_regexp_prototype_exec, - duk_bi_regexp_prototype_test, - duk_bi_regexp_prototype_to_string, - duk_bi_string_constructor, - duk_bi_string_constructor_from_char_code, - duk_bi_string_prototype_caseconv_shared, - duk_bi_string_prototype_char_at, - duk_bi_string_prototype_char_code_at, - duk_bi_string_prototype_concat, - duk_bi_string_prototype_indexof_shared, - duk_bi_string_prototype_locale_compare, - duk_bi_string_prototype_match, - duk_bi_string_prototype_replace, - duk_bi_string_prototype_search, - duk_bi_string_prototype_slice, - duk_bi_string_prototype_split, - duk_bi_string_prototype_substr, - duk_bi_string_prototype_substring, - duk_bi_string_prototype_to_string, - duk_bi_string_prototype_trim, - duk_bi_thread_constructor, - duk_bi_thread_current, - duk_bi_thread_resume, - duk_bi_thread_yield, - duk_bi_type_error_thrower, - duk_bi_typedarray_constructor, - duk_bi_typedarray_set, -}; - -DUK_INTERNAL const duk_uint8_t duk_builtins_data[1955] = { -105,195,75,32,121,40,105,53,14,252,104,54,8,131,72,0,115,225,65,165,244,55, -243,6,145,32,210,24,210,186,25,249,35,120,216,99,226,13,79,33,116,177,164, -180,44,192,4,202,52,150,220,24,0,169,70,146,219,123,0,23,40,210,91,110,96, -3,37,26,75,109,172,0,108,163,73,109,177,128,14,148,105,45,181,176,1,242, -144,56,209,36,94,6,167,133,98,80,211,28,1,250,67,72,168,67,232,13,46,192, -47,162,52,165,0,62,80,163,72,128,61,40,107,26,7,37,20,53,201,131,88,0,66, -134,185,48,98,80,215,38,11,96,0,138,26,228,193,76,0,69,67,92,152,37,128,6, -168,107,147,4,48,1,165,13,114,96,118,0,44,161,174,76,12,192,7,148,53,201, -129,88,1,26,134,165,80,130,80,31,255,241,69,224,0,0,0,0,0,0,124,63,174,32, -0,0,0,0,0,0,120,63,175,98,7,140,16,116,194,7,12,48,108,196,6,140,80,100, -198,6,12,112,92,200,5,140,149,192,202,91,204,181,184,204,91,76,213,176,206, -90,204,240,84,208,5,13,9,124,210,43,13,24,64,226,131,205,112,56,216,3,77, -152,48,218,130,205,184,40,220,130,77,216,32,222,129,205,248,24,224,129,78, -25,214,164,2,90,81,17,104,67,37,157,8,150,100,18,89,78,201,100,60,37,140, -244,150,35,226,88,79,201,96,71,37,125,20,122,188,138,62,0,2,165,70,39,255, -255,193,43,67,0,0,80,127,192,58,182,220,80,0,21,59,170,64,0,107,77,8,172, -181,146,176,202,138,187,59,42,204,200,170,182,146,168,218,80,0,26,155,97, -42,77,68,168,181,20,0,6,160,210,74,123,89,64,0,127,255,4,10,153,219,157,70, -163,185,130,140,228,10,43,160,40,141,228,161,184,18,132,226,64,161,127,128, -0,63,225,1,109,74,8,137,71,58,5,4,221,20,3,147,233,249,193,240,80,255,192, -6,120,2,64,127,195,0,173,28,56,20,96,80,128,0,206,192,143,167,64,164,156, -131,2,112,14,125,55,9,4,216,40,19,80,180,77,3,9,51,13,94,153,7,159,76,64, -207,192,0,102,0,103,255,255,242,240,67,73,112,33,168,0,12,180,16,212,0,10, -88,8,106,0,7,43,4,53,0,4,149,4,31,128,0,202,66,15,255,255,194,137,254,0,50, -135,227,224,127,196,2,87,132,17,82,143,24,10,44,96,36,240,4,147,64,146,119, -4,125,49,131,52,152,65,154,128,0,201,97,9,36,133,36,142,25,18,40,114,77,98, -17,33,137,68,130,45,17,247,240,71,159,193,29,127,8,0,12,113,252,32,0,49, -184,208,70,162,144,20,95,240,0,7,252,80,37,120,193,81,196,194,0,3,69,19,0, -81,191,197,140,192,255,255,255,255,255,255,239,127,140,64,1,0,0,0,0,0,0,0, -139,192,0,0,0,0,0,0,248,127,138,192,0,0,0,0,0,0,240,127,139,64,0,0,0,0,0,0, -240,255,0,31,241,128,149,224,0,0,0,0,0,0,0,0,13,71,98,37,25,128,148,86,48, -69,23,201,19,94,36,73,132,129,71,255,0,56,136,233,34,3,223,208,241,192,3, -254,56,18,188,128,0,0,0,0,0,15,135,251,104,228,128,135,18,4,0,6,26,72,16,0, -42,49,32,64,0,225,132,129,0,4,133,146,4,0,21,210,72,16,0,103,65,32,64,1, -220,228,100,162,146,130,20,74,8,72,248,64,2,33,3,225,0,9,131,143,132,0,42, -12,62,16,0,184,40,248,64,3,32,131,225,0,13,129,143,132,0,58,4,62,16,0,248, -8,248,64,4,32,3,225,0,17,127,143,132,0,73,252,62,16,1,55,232,248,64,5,31, -131,225,0,21,125,143,132,0,89,244,62,16,1,119,201,0,31,4,68,123,144,148,0, -97,236,66,80,1,151,169,10,248,0,211,208,133,124,0,109,230,66,254,0,56,242, -33,127,0,29,120,144,207,128,15,60,8,103,192,7,221,228,37,0,32,119,16,148,0, -133,218,66,190,0,68,236,33,95,0,35,117,144,191,128,18,58,136,95,192,9,92, -195,225,0,38,114,144,148,0,156,41,31,224,0,15,249,1,138,144,65,192,2,22,0, -88,16,46,24,77,208,148,103,4,102,252,102,244,128,0,0,0,0,0,0,0,0,220,111, -68,113,61,146,142,248,0,164,255,128,0,63,228,133,109,16,89,178,65,18,235, -153,25,150,220,184,188,180,230,6,32,209,205,0,20,175,240,0,39,252,160,77, -162,184,54,72,34,0,82,255,192,0,159,242,193,54,138,222,217,32,136,1,76,255, -0,2,127,204,4,218,43,115,100,130,32,5,55,252,0,9,255,52,19,104,173,173,146, -8,128,20,239,240,0,39,252,224,77,162,182,54,72,34,0,83,255,192,0,159,243, -193,54,138,214,217,32,136,0,255,255,33,177,1,165,92,82,44,42,252,21,1,175, -0,89,86,214,238,197,172,9,1,173,3,188,231,235,249,8,187,152,253,171,3,250, -8,173,149,28,87,220,253,169,0,59,148,152,85,239,47,108,253,167,0,96,181,17, -83,236,132,37,1,165,3,52,237,253,154,122,131,152,253,163,3,52,237,253,154, -122,131,216,253,38,130,129,25,234,5,0,1,103,40,20,0,9,154,160,80,0,54,98, -146,25,106,5,0,4,101,40,20,0,21,146,160,80,0,102,66,129,64,1,216,234,5,0,8, -99,39,47,49,83,215,152,138,73,0,1,97,168,129,132,160,80,0,150,10,129,64,2, -152,10,5,0,11,95,168,20,0,48,31,255,224,5,17,72,66,249,37,129,127,255,0,0, -191,255,128,0,63,255,197,31,192,0,0,0,0,0,80,196,64,8,26,112,17,169,0,154, -80,1,171,28,124,88,65,233,49,7,133,100,29,149,15,14,138,71,135,37,3,195,66, -114,5,77,252,0,243,178,40,25,200,48,101,30,0,127,210,128,0,85,31,192,0,31, -244,224,5,71,22,8,0,13,20,88,1,85,127,0,0,127,212,128,21,29,220,32,0,52,87, -112,5,89,252,0,1,255,86,16,166,64,0,0,0,0,0,0,2,0,170,72,38,29,219,247,16, -49,75,32,193,52,130,244,193,225,114,96,248,0,8,249,48,124,0,8,90,152,62,0, -6,44,76,31,0,4,21,166,15,128,2,147,255,252,38,212,16,184,155,250,226,217, -150,47,46,91,249,54,96,139,229,229,203,127,36,26,119,32,203,203,150,254,72, -52,97,221,147,102,157,217,192,10,191,248,0,157,4,72,15,250,224,1,154,140, -36,0,8,43,31,224,0,15,251,0,16,55,139,164,0,192,220,46,144,2,3,104,186,64, -12,77,130,233,0,33,53,139,164,0,200,212,46,144,2,35,72,186,64,8,205,2,233, -0,36,51,140,180,0,192,204,50,208,2,3,40,203,64,12,76,131,45,0,33,49,140, -180,0,200,196,50,208,2,35,8,203,64,8,204,3,45,0,36,7,255,248,1,82,101,16, -112,24,72,0,8,86,159,193,56,192,0,0,0,0,0,0,240,63,1,151,246,96,0,21,183, -240,78,48,0,0,0,0,0,0,60,15,192,101,253,168,0,5,113,252,19,140,0,0,0,0,0,0, -15,3,240,25,127,110,0,1,93,127,4,227,0,0,0,0,0,0,0,1,0,6,95,220,128,0,87, -159,193,56,192,0,0,0,0,0,0,0,64,1,151,247,96,0,21,247,240,78,48,0,0,0,0,0, -0,4,16,0,101,253,232,0,5,129,252,19,140,0,0,0,0,0,0,1,4,0,25,127,126,0,1, -97,127,4,227,0,0,0,0,0,0,0,65,0,6,95,224,128,0,88,159,193,56,192,0,0,0,0,0, -0,32,64,1,151,248,96,0,22,55,240,5,157,170,33,68,178,69,10,193,20,10,104, -79,138,36,0,12,31,248,160,88,154,23,66,100,93,32,2,9,129,116,128,0,165,197, -210,0,18,150,23,72,0,138,84,93,32,3,41,65,116,128,1,36,197,210,0,20,146,23, -72,0,146,68,93,32,3,73,1,116,128,1,163,197,210,0,22,142,23,72,0,34,52,93, -32,1,136,193,118,128,2,162,197,218,0,26,138,23,104,0,170,36,93,160,3,168, -129,150,33,198,90,0,32,134,25,104,0,10,20,101,160,1,40,65,150,128,8,160, -198,90,0,50,130,25,104,0,18,4,101,160,1,72,1,150,128,9,31,198,90,0,52,126, -25,104,0,25,244,101,160,1,103,193,150,128,2,30,198,90,0,24,122,25,136,0,41, -228,102,32,1,167,129,152,128,10,157,198,98,0,59,71,91,99,157,104,9,213,118, -39,5,8,159,20,40,0,10,109,90,19,81,132,39,151,32, -}; -#ifdef DUK_USE_BUILTIN_INITJS -DUK_INTERNAL const duk_uint8_t duk_initjs_data[187] = { -40,102,117,110,99,116,105,111,110,40,100,44,97,41,123,102,117,110,99,116, -105,111,110,32,98,40,97,44,98,44,99,41,123,79,98,106,101,99,116,46,100,101, -102,105,110,101,80,114,111,112,101,114,116,121,40,97,44,98,44,123,118,97, -108,117,101,58,99,44,119,114,105,116,97,98,108,101,58,33,48,44,101,110,117, -109,101,114,97,98,108,101,58,33,49,44,99,111,110,102,105,103,117,114,97,98, -108,101,58,33,48,125,41,125,98,40,97,46,76,111,103,103,101,114,44,34,99, -108,111,103,34,44,110,101,119,32,97,46,76,111,103,103,101,114,40,34,67,34, -41,41,59,98,40,97,44,34,109,111,100,76,111,97,100,101,100,34,44,123,125,41, -125,41,40,116,104,105,115,44,68,117,107,116,97,112,101,41,59,10,0, -}; -#endif /* DUK_USE_BUILTIN_INITJS */ -#elif defined(DUK_USE_DOUBLE_BE) -DUK_INTERNAL const duk_uint8_t duk_strings_data[2624] = { -55,86,227,24,145,55,102,120,144,3,63,94,228,54,100,137,186,50,11,164,109, -77,215,5,61,35,106,206,149,110,4,254,219,237,58,8,196,24,103,74,183,2,127, -103,246,93,4,98,12,47,180,67,103,246,127,101,208,70,32,194,186,134,207,236, -254,203,160,140,65,133,246,136,108,254,199,237,186,8,196,24,87,80,217,253, -143,219,116,17,136,49,30,209,13,159,220,116,75,3,30,65,244,17,136,48,174, -209,13,159,220,116,17,136,48,158,161,179,251,142,130,49,6,17,209,130,96, -237,80,75,47,160,140,65,142,134,133,41,34,110,134,133,41,34,3,25,110,8,22, -158,130,38,163,8,217,200,158,76,156,210,117,128,153,203,210,70,46,137,187, -18,27,164,187,201,209,130,100,55,91,70,4,145,63,66,231,44,128,105,187,41, -197,13,49,122,8,196,24,71,75,70,138,104,115,77,215,5,36,20,201,214,209,107, -79,104,209,144,168,105,6,207,251,209,104,209,125,212,227,66,127,235,191, -239,232,180,90,52,95,69,247,83,141,9,255,174,255,191,162,211,80,210,253,23, -221,78,52,39,254,183,254,254,139,72,105,126,139,238,167,26,19,255,91,255, -127,69,166,129,191,69,247,83,141,9,255,175,255,191,162,213,26,50,23,232, -190,234,113,161,63,245,115,119,86,227,118,83,138,26,98,9,110,48,86,22,148, -160,152,22,82,70,46,137,44,8,180,163,32,104,98,206,32,17,7,16,88,101,100, -206,42,70,36,108,205,18,74,140,33,196,230,60,2,152,146,33,38,230,8,36,79, -182,251,65,156,151,24,200,33,145,162,25,80,209,24,67,0,166,68,52,174,61,73, -25,33,205,25,27,84,177,195,234,220,1,144,105,99,135,217,16,17,17,208,72, -199,179,60,93,100,146,49,232,162,64,76,135,19,152,244,44,136,223,98,67,4, -18,33,247,217,158,36,0,209,190,156,13,26,201,21,111,165,67,64,180,100,145, -62,250,32,45,100,33,55,214,1,229,223,65,19,72,187,236,206,137,35,125,120, -190,201,104,105,15,190,201,212,136,136,125,246,160,137,27,83,239,171,37, -200,218,159,125,168,34,192,61,27,233,93,22,1,114,78,250,28,76,130,112,200, -93,245,164,188,207,190,204,17,49,38,109,246,160,93,8,119,185,13,153,34,173, -246,113,0,136,48,76,10,90,26,78,182,140,9,34,130,161,100,235,64,194,9,226, -44,166,1,41,221,153,226,235,118,120,121,58,72,197,209,63,71,69,76,15,34, -164,73,244,171,112,39,246,223,104,169,18,125,42,220,9,253,159,217,38,68, -159,104,134,207,236,254,201,18,36,250,134,207,236,254,201,50,36,251,68,54, -127,99,246,200,145,39,212,54,127,99,246,200,145,39,218,33,179,251,131,200, -147,234,27,63,184,81,137,62,149,110,4,254,219,237,20,98,79,165,91,129,63, -179,251,36,152,147,237,16,217,253,159,217,32,196,159,80,217,253,159,217,36, -196,159,104,134,207,236,126,217,6,36,250,134,207,236,126,217,6,36,251,68, -54,127,112,115,18,125,67,103,247,8,149,2,8,196,24,143,131,137,146,90,121, -35,162,44,140,35,102,160,226,100,235,138,89,18,102,13,10,82,68,200,151,106, -130,88,131,4,192,73,225,228,85,162,137,147,168,108,252,18,42,209,68,201, -212,54,126,89,23,104,162,100,245,17,230,207,193,34,237,20,76,158,162,60, -217,249,100,109,162,137,147,163,117,2,178,120,36,109,162,137,147,163,117,2, -178,121,100,101,162,137,147,165,91,129,63,4,140,180,81,50,116,171,112,39, -229,145,150,138,38,78,161,179,251,63,178,240,72,203,69,19,39,80,217,253, -159,217,121,100,109,162,137,147,212,71,155,63,179,251,47,4,141,180,81,50, -122,136,243,103,246,127,101,229,145,150,138,38,78,161,179,251,31,182,240, -72,203,69,19,39,80,217,253,143,219,121,100,109,162,137,147,212,71,155,63, -177,251,111,4,141,180,81,50,122,136,243,103,246,63,109,229,145,54,138,38, -78,161,179,251,133,90,40,153,61,68,121,179,251,132,196,128,31,80,217,248, -36,76,72,1,245,13,159,150,69,68,128,31,168,143,54,126,9,21,18,0,126,162,60, -217,249,100,100,72,1,244,110,160,86,79,4,140,137,0,62,141,212,10,201,229, -145,113,32,7,210,173,192,159,130,69,196,128,31,74,183,2,126,89,23,18,0,125, -67,103,246,127,101,224,145,113,32,7,212,54,127,103,246,94,89,25,18,0,126, -162,60,217,253,159,217,120,36,100,72,1,250,136,243,103,246,127,101,229,145, -113,32,7,212,54,127,99,246,222,9,23,18,0,125,67,103,246,63,109,229,145,145, -32,7,234,35,205,159,216,253,183,130,70,68,128,31,168,143,54,127,99,246,222, -89,17,18,0,125,67,103,247,9,137,0,63,81,30,108,254,224,130,115,240,98,66, -128,92,136,84,45,101,180,81,50,28,78,99,193,18,40,56,153,58,178,52,211,58, -17,46,134,133,41,34,164,75,164,104,156,52,52,199,37,222,232,206,66,64,207, -18,66,136,137,19,173,62,46,155,181,167,72,147,235,226,233,186,120,121,58, -226,157,214,111,84,76,73,36,109,24,72,130,100,112,200,178,76,157,124,92, -242,70,120,25,193,34,245,241,117,240,97,1,107,33,25,212,54,160,90,7,244,29, -24,38,66,254,223,215,125,119,215,126,232,190,43,226,67,244,1,250,193,125, -111,216,11,234,254,192,63,96,159,173,234,26,84,53,19,194,126,175,168,105, -80,212,79,8,234,26,84,53,19,193,156,20,144,83,52,167,20,52,198,109,24,18, -68,225,115,150,64,53,52,104,200,84,52,131,76,167,20,52,200,46,7,48,52,146, -132,102,57,33,165,139,168,209,154,32,104,220,193,189,214,27,16,209,176,23, -26,220,98,149,110,116,70,75,188,98,116,136,34,33,101,4,192,223,178,32,38,6, -144,18,67,72,1,58,67,0,100,95,74,17,159,217,31,210,132,103,246,58,251,33, -121,232,55,150,227,125,143,216,16,190,91,141,246,68,31,150,223,178,39,150, -223,177,251,0,244,135,97,37,32,24,132,104,24,66,161,175,164,202,134,140, -151,39,212,125,255,221,125,74,86,9,79,168,104,201,116,178,139,154,22,134, -145,72,51,93,18,116,64,145,13,39,82,34,33,38,73,76,132,185,4,185,187,198, -100,229,233,197,13,49,228,73,247,4,4,78,98,79,184,32,34,105,187,201,147, -154,185,187,200,147,165,233,197,13,50,230,239,82,98,151,167,20,52,206,145, -39,234,76,69,245,22,190,224,128,138,228,73,244,180,90,251,130,2,43,145,39, -234,76,76,243,155,51,162,68,159,88,230,204,234,145,39,234,76,67,240,38,67, -200,147,232,193,50,46,68,159,169,49,31,206,164,100,137,18,125,59,169,25,54, -68,159,169,49,51,200,109,38,73,42,68,159,88,134,210,100,147,100,73,250,147, -20,188,65,57,163,146,164,73,246,68,19,154,57,74,68,159,169,49,51,200,90, -209,34,9,205,28,159,34,79,172,66,214,137,16,78,104,228,121,18,125,154,24, -72,152,147,236,208,194,101,205,39,92,82,200,147,145,137,63,82,98,103,144, -181,162,68,19,154,57,60,196,159,88,133,173,18,32,156,209,201,166,36,253,73, -138,94,32,156,209,201,70,36,251,34,9,205,28,154,98,79,212,152,153,228,54, -147,36,148,98,79,172,67,105,50,73,102,36,253,73,136,254,117,35,36,24,147, -233,221,72,201,38,36,253,73,136,126,6,12,98,79,163,6,20,98,79,212,152,135, -224,76,135,49,39,209,130,100,89,137,63,82,98,103,156,217,157,6,36,250,199, -54,103,113,137,63,82,98,47,168,181,247,4,4,86,98,79,165,162,215,220,16,17, -57,137,62,205,12,36,166,238,173,194,2,201,217,161,132,236,167,20,52,210, -155,186,183,8,11,39,70,9,147,178,156,80,211,50,110,236,208,194,118,83,138, -26,102,77,221,24,38,78,202,113,67,76,54,186,195,245,38,34,188,17,145,23,55, -117,241,32,145,36,57,173,155,186,75,189,205,35,102,128,44,243,119,74,139, -144,113,243,221,36,77,21,38,144,210,161,168,158,35,230,144,192,154,42,77, -33,165,67,81,60,15,173,7,90,159,49,13,213,64,186,17,62,96,47,170,129,116, -33,165,64,202,113,36,226,134,70,110,234,220,32,44,157,163,222,72,244,64, -145,23,55,118,143,121,35,209,2,68,140,221,213,184,64,89,58,183,88,145,232, -129,34,46,110,234,221,98,71,162,4,136,153,80,50,156,80,211,22,79,90,38,105, -16,17,17,207,18,61,96,17,10,192,76,71,106,220,32,44,157,19,152,240,68,138, -17,193,30,137,195,39,65,51,8,224,143,65,54,22,46,103,68,112,71,162,112,200, -184,144,116,17,59,20,24,243,52,72,58,8,134,42,23,50,68,108,3,206,87,71,164, -0,142,73,57,132,41,42,72,225,107,4,167,212,52,100,191,92,83,161,163,37,250, -226,158,141,145,208,89,154,79,90,4,66,73,209,153,100,180,8,133,145,208,89, -158,36,169,35,34,17,244,145,198,247,60,137,114,26,97,57,162,4,206,137,116, -17,136,48,144,68,212,97,27,57,24,64,90,201,18,5,13,25,4,5,172,160,123,215, -138,62,46,121,35,60,117,18,233,27,70,18,32,10,200,212,75,175,139,166,233, -225,228,235,138,227,130,93,117,155,215,197,207,36,103,131,212,11,161,58, -226,186,110,234,220,32,44,157,148,226,134,153,19,119,101,56,161,166,88,156, -217,78,52,20,221,17,200,147,25,137,53,17,180,97,34,0,172,140,19,154,84,26, -145,0,86,68,90,40,152,2,178,22,160,93,8,69,19,18,98,37,210,94,100,108,144, -21,145,8,151,75,23,100,141,66,37,217,16,11,32,226,248,146,164,108,250,75, -204,141,146,28,217,24,177,33,50,66,72,128,92,6,66,161,164,235,226,231,146, -51,65,36,225,144,168,105,58,248,185,228,140,240,97,68,128,153,38,98,79,174, -179,122,248,185,228,140,241,214,129,132,150,12,73,245,214,111,95,23,60,145, -158,58,50,72,81,67,230,232,184,196,159,95,23,77,211,195,201,215,21,47,139, -166,233,225,228,50,200,211,76,229,2,201,25,149,241,67,102,138,52,146,16,30, -67,18,66,3,201,34,52,78,25,61,72,160,94,115,30,230,145,179,73,26,39,12,158, -164,81,33,144,78,25,61,72,160,94,115,30,230,145,179,72,200,39,12,158,164, -80,132,75,165,67,81,50,21,18,235,65,214,169,224,140,137,210,173,192,154,30, -8,200,157,67,102,66,84,11,71,169,20,19,209,139,162,158,207,15,39,73,24,186, -43,236,176,217,130,253,36,98,232,187,177,33,73,18,52,68,233,35,23,69,93, -136,26,98,116,145,139,162,158,146,160,95,73,24,186,37,12,72,5,16,64,145,10, -32,76,71,64,156,217,161,180,34,6,64,208,198,36,78,50,20,20,92,204,50,44, -147,32,134,226,17,114,33,202,134,129,107,192,202,232,160,180,104,166,135, -52,72,40,144,213,33,178,152,26,34,56,163,105,44,104,146,116,139,77,43,34, -98,57,38,116,72,179,60,93,97,206,56,52,240,242,56,163,168,34,81,57,178,153, -42,228,12,182,58,22,66,89,19,57,68,176,74,68,35,104,195,18,239,116,102,114, -94,100,104,228,100,49,238,140,203,42,60,145,35,104,181,146,113,161,10,80, -46,68,82,24,245,145,132,108,228,148,54,100,137,64,34,13,100,153,222,1,40,6, -33,223,20,84,19,34,95,23,76,130,153,6,103,208,43,64,141,41,130,104,17,112, -130,44,96, -}; - -/* to convert a heap stridx to a token number, subtract - * DUK_STRIDX_START_RESERVED and add DUK_TOK_START_RESERVED. - */ - +#if defined(DUK_USE_ROM_OBJECTS) +#error ROM support not enabled, rerun make_dist.py with --rom-support +#else /* DUK_USE_ROM_OBJECTS */ /* native functions: 149 */ DUK_INTERNAL const duk_c_function duk_bi_native_functions[149] = { duk_bi_array_constructor, @@ -12698,95 +9214,7 @@ DUK_INTERNAL const duk_c_function duk_bi_native_functions[149] = { duk_bi_typedarray_constructor, duk_bi_typedarray_set, }; - -DUK_INTERNAL const duk_uint8_t duk_builtins_data[1955] = { -105,195,75,32,121,40,105,53,14,252,104,54,8,131,72,0,115,225,65,165,244,55, -243,6,145,32,210,24,210,186,25,249,35,120,216,99,226,13,79,33,116,177,164, -180,44,192,4,202,52,150,220,24,0,169,70,146,219,123,0,23,40,210,91,110,96, -3,37,26,75,109,172,0,108,163,73,109,177,128,14,148,105,45,181,176,1,242, -144,56,209,36,94,6,167,133,98,80,211,28,1,250,67,72,168,67,232,13,46,192, -47,162,52,165,0,62,80,163,72,128,61,40,107,26,7,37,20,53,201,131,88,0,66, -134,185,48,98,80,215,38,11,96,0,138,26,228,193,76,0,69,67,92,152,37,128,6, -168,107,147,4,48,1,165,13,114,96,118,0,44,161,174,76,12,192,7,148,53,201, -129,88,1,26,134,165,80,130,80,31,255,241,69,224,63,252,0,0,0,0,0,0,46,32, -63,248,0,0,0,0,0,0,47,98,7,140,16,116,194,7,12,48,108,196,6,140,80,100,198, -6,12,112,92,200,5,140,149,192,202,91,204,181,184,204,91,76,213,176,206,90, -204,240,84,208,5,13,9,124,210,43,13,24,64,226,131,205,112,56,216,3,77,152, -48,218,130,205,184,40,220,130,77,216,32,222,129,205,248,24,224,129,78,25, -214,164,2,90,81,17,104,67,37,157,8,150,100,18,89,78,201,100,60,37,140,244, -150,35,226,88,79,201,96,71,37,125,20,122,188,138,62,0,2,165,70,39,255,255, -193,43,67,0,0,80,127,192,58,182,220,80,0,21,59,170,64,0,107,77,8,172,181, -146,176,202,138,187,59,42,204,200,170,182,146,168,218,80,0,26,155,97,42,77, -68,168,181,20,0,6,160,210,74,123,89,64,0,127,255,4,10,153,219,157,70,163, -185,130,140,228,10,43,160,40,141,228,161,184,18,132,226,64,161,127,128,0, -63,225,1,109,74,8,137,71,58,5,4,221,20,3,147,233,249,193,240,80,255,192,6, -120,2,64,127,195,0,173,28,56,20,96,80,128,0,206,192,143,167,64,164,156,131, -2,112,14,125,55,9,4,216,40,19,80,180,77,3,9,51,13,94,153,7,159,76,64,207, -192,0,102,0,103,255,255,242,240,67,73,112,33,168,0,12,180,16,212,0,10,88,8, -106,0,7,43,4,53,0,4,149,4,31,128,0,202,66,15,255,255,194,137,254,0,50,135, -227,224,127,196,2,87,132,17,82,143,24,10,44,96,36,240,4,147,64,146,119,4, -125,49,131,52,152,65,154,128,0,201,97,9,36,133,36,142,25,18,40,114,77,98, -17,33,137,68,130,45,17,247,240,71,159,193,29,127,8,0,12,113,252,32,0,49, -184,208,70,162,144,20,95,240,0,7,252,80,37,120,193,81,196,194,0,3,69,19,0, -81,191,197,140,192,127,239,255,255,255,255,255,255,140,64,0,0,0,0,0,0,0,1, -139,192,127,248,0,0,0,0,0,0,138,192,127,240,0,0,0,0,0,0,139,64,255,240,0,0, -0,0,0,0,0,31,241,128,149,224,0,0,0,0,0,0,0,0,13,71,98,37,25,128,148,86,48, -69,23,201,19,94,36,73,132,129,71,255,0,56,136,233,34,3,223,208,241,192,3, -254,56,18,188,135,255,128,0,0,0,0,0,11,104,228,128,135,18,4,0,6,26,72,16,0, -42,49,32,64,0,225,132,129,0,4,133,146,4,0,21,210,72,16,0,103,65,32,64,1, -220,228,100,162,146,130,20,74,8,72,248,64,2,33,3,225,0,9,131,143,132,0,42, -12,62,16,0,184,40,248,64,3,32,131,225,0,13,129,143,132,0,58,4,62,16,0,248, -8,248,64,4,32,3,225,0,17,127,143,132,0,73,252,62,16,1,55,232,248,64,5,31, -131,225,0,21,125,143,132,0,89,244,62,16,1,119,201,0,31,4,68,123,144,148,0, -97,236,66,80,1,151,169,10,248,0,211,208,133,124,0,109,230,66,254,0,56,242, -33,127,0,29,120,144,207,128,15,60,8,103,192,7,221,228,37,0,32,119,16,148,0, -133,218,66,190,0,68,236,33,95,0,35,117,144,191,128,18,58,136,95,192,9,92, -195,225,0,38,114,144,148,0,156,41,31,224,0,15,249,1,138,144,65,192,2,22,0, -88,16,46,24,77,208,148,103,4,102,252,102,244,128,0,0,0,0,0,0,0,0,220,111, -68,113,61,146,142,248,0,164,255,128,0,63,228,133,109,16,89,178,65,18,235, -153,25,150,220,184,188,180,230,6,32,209,205,0,20,175,240,0,39,252,160,77, -162,184,54,72,34,0,82,255,192,0,159,242,193,54,138,222,217,32,136,1,76,255, -0,2,127,204,4,218,43,115,100,130,32,5,55,252,0,9,255,52,19,104,173,173,146, -8,128,20,239,240,0,39,252,224,77,162,182,54,72,34,0,83,255,192,0,159,243, -193,54,138,214,217,32,136,0,255,255,33,177,1,0,22,252,42,44,81,93,165,175, -1,0,9,174,198,238,213,84,89,173,0,255,152,185,11,251,232,231,189,171,0,255, -220,85,29,148,174,11,249,169,0,255,111,45,236,84,155,148,57,167,1,0,36,135, -237,81,16,180,97,165,0,255,154,130,121,153,252,239,53,163,0,255,218,130, -121,153,252,239,53,38,130,129,25,234,5,0,1,103,40,20,0,9,154,160,80,0,54, -98,146,25,106,5,0,4,101,40,20,0,21,146,160,80,0,102,66,129,64,1,216,234,5, -0,8,99,39,47,49,83,215,152,138,73,0,1,97,168,129,132,160,80,0,150,10,129, -64,2,152,10,5,0,11,95,168,20,0,48,31,255,224,5,17,72,66,249,37,129,127,255, -0,0,191,255,128,0,63,255,197,31,192,64,196,80,0,0,0,0,0,8,26,112,17,169,0, -154,80,1,171,28,124,88,65,233,49,7,133,100,29,149,15,14,138,71,135,37,3, -195,66,114,5,77,252,0,243,178,40,25,200,48,101,30,0,127,210,128,0,85,31, -192,0,31,244,224,5,71,22,8,0,13,20,88,1,85,127,0,0,127,212,128,21,29,220, -32,0,52,87,112,5,89,252,0,1,255,86,16,166,66,0,0,0,0,0,0,0,0,170,72,38,29, -219,247,16,49,75,32,193,52,130,244,193,225,114,96,248,0,8,249,48,124,0,8, -90,152,62,0,6,44,76,31,0,4,21,166,15,128,2,147,255,252,38,212,16,184,155, -250,226,217,150,47,46,91,249,54,96,139,229,229,203,127,36,26,119,32,203, -203,150,254,72,52,97,221,147,102,157,217,192,10,191,248,0,157,4,72,15,250, -224,1,154,140,36,0,8,43,31,224,0,15,251,0,16,55,139,164,0,192,220,46,144,2, -3,104,186,64,12,77,130,233,0,33,53,139,164,0,200,212,46,144,2,35,72,186,64, -8,205,2,233,0,36,51,140,180,0,192,204,50,208,2,3,40,203,64,12,76,131,45,0, -33,49,140,180,0,200,196,50,208,2,35,8,203,64,8,204,3,45,0,36,7,255,248,1, -82,101,16,112,24,72,0,8,86,159,193,56,192,63,240,0,0,0,0,0,0,1,151,246,96, -0,21,183,240,78,48,15,252,0,0,0,0,0,0,0,101,253,168,0,5,113,252,19,140,3, -255,0,0,0,0,0,0,0,25,127,110,0,1,93,127,4,227,1,0,0,0,0,0,0,0,0,6,95,220, -128,0,87,159,193,56,192,64,0,0,0,0,0,0,0,1,151,247,96,0,21,247,240,78,48, -16,4,0,0,0,0,0,0,0,101,253,232,0,5,129,252,19,140,4,1,0,0,0,0,0,0,0,25,127, -126,0,1,97,127,4,227,1,0,64,0,0,0,0,0,0,6,95,224,128,0,88,159,193,56,192, -64,32,0,0,0,0,0,0,1,151,248,96,0,22,55,240,5,157,170,33,68,178,69,10,193, -20,10,104,79,138,36,0,12,31,248,160,88,154,23,66,100,93,32,2,9,129,116,128, -0,165,197,210,0,18,150,23,72,0,138,84,93,32,3,41,65,116,128,1,36,197,210,0, -20,146,23,72,0,146,68,93,32,3,73,1,116,128,1,163,197,210,0,22,142,23,72,0, -34,52,93,32,1,136,193,118,128,2,162,197,218,0,26,138,23,104,0,170,36,93, -160,3,168,129,150,33,198,90,0,32,134,25,104,0,10,20,101,160,1,40,65,150, -128,8,160,198,90,0,50,130,25,104,0,18,4,101,160,1,72,1,150,128,9,31,198,90, -0,52,126,25,104,0,25,244,101,160,1,103,193,150,128,2,30,198,90,0,24,122,25, -136,0,41,228,102,32,1,167,129,152,128,10,157,198,98,0,59,71,91,99,157,104, -9,213,118,39,5,8,159,20,40,0,10,109,90,19,81,132,39,151,32, -}; -#ifdef DUK_USE_BUILTIN_INITJS +#if defined(DUK_USE_BUILTIN_INITJS) DUK_INTERNAL const duk_uint8_t duk_initjs_data[187] = { 40,102,117,110,99,116,105,111,110,40,100,44,97,41,123,102,117,110,99,116, 105,111,110,32,98,40,97,44,98,44,99,41,123,79,98,106,101,99,116,46,100,101, @@ -12799,396 +9227,550 @@ DUK_INTERNAL const duk_uint8_t duk_initjs_data[187] = { 125,41,40,116,104,105,115,44,68,117,107,116,97,112,101,41,59,10,0, }; #endif /* DUK_USE_BUILTIN_INITJS */ -#elif defined(DUK_USE_DOUBLE_ME) -DUK_INTERNAL const duk_uint8_t duk_strings_data[2624] = { -55,86,227,24,145,55,102,120,144,3,63,94,228,54,100,137,186,50,11,164,109, -77,215,5,61,35,106,206,149,110,4,254,219,237,58,8,196,24,103,74,183,2,127, -103,246,93,4,98,12,47,180,67,103,246,127,101,208,70,32,194,186,134,207,236, -254,203,160,140,65,133,246,136,108,254,199,237,186,8,196,24,87,80,217,253, -143,219,116,17,136,49,30,209,13,159,220,116,75,3,30,65,244,17,136,48,174, -209,13,159,220,116,17,136,48,158,161,179,251,142,130,49,6,17,209,130,96, -237,80,75,47,160,140,65,142,134,133,41,34,110,134,133,41,34,3,25,110,8,22, -158,130,38,163,8,217,200,158,76,156,210,117,128,153,203,210,70,46,137,187, -18,27,164,187,201,209,130,100,55,91,70,4,145,63,66,231,44,128,105,187,41, -197,13,49,122,8,196,24,71,75,70,138,104,115,77,215,5,36,20,201,214,209,107, -79,104,209,144,168,105,6,207,251,209,104,209,125,212,227,66,127,235,191, -239,232,180,90,52,95,69,247,83,141,9,255,174,255,191,162,211,80,210,253,23, -221,78,52,39,254,183,254,254,139,72,105,126,139,238,167,26,19,255,91,255, -127,69,166,129,191,69,247,83,141,9,255,175,255,191,162,213,26,50,23,232, -190,234,113,161,63,245,115,119,86,227,118,83,138,26,98,9,110,48,86,22,148, -160,152,22,82,70,46,137,44,8,180,163,32,104,98,206,32,17,7,16,88,101,100, -206,42,70,36,108,205,18,74,140,33,196,230,60,2,152,146,33,38,230,8,36,79, -182,251,65,156,151,24,200,33,145,162,25,80,209,24,67,0,166,68,52,174,61,73, -25,33,205,25,27,84,177,195,234,220,1,144,105,99,135,217,16,17,17,208,72, -199,179,60,93,100,146,49,232,162,64,76,135,19,152,244,44,136,223,98,67,4, -18,33,247,217,158,36,0,209,190,156,13,26,201,21,111,165,67,64,180,100,145, -62,250,32,45,100,33,55,214,1,229,223,65,19,72,187,236,206,137,35,125,120, -190,201,104,105,15,190,201,212,136,136,125,246,160,137,27,83,239,171,37, -200,218,159,125,168,34,192,61,27,233,93,22,1,114,78,250,28,76,130,112,200, -93,245,164,188,207,190,204,17,49,38,109,246,160,93,8,119,185,13,153,34,173, -246,113,0,136,48,76,10,90,26,78,182,140,9,34,130,161,100,235,64,194,9,226, -44,166,1,41,221,153,226,235,118,120,121,58,72,197,209,63,71,69,76,15,34, -164,73,244,171,112,39,246,223,104,169,18,125,42,220,9,253,159,217,38,68, -159,104,134,207,236,254,201,18,36,250,134,207,236,254,201,50,36,251,68,54, -127,99,246,200,145,39,212,54,127,99,246,200,145,39,218,33,179,251,131,200, -147,234,27,63,184,81,137,62,149,110,4,254,219,237,20,98,79,165,91,129,63, -179,251,36,152,147,237,16,217,253,159,217,32,196,159,80,217,253,159,217,36, -196,159,104,134,207,236,126,217,6,36,250,134,207,236,126,217,6,36,251,68, -54,127,112,115,18,125,67,103,247,8,149,2,8,196,24,143,131,137,146,90,121, -35,162,44,140,35,102,160,226,100,235,138,89,18,102,13,10,82,68,200,151,106, -130,88,131,4,192,73,225,228,85,162,137,147,168,108,252,18,42,209,68,201, -212,54,126,89,23,104,162,100,245,17,230,207,193,34,237,20,76,158,162,60, -217,249,100,109,162,137,147,163,117,2,178,120,36,109,162,137,147,163,117,2, -178,121,100,101,162,137,147,165,91,129,63,4,140,180,81,50,116,171,112,39, -229,145,150,138,38,78,161,179,251,63,178,240,72,203,69,19,39,80,217,253, -159,217,121,100,109,162,137,147,212,71,155,63,179,251,47,4,141,180,81,50, -122,136,243,103,246,127,101,229,145,150,138,38,78,161,179,251,31,182,240, -72,203,69,19,39,80,217,253,143,219,121,100,109,162,137,147,212,71,155,63, -177,251,111,4,141,180,81,50,122,136,243,103,246,63,109,229,145,54,138,38, -78,161,179,251,133,90,40,153,61,68,121,179,251,132,196,128,31,80,217,248, -36,76,72,1,245,13,159,150,69,68,128,31,168,143,54,126,9,21,18,0,126,162,60, -217,249,100,100,72,1,244,110,160,86,79,4,140,137,0,62,141,212,10,201,229, -145,113,32,7,210,173,192,159,130,69,196,128,31,74,183,2,126,89,23,18,0,125, -67,103,246,127,101,224,145,113,32,7,212,54,127,103,246,94,89,25,18,0,126, -162,60,217,253,159,217,120,36,100,72,1,250,136,243,103,246,127,101,229,145, -113,32,7,212,54,127,99,246,222,9,23,18,0,125,67,103,246,63,109,229,145,145, -32,7,234,35,205,159,216,253,183,130,70,68,128,31,168,143,54,127,99,246,222, -89,17,18,0,125,67,103,247,9,137,0,63,81,30,108,254,224,130,115,240,98,66, -128,92,136,84,45,101,180,81,50,28,78,99,193,18,40,56,153,58,178,52,211,58, -17,46,134,133,41,34,164,75,164,104,156,52,52,199,37,222,232,206,66,64,207, -18,66,136,137,19,173,62,46,155,181,167,72,147,235,226,233,186,120,121,58, -226,157,214,111,84,76,73,36,109,24,72,130,100,112,200,178,76,157,124,92, -242,70,120,25,193,34,245,241,117,240,97,1,107,33,25,212,54,160,90,7,244,29, -24,38,66,254,223,215,125,119,215,126,232,190,43,226,67,244,1,250,193,125, -111,216,11,234,254,192,63,96,159,173,234,26,84,53,19,194,126,175,168,105, -80,212,79,8,234,26,84,53,19,193,156,20,144,83,52,167,20,52,198,109,24,18, -68,225,115,150,64,53,52,104,200,84,52,131,76,167,20,52,200,46,7,48,52,146, -132,102,57,33,165,139,168,209,154,32,104,220,193,189,214,27,16,209,176,23, -26,220,98,149,110,116,70,75,188,98,116,136,34,33,101,4,192,223,178,32,38,6, -144,18,67,72,1,58,67,0,100,95,74,17,159,217,31,210,132,103,246,58,251,33, -121,232,55,150,227,125,143,216,16,190,91,141,246,68,31,150,223,178,39,150, -223,177,251,0,244,135,97,37,32,24,132,104,24,66,161,175,164,202,134,140, -151,39,212,125,255,221,125,74,86,9,79,168,104,201,116,178,139,154,22,134, -145,72,51,93,18,116,64,145,13,39,82,34,33,38,73,76,132,185,4,185,187,198, -100,229,233,197,13,49,228,73,247,4,4,78,98,79,184,32,34,105,187,201,147, -154,185,187,200,147,165,233,197,13,50,230,239,82,98,151,167,20,52,206,145, -39,234,76,69,245,22,190,224,128,138,228,73,244,180,90,251,130,2,43,145,39, -234,76,76,243,155,51,162,68,159,88,230,204,234,145,39,234,76,67,240,38,67, -200,147,232,193,50,46,68,159,169,49,31,206,164,100,137,18,125,59,169,25,54, -68,159,169,49,51,200,109,38,73,42,68,159,88,134,210,100,147,100,73,250,147, -20,188,65,57,163,146,164,73,246,68,19,154,57,74,68,159,169,49,51,200,90, -209,34,9,205,28,159,34,79,172,66,214,137,16,78,104,228,121,18,125,154,24, -72,152,147,236,208,194,101,205,39,92,82,200,147,145,137,63,82,98,103,144, -181,162,68,19,154,57,60,196,159,88,133,173,18,32,156,209,201,166,36,253,73, -138,94,32,156,209,201,70,36,251,34,9,205,28,154,98,79,212,152,153,228,54, -147,36,148,98,79,172,67,105,50,73,102,36,253,73,136,254,117,35,36,24,147, -233,221,72,201,38,36,253,73,136,126,6,12,98,79,163,6,20,98,79,212,152,135, -224,76,135,49,39,209,130,100,89,137,63,82,98,103,156,217,157,6,36,250,199, -54,103,113,137,63,82,98,47,168,181,247,4,4,86,98,79,165,162,215,220,16,17, -57,137,62,205,12,36,166,238,173,194,2,201,217,161,132,236,167,20,52,210, -155,186,183,8,11,39,70,9,147,178,156,80,211,50,110,236,208,194,118,83,138, -26,102,77,221,24,38,78,202,113,67,76,54,186,195,245,38,34,188,17,145,23,55, -117,241,32,145,36,57,173,155,186,75,189,205,35,102,128,44,243,119,74,139, -144,113,243,221,36,77,21,38,144,210,161,168,158,35,230,144,192,154,42,77, -33,165,67,81,60,15,173,7,90,159,49,13,213,64,186,17,62,96,47,170,129,116, -33,165,64,202,113,36,226,134,70,110,234,220,32,44,157,163,222,72,244,64, -145,23,55,118,143,121,35,209,2,68,140,221,213,184,64,89,58,183,88,145,232, -129,34,46,110,234,221,98,71,162,4,136,153,80,50,156,80,211,22,79,90,38,105, -16,17,17,207,18,61,96,17,10,192,76,71,106,220,32,44,157,19,152,240,68,138, -17,193,30,137,195,39,65,51,8,224,143,65,54,22,46,103,68,112,71,162,112,200, -184,144,116,17,59,20,24,243,52,72,58,8,134,42,23,50,68,108,3,206,87,71,164, -0,142,73,57,132,41,42,72,225,107,4,167,212,52,100,191,92,83,161,163,37,250, -226,158,141,145,208,89,154,79,90,4,66,73,209,153,100,180,8,133,145,208,89, -158,36,169,35,34,17,244,145,198,247,60,137,114,26,97,57,162,4,206,137,116, -17,136,48,144,68,212,97,27,57,24,64,90,201,18,5,13,25,4,5,172,160,123,215, -138,62,46,121,35,60,117,18,233,27,70,18,32,10,200,212,75,175,139,166,233, -225,228,235,138,227,130,93,117,155,215,197,207,36,103,131,212,11,161,58, -226,186,110,234,220,32,44,157,148,226,134,153,19,119,101,56,161,166,88,156, -217,78,52,20,221,17,200,147,25,137,53,17,180,97,34,0,172,140,19,154,84,26, -145,0,86,68,90,40,152,2,178,22,160,93,8,69,19,18,98,37,210,94,100,108,144, -21,145,8,151,75,23,100,141,66,37,217,16,11,32,226,248,146,164,108,250,75, -204,141,146,28,217,24,177,33,50,66,72,128,92,6,66,161,164,235,226,231,146, -51,65,36,225,144,168,105,58,248,185,228,140,240,97,68,128,153,38,98,79,174, -179,122,248,185,228,140,241,214,129,132,150,12,73,245,214,111,95,23,60,145, -158,58,50,72,81,67,230,232,184,196,159,95,23,77,211,195,201,215,21,47,139, -166,233,225,228,50,200,211,76,229,2,201,25,149,241,67,102,138,52,146,16,30, -67,18,66,3,201,34,52,78,25,61,72,160,94,115,30,230,145,179,73,26,39,12,158, -164,81,33,144,78,25,61,72,160,94,115,30,230,145,179,72,200,39,12,158,164, -80,132,75,165,67,81,50,21,18,235,65,214,169,224,140,137,210,173,192,154,30, -8,200,157,67,102,66,84,11,71,169,20,19,209,139,162,158,207,15,39,73,24,186, -43,236,176,217,130,253,36,98,232,187,177,33,73,18,52,68,233,35,23,69,93, -136,26,98,116,145,139,162,158,146,160,95,73,24,186,37,12,72,5,16,64,145,10, -32,76,71,64,156,217,161,180,34,6,64,208,198,36,78,50,20,20,92,204,50,44, -147,32,134,226,17,114,33,202,134,129,107,192,202,232,160,180,104,166,135, -52,72,40,144,213,33,178,152,26,34,56,163,105,44,104,146,116,139,77,43,34, -98,57,38,116,72,179,60,93,97,206,56,52,240,242,56,163,168,34,81,57,178,153, -42,228,12,182,58,22,66,89,19,57,68,176,74,68,35,104,195,18,239,116,102,114, -94,100,104,228,100,49,238,140,203,42,60,145,35,104,181,146,113,161,10,80, -46,68,82,24,245,145,132,108,228,148,54,100,137,64,34,13,100,153,222,1,40,6, -33,223,20,84,19,34,95,23,76,130,153,6,103,208,43,64,141,41,130,104,17,112, -130,44,96, -}; - -/* to convert a heap stridx to a token number, subtract - * DUK_STRIDX_START_RESERVED and add DUK_TOK_START_RESERVED. - */ - -/* native functions: 149 */ -DUK_INTERNAL const duk_c_function duk_bi_native_functions[149] = { - duk_bi_array_constructor, - duk_bi_array_constructor_is_array, - duk_bi_array_prototype_concat, - duk_bi_array_prototype_indexof_shared, - duk_bi_array_prototype_iter_shared, - duk_bi_array_prototype_join_shared, - duk_bi_array_prototype_pop, - duk_bi_array_prototype_push, - duk_bi_array_prototype_reduce_shared, - duk_bi_array_prototype_reverse, - duk_bi_array_prototype_shift, - duk_bi_array_prototype_slice, - duk_bi_array_prototype_sort, - duk_bi_array_prototype_splice, - duk_bi_array_prototype_to_string, - duk_bi_array_prototype_unshift, - duk_bi_arraybuffer_constructor, - duk_bi_arraybuffer_isview, - duk_bi_boolean_constructor, - duk_bi_boolean_prototype_tostring_shared, - duk_bi_buffer_compare_shared, - duk_bi_buffer_constructor, - duk_bi_buffer_prototype_tostring_shared, - duk_bi_buffer_readfield, - duk_bi_buffer_slice_shared, - duk_bi_buffer_writefield, - duk_bi_dataview_constructor, - duk_bi_date_constructor, - duk_bi_date_constructor_now, - duk_bi_date_constructor_parse, - duk_bi_date_constructor_utc, - duk_bi_date_prototype_get_shared, - duk_bi_date_prototype_get_timezone_offset, - duk_bi_date_prototype_set_shared, - duk_bi_date_prototype_set_time, - duk_bi_date_prototype_to_json, - duk_bi_date_prototype_tostring_shared, - duk_bi_date_prototype_value_of, - duk_bi_duktape_object_act, - duk_bi_duktape_object_compact, - duk_bi_duktape_object_dec, - duk_bi_duktape_object_enc, - duk_bi_duktape_object_fin, - duk_bi_duktape_object_gc, - duk_bi_duktape_object_info, - duk_bi_error_constructor_shared, - duk_bi_error_prototype_filename_getter, - duk_bi_error_prototype_filename_setter, - duk_bi_error_prototype_linenumber_getter, - duk_bi_error_prototype_linenumber_setter, - duk_bi_error_prototype_stack_getter, - duk_bi_error_prototype_stack_setter, - duk_bi_error_prototype_to_string, - duk_bi_function_constructor, - duk_bi_function_prototype, - duk_bi_function_prototype_apply, - duk_bi_function_prototype_bind, - duk_bi_function_prototype_call, - duk_bi_function_prototype_to_string, - duk_bi_global_object_decode_uri, - duk_bi_global_object_decode_uri_component, - duk_bi_global_object_encode_uri, - duk_bi_global_object_encode_uri_component, - duk_bi_global_object_escape, - duk_bi_global_object_eval, - duk_bi_global_object_is_finite, - duk_bi_global_object_is_nan, - duk_bi_global_object_parse_float, - duk_bi_global_object_parse_int, - duk_bi_global_object_print_helper, - duk_bi_global_object_require, - duk_bi_global_object_unescape, - duk_bi_json_object_parse, - duk_bi_json_object_stringify, - duk_bi_logger_constructor, - duk_bi_logger_prototype_fmt, - duk_bi_logger_prototype_log_shared, - duk_bi_logger_prototype_raw, - duk_bi_math_object_max, - duk_bi_math_object_min, - duk_bi_math_object_onearg_shared, - duk_bi_math_object_random, - duk_bi_math_object_twoarg_shared, - duk_bi_nodejs_buffer_byte_length, - duk_bi_nodejs_buffer_concat, - duk_bi_nodejs_buffer_constructor, - duk_bi_nodejs_buffer_copy, - duk_bi_nodejs_buffer_fill, - duk_bi_nodejs_buffer_is_buffer, - duk_bi_nodejs_buffer_is_encoding, - duk_bi_nodejs_buffer_tojson, - duk_bi_nodejs_buffer_tostring, - duk_bi_nodejs_buffer_write, - duk_bi_number_constructor, - duk_bi_number_prototype_to_exponential, - duk_bi_number_prototype_to_fixed, - duk_bi_number_prototype_to_locale_string, - duk_bi_number_prototype_to_precision, - duk_bi_number_prototype_to_string, - duk_bi_number_prototype_value_of, - duk_bi_object_constructor, - duk_bi_object_constructor_create, - duk_bi_object_constructor_define_properties, - duk_bi_object_constructor_define_property, - duk_bi_object_constructor_get_own_property_descriptor, - duk_bi_object_constructor_is_extensible, - duk_bi_object_constructor_is_sealed_frozen_shared, - duk_bi_object_constructor_keys_shared, - duk_bi_object_constructor_prevent_extensions, - duk_bi_object_constructor_seal_freeze_shared, - duk_bi_object_getprototype_shared, - duk_bi_object_prototype_has_own_property, - duk_bi_object_prototype_is_prototype_of, - duk_bi_object_prototype_property_is_enumerable, - duk_bi_object_prototype_to_locale_string, - duk_bi_object_prototype_to_string, - duk_bi_object_prototype_value_of, - duk_bi_object_setprototype_shared, - duk_bi_pointer_constructor, - duk_bi_pointer_prototype_tostring_shared, - duk_bi_proxy_constructor, - duk_bi_regexp_constructor, - duk_bi_regexp_prototype_exec, - duk_bi_regexp_prototype_test, - duk_bi_regexp_prototype_to_string, - duk_bi_string_constructor, - duk_bi_string_constructor_from_char_code, - duk_bi_string_prototype_caseconv_shared, - duk_bi_string_prototype_char_at, - duk_bi_string_prototype_char_code_at, - duk_bi_string_prototype_concat, - duk_bi_string_prototype_indexof_shared, - duk_bi_string_prototype_locale_compare, - duk_bi_string_prototype_match, - duk_bi_string_prototype_replace, - duk_bi_string_prototype_search, - duk_bi_string_prototype_slice, - duk_bi_string_prototype_split, - duk_bi_string_prototype_substr, - duk_bi_string_prototype_substring, - duk_bi_string_prototype_to_string, - duk_bi_string_prototype_trim, - duk_bi_thread_constructor, - duk_bi_thread_current, - duk_bi_thread_resume, - duk_bi_thread_yield, - duk_bi_type_error_thrower, - duk_bi_typedarray_constructor, - duk_bi_typedarray_set, +#if defined(DUK_USE_DOUBLE_LE) +DUK_INTERNAL const duk_uint8_t duk_builtins_data[3833] = { +105,195,75,32,3,148,52,154,248,9,26,13,128,112,105,0,240,22,20,26,95,124,6, +152,52,137,0,120,99,74,239,129,18,70,241,191,2,98,13,79,32,42,88,210,90,2, +240,1,50,141,37,168,76,94,216,118,69,229,203,127,44,0,84,163,73,106,21,75, +14,236,249,98,242,229,191,150,0,46,81,164,181,14,165,151,54,94,89,119,99, +203,23,151,45,252,176,1,146,141,37,168,93,63,59,186,97,241,23,151,45,252, +176,1,178,141,37,168,77,79,60,50,197,229,203,127,44,0,116,163,73,106,17,86, +148,152,188,185,111,229,128,15,148,129,198,137,36,58,166,142,91,251,212, +243,195,44,94,92,183,242,13,79,8,45,14,91,252,121,148,52,199,120,63,72,105, +21,240,118,128,210,237,224,245,17,165,43,224,211,55,231,207,151,148,161,70, +145,0,31,40,107,26,2,18,138,26,228,192,142,0,16,161,174,76,9,74,26,228,192, +158,0,8,161,174,76,10,96,2,42,26,228,192,174,0,26,161,174,76,11,96,3,74,26, +228,192,190,0,44,161,174,76,12,96,3,202,26,228,192,206,0,70,161,169,84,14, +202,3,255,254,32,234,0,0,0,0,0,0,7,195,248,119,0,0,0,0,0,0,3,193,252,57, +136,1,152,32,16,194,0,166,24,6,49,0,57,138,2,12,96,18,99,128,163,32,5,153, +40,76,94,216,118,69,229,203,127,35,41,10,165,135,118,124,177,121,114,223, +200,203,67,169,101,205,151,150,93,216,242,197,229,203,127,35,49,11,167,231, +119,76,62,34,242,229,191,145,154,132,212,243,195,44,94,92,183,242,51,144, +138,180,164,197,229,203,127,35,60,6,26,0,52,208,193,226,117,215,211,15,12, +166,146,11,67,150,255,30,77,24,58,113,64,243,92,8,27,0,68,217,130,70,212, +19,54,224,161,185,5,77,216,44,111,65,115,126,12,28,16,100,225,156,16,32,18, +17,195,15,46,121,100,238,232,136,136,87,12,60,185,229,141,179,126,30,136, +100,130,233,231,59,12,228,34,66,52,243,141,167,118,158,153,80,73,9,201,151, +30,252,153,106,210,146,118,72,150,76,184,247,228,203,86,148,152,123,246, +240,223,187,46,238,135,132,132,229,221,143,126,76,181,105,73,61,36,75,46, +236,123,242,101,171,74,76,61,251,120,111,221,151,119,67,226,65,178,243,199, +135,134,83,242,66,58,238,203,207,30,30,25,81,201,5,225,203,78,238,136,163, +208,92,59,50,242,232,138,62,0,2,38,163,19,255,255,224,142,80,192,0,20,31, +240,14,135,103,203,210,135,45,253,55,244,243,195,44,252,205,197,0,1,18,221, +82,0,3,24,207,151,164,254,251,168,114,223,195,47,46,158,98,101,231,143,150, +158,29,55,242,104,68,79,62,94,147,251,238,161,203,127,12,188,186,121,157, +135,110,94,109,100,131,99,229,151,15,76,172,168,8,89,217,16,201,151,54,157, +217,104,114,223,195,47,46,154,114,243,102,68,19,158,92,59,27,73,6,205,203, +46,95,89,91,74,0,3,17,225,203,47,108,187,186,69,241,211,46,238,122,119,238, +230,216,72,70,158,116,242,225,217,151,35,81,33,26,121,198,229,191,214,93, +205,69,0,1,134,105,231,23,199,76,187,185,233,197,179,43,73,32,154,242,249, +230,214,80,0,31,255,193,2,38,103,110,117,24,81,115,0,78,228,0,161,208,16, +237,24,121,207,239,186,135,45,252,50,242,233,229,188,144,221,60,232,114, +223,211,127,79,60,50,207,204,224,72,167,14,91,248,101,229,211,204,158,113, +119,117,219,151,150,28,91,50,184,144,40,95,224,0,15,248,64,4,20,78,129,5, +195,195,134,207,38,232,130,99,195,179,97,201,244,19,22,157,217,14,15,130, +135,254,0,48,125,60,224,242,229,135,200,9,1,255,12,2,162,136,112,2,112,80, +128,0,193,177,239,221,143,15,64,35,224,152,20,144,62,27,248,3,2,9,195,175, +61,0,231,208,126,89,123,101,229,207,40,72,32,188,244,105,205,208,40,16,94, +123,52,227,202,22,136,39,61,252,186,6,18,13,207,134,205,56,242,134,175,65, +250,238,231,163,78,110,129,231,208,125,59,178,101,241,63,48,25,248,0,12,47, +102,30,125,36,238,201,151,196,252,192,103,255,255,240,92,189,178,242,242,8, +105,4,231,191,110,80,67,80,0,24,62,109,252,162,225,199,160,16,212,0,10,7, +183,15,0,67,80,0,56,54,109,59,58,101,228,8,106,0,9,6,229,151,39,92,121,66, +15,192,0,97,124,178,228,235,143,45,45,57,244,116,8,63,255,255,10,39,248,0, +195,51,114,223,182,30,140,60,161,239,201,149,248,248,31,241,0,140,80,129, +202,10,49,128,10,35,1,6,199,163,15,40,61,32,9,10,199,163,15,40,123,242,101, +131,210,4,144,108,123,247,99,195,210,8,250,15,167,118,76,190,39,230,131,52, +133,236,195,207,164,157,217,50,248,159,154,12,212,0,6,27,179,126,60,59,50, +195,223,183,134,30,89,97,9,5,219,135,166,61,16,164,131,242,203,195,102,28, +121,97,145,6,231,151,15,44,122,33,201,5,231,179,78,60,177,8,130,243,225, +179,79,72,148,66,121,245,197,207,167,45,59,179,197,162,23,211,124,205,253, +242,242,135,135,158,87,240,68,122,111,153,191,30,29,153,102,111,239,151, +148,60,60,242,191,130,23,211,125,94,28,50,242,135,135,158,87,240,128,0,196, +122,111,153,191,30,29,153,106,240,225,151,148,60,60,242,191,132,0,6,9,211, +150,157,177,160,131,115,235,139,159,78,81,72,10,47,248,0,3,254,40,17,138, +48,66,136,152,64,0,66,129,48,5,27,252,88,76,216,54,47,214,131,50,172,88,31, +255,255,255,255,255,253,239,240,153,178,103,95,173,6,101,88,176,0,64,0,0,0, +0,0,0,3,168,0,0,0,0,0,0,31,15,241,26,19,233,201,169,38,180,91,242,103,70, +147,58,77,75,48,0,0,0,0,0,0,60,31,226,51,162,199,131,82,77,104,183,228,206, +141,38,116,154,150,96,0,0,0,0,0,0,120,127,128,15,248,192,70,40,0,0,0,0,0,0, +0,0,3,10,44,68,9,216,8,20,49,130,15,211,124,109,62,50,228,95,36,55,166,248, +190,56,111,221,151,119,77,56,118,47,18,23,211,125,14,89,113,233,231,167, +126,230,18,5,31,252,0,224,188,48,242,231,148,116,144,58,181,33,143,127,64, +247,111,238,56,0,127,199,2,49,72,0,0,0,0,0,0,248,127,180,81,36,4,51,166, +248,152,122,101,167,211,150,157,217,201,2,0,3,12,233,190,166,157,185,105, +244,229,167,118,114,64,128,1,4,228,129,0,3,137,116,223,51,126,60,59,50,196, +195,211,45,62,156,180,238,206,72,16,0,72,151,77,243,55,227,195,179,45,77, +59,114,211,233,203,78,236,228,129,0,5,10,73,2,0,12,21,18,4,0,28,82,35,32, +80,74,8,62,124,189,42,105,219,148,148,16,188,249,122,70,235,179,101,156, +184,121,15,132,0,34,29,159,47,74,181,33,198,235,179,101,156,184,121,15,132, +0,38,17,159,47,73,187,247,116,208,62,16,0,168,94,124,189,42,212,135,55,126, +238,154,7,194,0,23,7,207,151,164,76,61,50,143,132,0,50,21,159,47,74,181,33, +196,195,211,40,248,64,3,96,217,242,244,137,135,200,248,64,3,161,57,242,244, +171,82,28,76,62,71,194,0,31,8,207,151,164,141,253,121,115,31,8,0,132,47,62, +94,149,106,67,145,191,175,46,99,225,0,17,133,103,203,210,110,157,221,122, +101,230,62,16,1,40,110,124,189,42,212,135,55,78,238,189,50,243,31,8,0,156, +43,62,94,148,242,227,223,187,39,49,240,128,10,67,115,229,233,86,164,58,121, +113,239,221,147,152,248,64,5,97,249,242,244,155,167,102,205,60,242,227,223, +187,39,49,240,128,11,68,179,229,233,86,164,57,186,118,108,211,207,46,61, +251,178,115,31,8,0,188,71,62,94,149,52,237,203,235,126,236,179,243,102,231, +151,161,0,32,252,242,244,169,167,110,82,34,67,249,229,233,55,78,205,154, +121,229,199,191,118,78,100,37,0,24,137,115,203,210,173,72,115,116,236,217, +167,158,92,123,247,100,230,66,80,1,152,87,60,189,41,229,199,191,118,78,100, +43,224,3,80,222,121,122,85,169,14,158,92,123,247,100,230,66,190,0,55,10, +231,151,164,221,59,186,244,203,204,133,252,0,114,27,207,47,74,181,33,205, +211,187,175,76,188,200,95,192,7,97,28,242,244,145,191,175,46,100,51,224,3, +208,190,121,122,85,169,14,70,254,188,185,144,207,128,15,193,249,229,233,19, +15,76,164,37,0,32,133,115,203,210,173,72,113,48,244,202,66,80,2,24,71,60, +189,38,239,221,211,65,10,248,1,20,47,158,94,149,106,67,155,191,119,77,4,43, +224,4,112,190,121,122,70,235,179,101,156,184,121,16,191,128,18,67,185,229, +233,86,164,56,221,118,108,179,151,15,34,23,240,2,88,62,124,189,44,229,195, +200,124,32,4,208,126,121,122,89,203,135,145,9,64,9,194,145,254,0,0,255,144, +24,100,130,14,0,16,176,2,192,129,11,33,12,1,168,193,108,96,186,48,95,32,0, +0,0,0,0,0,0,0,56,38,95,25,113,189,18,9,211,47,62,143,100,20,95,0,20,159, +240,0,7,252,144,162,241,2,195,66,7,11,89,204,140,197,252,229,197,226,230, +115,3,16,69,19,64,5,43,252,0,9,255,40,16,188,33,49,123,97,217,23,151,45, +252,131,66,7,0,20,191,240,0,39,252,176,66,240,133,82,195,187,62,88,188,185, +111,228,26,16,56,0,166,127,128,1,63,230,2,23,132,58,150,92,217,121,101,221, +143,44,94,92,183,242,13,8,28,0,83,127,192,0,159,243,65,11,194,23,79,206, +238,152,124,69,229,203,127,32,208,129,192,5,59,252,0,9,255,56,16,188,33,53, +60,240,203,23,151,45,252,131,66,7,0,20,255,240,0,39,252,240,66,240,132,85, +165,38,47,46,91,249,6,132,14,0,31,255,228,64,98,192,105,87,20,139,10,191,5, +64,130,76,156,197,132,1,101,91,91,187,22,176,36,8,28,201,204,160,119,156, +253,127,33,23,115,31,193,102,79,142,202,44,15,232,34,182,84,113,95,115,248, +52,201,241,216,176,139,0,59,148,152,85,239,47,108,254,5,66,76,1,130,212,69, +79,178,16,148,8,61,58,52,170,49,190,202,6,105,219,251,52,245,7,49,252,22, +157,26,85,25,64,205,59,127,102,158,160,246,63,74,7,135,23,53,2,65,48,227, +223,205,64,160,0,48,76,60,244,238,80,40,0,20,19,15,76,59,148,10,0,7,5,195, +211,14,230,74,72,130,99,203,167,98,129,64,1,32,120,247,243,80,40,0,44,15, +47,142,10,5,0,6,130,230,217,191,127,37,2,128,3,192,246,111,206,160,80,0, +136,30,220,62,19,151,160,123,116,238,79,94,129,240,223,221,73,32,0,48,110, +88,119,100,223,181,68,16,94,91,250,238,200,160,80,0,152,31,61,59,148,10,0, +21,4,231,199,151,69,2,128,5,192,250,97,220,160,80,0,192,127,255,128,20,23, +134,30,92,242,164,34,19,207,167,45,59,179,233,205,229,37,129,127,255,0,0, +191,255,128,0,63,255,197,131,246,203,203,158,157,251,160,0,0,0,0,0,65,98, +32,3,166,156,30,53,32,249,165,131,76,223,159,62,94,70,172,114,16,176,144, +60,56,250,19,18,5,159,25,89,32,121,180,238,42,30,129,229,221,140,164,122,7, +147,46,50,129,232,62,61,251,120,97,199,208,156,129,83,127,0,50,250,69,3, +252,131,32,248,250,242,229,151,119,72,240,3,254,148,0,2,168,254,0,0,255, +167,0,33,68,88,32,0,33,64,176,2,170,254,0,0,255,169,0,33,69,220,32,0,33,67, +184,2,172,254,0,0,255,171,8,137,144,0,0,0,0,0,0,0,128,68,73,4,195,187,126, +226,8,4,178,16,41,164,32,147,7,136,52,193,240,0,18,17,48,124,0,8,133,76,31, +0,3,33,147,7,192,1,8,116,193,240,0,82,127,255,132,47,65,11,137,191,174,45, +153,98,242,229,191,144,105,4,95,47,46,91,249,32,211,185,6,94,92,183,242,65, +163,14,236,155,52,238,206,0,85,255,192,6,13,167,157,109,57,123,136,144,31, +245,192,3,5,231,179,78,60,163,9,0,2,10,199,248,0,3,254,192,4,32,249,242, +244,147,187,163,129,116,128,24,66,51,229,233,87,78,238,142,5,210,0,65,8, +207,151,164,157,221,24,182,23,72,1,140,39,62,94,149,116,238,232,197,176, +186,64,8,97,25,242,244,147,187,163,54,66,233,0,50,132,231,203,210,174,157, +221,25,178,23,72,1,20,43,62,94,145,182,111,195,209,155,33,116,128,17,194, +179,229,233,27,102,252,61,27,52,23,72,1,36,31,158,94,146,119,116,112,50, +208,3,8,71,60,189,42,233,221,209,192,203,64,8,33,28,242,244,147,187,163,22, +195,45,0,49,132,243,203,210,174,157,221,24,182,25,104,1,12,35,158,94,146, +119,116,102,200,101,160,6,80,158,121,122,85,211,187,163,54,67,45,0,34,133, +115,203,210,54,205,248,122,51,100,50,208,2,56,87,60,189,35,108,223,135,163, +102,131,45,0,36,7,255,248,1,11,50,136,132,115,235,139,15,46,88,124,140,36, +0,4,43,79,224,139,16,0,0,0,0,0,0,60,15,192,101,253,152,0,5,109,252,17,98,0, +0,0,0,0,0,7,129,248,12,191,181,0,0,174,63,130,44,64,0,0,0,0,0,0,240,63,1, +151,246,224,0,21,215,240,69,136,0,0,0,0,0,0,0,8,0,50,254,228,0,2,188,254,8, +177,0,0,0,0,0,0,0,1,0,6,95,221,128,0,87,223,193,22,32,0,0,0,0,0,0,8,32,0, +203,251,208,0,11,3,248,34,196,0,0,0,0,0,0,1,4,0,25,127,126,0,1,97,127,4,88, +128,0,0,0,0,0,0,32,128,3,47,240,64,0,44,79,224,139,16,0,0,0,0,0,0,8,16,0, +101,254,24,0,5,141,252,1,96,216,247,238,199,135,162,162,33,90,121,197,221, +143,126,77,59,179,172,146,17,167,156,46,185,179,101,228,176,65,89,77,16, +124,123,246,240,195,203,40,162,64,0,193,255,138,5,144,158,89,112,228,171, +39,119,71,2,232,132,114,203,135,36,157,221,28,11,164,0,66,25,203,46,28,149, +100,238,232,197,180,200,162,233,0,1,134,114,203,135,37,89,59,186,49,109,10, +40,186,64,2,97,124,178,225,201,39,119,70,45,166,69,23,72,0,140,47,150,92, +57,36,238,232,197,180,40,162,233,0,25,134,114,203,135,37,89,59,186,51,101, +50,40,186,64,0,161,156,178,225,201,86,78,238,140,217,66,138,46,144,0,168, +95,44,184,114,73,221,209,155,41,145,69,210,0,37,11,229,151,14,73,59,186,51, +101,10,40,186,64,6,161,124,178,225,201,27,102,252,61,38,69,23,72,0,28,47, +150,92,57,35,108,223,135,164,40,162,233,0,11,134,114,203,135,36,77,253,113, +108,203,50,40,186,64,1,33,156,178,225,201,19,127,92,91,50,194,138,46,144,0, +200,87,44,184,114,85,147,187,164,200,162,237,0,5,133,114,203,135,37,89,59, +186,66,138,46,208,0,216,79,44,184,114,73,221,210,100,81,118,128,10,194,121, +101,195,146,78,238,144,162,139,180,0,118,21,223,150,158,153,106,201,221, +209,192,203,33,61,249,105,233,150,78,238,142,6,90,0,33,13,239,203,79,76, +181,100,238,232,197,180,200,163,45,0,1,134,247,229,167,166,90,178,119,116, +98,218,20,81,150,128,4,195,59,242,211,211,44,157,221,24,182,153,20,101,160, +2,48,206,252,180,244,203,39,119,70,45,161,69,25,104,0,204,55,191,45,61,50, +213,147,187,163,54,83,34,140,180,0,10,27,223,150,158,153,106,201,221,209, +155,40,81,70,90,0,21,12,239,203,79,76,178,119,116,102,202,100,81,150,128,9, +67,59,242,211,211,44,157,221,25,178,133,20,101,160,3,80,206,252,180,244, +203,27,102,252,61,38,69,25,104,0,28,51,191,45,61,50,198,217,191,15,72,81, +70,90,0,23,13,239,203,79,76,177,55,245,197,179,44,200,163,45,0,4,134,247, +229,167,166,88,155,250,226,217,150,20,81,150,128,6,66,251,242,211,211,45, +89,59,186,76,138,51,16,0,88,95,126,90,122,101,171,39,119,72,81,70,98,0,27, +10,239,203,79,76,178,119,116,153,20,102,32,2,176,174,252,180,244,203,39, +119,72,81,70,98,0,58,40,173,176,82,90,4,19,54,157,155,21,217,6,203,199,174, +29,156,197,9,7,199,191,111,12,60,178,138,20,0,6,9,143,127,15,42,208,130, +243,217,167,30,81,132,65,123,242,211,211,42,228,0, }; - -DUK_INTERNAL const duk_uint8_t duk_builtins_data[1955] = { -105,195,75,32,121,40,105,53,14,252,104,54,8,131,72,0,115,225,65,165,244,55, -243,6,145,32,210,24,210,186,25,249,35,120,216,99,226,13,79,33,116,177,164, -180,44,192,4,202,52,150,220,24,0,169,70,146,219,123,0,23,40,210,91,110,96, -3,37,26,75,109,172,0,108,163,73,109,177,128,14,148,105,45,181,176,1,242, -144,56,209,36,94,6,167,133,98,80,211,28,1,250,67,72,168,67,232,13,46,192, -47,162,52,165,0,62,80,163,72,128,61,40,107,26,7,37,20,53,201,131,88,0,66, -134,185,48,98,80,215,38,11,96,0,138,26,228,193,76,0,69,67,92,152,37,128,6, -168,107,147,4,48,1,165,13,114,96,118,0,44,161,174,76,12,192,7,148,53,201, -129,88,1,26,134,165,80,130,80,31,255,241,69,224,0,0,124,63,128,0,0,0,46,32, -0,0,120,63,128,0,0,0,47,98,7,140,16,116,194,7,12,48,108,196,6,140,80,100, -198,6,12,112,92,200,5,140,149,192,202,91,204,181,184,204,91,76,213,176,206, -90,204,240,84,208,5,13,9,124,210,43,13,24,64,226,131,205,112,56,216,3,77, -152,48,218,130,205,184,40,220,130,77,216,32,222,129,205,248,24,224,129,78, -25,214,164,2,90,81,17,104,67,37,157,8,150,100,18,89,78,201,100,60,37,140, -244,150,35,226,88,79,201,96,71,37,125,20,122,188,138,62,0,2,165,70,39,255, -255,193,43,67,0,0,80,127,192,58,182,220,80,0,21,59,170,64,0,107,77,8,172, -181,146,176,202,138,187,59,42,204,200,170,182,146,168,218,80,0,26,155,97, -42,77,68,168,181,20,0,6,160,210,74,123,89,64,0,127,255,4,10,153,219,157,70, -163,185,130,140,228,10,43,160,40,141,228,161,184,18,132,226,64,161,127,128, -0,63,225,1,109,74,8,137,71,58,5,4,221,20,3,147,233,249,193,240,80,255,192, -6,120,2,64,127,195,0,173,28,56,20,96,80,128,0,206,192,143,167,64,164,156, -131,2,112,14,125,55,9,4,216,40,19,80,180,77,3,9,51,13,94,153,7,159,76,64, -207,192,0,102,0,103,255,255,242,240,67,73,112,33,168,0,12,180,16,212,0,10, -88,8,106,0,7,43,4,53,0,4,149,4,31,128,0,202,66,15,255,255,194,137,254,0,50, -135,227,224,127,196,2,87,132,17,82,143,24,10,44,96,36,240,4,147,64,146,119, -4,125,49,131,52,152,65,154,128,0,201,97,9,36,133,36,142,25,18,40,114,77,98, -17,33,137,68,130,45,17,247,240,71,159,193,29,127,8,0,12,113,252,32,0,49, -184,208,70,162,144,20,95,240,0,7,252,80,37,120,193,81,196,194,0,3,69,19,0, -81,191,197,140,192,255,255,239,127,255,255,255,255,140,64,0,0,0,0,1,0,0,0, -139,192,0,0,248,127,0,0,0,0,138,192,0,0,240,127,0,0,0,0,139,64,0,0,240,255, -0,0,0,0,0,31,241,128,149,224,0,0,0,0,0,0,0,0,13,71,98,37,25,128,148,86,48, -69,23,201,19,94,36,73,132,129,71,255,0,56,136,233,34,3,223,208,241,192,3, -254,56,18,188,128,0,15,135,240,0,0,0,11,104,228,128,135,18,4,0,6,26,72,16, -0,42,49,32,64,0,225,132,129,0,4,133,146,4,0,21,210,72,16,0,103,65,32,64,1, -220,228,100,162,146,130,20,74,8,72,248,64,2,33,3,225,0,9,131,143,132,0,42, -12,62,16,0,184,40,248,64,3,32,131,225,0,13,129,143,132,0,58,4,62,16,0,248, -8,248,64,4,32,3,225,0,17,127,143,132,0,73,252,62,16,1,55,232,248,64,5,31, -131,225,0,21,125,143,132,0,89,244,62,16,1,119,201,0,31,4,68,123,144,148,0, -97,236,66,80,1,151,169,10,248,0,211,208,133,124,0,109,230,66,254,0,56,242, -33,127,0,29,120,144,207,128,15,60,8,103,192,7,221,228,37,0,32,119,16,148,0, -133,218,66,190,0,68,236,33,95,0,35,117,144,191,128,18,58,136,95,192,9,92, -195,225,0,38,114,144,148,0,156,41,31,224,0,15,249,1,138,144,65,192,2,22,0, -88,16,46,24,77,208,148,103,4,102,252,102,244,128,0,0,0,0,0,0,0,0,220,111, -68,113,61,146,142,248,0,164,255,128,0,63,228,133,109,16,89,178,65,18,235, -153,25,150,220,184,188,180,230,6,32,209,205,0,20,175,240,0,39,252,160,77, -162,184,54,72,34,0,82,255,192,0,159,242,193,54,138,222,217,32,136,1,76,255, -0,2,127,204,4,218,43,115,100,130,32,5,55,252,0,9,255,52,19,104,173,173,146, -8,128,20,239,240,0,39,252,224,77,162,182,54,72,34,0,83,255,192,0,159,243, -193,54,138,214,217,32,136,0,255,255,33,177,0,42,252,21,1,165,92,82,45,175, -2,197,172,9,0,89,86,214,237,173,1,8,187,152,255,188,231,235,249,171,1,28, -87,220,255,250,8,173,149,169,1,239,47,108,252,59,148,152,85,167,3,236,132, -37,0,96,181,17,81,165,2,122,131,152,255,52,237,253,153,163,2,122,131,216, -255,52,237,253,153,38,130,129,25,234,5,0,1,103,40,20,0,9,154,160,80,0,54, -98,146,25,106,5,0,4,101,40,20,0,21,146,160,80,0,102,66,129,64,1,216,234,5, -0,8,99,39,47,49,83,215,152,138,73,0,1,97,168,129,132,160,80,0,150,10,129, -64,2,152,10,5,0,11,95,168,20,0,48,31,255,224,5,17,72,66,249,37,129,127,255, -0,0,191,255,128,0,63,255,197,31,192,0,80,196,64,0,0,0,0,8,26,112,17,169,0, -154,80,1,171,28,124,88,65,233,49,7,133,100,29,149,15,14,138,71,135,37,3, -195,66,114,5,77,252,0,243,178,40,25,200,48,101,30,0,127,210,128,0,85,31, -192,0,31,244,224,5,71,22,8,0,13,20,88,1,85,127,0,0,127,212,128,21,29,220, -32,0,52,87,112,5,89,252,0,1,255,86,16,166,64,0,0,2,0,0,0,0,0,170,72,38,29, -219,247,16,49,75,32,193,52,130,244,193,225,114,96,248,0,8,249,48,124,0,8, -90,152,62,0,6,44,76,31,0,4,21,166,15,128,2,147,255,252,38,212,16,184,155, -250,226,217,150,47,46,91,249,54,96,139,229,229,203,127,36,26,119,32,203, -203,150,254,72,52,97,221,147,102,157,217,192,10,191,248,0,157,4,72,15,250, -224,1,154,140,36,0,8,43,31,224,0,15,251,0,16,55,139,164,0,192,220,46,144,2, -3,104,186,64,12,77,130,233,0,33,53,139,164,0,200,212,46,144,2,35,72,186,64, -8,205,2,233,0,36,51,140,180,0,192,204,50,208,2,3,40,203,64,12,76,131,45,0, -33,49,140,180,0,200,196,50,208,2,35,8,203,64,8,204,3,45,0,36,7,255,248,1, -82,101,16,112,24,72,0,8,86,159,193,56,192,0,0,240,63,0,0,0,0,1,151,246,96, -0,21,183,240,78,48,0,0,60,15,192,0,0,0,0,101,253,168,0,5,113,252,19,140,0, -0,15,3,240,0,0,0,0,25,127,110,0,1,93,127,4,227,0,0,0,1,0,0,0,0,0,6,95,220, -128,0,87,159,193,56,192,0,0,0,64,0,0,0,0,1,151,247,96,0,21,247,240,78,48,0, -0,4,16,0,0,0,0,0,101,253,232,0,5,129,252,19,140,0,0,1,4,0,0,0,0,0,25,127, -126,0,1,97,127,4,227,0,0,0,65,0,0,0,0,0,6,95,224,128,0,88,159,193,56,192,0, -0,32,64,0,0,0,0,1,151,248,96,0,22,55,240,5,157,170,33,68,178,69,10,193,20, -10,104,79,138,36,0,12,31,248,160,88,154,23,66,100,93,32,2,9,129,116,128,0, -165,197,210,0,18,150,23,72,0,138,84,93,32,3,41,65,116,128,1,36,197,210,0, -20,146,23,72,0,146,68,93,32,3,73,1,116,128,1,163,197,210,0,22,142,23,72,0, -34,52,93,32,1,136,193,118,128,2,162,197,218,0,26,138,23,104,0,170,36,93, -160,3,168,129,150,33,198,90,0,32,134,25,104,0,10,20,101,160,1,40,65,150, -128,8,160,198,90,0,50,130,25,104,0,18,4,101,160,1,72,1,150,128,9,31,198,90, -0,52,126,25,104,0,25,244,101,160,1,103,193,150,128,2,30,198,90,0,24,122,25, -136,0,41,228,102,32,1,167,129,152,128,10,157,198,98,0,59,71,91,99,157,104, -9,213,118,39,5,8,159,20,40,0,10,109,90,19,81,132,39,151,32, +#elif defined(DUK_USE_DOUBLE_BE) +DUK_INTERNAL const duk_uint8_t duk_builtins_data[3833] = { +105,195,75,32,3,148,52,154,248,9,26,13,128,112,105,0,240,22,20,26,95,124,6, +152,52,137,0,120,99,74,239,129,18,70,241,191,2,98,13,79,32,42,88,210,90,2, +240,1,50,141,37,168,76,94,216,118,69,229,203,127,44,0,84,163,73,106,21,75, +14,236,249,98,242,229,191,150,0,46,81,164,181,14,165,151,54,94,89,119,99, +203,23,151,45,252,176,1,146,141,37,168,93,63,59,186,97,241,23,151,45,252, +176,1,178,141,37,168,77,79,60,50,197,229,203,127,44,0,116,163,73,106,17,86, +148,152,188,185,111,229,128,15,148,129,198,137,36,58,166,142,91,251,212, +243,195,44,94,92,183,242,13,79,8,45,14,91,252,121,148,52,199,120,63,72,105, +21,240,118,128,210,237,224,245,17,165,43,224,211,55,231,207,151,148,161,70, +145,0,31,40,107,26,2,18,138,26,228,192,142,0,16,161,174,76,9,74,26,228,192, +158,0,8,161,174,76,10,96,2,42,26,228,192,174,0,26,161,174,76,11,96,3,74,26, +228,192,190,0,44,161,174,76,12,96,3,202,26,228,192,206,0,70,161,169,84,14, +202,3,255,254,32,234,3,255,192,0,0,0,0,0,0,119,1,255,192,0,0,0,0,0,0,57, +136,1,152,32,16,194,0,166,24,6,49,0,57,138,2,12,96,18,99,128,163,32,5,153, +40,76,94,216,118,69,229,203,127,35,41,10,165,135,118,124,177,121,114,223, +200,203,67,169,101,205,151,150,93,216,242,197,229,203,127,35,49,11,167,231, +119,76,62,34,242,229,191,145,154,132,212,243,195,44,94,92,183,242,51,144, +138,180,164,197,229,203,127,35,60,6,26,0,52,208,193,226,117,215,211,15,12, +166,146,11,67,150,255,30,77,24,58,113,64,243,92,8,27,0,68,217,130,70,212, +19,54,224,161,185,5,77,216,44,111,65,115,126,12,28,16,100,225,156,16,32,18, +17,195,15,46,121,100,238,232,136,136,87,12,60,185,229,141,179,126,30,136, +100,130,233,231,59,12,228,34,66,52,243,141,167,118,158,153,80,73,9,201,151, +30,252,153,106,210,146,118,72,150,76,184,247,228,203,86,148,152,123,246, +240,223,187,46,238,135,132,132,229,221,143,126,76,181,105,73,61,36,75,46, +236,123,242,101,171,74,76,61,251,120,111,221,151,119,67,226,65,178,243,199, +135,134,83,242,66,58,238,203,207,30,30,25,81,201,5,225,203,78,238,136,163, +208,92,59,50,242,232,138,62,0,2,38,163,19,255,255,224,142,80,192,0,20,31, +240,14,135,103,203,210,135,45,253,55,244,243,195,44,252,205,197,0,1,18,221, +82,0,3,24,207,151,164,254,251,168,114,223,195,47,46,158,98,101,231,143,150, +158,29,55,242,104,68,79,62,94,147,251,238,161,203,127,12,188,186,121,157, +135,110,94,109,100,131,99,229,151,15,76,172,168,8,89,217,16,201,151,54,157, +217,104,114,223,195,47,46,154,114,243,102,68,19,158,92,59,27,73,6,205,203, +46,95,89,91,74,0,3,17,225,203,47,108,187,186,69,241,211,46,238,122,119,238, +230,216,72,70,158,116,242,225,217,151,35,81,33,26,121,198,229,191,214,93, +205,69,0,1,134,105,231,23,199,76,187,185,233,197,179,43,73,32,154,242,249, +230,214,80,0,31,255,193,2,38,103,110,117,24,81,115,0,78,228,0,161,208,16, +237,24,121,207,239,186,135,45,252,50,242,233,229,188,144,221,60,232,114, +223,211,127,79,60,50,207,204,224,72,167,14,91,248,101,229,211,204,158,113, +119,117,219,151,150,28,91,50,184,144,40,95,224,0,15,248,64,4,20,78,129,5, +195,195,134,207,38,232,130,99,195,179,97,201,244,19,22,157,217,14,15,130, +135,254,0,48,125,60,224,242,229,135,200,9,1,255,12,2,162,136,112,2,112,80, +128,0,193,177,239,221,143,15,64,35,224,152,20,144,62,27,248,3,2,9,195,175, +61,0,231,208,126,89,123,101,229,207,40,72,32,188,244,105,205,208,40,16,94, +123,52,227,202,22,136,39,61,252,186,6,18,13,207,134,205,56,242,134,175,65, +250,238,231,163,78,110,129,231,208,125,59,178,101,241,63,48,25,248,0,12,47, +102,30,125,36,238,201,151,196,252,192,103,255,255,240,92,189,178,242,242,8, +105,4,231,191,110,80,67,80,0,24,62,109,252,162,225,199,160,16,212,0,10,7, +183,15,0,67,80,0,56,54,109,59,58,101,228,8,106,0,9,6,229,151,39,92,121,66, +15,192,0,97,124,178,228,235,143,45,45,57,244,116,8,63,255,255,10,39,248,0, +195,51,114,223,182,30,140,60,161,239,201,149,248,248,31,241,0,140,80,129, +202,10,49,128,10,35,1,6,199,163,15,40,61,32,9,10,199,163,15,40,123,242,101, +131,210,4,144,108,123,247,99,195,210,8,250,15,167,118,76,190,39,230,131,52, +133,236,195,207,164,157,217,50,248,159,154,12,212,0,6,27,179,126,60,59,50, +195,223,183,134,30,89,97,9,5,219,135,166,61,16,164,131,242,203,195,102,28, +121,97,145,6,231,151,15,44,122,33,201,5,231,179,78,60,177,8,130,243,225, +179,79,72,148,66,121,245,197,207,167,45,59,179,197,162,23,211,124,205,253, +242,242,135,135,158,87,240,68,122,111,153,191,30,29,153,102,111,239,151, +148,60,60,242,191,130,23,211,125,94,28,50,242,135,135,158,87,240,128,0,196, +122,111,153,191,30,29,153,106,240,225,151,148,60,60,242,191,132,0,6,9,211, +150,157,177,160,131,115,235,139,159,78,81,72,10,47,248,0,3,254,40,17,138, +48,66,136,152,64,0,66,129,48,5,27,252,88,76,216,54,47,214,131,50,172,88,15, +253,255,255,255,255,255,255,240,153,178,103,95,173,6,101,88,176,0,0,0,0,0, +0,0,0,67,168,15,255,0,0,0,0,0,0,17,26,19,233,201,169,38,180,91,242,103,70, +147,58,77,75,48,31,252,0,0,0,0,0,0,34,51,162,199,131,82,77,104,183,228,206, +141,38,116,154,150,96,127,248,0,0,0,0,0,0,0,15,248,192,70,40,0,0,0,0,0,0,0, +0,3,10,44,68,9,216,8,20,49,130,15,211,124,109,62,50,228,95,36,55,166,248, +190,56,111,221,151,119,77,56,118,47,18,23,211,125,14,89,113,233,231,167, +126,230,18,5,31,252,0,224,188,48,242,231,148,116,144,58,181,33,143,127,64, +247,111,238,56,0,127,199,2,49,72,127,248,0,0,0,0,0,0,180,81,36,4,51,166, +248,152,122,101,167,211,150,157,217,201,2,0,3,12,233,190,166,157,185,105, +244,229,167,118,114,64,128,1,4,228,129,0,3,137,116,223,51,126,60,59,50,196, +195,211,45,62,156,180,238,206,72,16,0,72,151,77,243,55,227,195,179,45,77, +59,114,211,233,203,78,236,228,129,0,5,10,73,2,0,12,21,18,4,0,28,82,35,32, +80,74,8,62,124,189,42,105,219,148,148,16,188,249,122,70,235,179,101,156, +184,121,15,132,0,34,29,159,47,74,181,33,198,235,179,101,156,184,121,15,132, +0,38,17,159,47,73,187,247,116,208,62,16,0,168,94,124,189,42,212,135,55,126, +238,154,7,194,0,23,7,207,151,164,76,61,50,143,132,0,50,21,159,47,74,181,33, +196,195,211,40,248,64,3,96,217,242,244,137,135,200,248,64,3,161,57,242,244, +171,82,28,76,62,71,194,0,31,8,207,151,164,141,253,121,115,31,8,0,132,47,62, +94,149,106,67,145,191,175,46,99,225,0,17,133,103,203,210,110,157,221,122, +101,230,62,16,1,40,110,124,189,42,212,135,55,78,238,189,50,243,31,8,0,156, +43,62,94,148,242,227,223,187,39,49,240,128,10,67,115,229,233,86,164,58,121, +113,239,221,147,152,248,64,5,97,249,242,244,155,167,102,205,60,242,227,223, +187,39,49,240,128,11,68,179,229,233,86,164,57,186,118,108,211,207,46,61, +251,178,115,31,8,0,188,71,62,94,149,52,237,203,235,126,236,179,243,102,231, +151,161,0,32,252,242,244,169,167,110,82,34,67,249,229,233,55,78,205,154, +121,229,199,191,118,78,100,37,0,24,137,115,203,210,173,72,115,116,236,217, +167,158,92,123,247,100,230,66,80,1,152,87,60,189,41,229,199,191,118,78,100, +43,224,3,80,222,121,122,85,169,14,158,92,123,247,100,230,66,190,0,55,10, +231,151,164,221,59,186,244,203,204,133,252,0,114,27,207,47,74,181,33,205, +211,187,175,76,188,200,95,192,7,97,28,242,244,145,191,175,46,100,51,224,3, +208,190,121,122,85,169,14,70,254,188,185,144,207,128,15,193,249,229,233,19, +15,76,164,37,0,32,133,115,203,210,173,72,113,48,244,202,66,80,2,24,71,60, +189,38,239,221,211,65,10,248,1,20,47,158,94,149,106,67,155,191,119,77,4,43, +224,4,112,190,121,122,70,235,179,101,156,184,121,16,191,128,18,67,185,229, +233,86,164,56,221,118,108,179,151,15,34,23,240,2,88,62,124,189,44,229,195, +200,124,32,4,208,126,121,122,89,203,135,145,9,64,9,194,145,254,0,0,255,144, +24,100,130,14,0,16,176,2,192,129,11,33,12,1,168,193,108,96,186,48,95,32,0, +0,0,0,0,0,0,0,56,38,95,25,113,189,18,9,211,47,62,143,100,20,95,0,20,159, +240,0,7,252,144,162,241,2,195,66,7,11,89,204,140,197,252,229,197,226,230, +115,3,16,69,19,64,5,43,252,0,9,255,40,16,188,33,49,123,97,217,23,151,45, +252,131,66,7,0,20,191,240,0,39,252,176,66,240,133,82,195,187,62,88,188,185, +111,228,26,16,56,0,166,127,128,1,63,230,2,23,132,58,150,92,217,121,101,221, +143,44,94,92,183,242,13,8,28,0,83,127,192,0,159,243,65,11,194,23,79,206, +238,152,124,69,229,203,127,32,208,129,192,5,59,252,0,9,255,56,16,188,33,53, +60,240,203,23,151,45,252,131,66,7,0,20,255,240,0,39,252,240,66,240,132,85, +165,38,47,46,91,249,6,132,14,0,31,255,228,64,98,192,64,5,191,10,139,20,87, +105,130,76,156,197,132,4,0,38,187,27,187,85,81,104,28,201,204,160,31,243, +23,33,127,125,28,247,193,102,79,142,202,44,3,255,113,84,118,82,184,47,232, +52,201,241,216,176,139,0,255,111,45,236,84,155,148,58,5,66,76,4,0,146,31, +181,68,66,209,136,61,58,52,170,49,190,202,1,255,53,4,243,51,249,222,108,22, +157,26,85,25,64,63,246,160,158,102,127,59,205,74,7,135,23,53,2,65,48,227, +223,205,64,160,0,48,76,60,244,238,80,40,0,20,19,15,76,59,148,10,0,7,5,195, +211,14,230,74,72,130,99,203,167,98,129,64,1,32,120,247,243,80,40,0,44,15, +47,142,10,5,0,6,130,230,217,191,127,37,2,128,3,192,246,111,206,160,80,0, +136,30,220,62,19,151,160,123,116,238,79,94,129,240,223,221,73,32,0,48,110, +88,119,100,223,181,68,16,94,91,250,238,200,160,80,0,152,31,61,59,148,10,0, +21,4,231,199,151,69,2,128,5,192,250,97,220,160,80,0,192,127,255,128,20,23, +134,30,92,242,164,34,19,207,167,45,59,179,233,205,229,37,129,127,255,0,0, +191,255,128,0,63,255,197,131,246,203,203,158,157,251,160,32,98,65,0,0,0,0, +0,3,166,156,30,53,32,249,165,131,76,223,159,62,94,70,172,114,16,176,144,60, +56,250,19,18,5,159,25,89,32,121,180,238,42,30,129,229,221,140,164,122,7, +147,46,50,129,232,62,61,251,120,97,199,208,156,129,83,127,0,50,250,69,3, +252,131,32,248,250,242,229,151,119,72,240,3,254,148,0,2,168,254,0,0,255, +167,0,33,68,88,32,0,33,64,176,2,170,254,0,0,255,169,0,33,69,220,32,0,33,67, +184,2,172,254,0,0,255,171,8,137,144,128,0,0,0,0,0,0,0,68,73,4,195,187,126, +226,8,4,178,16,41,164,32,147,7,136,52,193,240,0,18,17,48,124,0,8,133,76,31, +0,3,33,147,7,192,1,8,116,193,240,0,82,127,255,132,47,65,11,137,191,174,45, +153,98,242,229,191,144,105,4,95,47,46,91,249,32,211,185,6,94,92,183,242,65, +163,14,236,155,52,238,206,0,85,255,192,6,13,167,157,109,57,123,136,144,31, +245,192,3,5,231,179,78,60,163,9,0,2,10,199,248,0,3,254,192,4,32,249,242, +244,147,187,163,129,116,128,24,66,51,229,233,87,78,238,142,5,210,0,65,8, +207,151,164,157,221,24,182,23,72,1,140,39,62,94,149,116,238,232,197,176, +186,64,8,97,25,242,244,147,187,163,54,66,233,0,50,132,231,203,210,174,157, +221,25,178,23,72,1,20,43,62,94,145,182,111,195,209,155,33,116,128,17,194, +179,229,233,27,102,252,61,27,52,23,72,1,36,31,158,94,146,119,116,112,50, +208,3,8,71,60,189,42,233,221,209,192,203,64,8,33,28,242,244,147,187,163,22, +195,45,0,49,132,243,203,210,174,157,221,24,182,25,104,1,12,35,158,94,146, +119,116,102,200,101,160,6,80,158,121,122,85,211,187,163,54,67,45,0,34,133, +115,203,210,54,205,248,122,51,100,50,208,2,56,87,60,189,35,108,223,135,163, +102,131,45,0,36,7,255,248,1,11,50,136,132,115,235,139,15,46,88,124,140,36, +0,4,43,79,224,139,16,15,252,0,0,0,0,0,0,0,101,253,152,0,5,109,252,17,98,1, +255,128,0,0,0,0,0,0,12,191,181,0,0,174,63,130,44,64,63,240,0,0,0,0,0,0,1, +151,246,224,0,21,215,240,69,136,8,0,0,0,0,0,0,0,0,50,254,228,0,2,188,254,8, +177,1,0,0,0,0,0,0,0,0,6,95,221,128,0,87,223,193,22,32,32,8,0,0,0,0,0,0,0, +203,251,208,0,11,3,248,34,196,4,1,0,0,0,0,0,0,0,25,127,126,0,1,97,127,4,88, +128,128,32,0,0,0,0,0,0,3,47,240,64,0,44,79,224,139,16,16,8,0,0,0,0,0,0,0, +101,254,24,0,5,141,252,1,96,216,247,238,199,135,162,162,33,90,121,197,221, +143,126,77,59,179,172,146,17,167,156,46,185,179,101,228,176,65,89,77,16, +124,123,246,240,195,203,40,162,64,0,193,255,138,5,144,158,89,112,228,171, +39,119,71,2,232,132,114,203,135,36,157,221,28,11,164,0,66,25,203,46,28,149, +100,238,232,197,180,200,162,233,0,1,134,114,203,135,37,89,59,186,49,109,10, +40,186,64,2,97,124,178,225,201,39,119,70,45,166,69,23,72,0,140,47,150,92, +57,36,238,232,197,180,40,162,233,0,25,134,114,203,135,37,89,59,186,51,101, +50,40,186,64,0,161,156,178,225,201,86,78,238,140,217,66,138,46,144,0,168, +95,44,184,114,73,221,209,155,41,145,69,210,0,37,11,229,151,14,73,59,186,51, +101,10,40,186,64,6,161,124,178,225,201,27,102,252,61,38,69,23,72,0,28,47, +150,92,57,35,108,223,135,164,40,162,233,0,11,134,114,203,135,36,77,253,113, +108,203,50,40,186,64,1,33,156,178,225,201,19,127,92,91,50,194,138,46,144,0, +200,87,44,184,114,85,147,187,164,200,162,237,0,5,133,114,203,135,37,89,59, +186,66,138,46,208,0,216,79,44,184,114,73,221,210,100,81,118,128,10,194,121, +101,195,146,78,238,144,162,139,180,0,118,21,223,150,158,153,106,201,221, +209,192,203,33,61,249,105,233,150,78,238,142,6,90,0,33,13,239,203,79,76, +181,100,238,232,197,180,200,163,45,0,1,134,247,229,167,166,90,178,119,116, +98,218,20,81,150,128,4,195,59,242,211,211,44,157,221,24,182,153,20,101,160, +2,48,206,252,180,244,203,39,119,70,45,161,69,25,104,0,204,55,191,45,61,50, +213,147,187,163,54,83,34,140,180,0,10,27,223,150,158,153,106,201,221,209, +155,40,81,70,90,0,21,12,239,203,79,76,178,119,116,102,202,100,81,150,128,9, +67,59,242,211,211,44,157,221,25,178,133,20,101,160,3,80,206,252,180,244, +203,27,102,252,61,38,69,25,104,0,28,51,191,45,61,50,198,217,191,15,72,81, +70,90,0,23,13,239,203,79,76,177,55,245,197,179,44,200,163,45,0,4,134,247, +229,167,166,88,155,250,226,217,150,20,81,150,128,6,66,251,242,211,211,45, +89,59,186,76,138,51,16,0,88,95,126,90,122,101,171,39,119,72,81,70,98,0,27, +10,239,203,79,76,178,119,116,153,20,102,32,2,176,174,252,180,244,203,39, +119,72,81,70,98,0,58,40,173,176,82,90,4,19,54,157,155,21,217,6,203,199,174, +29,156,197,9,7,199,191,111,12,60,178,138,20,0,6,9,143,127,15,42,208,130, +243,217,167,30,81,132,65,123,242,211,211,42,228,0, }; -#ifdef DUK_USE_BUILTIN_INITJS -DUK_INTERNAL const duk_uint8_t duk_initjs_data[187] = { -40,102,117,110,99,116,105,111,110,40,100,44,97,41,123,102,117,110,99,116, -105,111,110,32,98,40,97,44,98,44,99,41,123,79,98,106,101,99,116,46,100,101, -102,105,110,101,80,114,111,112,101,114,116,121,40,97,44,98,44,123,118,97, -108,117,101,58,99,44,119,114,105,116,97,98,108,101,58,33,48,44,101,110,117, -109,101,114,97,98,108,101,58,33,49,44,99,111,110,102,105,103,117,114,97,98, -108,101,58,33,48,125,41,125,98,40,97,46,76,111,103,103,101,114,44,34,99, -108,111,103,34,44,110,101,119,32,97,46,76,111,103,103,101,114,40,34,67,34, -41,41,59,98,40,97,44,34,109,111,100,76,111,97,100,101,100,34,44,123,125,41, -125,41,40,116,104,105,115,44,68,117,107,116,97,112,101,41,59,10,0, +#elif defined(DUK_USE_DOUBLE_ME) +DUK_INTERNAL const duk_uint8_t duk_builtins_data[3833] = { +105,195,75,32,3,148,52,154,248,9,26,13,128,112,105,0,240,22,20,26,95,124,6, +152,52,137,0,120,99,74,239,129,18,70,241,191,2,98,13,79,32,42,88,210,90,2, +240,1,50,141,37,168,76,94,216,118,69,229,203,127,44,0,84,163,73,106,21,75, +14,236,249,98,242,229,191,150,0,46,81,164,181,14,165,151,54,94,89,119,99, +203,23,151,45,252,176,1,146,141,37,168,93,63,59,186,97,241,23,151,45,252, +176,1,178,141,37,168,77,79,60,50,197,229,203,127,44,0,116,163,73,106,17,86, +148,152,188,185,111,229,128,15,148,129,198,137,36,58,166,142,91,251,212, +243,195,44,94,92,183,242,13,79,8,45,14,91,252,121,148,52,199,120,63,72,105, +21,240,118,128,210,237,224,245,17,165,43,224,211,55,231,207,151,148,161,70, +145,0,31,40,107,26,2,18,138,26,228,192,142,0,16,161,174,76,9,74,26,228,192, +158,0,8,161,174,76,10,96,2,42,26,228,192,174,0,26,161,174,76,11,96,3,74,26, +228,192,190,0,44,161,174,76,12,96,3,202,26,228,192,206,0,70,161,169,84,14, +202,3,255,254,32,234,0,0,7,195,248,0,0,0,0,119,0,0,3,193,252,0,0,0,0,57, +136,1,152,32,16,194,0,166,24,6,49,0,57,138,2,12,96,18,99,128,163,32,5,153, +40,76,94,216,118,69,229,203,127,35,41,10,165,135,118,124,177,121,114,223, +200,203,67,169,101,205,151,150,93,216,242,197,229,203,127,35,49,11,167,231, +119,76,62,34,242,229,191,145,154,132,212,243,195,44,94,92,183,242,51,144, +138,180,164,197,229,203,127,35,60,6,26,0,52,208,193,226,117,215,211,15,12, +166,146,11,67,150,255,30,77,24,58,113,64,243,92,8,27,0,68,217,130,70,212, +19,54,224,161,185,5,77,216,44,111,65,115,126,12,28,16,100,225,156,16,32,18, +17,195,15,46,121,100,238,232,136,136,87,12,60,185,229,141,179,126,30,136, +100,130,233,231,59,12,228,34,66,52,243,141,167,118,158,153,80,73,9,201,151, +30,252,153,106,210,146,118,72,150,76,184,247,228,203,86,148,152,123,246, +240,223,187,46,238,135,132,132,229,221,143,126,76,181,105,73,61,36,75,46, +236,123,242,101,171,74,76,61,251,120,111,221,151,119,67,226,65,178,243,199, +135,134,83,242,66,58,238,203,207,30,30,25,81,201,5,225,203,78,238,136,163, +208,92,59,50,242,232,138,62,0,2,38,163,19,255,255,224,142,80,192,0,20,31, +240,14,135,103,203,210,135,45,253,55,244,243,195,44,252,205,197,0,1,18,221, +82,0,3,24,207,151,164,254,251,168,114,223,195,47,46,158,98,101,231,143,150, +158,29,55,242,104,68,79,62,94,147,251,238,161,203,127,12,188,186,121,157, +135,110,94,109,100,131,99,229,151,15,76,172,168,8,89,217,16,201,151,54,157, +217,104,114,223,195,47,46,154,114,243,102,68,19,158,92,59,27,73,6,205,203, +46,95,89,91,74,0,3,17,225,203,47,108,187,186,69,241,211,46,238,122,119,238, +230,216,72,70,158,116,242,225,217,151,35,81,33,26,121,198,229,191,214,93, +205,69,0,1,134,105,231,23,199,76,187,185,233,197,179,43,73,32,154,242,249, +230,214,80,0,31,255,193,2,38,103,110,117,24,81,115,0,78,228,0,161,208,16, +237,24,121,207,239,186,135,45,252,50,242,233,229,188,144,221,60,232,114, +223,211,127,79,60,50,207,204,224,72,167,14,91,248,101,229,211,204,158,113, +119,117,219,151,150,28,91,50,184,144,40,95,224,0,15,248,64,4,20,78,129,5, +195,195,134,207,38,232,130,99,195,179,97,201,244,19,22,157,217,14,15,130, +135,254,0,48,125,60,224,242,229,135,200,9,1,255,12,2,162,136,112,2,112,80, +128,0,193,177,239,221,143,15,64,35,224,152,20,144,62,27,248,3,2,9,195,175, +61,0,231,208,126,89,123,101,229,207,40,72,32,188,244,105,205,208,40,16,94, +123,52,227,202,22,136,39,61,252,186,6,18,13,207,134,205,56,242,134,175,65, +250,238,231,163,78,110,129,231,208,125,59,178,101,241,63,48,25,248,0,12,47, +102,30,125,36,238,201,151,196,252,192,103,255,255,240,92,189,178,242,242,8, +105,4,231,191,110,80,67,80,0,24,62,109,252,162,225,199,160,16,212,0,10,7, +183,15,0,67,80,0,56,54,109,59,58,101,228,8,106,0,9,6,229,151,39,92,121,66, +15,192,0,97,124,178,228,235,143,45,45,57,244,116,8,63,255,255,10,39,248,0, +195,51,114,223,182,30,140,60,161,239,201,149,248,248,31,241,0,140,80,129, +202,10,49,128,10,35,1,6,199,163,15,40,61,32,9,10,199,163,15,40,123,242,101, +131,210,4,144,108,123,247,99,195,210,8,250,15,167,118,76,190,39,230,131,52, +133,236,195,207,164,157,217,50,248,159,154,12,212,0,6,27,179,126,60,59,50, +195,223,183,134,30,89,97,9,5,219,135,166,61,16,164,131,242,203,195,102,28, +121,97,145,6,231,151,15,44,122,33,201,5,231,179,78,60,177,8,130,243,225, +179,79,72,148,66,121,245,197,207,167,45,59,179,197,162,23,211,124,205,253, +242,242,135,135,158,87,240,68,122,111,153,191,30,29,153,102,111,239,151, +148,60,60,242,191,130,23,211,125,94,28,50,242,135,135,158,87,240,128,0,196, +122,111,153,191,30,29,153,106,240,225,151,148,60,60,242,191,132,0,6,9,211, +150,157,177,160,131,115,235,139,159,78,81,72,10,47,248,0,3,254,40,17,138, +48,66,136,152,64,0,66,129,48,5,27,252,88,76,216,54,47,214,131,50,172,88,31, +255,253,239,255,255,255,255,240,153,178,103,95,173,6,101,88,176,0,0,0,0,0, +64,0,0,3,168,0,0,31,15,224,0,0,0,17,26,19,233,201,169,38,180,91,242,103,70, +147,58,77,75,48,0,0,60,31,192,0,0,0,34,51,162,199,131,82,77,104,183,228, +206,141,38,116,154,150,96,0,0,120,127,128,0,0,0,0,15,248,192,70,40,0,0,0,0, +0,0,0,0,3,10,44,68,9,216,8,20,49,130,15,211,124,109,62,50,228,95,36,55,166, +248,190,56,111,221,151,119,77,56,118,47,18,23,211,125,14,89,113,233,231, +167,126,230,18,5,31,252,0,224,188,48,242,231,148,116,144,58,181,33,143,127, +64,247,111,238,56,0,127,199,2,49,72,0,0,248,127,0,0,0,0,180,81,36,4,51,166, +248,152,122,101,167,211,150,157,217,201,2,0,3,12,233,190,166,157,185,105, +244,229,167,118,114,64,128,1,4,228,129,0,3,137,116,223,51,126,60,59,50,196, +195,211,45,62,156,180,238,206,72,16,0,72,151,77,243,55,227,195,179,45,77, +59,114,211,233,203,78,236,228,129,0,5,10,73,2,0,12,21,18,4,0,28,82,35,32, +80,74,8,62,124,189,42,105,219,148,148,16,188,249,122,70,235,179,101,156, +184,121,15,132,0,34,29,159,47,74,181,33,198,235,179,101,156,184,121,15,132, +0,38,17,159,47,73,187,247,116,208,62,16,0,168,94,124,189,42,212,135,55,126, +238,154,7,194,0,23,7,207,151,164,76,61,50,143,132,0,50,21,159,47,74,181,33, +196,195,211,40,248,64,3,96,217,242,244,137,135,200,248,64,3,161,57,242,244, +171,82,28,76,62,71,194,0,31,8,207,151,164,141,253,121,115,31,8,0,132,47,62, +94,149,106,67,145,191,175,46,99,225,0,17,133,103,203,210,110,157,221,122, +101,230,62,16,1,40,110,124,189,42,212,135,55,78,238,189,50,243,31,8,0,156, +43,62,94,148,242,227,223,187,39,49,240,128,10,67,115,229,233,86,164,58,121, +113,239,221,147,152,248,64,5,97,249,242,244,155,167,102,205,60,242,227,223, +187,39,49,240,128,11,68,179,229,233,86,164,57,186,118,108,211,207,46,61, +251,178,115,31,8,0,188,71,62,94,149,52,237,203,235,126,236,179,243,102,231, +151,161,0,32,252,242,244,169,167,110,82,34,67,249,229,233,55,78,205,154, +121,229,199,191,118,78,100,37,0,24,137,115,203,210,173,72,115,116,236,217, +167,158,92,123,247,100,230,66,80,1,152,87,60,189,41,229,199,191,118,78,100, +43,224,3,80,222,121,122,85,169,14,158,92,123,247,100,230,66,190,0,55,10, +231,151,164,221,59,186,244,203,204,133,252,0,114,27,207,47,74,181,33,205, +211,187,175,76,188,200,95,192,7,97,28,242,244,145,191,175,46,100,51,224,3, +208,190,121,122,85,169,14,70,254,188,185,144,207,128,15,193,249,229,233,19, +15,76,164,37,0,32,133,115,203,210,173,72,113,48,244,202,66,80,2,24,71,60, +189,38,239,221,211,65,10,248,1,20,47,158,94,149,106,67,155,191,119,77,4,43, +224,4,112,190,121,122,70,235,179,101,156,184,121,16,191,128,18,67,185,229, +233,86,164,56,221,118,108,179,151,15,34,23,240,2,88,62,124,189,44,229,195, +200,124,32,4,208,126,121,122,89,203,135,145,9,64,9,194,145,254,0,0,255,144, +24,100,130,14,0,16,176,2,192,129,11,33,12,1,168,193,108,96,186,48,95,32,0, +0,0,0,0,0,0,0,56,38,95,25,113,189,18,9,211,47,62,143,100,20,95,0,20,159, +240,0,7,252,144,162,241,2,195,66,7,11,89,204,140,197,252,229,197,226,230, +115,3,16,69,19,64,5,43,252,0,9,255,40,16,188,33,49,123,97,217,23,151,45, +252,131,66,7,0,20,191,240,0,39,252,176,66,240,133,82,195,187,62,88,188,185, +111,228,26,16,56,0,166,127,128,1,63,230,2,23,132,58,150,92,217,121,101,221, +143,44,94,92,183,242,13,8,28,0,83,127,192,0,159,243,65,11,194,23,79,206, +238,152,124,69,229,203,127,32,208,129,192,5,59,252,0,9,255,56,16,188,33,53, +60,240,203,23,151,45,252,131,66,7,0,20,255,240,0,39,252,240,66,240,132,85, +165,38,47,46,91,249,6,132,14,0,31,255,228,64,98,192,10,191,5,64,105,87,20, +139,130,76,156,197,132,11,22,176,36,1,101,91,91,184,28,201,204,160,33,23, +115,31,247,156,253,127,65,102,79,142,202,44,4,113,95,115,255,232,34,182,88, +52,201,241,216,176,139,1,239,47,108,252,59,148,152,86,5,66,76,15,178,16, +148,1,130,212,69,72,61,58,52,170,49,190,202,4,245,7,49,254,105,219,251,52, +22,157,26,85,25,64,158,160,246,63,205,59,127,102,74,7,135,23,53,2,65,48, +227,223,205,64,160,0,48,76,60,244,238,80,40,0,20,19,15,76,59,148,10,0,7,5, +195,211,14,230,74,72,130,99,203,167,98,129,64,1,32,120,247,243,80,40,0,44, +15,47,142,10,5,0,6,130,230,217,191,127,37,2,128,3,192,246,111,206,160,80,0, +136,30,220,62,19,151,160,123,116,238,79,94,129,240,223,221,73,32,0,48,110, +88,119,100,223,181,68,16,94,91,250,238,200,160,80,0,152,31,61,59,148,10,0, +21,4,231,199,151,69,2,128,5,192,250,97,220,160,80,0,192,127,255,128,20,23, +134,30,92,242,164,34,19,207,167,45,59,179,233,205,229,37,129,127,255,0,0, +191,255,128,0,63,255,197,131,246,203,203,158,157,251,160,0,65,98,32,0,0,0, +0,3,166,156,30,53,32,249,165,131,76,223,159,62,94,70,172,114,16,176,144,60, +56,250,19,18,5,159,25,89,32,121,180,238,42,30,129,229,221,140,164,122,7, +147,46,50,129,232,62,61,251,120,97,199,208,156,129,83,127,0,50,250,69,3, +252,131,32,248,250,242,229,151,119,72,240,3,254,148,0,2,168,254,0,0,255, +167,0,33,68,88,32,0,33,64,176,2,170,254,0,0,255,169,0,33,69,220,32,0,33,67, +184,2,172,254,0,0,255,171,8,137,144,0,0,0,128,0,0,0,0,68,73,4,195,187,126, +226,8,4,178,16,41,164,32,147,7,136,52,193,240,0,18,17,48,124,0,8,133,76,31, +0,3,33,147,7,192,1,8,116,193,240,0,82,127,255,132,47,65,11,137,191,174,45, +153,98,242,229,191,144,105,4,95,47,46,91,249,32,211,185,6,94,92,183,242,65, +163,14,236,155,52,238,206,0,85,255,192,6,13,167,157,109,57,123,136,144,31, +245,192,3,5,231,179,78,60,163,9,0,2,10,199,248,0,3,254,192,4,32,249,242, +244,147,187,163,129,116,128,24,66,51,229,233,87,78,238,142,5,210,0,65,8, +207,151,164,157,221,24,182,23,72,1,140,39,62,94,149,116,238,232,197,176, +186,64,8,97,25,242,244,147,187,163,54,66,233,0,50,132,231,203,210,174,157, +221,25,178,23,72,1,20,43,62,94,145,182,111,195,209,155,33,116,128,17,194, +179,229,233,27,102,252,61,27,52,23,72,1,36,31,158,94,146,119,116,112,50, +208,3,8,71,60,189,42,233,221,209,192,203,64,8,33,28,242,244,147,187,163,22, +195,45,0,49,132,243,203,210,174,157,221,24,182,25,104,1,12,35,158,94,146, +119,116,102,200,101,160,6,80,158,121,122,85,211,187,163,54,67,45,0,34,133, +115,203,210,54,205,248,122,51,100,50,208,2,56,87,60,189,35,108,223,135,163, +102,131,45,0,36,7,255,248,1,11,50,136,132,115,235,139,15,46,88,124,140,36, +0,4,43,79,224,139,16,0,0,60,15,192,0,0,0,0,101,253,152,0,5,109,252,17,98,0, +0,7,129,248,0,0,0,0,12,191,181,0,0,174,63,130,44,64,0,0,240,63,0,0,0,0,1, +151,246,224,0,21,215,240,69,136,0,0,0,8,0,0,0,0,0,50,254,228,0,2,188,254,8, +177,0,0,0,1,0,0,0,0,0,6,95,221,128,0,87,223,193,22,32,0,0,8,32,0,0,0,0,0, +203,251,208,0,11,3,248,34,196,0,0,1,4,0,0,0,0,0,25,127,126,0,1,97,127,4,88, +128,0,0,32,128,0,0,0,0,3,47,240,64,0,44,79,224,139,16,0,0,8,16,0,0,0,0,0, +101,254,24,0,5,141,252,1,96,216,247,238,199,135,162,162,33,90,121,197,221, +143,126,77,59,179,172,146,17,167,156,46,185,179,101,228,176,65,89,77,16, +124,123,246,240,195,203,40,162,64,0,193,255,138,5,144,158,89,112,228,171, +39,119,71,2,232,132,114,203,135,36,157,221,28,11,164,0,66,25,203,46,28,149, +100,238,232,197,180,200,162,233,0,1,134,114,203,135,37,89,59,186,49,109,10, +40,186,64,2,97,124,178,225,201,39,119,70,45,166,69,23,72,0,140,47,150,92, +57,36,238,232,197,180,40,162,233,0,25,134,114,203,135,37,89,59,186,51,101, +50,40,186,64,0,161,156,178,225,201,86,78,238,140,217,66,138,46,144,0,168, +95,44,184,114,73,221,209,155,41,145,69,210,0,37,11,229,151,14,73,59,186,51, +101,10,40,186,64,6,161,124,178,225,201,27,102,252,61,38,69,23,72,0,28,47, +150,92,57,35,108,223,135,164,40,162,233,0,11,134,114,203,135,36,77,253,113, +108,203,50,40,186,64,1,33,156,178,225,201,19,127,92,91,50,194,138,46,144,0, +200,87,44,184,114,85,147,187,164,200,162,237,0,5,133,114,203,135,37,89,59, +186,66,138,46,208,0,216,79,44,184,114,73,221,210,100,81,118,128,10,194,121, +101,195,146,78,238,144,162,139,180,0,118,21,223,150,158,153,106,201,221, +209,192,203,33,61,249,105,233,150,78,238,142,6,90,0,33,13,239,203,79,76, +181,100,238,232,197,180,200,163,45,0,1,134,247,229,167,166,90,178,119,116, +98,218,20,81,150,128,4,195,59,242,211,211,44,157,221,24,182,153,20,101,160, +2,48,206,252,180,244,203,39,119,70,45,161,69,25,104,0,204,55,191,45,61,50, +213,147,187,163,54,83,34,140,180,0,10,27,223,150,158,153,106,201,221,209, +155,40,81,70,90,0,21,12,239,203,79,76,178,119,116,102,202,100,81,150,128,9, +67,59,242,211,211,44,157,221,25,178,133,20,101,160,3,80,206,252,180,244, +203,27,102,252,61,38,69,25,104,0,28,51,191,45,61,50,198,217,191,15,72,81, +70,90,0,23,13,239,203,79,76,177,55,245,197,179,44,200,163,45,0,4,134,247, +229,167,166,88,155,250,226,217,150,20,81,150,128,6,66,251,242,211,211,45, +89,59,186,76,138,51,16,0,88,95,126,90,122,101,171,39,119,72,81,70,98,0,27, +10,239,203,79,76,178,119,116,153,20,102,32,2,176,174,252,180,244,203,39, +119,72,81,70,98,0,58,40,173,176,82,90,4,19,54,157,155,21,217,6,203,199,174, +29,156,197,9,7,199,191,111,12,60,178,138,20,0,6,9,143,127,15,42,208,130, +243,217,167,30,81,132,65,123,242,211,211,42,228,0, }; -#endif /* DUK_USE_BUILTIN_INITJS */ #else #error invalid endianness defines #endif +#endif /* DUK_USE_ROM_OBJECTS */ #line 1 "duk_error_macros.c" /* * Error, fatal, and panic handling. @@ -13200,65 +9782,26 @@ DUK_INTERNAL const duk_uint8_t duk_initjs_data[187] = { #if defined(DUK_USE_VERBOSE_ERRORS) -#if defined(DUK_USE_VARIADIC_MACROS) -DUK_INTERNAL void duk_err_handle_error(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, ...) { +DUK_INTERNAL void duk_err_handle_error_fmt(duk_hthread *thr, const char *filename, duk_uint_t line_and_code, const char *fmt, ...) { va_list ap; char msg[DUK__ERRFMT_BUFSIZE]; va_start(ap, fmt); (void) DUK_VSNPRINTF(msg, sizeof(msg), fmt, ap); msg[sizeof(msg) - 1] = (char) 0; - duk_err_create_and_throw(thr, code, msg, filename, line); + duk_err_create_and_throw(thr, (duk_errcode_t) (line_and_code >> 24), msg, filename, (duk_int_t) (line_and_code & 0x00ffffffL)); va_end(ap); /* dead code, but ensures portability (see Linux man page notes) */ } -#else /* DUK_USE_VARIADIC_MACROS */ -DUK_INTERNAL const char *duk_err_file_stash = NULL; -DUK_INTERNAL duk_int_t duk_err_line_stash = 0; - -DUK_NORETURN(DUK_LOCAL_DECL void duk__handle_error(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, va_list ap)); -DUK_LOCAL void duk__handle_error(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, va_list ap) { - char msg[DUK__ERRFMT_BUFSIZE]; - (void) DUK_VSNPRINTF(msg, sizeof(msg), fmt, ap); - msg[sizeof(msg) - 1] = (char) 0; - duk_err_create_and_throw(thr, code, msg, filename, line); -} - -DUK_INTERNAL void duk_err_handle_error(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - duk__handle_error(filename, line, thr, code, fmt, ap); - va_end(ap); /* dead code */ -} - -DUK_INTERNAL void duk_err_handle_error_stash(duk_hthread *thr, duk_errcode_t code, const char *fmt, ...) { - va_list ap; - va_start(ap, fmt); - duk__handle_error(duk_err_file_stash, duk_err_line_stash, thr, code, fmt, ap); - va_end(ap); /* dead code */ +DUK_INTERNAL void duk_err_handle_error(duk_hthread *thr, const char *filename, duk_uint_t line_and_code, const char *msg) { + duk_err_create_and_throw(thr, (duk_errcode_t) (line_and_code >> 24), msg, filename, (duk_int_t) (line_and_code & 0x00ffffffL)); } -#endif /* DUK_USE_VARIADIC_MACROS */ #else /* DUK_USE_VERBOSE_ERRORS */ -#if defined(DUK_USE_VARIADIC_MACROS) DUK_INTERNAL void duk_err_handle_error(duk_hthread *thr, duk_errcode_t code) { duk_err_create_and_throw(thr, code); } -#else /* DUK_USE_VARIADIC_MACROS */ -DUK_INTERNAL void duk_err_handle_error_nonverbose1(duk_hthread *thr, duk_errcode_t code, const char *fmt, ...) { - DUK_UNREF(fmt); - duk_err_create_and_throw(thr, code); -} - -DUK_INTERNAL void duk_err_handle_error_nonverbose2(const char *filename, duk_int_t line, duk_hthread *thr, duk_errcode_t code, const char *fmt, ...) { - DUK_UNREF(filename); - DUK_UNREF(line); - DUK_UNREF(fmt); - duk_err_create_and_throw(thr, code); -} -#endif /* DUK_USE_VARIADIC_MACROS */ - #endif /* DUK_USE_VERBOSE_ERRORS */ /* @@ -13267,34 +9810,67 @@ DUK_INTERNAL void duk_err_handle_error_nonverbose2(const char *filename, duk_int #if defined(DUK_USE_VERBOSE_ERRORS) #if defined(DUK_USE_PARANOID_ERRORS) -DUK_INTERNAL void duk_err_require_type_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, duk_idx_t index, const char *expect_name) { - DUK_ERROR_RAW(filename, linenumber, thr, DUK_ERR_TYPE_ERROR, "%s required, found %s (stack index %ld)", - expect_name, duk_get_type_name((duk_context *) thr, index), (long) index); +DUK_INTERNAL void duk_err_require_type_index(duk_hthread *thr, const char *filename, duk_int_t linenumber, duk_idx_t index, const char *expect_name) { + DUK_ERROR_RAW_FMT3(thr, filename, linenumber, DUK_ERR_TYPE_ERROR, "%s required, found %s (stack index %ld)", + expect_name, duk_get_type_name((duk_context *) thr, index), (long) index); } #else -DUK_INTERNAL void duk_err_require_type_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, duk_idx_t index, const char *expect_name) { - DUK_ERROR_RAW(filename, linenumber, thr, DUK_ERR_TYPE_ERROR, "%s required, found %s (stack index %ld)", - expect_name, duk_push_string_readable((duk_context *) thr, index), (long) index); +DUK_INTERNAL void duk_err_require_type_index(duk_hthread *thr, const char *filename, duk_int_t linenumber, duk_idx_t index, const char *expect_name) { + DUK_ERROR_RAW_FMT3(thr, filename, linenumber, DUK_ERR_TYPE_ERROR, "%s required, found %s (stack index %ld)", + expect_name, duk_push_string_readable((duk_context *) thr, index), (long) index); } #endif -DUK_INTERNAL void duk_err_api_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, duk_idx_t index) { - DUK_ERROR_RAW(filename, linenumber, thr, DUK_ERR_API_ERROR, "invalid stack index %ld", (long) (index)); +DUK_INTERNAL void duk_err_range(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_RANGE_ERROR, message); } -DUK_INTERNAL void duk_err_api(const char *filename, duk_int_t linenumber, duk_hthread *thr, const char *message) { - DUK_ERROR_RAW(filename, linenumber, thr, DUK_ERR_API_ERROR, message); +DUK_INTERNAL void duk_err_api_index(duk_hthread *thr, const char *filename, duk_int_t linenumber, duk_idx_t index) { + DUK_ERROR_RAW_FMT1(thr, filename, linenumber, DUK_ERR_API_ERROR, "invalid stack index %ld", (long) (index)); +} +DUK_INTERNAL void duk_err_api(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_API_ERROR, message); +} +DUK_INTERNAL void duk_err_unimplemented_defmsg(duk_hthread *thr, const char *filename, duk_int_t linenumber) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_UNIMPLEMENTED_ERROR, DUK_STR_UNIMPLEMENTED); +} +DUK_INTERNAL void duk_err_unsupported_defmsg(duk_hthread *thr, const char *filename, duk_int_t linenumber) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_UNSUPPORTED_ERROR, DUK_STR_UNSUPPORTED); +} +DUK_INTERNAL void duk_err_internal_defmsg(duk_hthread *thr, const char *filename, duk_int_t linenumber) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); +} +DUK_INTERNAL void duk_err_internal(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_INTERNAL_ERROR, message); +} +DUK_INTERNAL void duk_err_alloc(duk_hthread *thr, const char *filename, duk_int_t linenumber, const char *message) { + DUK_ERROR_RAW(thr, filename, linenumber, DUK_ERR_ALLOC_ERROR, message); } #else -DUK_INTERNAL void duk_err_require_type_index(const char *filename, duk_int_t linenumber, duk_hthread *thr, const char *message) { - DUK_UNREF(filename); DUK_UNREF(linenumber); DUK_UNREF(message); - DUK_ERROR_RAW(filename, linenumber, thr, DUK_ERR_TYPE_ERROR, message); +/* The file/line arguments are NULL and 0, they're ignored by DUK_ERROR_RAW() + * when non-verbose errors are used. + */ +DUK_INTERNAL void duk_err_type(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_TYPE_ERROR, NULL); +} +DUK_INTERNAL void duk_err_api(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_API_ERROR, NULL); +} +DUK_INTERNAL void duk_err_range(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_RANGE_ERROR, NULL); +} +DUK_INTERNAL void duk_err_syntax(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_SYNTAX_ERROR, NULL); +} +DUK_INTERNAL void duk_err_unimplemented(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_UNIMPLEMENTED_ERROR, NULL); +} +DUK_INTERNAL void duk_err_unsupported(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_UNSUPPORTED_ERROR, NULL); } -DUK_INTERNAL void duk_err_api_index(const char *filename, duk_int_t linenumber, duk_hthread *thr) { - DUK_UNREF(filename); DUK_UNREF(linenumber); - DUK_ERROR(thr, DUK_ERR_API_ERROR, DUK_STR_INVALID_INDEX); +DUK_INTERNAL void duk_err_internal(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_INTERNAL_ERROR, NULL); } -DUK_INTERNAL void duk_err_api(const char *filename, duk_int_t linenumber, duk_hthread *thr, const char *message) { - DUK_UNREF(filename); DUK_UNREF(linenumber); DUK_UNREF(message); - DUK_ERROR_RAW(filename, linenumber, thr, DUK_ERR_API_ERROR, message); +DUK_INTERNAL void duk_err_alloc(duk_hthread *thr) { + DUK_ERROR_RAW(thr, NULL, thr, DUK_ERR_ALLOC_ERROR, NULL); } #endif @@ -13365,6 +9941,27 @@ DUK_INTERNAL void duk_default_panic_handler(duk_errcode_t code, const char *msg) /* include removed: duk_internal.h */ +/* + * Fast path tables + */ + +#if defined(DUK_USE_IDCHAR_FASTPATH) +DUK_INTERNAL const duk_int8_t duk_is_idchar_tab[128] = { + /* 0: not IdentifierStart or IdentifierPart + * 1: IdentifierStart and IdentifierPart + * -1: IdentifierPart only + */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x00...0x0f */ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x10...0x1f */ + 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x20...0x2f */ + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, /* 0x30...0x3f */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x40...0x4f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 0x50...0x5f */ + 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 0x60...0x6f */ + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0 /* 0x70...0x7f */ +}; +#endif + /* * XUTF-8 and CESU-8 encoding/decoding */ @@ -13417,7 +10014,7 @@ DUK_INTERNAL duk_small_int_t duk_unicode_get_cesu8_length(duk_ucodepoint_t cp) { } #endif /* DUK_USE_ASSERTIONS */ -DUK_INTERNAL duk_uint8_t duk_unicode_xutf8_markers[7] = { +DUK_INTERNAL const duk_uint8_t duk_unicode_xutf8_markers[7] = { 0x00, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe }; @@ -13609,7 +10206,7 @@ DUK_INTERNAL duk_ucodepoint_t duk_unicode_decode_xutf8_checked(duk_hthread *thr, if (duk_unicode_decode_xutf8(thr, ptr, ptr_start, ptr_end, &cp)) { return cp; } - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, "utf-8 decode failed"); + DUK_ERROR_INTERNAL(thr, "utf-8 decode failed"); /* XXX: 'internal error' is a bit of a misnomer */ DUK_UNREACHABLE(); return 0; } @@ -13623,6 +10220,8 @@ DUK_INTERNAL duk_ucodepoint_t duk_unicode_decode_xutf8_checked(duk_hthread *thr, * is useful if possible in the algorithm. The current algorithms were * chosen from several variants, based on x64 gcc -O2 testing. See: * https://github.com/svaarala/duktape/pull/422 + * + * NOTE: must match src/dukutil.py:duk_unicode_unvalidated_utf8_length(). */ #if defined(DUK_USE_PREFER_SIZE) @@ -13671,7 +10270,7 @@ DUK_INTERNAL duk_size_t duk_unicode_unvalidated_utf8_length(const duk_uint8_t *d /* Align 'p' to 4; the input data may have arbitrary alignment. * End of string check not needed because blen >= 16. */ - while (((duk_uintptr_t) (const void *) p) & 0x03) { + while (((duk_size_t) (const void *) p) & 0x03U) { duk_uint8_t x; x = *p++; if (DUK_UNLIKELY(x >= 0x80 && x <= 0xbf)) { @@ -13928,12 +10527,16 @@ DUK_INTERNAL duk_small_int_t duk_unicode_is_identifier_start(duk_codepoint_t cp) /* ASCII (and EOF) fast path -- quick accept and reject */ if (cp <= 0x7fL) { +#if defined(DUK_USE_IDCHAR_FASTPATH) + return (cp >= 0) && (duk_is_idchar_tab[cp] > 0); +#else if ((cp >= 'a' && cp <= 'z') || (cp >= 'A' && cp <= 'Z') || cp == '_' || cp == '$') { return 1; } return 0; +#endif } /* Non-ASCII slow path (range-by-range linear comparison), very slow */ @@ -14013,6 +10616,9 @@ DUK_INTERNAL duk_small_int_t duk_unicode_is_identifier_part(duk_codepoint_t cp) /* ASCII (and EOF) fast path -- quick accept and reject */ if (cp <= 0x7fL) { +#if defined(DUK_USE_IDCHAR_FASTPATH) + return (cp >= 0) && (duk_is_idchar_tab[cp] != 0); +#else if ((cp >= 'a' && cp <= 'z') || (cp >= 'A' && cp <= 'Z') || (cp >= '0' && cp <= '9') || @@ -14020,6 +10626,7 @@ DUK_INTERNAL duk_small_int_t duk_unicode_is_identifier_part(duk_codepoint_t cp) return 1; } return 0; +#endif } /* Non-ASCII slow path (range-by-range linear comparison), very slow */ @@ -14451,10 +11058,10 @@ DUK_INTERNAL duk_small_int_t duk_unicode_re_is_wordchar(duk_codepoint_t x) { */ /* exposed because lexer needs these too */ -DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_digit[2] = { +DUK_INTERNAL const duk_uint16_t duk_unicode_re_ranges_digit[2] = { (duk_uint16_t) 0x0030UL, (duk_uint16_t) 0x0039UL, }; -DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_white[22] = { +DUK_INTERNAL const duk_uint16_t duk_unicode_re_ranges_white[22] = { (duk_uint16_t) 0x0009UL, (duk_uint16_t) 0x000DUL, (duk_uint16_t) 0x0020UL, (duk_uint16_t) 0x0020UL, (duk_uint16_t) 0x00A0UL, (duk_uint16_t) 0x00A0UL, @@ -14467,17 +11074,17 @@ DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_white[22] = { (duk_uint16_t) 0x3000UL, (duk_uint16_t) 0x3000UL, (duk_uint16_t) 0xFEFFUL, (duk_uint16_t) 0xFEFFUL, }; -DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_wordchar[8] = { +DUK_INTERNAL const duk_uint16_t duk_unicode_re_ranges_wordchar[8] = { (duk_uint16_t) 0x0030UL, (duk_uint16_t) 0x0039UL, (duk_uint16_t) 0x0041UL, (duk_uint16_t) 0x005AUL, (duk_uint16_t) 0x005FUL, (duk_uint16_t) 0x005FUL, (duk_uint16_t) 0x0061UL, (duk_uint16_t) 0x007AUL, }; -DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_not_digit[4] = { +DUK_INTERNAL const duk_uint16_t duk_unicode_re_ranges_not_digit[4] = { (duk_uint16_t) 0x0000UL, (duk_uint16_t) 0x002FUL, (duk_uint16_t) 0x003AUL, (duk_uint16_t) 0xFFFFUL, }; -DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_not_white[24] = { +DUK_INTERNAL const duk_uint16_t duk_unicode_re_ranges_not_white[24] = { (duk_uint16_t) 0x0000UL, (duk_uint16_t) 0x0008UL, (duk_uint16_t) 0x000EUL, (duk_uint16_t) 0x001FUL, (duk_uint16_t) 0x0021UL, (duk_uint16_t) 0x009FUL, @@ -14491,7 +11098,7 @@ DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_not_white[24] = { (duk_uint16_t) 0x3001UL, (duk_uint16_t) 0xFEFEUL, (duk_uint16_t) 0xFF00UL, (duk_uint16_t) 0xFFFFUL, }; -DUK_INTERNAL duk_uint16_t duk_unicode_re_ranges_not_wordchar[10] = { +DUK_INTERNAL const duk_uint16_t duk_unicode_re_ranges_not_wordchar[10] = { (duk_uint16_t) 0x0000UL, (duk_uint16_t) 0x002FUL, (duk_uint16_t) 0x003AUL, (duk_uint16_t) 0x0040UL, (duk_uint16_t) 0x005BUL, (duk_uint16_t) 0x005EUL, @@ -14944,6 +11551,7 @@ DUK_INTERNAL duk_uint8_t duk_class_number_to_stridx[32] = { /* include removed: duk_internal.h */ +#if defined(DUK_USE_PROVIDE_DEFAULT_ALLOC_FUNCTIONS) DUK_INTERNAL void *duk_default_alloc_function(void *udata, duk_size_t size) { void *res; DUK_UNREF(udata); @@ -14967,6 +11575,7 @@ DUK_INTERNAL void duk_default_free_function(void *udata, void *ptr) { DUK_UNREF(udata); DUK_ANSI_FREE(ptr); } +#endif /* DUK_USE_PROVIDE_DEFAULT_ALLOC_FUNCTIONS */ #line 1 "duk_api_buffer.c" /* * Buffer @@ -14984,7 +11593,7 @@ DUK_EXTERNAL void *duk_resize_buffer(duk_context *ctx, duk_idx_t index, duk_size DUK_ASSERT(h != NULL); if (!(DUK_HBUFFER_HAS_DYNAMIC(h) && !DUK_HBUFFER_HAS_EXTERNAL(h))) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_WRONG_BUFFER_TYPE); + DUK_ERROR_TYPE(thr, DUK_STR_WRONG_BUFFER_TYPE); } /* maximum size check is handled by callee */ @@ -15005,7 +11614,7 @@ DUK_EXTERNAL void *duk_steal_buffer(duk_context *ctx, duk_idx_t index, duk_size_ DUK_ASSERT(h != NULL); if (!(DUK_HBUFFER_HAS_DYNAMIC(h) && !DUK_HBUFFER_HAS_EXTERNAL(h))) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_WRONG_BUFFER_TYPE); + DUK_ERROR_TYPE(thr, DUK_STR_WRONG_BUFFER_TYPE); } /* Forget the previous allocation, setting size to 0 and alloc to @@ -15034,7 +11643,7 @@ DUK_EXTERNAL void duk_config_buffer(duk_context *ctx, duk_idx_t index, void *ptr DUK_ASSERT(h != NULL); if (!DUK_HBUFFER_HAS_EXTERNAL(h)) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_WRONG_BUFFER_TYPE); + DUK_ERROR_TYPE(thr, DUK_STR_WRONG_BUFFER_TYPE); } DUK_ASSERT(DUK_HBUFFER_HAS_DYNAMIC(h)); @@ -15749,7 +12358,7 @@ DUK_EXTERNAL void duk_load_function(duk_context *ctx) { return; format_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_DECODE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_DECODE_FAILED); } #undef DUK__SER_MARKER @@ -15761,11 +12370,11 @@ DUK_EXTERNAL void duk_load_function(duk_context *ctx) { #else /* DUK_USE_BYTECODE_DUMP_SUPPORT */ DUK_EXTERNAL void duk_dump_function(duk_context *ctx) { - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_ERROR, DUK_STR_UNSUPPORTED); + DUK_ERROR_UNSUPPORTED_DEFMSG((duk_hthread *) ctx); } DUK_EXTERNAL void duk_load_function(duk_context *ctx) { - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_ERROR, DUK_STR_UNSUPPORTED); + DUK_ERROR_UNSUPPORTED_DEFMSG((duk_hthread *) ctx); } #endif /* DUK_USE_BYTECODE_DUMP_SUPPORT */ @@ -15818,7 +12427,7 @@ DUK_EXTERNAL void duk_call(duk_context *ctx, duk_idx_t nargs) { idx_func = duk_get_top(ctx) - nargs - 1; if (idx_func < 0 || nargs < 0) { /* note that we can't reliably pop anything here */ - DUK_ERROR(thr, DUK_ERR_API_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_API(thr, DUK_STR_INVALID_CALL_ARGS); } /* XXX: awkward; we assume there is space for this, overwrite @@ -15845,7 +12454,7 @@ DUK_EXTERNAL void duk_call_method(duk_context *ctx, duk_idx_t nargs) { idx_func = duk_get_top(ctx) - nargs - 2; /* must work for nargs <= 0 */ if (idx_func < 0 || nargs < 0) { /* note that we can't reliably pop anything here */ - DUK_ERROR(thr, DUK_ERR_API_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_API(thr, DUK_STR_INVALID_CALL_ARGS); } call_flags = 0; /* not protected, respect reclimit, not constructor */ @@ -15893,7 +12502,7 @@ DUK_EXTERNAL duk_int_t duk_pcall(duk_context *ctx, duk_idx_t nargs) { * might STILL throw an out-of-memory error or some other internal * fatal error. */ - DUK_ERROR(thr, DUK_ERR_API_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_API(thr, DUK_STR_INVALID_CALL_ARGS); return DUK_EXEC_ERROR; /* unreachable */ } @@ -15922,7 +12531,7 @@ DUK_EXTERNAL duk_int_t duk_pcall_method(duk_context *ctx, duk_idx_t nargs) { idx_func = duk_get_top(ctx) - nargs - 2; /* must work for nargs <= 0 */ if (idx_func < 0 || nargs < 0) { /* See comments in duk_pcall(). */ - DUK_ERROR(thr, DUK_ERR_API_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_API(thr, DUK_STR_INVALID_CALL_ARGS); return DUK_EXEC_ERROR; /* unreachable */ } @@ -15982,7 +12591,7 @@ DUK_EXTERNAL duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_function fu if (duk_get_top(ctx) < nargs || nrets < 0) { /* See comments in duk_pcall(). */ - DUK_ERROR(thr, DUK_ERR_API_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_API(thr, DUK_STR_INVALID_CALL_ARGS); return DUK_EXEC_ERROR; /* unreachable */ } @@ -16169,7 +12778,7 @@ DUK_EXTERNAL void duk_new(duk_context *ctx, duk_idx_t nargs) { return; not_constructable: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CONSTRUCTABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONSTRUCTABLE); } DUK_LOCAL duk_ret_t duk__pnew_helper(duk_context *ctx) { @@ -16292,7 +12901,7 @@ DUK_EXTERNAL duk_int_t duk_get_magic(duk_context *ctx, duk_idx_t index) { /* fall through */ type_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_UNEXPECTED_TYPE); + DUK_ERROR_TYPE(thr, DUK_STR_UNEXPECTED_TYPE); return 0; } @@ -16711,7 +13320,7 @@ DUK_EXTERNAL const char *duk_base64_encode(duk_context *ctx, duk_idx_t index) { return ret; type_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_ENCODE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_ENCODE_FAILED); return NULL; /* never here */ } @@ -16756,7 +13365,7 @@ DUK_EXTERNAL void duk_base64_decode(duk_context *ctx, duk_idx_t index) { return; type_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_DECODE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_DECODE_FAILED); } DUK_EXTERNAL const char *duk_hex_encode(duk_context *ctx, duk_idx_t index) { @@ -16781,7 +13390,7 @@ DUK_EXTERNAL const char *duk_hex_encode(duk_context *ctx, duk_idx_t index) { DUK_ASSERT(buf != NULL); #if defined(DUK_USE_HEX_FASTPATH) - DUK_ASSERT((((duk_uintptr_t) buf) & 0x01U) == 0); /* pointer is aligned, guaranteed for fixed buffer */ + DUK_ASSERT((((duk_size_t) buf) & 0x01U) == 0); /* pointer is aligned, guaranteed for fixed buffer */ p16 = (duk_uint16_t *) (void *) buf; len_safe = len & ~0x03U; for (i = 0; i < len_safe; i += 4) { @@ -16896,7 +13505,7 @@ DUK_EXTERNAL void duk_hex_decode(duk_context *ctx, duk_idx_t index) { return; type_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_DECODE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_DECODE_FAILED); } DUK_EXTERNAL const char *duk_json_encode(duk_context *ctx, duk_idx_t index) { @@ -16972,7 +13581,7 @@ DUK_EXTERNAL duk_int_t duk_eval_raw(duk_context *ctx, const char *src_buffer, du * See tests/api/test-eval-strictness.c for more discussion. */ - /* [ ... source? filename ] (depends on flags) */ + /* [ ... source? filename? ] (depends on flags) */ comp_flags = flags; comp_flags |= DUK_COMPILE_EVAL; @@ -17021,12 +13630,19 @@ DUK_LOCAL duk_ret_t duk__do_compile(duk_context *ctx) { * for discussion. */ - /* [ ... source? filename &comp_args ] (depends on flags) */ + /* [ ... source? filename? &comp_args ] (depends on flags) */ comp_args = (duk__compile_raw_args *) duk_require_pointer(ctx, -1); flags = comp_args->flags; duk_pop(ctx); + /* [ ... source? filename? ] */ + + if (flags & DUK_COMPILE_NOFILENAME) { + /* Automatic filename: 'eval' or 'input'. */ + duk_push_hstring_stridx(ctx, (flags & DUK_COMPILE_EVAL) ? DUK_STRIDX_EVAL : DUK_STRIDX_INPUT); + } + /* [ ... source? filename ] */ if (!comp_args->src_buffer) { @@ -17079,7 +13695,8 @@ DUK_LOCAL duk_ret_t duk__do_compile(duk_context *ctx) { duk_js_push_closure(thr, h_templ, thr->builtins[DUK_BIDX_GLOBAL_ENV], - thr->builtins[DUK_BIDX_GLOBAL_ENV]); + thr->builtins[DUK_BIDX_GLOBAL_ENV], + 1 /*add_auto_proto*/); duk_remove(ctx, -2); /* -> [ ... closure ] */ /* [ ... closure ] */ @@ -17105,15 +13722,21 @@ DUK_EXTERNAL duk_int_t duk_compile_raw(duk_context *ctx, const char *src_buffer, comp_args->flags = flags; duk_push_pointer(ctx, (void *) comp_args); - /* [ ... source? filename &comp_args ] (depends on flags) */ + /* [ ... source? filename? &comp_args ] (depends on flags) */ if (flags & DUK_COMPILE_SAFE) { duk_int_t rc; duk_int_t nargs; duk_int_t nrets = 1; - /* Arguments are either: [ filename &comp_args ] or [ source filename &comp_args ] */ - nargs = (flags & DUK_COMPILE_NOSOURCE) ? 2 : 3; + /* Arguments can be: [ source? filename? &comp_args] so that + * nargs is 1 to 3. Call site encodes the correct nargs count + * directly into flags. + */ + nargs = flags & 0x07; + DUK_ASSERT(nargs == (1 + + ((flags & DUK_COMPILE_NOSOURCE) ? 0 : 1) + + ((flags & DUK_COMPILE_NOFILENAME) ? 0 : 1))); rc = duk_safe_call(ctx, duk__do_compile, nargs, nrets); /* [ ... closure ] */ @@ -17168,14 +13791,15 @@ DUK_EXTERNAL void duk_push_context_dump(duk_context *ctx) { #if defined(DUK_USE_DEBUGGER_SUPPORT) -DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx, - duk_debug_read_function read_cb, - duk_debug_write_function write_cb, - duk_debug_peek_function peek_cb, - duk_debug_read_flush_function read_flush_cb, - duk_debug_write_flush_function write_flush_cb, - duk_debug_detached_function detached_cb, - void *udata) { +DUK_EXTERNAL void duk_debugger_attach_custom(duk_context *ctx, + duk_debug_read_function read_cb, + duk_debug_write_function write_cb, + duk_debug_peek_function peek_cb, + duk_debug_read_flush_function read_flush_cb, + duk_debug_write_flush_function write_flush_cb, + duk_debug_request_function request_cb, + duk_debug_detached_function detached_cb, + void *udata) { duk_hthread *thr = (duk_hthread *) ctx; duk_heap *heap; const char *str; @@ -17185,6 +13809,8 @@ DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx, * already attached? */ + DUK_D(DUK_DPRINT("application called duk_debugger_attach()")); + DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT(read_cb != NULL); DUK_ASSERT(write_cb != NULL); @@ -17196,6 +13822,7 @@ DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx, heap->dbg_peek_cb = peek_cb; heap->dbg_read_flush_cb = read_flush_cb; heap->dbg_write_flush_cb = write_flush_cb; + heap->dbg_request_cb = request_cb; heap->dbg_detached_cb = detached_cb; heap->dbg_udata = udata; heap->dbg_have_next_byte = 0; @@ -17231,6 +13858,8 @@ DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx, DUK_EXTERNAL void duk_debugger_detach(duk_context *ctx) { duk_hthread *thr; + DUK_D(DUK_DPRINT("application called duk_debugger_detach()")); + DUK_ASSERT_CTX_VALID(ctx); thr = (duk_hthread *) ctx; DUK_ASSERT(thr != NULL); @@ -17260,28 +13889,90 @@ DUK_EXTERNAL void duk_debugger_cooperate(duk_context *ctx) { return; } - thr->heap->dbg_processing = 1; processed_messages = duk_debug_process_messages(thr, 1 /*no_block*/); - thr->heap->dbg_processing = 0; DUK_UNREF(processed_messages); } +DUK_EXTERNAL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t nvalues) { + duk_hthread *thr; + duk_idx_t top; + duk_idx_t idx; + duk_bool_t ret = 0; + + DUK_ASSERT_CTX_VALID(ctx); + thr = (duk_hthread *) ctx; + DUK_ASSERT(thr != NULL); + DUK_ASSERT(thr->heap != NULL); + + DUK_D(DUK_DPRINT("application called duk_debugger_notify() with nvalues=%ld", (long) nvalues)); + + top = duk_get_top(ctx); + if (top < nvalues) { + DUK_ERROR_API(thr, "not enough stack values for notify"); + return ret; /* unreachable */ + } + if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)) { + duk_debug_write_notify(thr, DUK_DBG_CMD_APPNOTIFY); + for (idx = top - nvalues; idx < top; idx++) { + duk_tval *tv = DUK_GET_TVAL_POSIDX(ctx, idx); + duk_debug_write_tval(thr, tv); + } + duk_debug_write_eom(thr); + + /* Return non-zero (true) if we have a good reason to believe + * the notify was delivered; if we're still attached at least + * a transport error was not indicated by the transport write + * callback. This is not a 100% guarantee of course. + */ + if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)) { + ret = 1; + } + } + duk_pop_n(ctx, nvalues); + return ret; +} + +DUK_EXTERNAL void duk_debugger_pause(duk_context *ctx) { + duk_hthread *thr; + + DUK_ASSERT_CTX_VALID(ctx); + thr = (duk_hthread *) ctx; + DUK_ASSERT(thr != NULL); + DUK_ASSERT(thr->heap != NULL); + + DUK_D(DUK_DPRINT("application called duk_debugger_pause()")); + + /* Treat like a debugger statement: ignore when not attached. */ + if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)) { + DUK_HEAP_SET_PAUSED(thr->heap); + + /* Pause on the next opcode executed. This is always safe to do even + * inside the debugger message loop: the interrupt counter will be reset + * to its proper value when the message loop exits. + */ + thr->interrupt_init = 1; + thr->interrupt_counter = 0; + } +} + #else /* DUK_USE_DEBUGGER_SUPPORT */ -DUK_EXTERNAL void duk_debugger_attach(duk_context *ctx, - duk_debug_read_function read_cb, - duk_debug_write_function write_cb, - duk_debug_peek_function peek_cb, - duk_debug_read_flush_function read_flush_cb, - duk_debug_write_flush_function write_flush_cb, - duk_debug_detached_function detached_cb, - void *udata) { +DUK_EXTERNAL void duk_debugger_attach_custom(duk_context *ctx, + duk_debug_read_function read_cb, + duk_debug_write_function write_cb, + duk_debug_peek_function peek_cb, + duk_debug_read_flush_function read_flush_cb, + duk_debug_write_flush_function write_flush_cb, + duk_debug_request_function request_cb, + duk_debug_detached_function detached_cb, + void *udata) { DUK_ASSERT_CTX_VALID(ctx); DUK_UNREF(read_cb); DUK_UNREF(write_cb); DUK_UNREF(peek_cb); DUK_UNREF(read_flush_cb); DUK_UNREF(write_flush_cb); + DUK_UNREF(request_cb); DUK_UNREF(detached_cb); DUK_UNREF(udata); DUK_ERROR_API((duk_hthread *) ctx, "no debugger support"); @@ -17298,6 +13989,28 @@ DUK_EXTERNAL void duk_debugger_cooperate(duk_context *ctx) { DUK_UNREF(ctx); } +DUK_EXTERNAL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t nvalues) { + duk_idx_t top; + + DUK_ASSERT_CTX_VALID(ctx); + + top = duk_get_top(ctx); + if (top < nvalues) { + DUK_ERROR_API((duk_hthread *) ctx, "not enough stack values for notify"); + return 0; /* unreachable */ + } + + /* No debugger support, just pop values. */ + duk_pop_n(ctx, nvalues); + return 0; +} + +DUK_EXTERNAL void duk_debugger_pause(duk_context *ctx) { + /* Treat like debugger statement: nop */ + DUK_ASSERT_CTX_VALID(ctx); + DUK_UNREF(ctx); +} + #endif /* DUK_USE_DEBUGGER_SUPPORT */ #line 1 "duk_api_heap.c" /* @@ -17326,9 +14039,14 @@ duk_context *duk_create_heap(duk_alloc_function alloc_func, if (!alloc_func) { DUK_ASSERT(realloc_func == NULL); DUK_ASSERT(free_func == NULL); +#if defined(DUK_USE_PROVIDE_DEFAULT_ALLOC_FUNCTIONS) alloc_func = duk_default_alloc_function; realloc_func = duk_default_realloc_function; free_func = duk_default_free_function; +#else + DUK_D(DUK_DPRINT("no allocation functions given and no default providers")); + return NULL; +#endif } else { DUK_ASSERT(realloc_func != NULL); DUK_ASSERT(free_func != NULL); @@ -17647,6 +14365,7 @@ DUK_INTERNAL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_inde DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT_DISABLE(stridx >= 0); DUK_ASSERT(stridx < DUK_HEAP_NUM_STRINGS); + DUK_UNREF(thr); obj_index = duk_require_normalize_index(ctx, obj_index); duk_push_hstring(ctx, DUK_HTHREAD_GET_STRING(thr, stridx)); @@ -17722,6 +14441,7 @@ DUK_INTERNAL duk_bool_t duk_put_prop_stridx(duk_context *ctx, duk_idx_t obj_inde DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT_DISABLE(stridx >= 0); DUK_ASSERT(stridx < DUK_HEAP_NUM_STRINGS); + DUK_UNREF(thr); obj_index = duk_require_normalize_index(ctx, obj_index); duk_push_hstring(ctx, DUK_HTHREAD_GET_STRING(thr, stridx)); @@ -17776,6 +14496,7 @@ DUK_INTERNAL duk_bool_t duk_del_prop_stridx(duk_context *ctx, duk_idx_t obj_inde DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT_DISABLE(stridx >= 0); DUK_ASSERT(stridx < DUK_HEAP_NUM_STRINGS); + DUK_UNREF(thr); obj_index = duk_require_normalize_index(ctx, obj_index); duk_push_hstring(ctx, DUK_HTHREAD_GET_STRING(thr, stridx)); @@ -17827,6 +14548,7 @@ DUK_INTERNAL duk_bool_t duk_has_prop_stridx(duk_context *ctx, duk_idx_t obj_inde DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT_DISABLE(stridx >= 0); DUK_ASSERT(stridx < DUK_HEAP_NUM_STRINGS); + DUK_UNREF(thr); obj_index = duk_require_normalize_index(ctx, obj_index); duk_push_hstring(ctx, DUK_HTHREAD_GET_STRING(thr, stridx)); @@ -17999,11 +14721,11 @@ DUK_EXTERNAL void duk_def_prop(duk_context *ctx, duk_idx_t obj_index, duk_uint_t return; fail_invalid_desc: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_DESCRIPTOR); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_DESCRIPTOR); return; fail_not_callable: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CALLABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CALLABLE); return; } @@ -18152,6 +14874,13 @@ DUK_EXTERNAL void duk_set_prototype(duk_context *ctx, duk_idx_t index) { proto = duk_get_hobject(ctx, -1); /* proto can also be NULL here (allowed explicitly) */ +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)) { + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); /* XXX: "read only object"? */ + return; + } +#endif + DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, obj, proto); duk_pop(ctx); @@ -18857,7 +15586,7 @@ duk_bool_t duk_valstack_resize_raw(duk_context *ctx, * plan limit accordingly (taking DUK_VALSTACK_GROW_STEP into account). */ if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_VALSTACK_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_VALSTACK_LIMIT); } else { return 0; } @@ -18884,7 +15613,7 @@ duk_bool_t duk_valstack_resize_raw(duk_context *ctx, DUK_DD(DUK_DDPRINT("valstack resize failed")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_FAILED_TO_EXTEND_VALSTACK); + DUK_ERROR_ALLOC_DEFMSG(thr); } else { return 0; } @@ -19778,7 +16507,7 @@ DUK_EXTERNAL void *duk_require_heapptr(duk_context *ctx, duk_idx_t index) { /* This would be pointless: we'd return NULL for both lightfuncs and * unexpected types. */ -duk_hobject *duk_get_hobject_or_lfunc(duk_context *ctx, duk_idx_t index) { +DUK_INTERNAL duk_hobject *duk_get_hobject_or_lfunc(duk_context *ctx, duk_idx_t index) { } #endif @@ -20005,7 +16734,7 @@ DUK_EXTERNAL void duk_to_defaultvalue(duk_context *ctx, duk_idx_t index, duk_int return; } - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_DEFAULTVALUE_COERCE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_DEFAULTVALUE_COERCE_FAILED); } DUK_EXTERNAL void duk_to_undefined(duk_context *ctx, duk_idx_t index) { @@ -20144,13 +16873,8 @@ DUK_EXTERNAL duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t index) { /* Relookup in case coerce_func() has side effects, e.g. ends up coercing an object */ tv = duk_require_tval(ctx, index); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_I32_UPDREF(thr, tv, ret); /* side effects */ return ret; -#else - DUK_TVAL_SET_NUMBER_UPDREF(thr, tv, (duk_double_t) ret); /* side effects */ - return ret; -#endif } DUK_EXTERNAL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t index) { @@ -20166,13 +16890,8 @@ DUK_EXTERNAL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t index) { /* Relookup in case coerce_func() has side effects, e.g. ends up coercing an object */ tv = duk_require_tval(ctx, index); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32_UPDREF(thr, tv, ret); /* side effects */ return ret; -#else - DUK_TVAL_SET_NUMBER_UPDREF(thr, tv, (duk_double_t) ret); /* side effects */ -#endif - return ret; } DUK_EXTERNAL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t index) { @@ -20188,13 +16907,8 @@ DUK_EXTERNAL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t index) { /* Relookup in case coerce_func() has side effects, e.g. ends up coercing an object */ tv = duk_require_tval(ctx, index); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32_UPDREF(thr, tv, ret); /* side effects */ return ret; -#else - DUK_TVAL_SET_NUMBER_UPDREF(thr, tv, (duk_double_t) ret); /* side effects */ -#endif - return ret; } #if defined(DUK_USE_BUFFEROBJECT_SUPPORT) @@ -20281,7 +16995,7 @@ DUK_EXTERNAL const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t index, } #if defined(DUK_USE_DEBUGGER_SUPPORT) /* only needed by debugger for now */ -DUK_EXTERNAL duk_hstring *duk_safe_to_hstring(duk_context *ctx, duk_idx_t index) { +DUK_INTERNAL duk_hstring *duk_safe_to_hstring(duk_context *ctx, duk_idx_t index) { (void) duk_safe_to_string(ctx, index); DUK_ASSERT(duk_is_string(ctx, index)); DUK_ASSERT(duk_get_hstring(ctx, index) != NULL); @@ -20297,6 +17011,7 @@ DUK_INTERNAL void duk_to_object_class_string_top(duk_context *ctx) { DUK_ASSERT_CTX_VALID(ctx); thr = (duk_hthread *) ctx; + DUK_UNREF(thr); typemask = duk_get_type_mask(ctx, -1); if (typemask & DUK_TYPE_MASK_UNDEFINED) { @@ -20326,6 +17041,7 @@ DUK_INTERNAL void duk_push_hobject_class_string(duk_context *ctx, duk_hobject *h DUK_ASSERT_CTX_VALID(ctx); DUK_ASSERT(h != NULL); thr = (duk_hthread *) ctx; + DUK_UNREF(thr); h_strclass = DUK_HOBJECT_GET_CLASS_STRING(thr->heap, h); DUK_ASSERT(h_strclass != NULL); @@ -20362,10 +17078,12 @@ DUK_INTERNAL duk_int_t duk_to_int_clamped_raw(duk_context *ctx, duk_idx_t index, } else { res = (duk_int_t) d; } + DUK_UNREF(d); /* SCANBUILD: with suitable dmin/dmax limits 'd' is unused */ /* 'd' and 'res' agree here */ /* Relookup in case duk_js_tointeger() ends up e.g. coercing an object. */ - tv = duk_require_tval(ctx, index); + tv = duk_get_tval(ctx, index); + DUK_ASSERT(tv != NULL); /* not popped by side effect */ DUK_TVAL_SET_TVAL(&tv_tmp, tv); #if defined(DUK_USE_FASTINT) #if (DUK_INT_MAX <= 0x7fffffffL) @@ -20388,7 +17106,7 @@ DUK_INTERNAL duk_int_t duk_to_int_clamped_raw(duk_context *ctx, duk_idx_t index, } else { /* coerced value is updated to value stack even when RangeError thrown */ if (clamped) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_NUMBER_OUTSIDE_RANGE); + DUK_ERROR_RANGE(thr, DUK_STR_NUMBER_OUTSIDE_RANGE); } } @@ -20630,7 +17348,7 @@ DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t index) { switch (DUK_TVAL_GET_TAG(tv)) { case DUK_TAG_UNDEFINED: case DUK_TAG_NULL: { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_OBJECT_COERCIBLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_OBJECT_COERCIBLE); break; } case DUK_TAG_BOOLEAN: { @@ -20909,7 +17627,7 @@ DUK_EXTERNAL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t index, d return 1; } if (mask & DUK_TYPE_MASK_THROW) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_UNEXPECTED_TYPE); + DUK_ERROR_TYPE(thr, DUK_STR_UNEXPECTED_TYPE); DUK_UNREACHABLE(); } return 0; @@ -21342,7 +18060,7 @@ DUK_EXTERNAL const char *duk_push_lstring(duk_context *ctx, const char *str, duk /* Check for maximum string length */ if (len > DUK_HSTRING_MAX_BYTELEN) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_STRING_TOO_LONG); + DUK_ERROR_RANGE(thr, DUK_STR_STRING_TOO_LONG); } h = duk_heap_string_intern_checked(thr, (const duk_uint8_t *) str, (duk_uint32_t) len); @@ -21415,7 +18133,7 @@ DUK_EXTERNAL const char *duk_push_string_file_raw(duk_context *ctx, const char * duk_push_undefined(ctx); } else { /* XXX: string not shared because it is conditional */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "read file error"); + DUK_ERROR_TYPE(thr, "read file error"); } return NULL; } @@ -21430,7 +18148,7 @@ DUK_EXTERNAL const char *duk_push_string_file_raw(duk_context *ctx, const char * duk_push_undefined(ctx); } else { /* XXX: string not shared because it is conditional */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "file I/O disabled"); + DUK_ERROR_UNSUPPORTED(thr, "file I/O disabled"); } return NULL; } @@ -21483,7 +18201,7 @@ DUK_LOCAL void duk__push_this_helper(duk_context *ctx, duk_small_uint_t check_ob return; type_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_OBJECT_COERCIBLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_OBJECT_COERCIBLE); } DUK_EXTERNAL void duk_push_this(duk_context *ctx) { @@ -21726,7 +18444,7 @@ DUK_INTERNAL duk_idx_t duk_push_object_helper(duk_context *ctx, duk_uint_t hobje h = duk_hobject_alloc(thr->heap, hobject_flags_and_class); if (!h) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } DUK_DDD(DUK_DDDPRINT("created object with flags: 0x%08lx", (unsigned long) h->hdr.h_flags)); @@ -21829,13 +18547,17 @@ DUK_EXTERNAL duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t flags) { DUK_HOBJECT_FLAG_THREAD | DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_THREAD)); if (!obj) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } obj->state = DUK_HTHREAD_STATE_INACTIVE; +#if defined(DUK_USE_ROM_STRINGS) + /* Nothing to initialize, strs[] is in ROM. */ +#else #if defined(DUK_USE_HEAPPTR16) obj->strs16 = thr->strs16; #else obj->strs = thr->strs; +#endif #endif DUK_DDD(DUK_DDDPRINT("created thread object with flags: 0x%08lx", (unsigned long) obj->obj.hdr.h_flags)); @@ -21848,7 +18570,7 @@ DUK_EXTERNAL duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t flags) { /* important to do this *after* pushing, to make the thread reachable for gc */ if (!duk_hthread_init_stacks(thr->heap, obj)) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } /* initialize built-ins - either by copying or creating new ones */ @@ -21893,7 +18615,7 @@ DUK_INTERNAL duk_idx_t duk_push_compiledfunction(duk_context *ctx) { DUK_HOBJECT_FLAG_COMPILEDFUNCTION | DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_FUNCTION)); if (!obj) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } DUK_DDD(DUK_DDDPRINT("created compiled function object with flags: 0x%08lx", (unsigned long) obj->obj.hdr.h_flags)); @@ -21936,7 +18658,7 @@ DUK_LOCAL duk_idx_t duk__push_c_function_raw(duk_context *ctx, duk_c_function fu obj = duk_hnativefunction_alloc(thr->heap, flags); if (!obj) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } obj->func = func; @@ -22061,7 +18783,7 @@ DUK_INTERNAL duk_hbufferobject *duk_push_bufferobject_raw(duk_context *ctx, duk_ obj = duk_hbufferobject_alloc(thr->heap, hobject_flags_and_class); if (!obj) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, (duk_hobject *) obj, thr->builtins[prototype_bidx]); @@ -22195,11 +18917,11 @@ DUK_EXTERNAL void duk_push_buffer_object(duk_context *ctx, duk_idx_t idx_buffer, return; range_error: - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_RANGE(thr, DUK_STR_INVALID_CALL_ARGS); return; /* not reached */ arg_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_CALL_ARGS); return; /* not reached */ } @@ -22244,11 +18966,7 @@ DUK_EXTERNAL duk_idx_t duk_push_error_object_va_raw(duk_context *ctx, duk_errcod duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_MESSAGE, DUK_PROPDESC_FLAGS_WC); } -#if 0 - /* Disabled for now, not sure this is a useful property */ - duk_push_int(ctx, err_code); - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_CODE, DUK_PROPDESC_FLAGS_WC); -#endif + /* XXX: .code = err_code disabled, not sure if useful */ /* Creation time error augmentation */ #ifdef DUK_USE_AUGMENT_ERROR_CREATE @@ -22304,12 +19022,12 @@ DUK_EXTERNAL void *duk_push_buffer_raw(duk_context *ctx, duk_size_t size, duk_sm /* Check for maximum buffer length. */ if (size > DUK_HBUFFER_MAX_BYTELEN) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_BUFFER_TOO_LONG); + DUK_ERROR_RANGE(thr, DUK_STR_BUFFER_TOO_LONG); } h = duk_hbuffer_alloc(thr->heap, size, flags, &buf_data); if (!h) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_ALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } tv_slot = thr->valstack_top; @@ -22369,6 +19087,7 @@ DUK_INTERNAL void duk_push_hstring(duk_context *ctx, duk_hstring *h) { DUK_INTERNAL void duk_push_hstring_stridx(duk_context *ctx, duk_small_int_t stridx) { duk_hthread *thr = (duk_hthread *) ctx; + DUK_UNREF(thr); DUK_ASSERT(stridx >= 0 && stridx < DUK_HEAP_NUM_STRINGS); duk_push_hstring(ctx, DUK_HTHREAD_GET_STRING(thr, stridx)); } @@ -22685,7 +19404,7 @@ DUK_INTERNAL void duk_push_lightfunc_tostring(duk_context *ctx, duk_tval *tv) { duk_push_string(ctx, "function "); duk_push_lightfunc_name(ctx, tv); - duk_push_string(ctx, "() {/* light */}"); + duk_push_string(ctx, "() {\"light\"}"); duk_concat(ctx, 3); } @@ -22952,7 +19671,7 @@ DUK_LOCAL void duk__concat_and_join_helper(duk_context *ctx, duk_idx_t count_in, return; error_overflow: - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_CONCAT_RESULT_TOO_LONG); + DUK_ERROR_RANGE(thr, DUK_STR_CONCAT_RESULT_TOO_LONG); } DUK_EXTERNAL void duk_concat(duk_context *ctx, duk_idx_t count) { @@ -23255,14 +19974,14 @@ DUK_EXTERNAL void duk_put_var(duk_context *ctx) { DUK_EXTERNAL duk_bool_t duk_del_var(duk_context *ctx) { DUK_ASSERT_CTX_VALID(ctx); - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_UNIMPLEMENTED_ERROR, DUK_STR_UNIMPLEMENTED); + DUK_ERROR_UNIMPLEMENTED_DEFMSG((duk_hthread *) ctx); return 0; } DUK_EXTERNAL duk_bool_t duk_has_var(duk_context *ctx) { DUK_ASSERT_CTX_VALID(ctx); - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_UNIMPLEMENTED_ERROR, DUK_STR_UNIMPLEMENTED); + DUK_ERROR_UNIMPLEMENTED_DEFMSG((duk_hthread *) ctx); return 0; } #line 1 "duk_bi_array.c" @@ -23337,7 +20056,7 @@ DUK_LOCAL duk_uint32_t duk__push_this_obj_len_u32_limited(duk_context *ctx) { */ duk_uint32_t ret = duk__push_this_obj_len_u32(ctx); if (DUK_UNLIKELY(ret >= 0x80000000UL)) { - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_INTERNAL_ERROR, DUK_STR_ARRAY_LENGTH_OVER_2G); + DUK_ERROR_RANGE((duk_hthread *) ctx, DUK_STR_ARRAY_LENGTH_OVER_2G); } return ret; } @@ -24908,7 +21627,7 @@ DUK_LOCAL duk_hbufferobject *duk__getrequire_bufobj_this(duk_context *ctx, duk_b } if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_BUFFER); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_BUFFER); } return NULL; } @@ -24953,7 +21672,7 @@ DUK_LOCAL duk_hbufferobject *duk__require_bufobj_value(duk_context *ctx, duk_idx } } - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_BUFFER); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_BUFFER); return NULL; /* not reachable */ } #endif /* DUK_USE_BUFFEROBJECT_SUPPORT */ @@ -25060,7 +21779,7 @@ DUK_LOCAL void duk__resolve_offset_opt_length(duk_context *ctx, return; fail_range: - duk_error(thr, DUK_ERR_RANGE_ERROR, DUK_STR_INVALID_CALL_ARGS); + DUK_ERROR_RANGE(thr, DUK_STR_INVALID_CALL_ARGS); } #endif /* DUK_USE_BUFFEROBJECT_SUPPORT */ @@ -25377,7 +22096,6 @@ DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_constructor(duk_context *ctx) { */ duk_int_t len; duk_int_t i; - duk_uint8_t *buf; duk_hbuffer *h_buf; duk_hbufferobject *h_bufobj; duk_size_t buf_size; @@ -25392,10 +22110,12 @@ DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_constructor(duk_context *ctx) { } case DUK_TYPE_NUMBER: { len = duk_to_int_clamped(ctx, 0, 0, DUK_INT_MAX); - buf = (duk_uint8_t *) duk_push_fixed_buffer(ctx, (duk_size_t) len); + (void) duk_push_fixed_buffer(ctx, (duk_size_t) len); break; } case DUK_TYPE_OBJECT: { + duk_uint8_t *buf; + (void) duk_get_prop_string(ctx, 0, "length"); len = duk_to_int_clamped(ctx, -1, 0, DUK_INT_MAX); duk_pop(ctx); @@ -25411,7 +22131,7 @@ DUK_INTERNAL duk_ret_t duk_bi_nodejs_buffer_constructor(duk_context *ctx) { case DUK_TYPE_STRING: { /* ignore encoding for now */ duk_dup(ctx, 0); - buf = (duk_uint8_t *) duk_to_buffer(ctx, -1, &buf_size); + (void) duk_to_buffer(ctx, -1, &buf_size); break; } default: @@ -25630,6 +22350,7 @@ DUK_INTERNAL duk_ret_t duk_bi_typedarray_constructor(duk_context *ctx) { goto fail_arguments; } } + DUK_UNREF(elem_length); DUK_ASSERT_DISABLE(byte_offset >= 0); DUK_ASSERT(byte_offset <= h_bufarg->length); DUK_ASSERT_DISABLE(byte_length >= 0); @@ -27183,10 +23904,14 @@ DUK_INTERNAL duk_ret_t duk_bi_buffer_readfield(duk_context *ctx) { if (h_this->buf) { buf = DUK_HBUFFEROBJECT_GET_SLICE_BASE(thr->heap, h_this); } else { - /* neutered, value doesn't matter because check_length is 0. */ + /* Neutered. We could go into the switch-case safely with + * buf == NULL because check_length == 0. To avoid scanbuild + * warnings, fail directly instead. + */ DUK_ASSERT(check_length == 0); - buf = NULL; + goto fail_neutered; } + DUK_ASSERT(buf != NULL); switch (magic_ftype) { case DUK__FLD_8BIT: { @@ -27345,6 +24070,7 @@ DUK_INTERNAL duk_ret_t duk_bi_buffer_readfield(duk_context *ctx) { return 1; + fail_neutered: fail_field_length: fail_bounds: if (no_assert) { @@ -27469,10 +24195,14 @@ DUK_INTERNAL duk_ret_t duk_bi_buffer_writefield(duk_context *ctx) { if (h_this->buf) { buf = DUK_HBUFFEROBJECT_GET_SLICE_BASE(thr->heap, h_this); } else { - /* neutered, value doesn't matter because check_length is 0. */ + /* Neutered. We could go into the switch-case safely with + * buf == NULL because check_length == 0. To avoid scanbuild + * warnings, fail directly instead. + */ DUK_ASSERT(check_length == 0); - buf = NULL; + goto fail_neutered; } + DUK_ASSERT(buf != NULL); switch (magic_ftype) { case DUK__FLD_8BIT: { @@ -27618,6 +24348,7 @@ DUK_INTERNAL duk_ret_t duk_bi_buffer_writefield(duk_context *ctx) { duk_push_uint(ctx, offset + nbytes); return 1; + fail_neutered: fail_field_length: fail_bounds: if (no_assert) { @@ -27974,10 +24705,8 @@ DUK_LOCAL duk_bool_t duk__parse_string_iso8601_subset(duk_context *ctx, const ch } /* if-digit-else-ctrl */ } /* char loop */ - /* We should never exit the loop above, but if we do, reject - * by falling through. - */ - DUK_DDD(DUK_DDDPRINT("fell out of char loop without explicit accept/reject -> reject")); + /* We should never exit the loop above. */ + DUK_UNREACHABLE(); reject: DUK_DDD(DUK_DDDPRINT("reject")); @@ -28551,7 +25280,7 @@ DUK_LOCAL duk_double_t duk__push_this_get_timeval_tzoffset(duk_context *ctx, duk duk_push_this(ctx); h = duk_get_hobject(ctx, -1); /* XXX: getter with class check, useful in built-ins */ if (h == NULL || DUK_HOBJECT_GET_CLASS_NUMBER(h) != DUK_HOBJECT_CLASS_DATE) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "expected Date"); + DUK_ERROR_TYPE(thr, "expected Date"); } duk_get_prop_stridx(ctx, -1, DUK_STRIDX_INT_VALUE); @@ -28563,7 +25292,7 @@ DUK_LOCAL duk_double_t duk__push_this_get_timeval_tzoffset(duk_context *ctx, duk d = 0.0; } if (flags & DUK_DATE_FLAG_NAN_TO_RANGE_ERROR) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, "Invalid Date"); + DUK_ERROR_RANGE(thr, "Invalid Date"); } } /* if no NaN handling flag, may still be NaN here, but not Inf */ @@ -29407,7 +26136,7 @@ DUK_INTERNAL duk_double_t duk_bi_date_get_now_gettimeofday(duk_context *ctx) { duk_double_t d; if (gettimeofday(&tv, NULL) != 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, "gettimeofday failed"); + DUK_ERROR_INTERNAL_DEFMSG(thr); } d = ((duk_double_t) tv.tv_sec) * 1000.0 + @@ -29514,8 +26243,6 @@ DUK_INTERNAL duk_int_t duk_bi_date_get_local_tzoffset_gmtime(duk_double_t d) { t = (time_t) (d / 1000.0); DUK_DDD(DUK_DDDPRINT("timeval: %lf -> time_t %ld", (double) d, (long) t)); - t1 = t; - DUK_MEMZERO((void *) tms, sizeof(struct tm) * 2); #if defined(DUK_USE_DATE_TZO_GMTIME_R) @@ -29869,7 +26596,7 @@ DUK_INTERNAL duk_ret_t duk_bi_duktape_object_info(duk_context *ctx) { hdr_size = (duk_small_uint_t) sizeof(duk_hobject); } duk_push_uint(ctx, (duk_uint_t) hdr_size); - duk_push_uint(ctx, (duk_uint_t) DUK_HOBJECT_E_ALLOC_SIZE(h_obj)); + duk_push_uint(ctx, (duk_uint_t) DUK_HOBJECT_P_ALLOC_SIZE(h_obj)); duk_push_uint(ctx, (duk_uint_t) DUK_HOBJECT_GET_ESIZE(h_obj)); /* Note: e_next indicates the number of gc-reachable entries * in the entry part, and also indicates the index where the @@ -30017,6 +26744,8 @@ DUK_INTERNAL duk_ret_t duk_bi_duktape_object_enc(duk_context *ctx) { duk_hthread *thr = (duk_hthread *) ctx; duk_hstring *h_str; + DUK_UNREF(thr); + /* Vararg function: must be careful to check/require arguments. * The JSON helpers accept invalid indices and treat them like * non-existent optional parameters. @@ -30062,6 +26791,8 @@ DUK_INTERNAL duk_ret_t duk_bi_duktape_object_dec(duk_context *ctx) { duk_hthread *thr = (duk_hthread *) ctx; duk_hstring *h_str; + DUK_UNREF(thr); + /* Vararg function: must be careful to check/require arguments. * The JSON helpers accept invalid indices and treat them like * non-existent optional parameters. @@ -30230,7 +26961,7 @@ DUK_LOCAL duk_ret_t duk__error_getter_helper(duk_context *ctx, duk_small_int_t o duk_small_int_t i; /* traceback depth fits into 16 bits */ duk_small_int_t t; /* stack type fits into 16 bits */ duk_small_int_t count_func = 0; /* traceback depth ensures fits into 16 bits */ - const char *str_tailcalled = " tailcalled"; + const char *str_tailcall = " tailcall"; const char *str_strict = " strict"; const char *str_construct = " construct"; const char *str_prevyield = " preventsyield"; @@ -30238,12 +26969,13 @@ DUK_LOCAL duk_ret_t duk__error_getter_helper(duk_context *ctx, duk_small_int_t o const char *str_empty = ""; DUK_ASSERT_TOP(ctx, 0); /* fixed arg count */ + DUK_UNREF(thr); duk_push_this(ctx); duk_get_prop_stridx(ctx, -1, DUK_STRIDX_INT_TRACEDATA); idx_td = duk_get_top_index(ctx); - duk_push_hstring_stridx(ctx, DUK_STRIDX_NEWLINE_TAB); + duk_push_hstring_stridx(ctx, DUK_STRIDX_NEWLINE_4SPACE); duk_push_this(ctx); /* [ ... this tracedata sep this ] */ @@ -30304,38 +27036,40 @@ DUK_LOCAL duk_ret_t duk__error_getter_helper(duk_context *ctx, duk_small_int_t o } } + /* XXX: Change 'anon' handling here too, to use empty string for anonymous functions? */ + /* XXX: Could be improved by coercing to a readable duk_tval (especially string escaping) */ h_name = duk_get_hstring(ctx, -2); /* may be NULL */ funcname = (h_name == NULL || h_name == DUK_HTHREAD_STRING_EMPTY_STRING(thr)) ? - "anon" : (const char *) DUK_HSTRING_GET_DATA(h_name); + "[anon]" : (const char *) DUK_HSTRING_GET_DATA(h_name); filename = duk_get_string(ctx, -1); filename = filename ? filename : ""; DUK_ASSERT(funcname != NULL); DUK_ASSERT(filename != NULL); if (h_func == NULL) { - duk_push_sprintf(ctx, "%s light%s%s%s%s%s", + duk_push_sprintf(ctx, "at %s light%s%s%s%s%s", (const char *) funcname, (const char *) ((flags & DUK_ACT_FLAG_STRICT) ? str_strict : str_empty), - (const char *) ((flags & DUK_ACT_FLAG_TAILCALLED) ? str_tailcalled : str_empty), + (const char *) ((flags & DUK_ACT_FLAG_TAILCALLED) ? str_tailcall : str_empty), (const char *) ((flags & DUK_ACT_FLAG_CONSTRUCT) ? str_construct : str_empty), (const char *) ((flags & DUK_ACT_FLAG_DIRECT_EVAL) ? str_directeval : str_empty), (const char *) ((flags & DUK_ACT_FLAG_PREVENT_YIELD) ? str_prevyield : str_empty)); } else if (DUK_HOBJECT_HAS_NATIVEFUNCTION(h_func)) { - duk_push_sprintf(ctx, "%s %s native%s%s%s%s%s", + duk_push_sprintf(ctx, "at %s (%s) native%s%s%s%s%s", (const char *) funcname, (const char *) filename, (const char *) ((flags & DUK_ACT_FLAG_STRICT) ? str_strict : str_empty), - (const char *) ((flags & DUK_ACT_FLAG_TAILCALLED) ? str_tailcalled : str_empty), + (const char *) ((flags & DUK_ACT_FLAG_TAILCALLED) ? str_tailcall : str_empty), (const char *) ((flags & DUK_ACT_FLAG_CONSTRUCT) ? str_construct : str_empty), (const char *) ((flags & DUK_ACT_FLAG_DIRECT_EVAL) ? str_directeval : str_empty), (const char *) ((flags & DUK_ACT_FLAG_PREVENT_YIELD) ? str_prevyield : str_empty)); } else { - duk_push_sprintf(ctx, "%s %s:%ld%s%s%s%s%s", + duk_push_sprintf(ctx, "at %s (%s:%ld)%s%s%s%s%s", (const char *) funcname, (const char *) filename, (long) line, (const char *) ((flags & DUK_ACT_FLAG_STRICT) ? str_strict : str_empty), - (const char *) ((flags & DUK_ACT_FLAG_TAILCALLED) ? str_tailcalled : str_empty), + (const char *) ((flags & DUK_ACT_FLAG_TAILCALLED) ? str_tailcall : str_empty), (const char *) ((flags & DUK_ACT_FLAG_CONSTRUCT) ? str_construct : str_empty), (const char *) ((flags & DUK_ACT_FLAG_DIRECT_EVAL) ? str_directeval : str_empty), (const char *) ((flags & DUK_ACT_FLAG_PREVENT_YIELD) ? str_prevyield : str_empty)); @@ -30364,7 +27098,7 @@ DUK_LOCAL duk_ret_t duk__error_getter_helper(duk_context *ctx, duk_small_int_t o } } - duk_push_sprintf(ctx, "%s:%ld", + duk_push_sprintf(ctx, "at [anon] (%s:%ld) internal", (const char *) duk_get_string(ctx, -2), (long) pc); duk_replace(ctx, -3); /* [ ... v1 v2 str ] -> [ ... str v2 ] */ duk_pop(ctx); /* -> [ ... str ] */ @@ -30565,7 +27299,7 @@ DUK_INTERNAL duk_ret_t duk_bi_function_constructor(duk_context *ctx) { outer_lex_env = thr->builtins[DUK_BIDX_GLOBAL_ENV]; outer_var_env = thr->builtins[DUK_BIDX_GLOBAL_ENV]; - duk_js_push_closure(thr, func, outer_var_env, outer_lex_env); + duk_js_push_closure(thr, func, outer_var_env, outer_lex_env, 1 /*add_auto_proto*/); /* [ body formals source template closure ] */ @@ -30605,29 +27339,31 @@ DUK_INTERNAL duk_ret_t duk_bi_function_prototype_to_string(duk_context *ctx) { if (DUK_TVAL_IS_OBJECT(tv)) { duk_hobject *obj = DUK_TVAL_GET_OBJECT(tv); - const char *func_name = DUK_STR_ANON; + const char *func_name; - /* XXX: rework, it would be nice to avoid C formatting functions to - * ensure there are no Unicode issues. + /* Function name: missing/undefined is mapped to empty string, + * otherwise coerce to string. + */ + /* XXX: currently no handling for non-allowed identifier characters, + * e.g. a '{' in the function name. */ - duk_get_prop_stridx(ctx, -1, DUK_STRIDX_NAME); - if (!duk_is_undefined(ctx, -1)) { + if (duk_is_undefined(ctx, -1)) { + func_name = ""; + } else { func_name = duk_to_string(ctx, -1); DUK_ASSERT(func_name != NULL); - - if (func_name[0] == (char) 0) { - func_name = DUK_STR_ANON; - } } + /* Indicate function type in the function body using a dummy + * directive. + */ if (DUK_HOBJECT_HAS_COMPILEDFUNCTION(obj)) { - /* XXX: actual source, if available */ - duk_push_sprintf(ctx, "function %s() {/* ecmascript */}", (const char *) func_name); + duk_push_sprintf(ctx, "function %s() {\"ecmascript\"}", (const char *) func_name); } else if (DUK_HOBJECT_HAS_NATIVEFUNCTION(obj)) { - duk_push_sprintf(ctx, "function %s() {/* native */}", (const char *) func_name); + duk_push_sprintf(ctx, "function %s() {\"native\"}", (const char *) func_name); } else if (DUK_HOBJECT_HAS_BOUND(obj)) { - duk_push_sprintf(ctx, "function %s() {/* bound */}", (const char *) func_name); + duk_push_sprintf(ctx, "function %s() {\"bound\"}", (const char *) func_name); } else { goto type_error; } @@ -31216,7 +27952,7 @@ DUK_LOCAL void duk__transform_callback_escape(duk__transform_context *tfm_ctx, c return; esc_error: - DUK_ERROR(tfm_ctx->thr, DUK_ERR_TYPE_ERROR, "invalid input"); + DUK_ERROR_TYPE(tfm_ctx->thr, "invalid input"); } DUK_LOCAL void duk__transform_callback_unescape(duk__transform_context *tfm_ctx, const void *udata, duk_codepoint_t cp) { @@ -31372,7 +28108,7 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_eval(duk_context *ctx) { outer_lex_env = new_env; outer_var_env = new_env; - duk_insert(ctx, 0); /* stash to bottom of value stack to keep new_env reachable */ + duk_insert(ctx, 0); /* stash to bottom of value stack to keep new_env reachable for duration of eval */ /* compiler's responsibility */ DUK_ASSERT(DUK_HOBJECT_HAS_NEWENV((duk_hobject *) func)); @@ -31397,7 +28133,8 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_eval(duk_context *ctx) { } act = NULL; - duk_js_push_closure(thr, func, outer_var_env, outer_lex_env); + /* Eval code doesn't need an automatic .prototype object. */ + duk_js_push_closure(thr, func, outer_var_env, outer_lex_env, 0 /*add_auto_proto*/); /* [ source template closure ] */ @@ -31416,7 +28153,7 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_eval(duk_context *ctx) { DUK_DDD(DUK_DDDPRINT("eval -> lex_env=%!iO, var_env=%!iO, this_binding=%!T", (duk_heaphdr *) outer_lex_env, (duk_heaphdr *) outer_var_env, - (duk_tval *) duk_get_tval(ctx, -1))); + duk_get_tval(ctx, -1))); /* [ source template closure this ] */ @@ -31676,16 +28413,14 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_print_helper(duk_context *ctx) { #if defined(DUK_USE_COMMONJS_MODULES) DUK_LOCAL void duk__bi_global_resolve_module_id(duk_context *ctx, const char *req_id, const char *mod_id) { duk_hthread *thr = (duk_hthread *) ctx; - duk_size_t mod_id_len; - duk_size_t req_id_len; - duk_uint8_t buf_in[DUK_BI_COMMONJS_MODULE_ID_LIMIT]; - duk_uint8_t buf_out[DUK_BI_COMMONJS_MODULE_ID_LIMIT]; + duk_uint8_t buf[DUK_BI_COMMONJS_MODULE_ID_LIMIT]; duk_uint8_t *p; duk_uint8_t *q; + duk_uint8_t *q_last; /* last component */ + duk_int_t int_rc; DUK_ASSERT(req_id != NULL); /* mod_id may be NULL */ - DUK_ASSERT(sizeof(buf_out) >= sizeof(buf_in)); /* bound checking requires this */ /* * A few notes on the algorithm: @@ -31695,8 +28430,10 @@ DUK_LOCAL void duk__bi_global_resolve_module_id(duk_context *ctx, const char *re * is within CommonJS modules specification). * * - There are few output bound checks here. This is on purpose: - * we check the input length and rely on the output never being - * longer than the input, so we cannot run out of output space. + * the resolution input is length checked and the output is never + * longer than the input. The resolved output is written directly + * over the input because it's never longer than the input at any + * point in the algorithm. * * - Non-ASCII characters are processed as individual bytes and * need no special treatment. However, U+0000 terminates the @@ -31714,38 +28451,45 @@ DUK_LOCAL void duk__bi_global_resolve_module_id(duk_context *ctx, const char *re * 'foo/bar/.././quux'. */ - req_id_len = DUK_STRLEN(req_id); if (mod_id != NULL && req_id[0] == '.') { - mod_id_len = DUK_STRLEN(mod_id); - if (mod_id_len + 4 + req_id_len + 1 >= sizeof(buf_in)) { - DUK_DD(DUK_DDPRINT("resolve error: current and requested module ID don't fit into resolve input buffer")); - goto resolve_error; - } - (void) DUK_SNPRINTF((char *) buf_in, sizeof(buf_in), "%s/../%s", (const char *) mod_id, (const char *) req_id); + int_rc = DUK_SNPRINTF((char *) buf, sizeof(buf), "%s/../%s", mod_id, req_id); } else { - if (req_id_len + 1 >= sizeof(buf_in)) { - DUK_DD(DUK_DDPRINT("resolve error: requested module ID doesn't fit into resolve input buffer")); - goto resolve_error; - } - (void) DUK_SNPRINTF((char *) buf_in, sizeof(buf_in), "%s", (const char *) req_id); + int_rc = DUK_SNPRINTF((char *) buf, sizeof(buf), "%s", req_id); + } + if (int_rc >= (duk_int_t) sizeof(buf) || int_rc < 0) { + /* Potentially truncated, NUL not guaranteed in any case. + * The (int_rc < 0) case should not occur in practice. + */ + DUK_DD(DUK_DDPRINT("resolve error: temporary working module ID doesn't fit into resolve buffer")); + goto resolve_error; } - buf_in[sizeof(buf_in) - 1] = (duk_uint8_t) 0; + DUK_ASSERT(DUK_STRLEN((const char *) buf) < sizeof(buf)); /* at most sizeof(buf) - 1 */ - DUK_DDD(DUK_DDDPRINT("input module id: '%s'", (const char *) buf_in)); + DUK_DDD(DUK_DDDPRINT("input module id: '%s'", (const char *) buf)); /* * Resolution loop. At the top of the loop we're expecting a valid * term: '.', '..', or a non-empty identifier not starting with a period. */ - p = buf_in; - q = buf_out; + p = buf; + q = buf; for (;;) { duk_uint_fast8_t c; - /* Here 'p' always points to the start of a term. */ - DUK_DDD(DUK_DDDPRINT("resolve loop top: p -> '%s', q=%p, buf_out=%p", - (const char *) p, (void *) q, (void *) buf_out)); + /* Here 'p' always points to the start of a term. + * + * We can also unconditionally reset q_last here: if this is + * the last (non-empty) term q_last will have the right value + * on loop exit. + */ + + DUK_ASSERT(p >= q); /* output is never longer than input during resolution */ + + DUK_DDD(DUK_DDDPRINT("resolve loop top: p -> '%s', q=%p, buf=%p", + (const char *) p, (void *) q, (void *) buf)); + + q_last = q; c = *p++; if (DUK_UNLIKELY(c == 0)) { @@ -31763,17 +28507,17 @@ DUK_LOCAL void duk__bi_global_resolve_module_id(duk_context *ctx, const char *re * q[-2] = last char of previous component (or beyond start of buffer) */ p++; /* eat (first) input slash */ - DUK_ASSERT(q >= buf_out); - if (q == buf_out) { + DUK_ASSERT(q >= buf); + if (q == buf) { DUK_DD(DUK_DDPRINT("resolve error: term was '..' but nothing to backtrack")); goto resolve_error; } DUK_ASSERT(*(q - 1) == '/'); - q--; /* backtrack to last output slash */ + q--; /* backtrack to last output slash (dups already eliminated) */ for (;;) { /* Backtrack to previous slash or start of buffer. */ - DUK_ASSERT(q >= buf_out); - if (q == buf_out) { + DUK_ASSERT(q >= buf); + if (q == buf) { break; } if (*(q - 1) == '/') { @@ -31795,6 +28539,9 @@ DUK_LOCAL void duk__bi_global_resolve_module_id(duk_context *ctx, const char *re *q++ = c; c = *p++; if (DUK_UNLIKELY(c == 0)) { + /* This was the last term, and q_last was + * updated to match this term at loop top. + */ goto loop_done; } else if (DUK_UNLIKELY(c == '/')) { *q++ = '/'; @@ -31816,16 +28563,38 @@ DUK_LOCAL void duk__bi_global_resolve_module_id(duk_context *ctx, const char *re } } loop_done: + /* Output #1: resolved absolute name */ + DUK_ASSERT(q >= buf); + duk_push_lstring(ctx, (const char *) buf, (size_t) (q - buf)); - duk_push_lstring(ctx, (const char *) buf_out, (size_t) (q - buf_out)); + /* Output #2: last component name */ + DUK_ASSERT(q >= q_last); + DUK_ASSERT(q_last >= buf); + duk_push_lstring(ctx, (const char *) q_last, (size_t) (q - q_last)); + + DUK_DD(DUK_DDPRINT("after resolving module name: buf=%p, q_last=%p, q=%p", + (void *) buf, (void *) q_last, (void *) q)); return; resolve_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "cannot resolve module id: %s", (const char *) req_id); + DUK_ERROR_FMT1(thr, DUK_ERR_TYPE_ERROR, "cannot resolve module id: %s", (const char *) req_id); } #endif /* DUK_USE_COMMONJS_MODULES */ #if defined(DUK_USE_COMMONJS_MODULES) +/* Stack indices for better readability */ +#define DUK__IDX_REQUESTED_ID 0 /* Module id requested */ +#define DUK__IDX_REQUIRE 1 /* Current require() function */ +#define DUK__IDX_REQUIRE_ID 2 /* The base ID of the current require() function, resolution base */ +#define DUK__IDX_RESOLVED_ID 3 /* Resolved, normalized absolute module ID */ +#define DUK__IDX_LASTCOMP 4 /* Last component name in resolved path */ +#define DUK__IDX_DUKTAPE 5 /* Duktape object */ +#define DUK__IDX_MODLOADED 6 /* Duktape.modLoaded[] module cache */ +#define DUK__IDX_UNDEFINED 7 /* 'undefined', artifact of lookup */ +#define DUK__IDX_FRESH_REQUIRE 8 /* New require() function for module, updated resolution base */ +#define DUK__IDX_EXPORTS 9 /* Default exports table */ +#define DUK__IDX_MODULE 10 /* Module object containing module.exports, etc */ + DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { const char *str_req_id; /* requested identifier */ const char *str_mod_id; /* require.id of current module */ @@ -31841,23 +28610,24 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { * Resolve module identifier into canonical absolute form. */ - str_req_id = duk_require_string(ctx, 0); + str_req_id = duk_require_string(ctx, DUK__IDX_REQUESTED_ID); duk_push_current_function(ctx); duk_get_prop_stridx(ctx, -1, DUK_STRIDX_ID); - str_mod_id = duk_get_string(ctx, 2); /* ignore non-strings */ + str_mod_id = duk_get_string(ctx, DUK__IDX_REQUIRE_ID); /* ignore non-strings */ DUK_DDD(DUK_DDDPRINT("resolve module id: requested=%!T, currentmodule=%!T", - (duk_tval *) duk_get_tval(ctx, 0), - (duk_tval *) duk_get_tval(ctx, 2))); + duk_get_tval(ctx, DUK__IDX_REQUESTED_ID), + duk_get_tval(ctx, DUK__IDX_REQUIRE_ID))); duk__bi_global_resolve_module_id(ctx, str_req_id, str_mod_id); str_req_id = NULL; str_mod_id = NULL; - DUK_DDD(DUK_DDDPRINT("resolved module id: requested=%!T, currentmodule=%!T, result=%!T", - (duk_tval *) duk_get_tval(ctx, 0), - (duk_tval *) duk_get_tval(ctx, 2), - (duk_tval *) duk_get_tval(ctx, 3))); + DUK_DDD(DUK_DDDPRINT("resolved module id: requested=%!T, currentmodule=%!T, result=%!T, lastcomp=%!T", + duk_get_tval(ctx, DUK__IDX_REQUESTED_ID), + duk_get_tval(ctx, DUK__IDX_REQUIRE_ID), + duk_get_tval(ctx, DUK__IDX_RESOLVED_ID), + duk_get_tval(ctx, DUK__IDX_LASTCOMP))); - /* [ requested_id require require.id resolved_id ] */ - DUK_ASSERT_TOP(ctx, 4); + /* [ requested_id require require.id resolved_id last_comp ] */ + DUK_ASSERT_TOP(ctx, DUK__IDX_LASTCOMP + 1); /* * Cached module check. @@ -31868,27 +28638,22 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { * be supported to some extent. */ - /* [ requested_id require require.id resolved_id ] */ - DUK_ASSERT_TOP(ctx, 4); - duk_push_hobject_bidx(ctx, DUK_BIDX_DUKTAPE); - duk_get_prop_stridx(ctx, 4, DUK_STRIDX_MOD_LOADED); /* Duktape.modLoaded */ - (void) duk_require_hobject(ctx, 5); - - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded ] */ - DUK_ASSERT_TOP(ctx, 6); + duk_get_prop_stridx(ctx, DUK__IDX_DUKTAPE, DUK_STRIDX_MOD_LOADED); /* Duktape.modLoaded */ + (void) duk_require_hobject(ctx, DUK__IDX_MODLOADED); + DUK_ASSERT_TOP(ctx, DUK__IDX_MODLOADED + 1); - duk_dup(ctx, 3); - if (duk_get_prop(ctx, 5)) { - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded Duktape.modLoaded[id] ] */ + duk_dup(ctx, DUK__IDX_RESOLVED_ID); + if (duk_get_prop(ctx, DUK__IDX_MODLOADED)) { + /* [ requested_id require require.id resolved_id last_comp Duktape Duktape.modLoaded Duktape.modLoaded[id] ] */ DUK_DD(DUK_DDPRINT("module already loaded: %!T", - (duk_tval *) duk_get_tval(ctx, 3))); + duk_get_tval(ctx, DUK__IDX_RESOLVED_ID))); duk_get_prop_stridx(ctx, -1, DUK_STRIDX_EXPORTS); /* return module.exports */ return 1; } + DUK_ASSERT_TOP(ctx, DUK__IDX_UNDEFINED + 1); - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded undefined ] */ - DUK_ASSERT_TOP(ctx, 7); + /* [ requested_id require require.id resolved_id last_comp Duktape Duktape.modLoaded undefined ] */ /* * Module not loaded (and loading not started previously). @@ -31900,8 +28665,12 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { * succeeds in finding the module. */ - DUK_DD(DUK_DDPRINT("module not yet loaded: %!T", - (duk_tval *) duk_get_tval(ctx, 3))); + DUK_D(DUK_DPRINT("loading module %!T, resolution base %!T, requested ID %!T -> resolved ID %!T, last component %!T", + duk_get_tval(ctx, DUK__IDX_RESOLVED_ID), + duk_get_tval(ctx, DUK__IDX_REQUIRE_ID), + duk_get_tval(ctx, DUK__IDX_REQUESTED_ID), + duk_get_tval(ctx, DUK__IDX_RESOLVED_ID), + duk_get_tval(ctx, DUK__IDX_LASTCOMP))); /* Fresh require: require.id is left configurable (but not writable) * so that is not easy to accidentally tweak it, but it can still be @@ -31911,32 +28680,40 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { * is no practical reason to touch it. */ duk_push_c_function(ctx, duk_bi_global_object_require, 1 /*nargs*/); - duk_dup(ctx, 3); - duk_xdef_prop_stridx(ctx, 7, DUK_STRIDX_ID, DUK_PROPDESC_FLAGS_C); /* a fresh require() with require.id = resolved target module id */ + duk_push_hstring_stridx(ctx, DUK_STRIDX_REQUIRE); + duk_xdef_prop_stridx(ctx, DUK__IDX_FRESH_REQUIRE, DUK_STRIDX_NAME, DUK_PROPDESC_FLAGS_NONE); + duk_dup(ctx, DUK__IDX_RESOLVED_ID); + duk_xdef_prop_stridx(ctx, DUK__IDX_FRESH_REQUIRE, DUK_STRIDX_ID, DUK_PROPDESC_FLAGS_C); /* a fresh require() with require.id = resolved target module id */ /* Module table: * - module.exports: initial exports table (may be replaced by user) * - module.id is non-writable and non-configurable, as the CommonJS - * spec suggests this if possible. + * spec suggests this if possible + * - module.filename: not set, defaults to resolved ID if not explicitly + * set by modSearch() (note capitalization, not .fileName, matches Node.js) + * - module.name: not set, defaults to last component of resolved ID if + * not explicitly set by modSearch() */ duk_push_object(ctx); /* exports */ duk_push_object(ctx); /* module */ - duk_dup(ctx, -2); - duk_xdef_prop_stridx(ctx, 9, DUK_STRIDX_EXPORTS, DUK_PROPDESC_FLAGS_WC); /* module.exports = exports */ - duk_dup(ctx, 3); /* resolved id: require(id) must return this same module */ - duk_xdef_prop_stridx(ctx, 9, DUK_STRIDX_ID, DUK_PROPDESC_FLAGS_NONE); /* module.id = resolved_id */ - duk_compact(ctx, 9); /* module table remains registered to modLoaded, minimize its size */ + duk_dup(ctx, DUK__IDX_EXPORTS); + duk_xdef_prop_stridx(ctx, DUK__IDX_MODULE, DUK_STRIDX_EXPORTS, DUK_PROPDESC_FLAGS_WC); /* module.exports = exports */ + duk_dup(ctx, DUK__IDX_RESOLVED_ID); /* resolved id: require(id) must return this same module */ + duk_xdef_prop_stridx(ctx, DUK__IDX_MODULE, DUK_STRIDX_ID, DUK_PROPDESC_FLAGS_NONE); /* module.id = resolved_id */ + duk_compact(ctx, DUK__IDX_MODULE); /* module table remains registered to modLoaded, minimize its size */ + DUK_ASSERT_TOP(ctx, DUK__IDX_MODULE + 1); + + DUK_DD(DUK_DDPRINT("module table created: %!T", duk_get_tval(ctx, DUK__IDX_MODULE))); - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded undefined fresh_require exports module ] */ - DUK_ASSERT_TOP(ctx, 10); + /* [ requested_id require require.id resolved_id last_comp Duktape Duktape.modLoaded undefined fresh_require exports module ] */ /* Register the module table early to modLoaded[] so that we can * support circular references even in modSearch(). If an error * is thrown, we'll delete the reference. */ - duk_dup(ctx, 3); - duk_dup(ctx, 9); - duk_put_prop(ctx, 5); /* Duktape.modLoaded[resolved_id] = module */ + duk_dup(ctx, DUK__IDX_RESOLVED_ID); + duk_dup(ctx, DUK__IDX_MODULE); + duk_put_prop(ctx, DUK__IDX_MODLOADED); /* Duktape.modLoaded[resolved_id] = module */ /* * Call user provided module search function and build the wrapped @@ -31958,13 +28735,13 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { duk_push_string(ctx, "(function(require,exports,module){"); /* Duktape.modSearch(resolved_id, fresh_require, exports, module). */ - duk_get_prop_stridx(ctx, 4, DUK_STRIDX_MOD_SEARCH); /* Duktape.modSearch */ - duk_dup(ctx, 3); - duk_dup(ctx, 7); - duk_dup(ctx, 8); - duk_dup(ctx, 9); /* [ ... Duktape.modSearch resolved_id fresh_require exports module ] */ + duk_get_prop_stridx(ctx, DUK__IDX_DUKTAPE, DUK_STRIDX_MOD_SEARCH); /* Duktape.modSearch */ + duk_dup(ctx, DUK__IDX_RESOLVED_ID); + duk_dup(ctx, DUK__IDX_FRESH_REQUIRE); + duk_dup(ctx, DUK__IDX_EXPORTS); + duk_dup(ctx, DUK__IDX_MODULE); /* [ ... Duktape.modSearch resolved_id last_comp fresh_require exports module ] */ pcall_rc = duk_pcall(ctx, 4 /*nargs*/); /* -> [ ... source ] */ - DUK_ASSERT_TOP(ctx, 12); + DUK_ASSERT_TOP(ctx, DUK__IDX_MODULE + 3); if (pcall_rc != DUK_EXEC_SUCCESS) { /* Delete entry in Duktape.modLoaded[] and rethrow. */ @@ -31974,7 +28751,7 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { /* If user callback did not return source code, module loading * is finished (user callback initialized exports table directly). */ - if (!duk_is_string(ctx, 11)) { + if (!duk_is_string(ctx, -1)) { /* User callback did not return source code, so module loading * is finished: just update modLoaded with final module.exports * and we're done. @@ -31982,26 +28759,44 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { goto return_exports; } - /* Finish the wrapped module source. Force resolved module ID as the - * fileName so it gets set for functions defined within a module. This - * also ensures loggers created within the module get the module ID as - * their default logger name. + /* Finish the wrapped module source. Force module.filename as the + * function .fileName so it gets set for functions defined within a + * module. This also ensures loggers created within the module get + * the module ID (or overridden filename) as their default logger name. + * (Note capitalization: .filename matches Node.js while .fileName is + * used elsewhere in Duktape.) */ duk_push_string(ctx, "})"); duk_concat(ctx, 3); - duk_dup(ctx, 3); /* resolved module ID for fileName */ + if (!duk_get_prop_stridx(ctx, DUK__IDX_MODULE, DUK_STRIDX_FILENAME)) { + /* module.filename for .fileName, default to resolved ID if + * not present. + */ + duk_pop(ctx); + duk_dup(ctx, DUK__IDX_RESOLVED_ID); + } duk_eval_raw(ctx, NULL, 0, DUK_COMPILE_EVAL); - /* XXX: The module wrapper function is currently anonymous and is shown - * in stack traces. It would be nice to force it to match the module - * name (perhaps just the cleaned up last term). At the moment 'name' - * is write protected so we can't change it directly. Note that we must - * not introduce an actual name binding into the function scope (which - * is usually the case with a named function) because it would affect - * the scope seen by the module and shadow accesses to globals of the - * same name. + /* Module has now evaluated to a wrapped module function. Force its + * .name to match module.name (defaults to last component of resolved + * ID) so that it is shown in stack traces too. Note that we must not + * introduce an actual name binding into the function scope (which is + * usually the case with a named function) because it would affect the + * scope seen by the module and shadow accesses to globals of the same name. + * This is now done by compiling the function as anonymous and then forcing + * its .name without setting a "has name binding" flag. */ + duk_push_hstring_stridx(ctx, DUK_STRIDX_NAME); + if (!duk_get_prop_stridx(ctx, DUK__IDX_MODULE, DUK_STRIDX_NAME)) { + /* module.name for .name, default to last component if + * not present. + */ + duk_pop(ctx); + duk_dup(ctx, DUK__IDX_LASTCOMP); + } + duk_def_prop(ctx, -3, DUK_DEFPROP_HAVE_VALUE | DUK_DEFPROP_FORCE); + /* * Call the wrapped module function. * @@ -32009,16 +28804,16 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { * even if the module throws an error. */ - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded undefined fresh_require exports module mod_func ] */ - DUK_ASSERT_TOP(ctx, 11); + /* [ requested_id require require.id resolved_id last_comp Duktape Duktape.modLoaded undefined fresh_require exports module mod_func ] */ + DUK_ASSERT_TOP(ctx, DUK__IDX_MODULE + 2); - duk_dup(ctx, 8); /* exports (this binding) */ - duk_dup(ctx, 7); /* fresh require (argument) */ - duk_get_prop_stridx(ctx, 9, DUK_STRIDX_EXPORTS); /* relookup exports from module.exports in case it was changed by modSearch */ - duk_dup(ctx, 9); /* module (argument) */ + duk_dup(ctx, DUK__IDX_EXPORTS); /* exports (this binding) */ + duk_dup(ctx, DUK__IDX_FRESH_REQUIRE); /* fresh require (argument) */ + duk_get_prop_stridx(ctx, DUK__IDX_MODULE, DUK_STRIDX_EXPORTS); /* relookup exports from module.exports in case it was changed by modSearch */ + duk_dup(ctx, DUK__IDX_MODULE); /* module (argument) */ + DUK_ASSERT_TOP(ctx, DUK__IDX_MODULE + 6); - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded undefined fresh_require exports module mod_func exports fresh_require exports module ] */ - DUK_ASSERT_TOP(ctx, 15); + /* [ requested_id require require.id resolved_id last_comp Duktape Duktape.modLoaded undefined fresh_require exports module mod_func exports fresh_require exports module ] */ pcall_rc = duk_pcall_method(ctx, 3 /*nargs*/); if (pcall_rc != DUK_EXEC_SUCCESS) { @@ -32029,21 +28824,34 @@ DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { goto delete_rethrow; } - /* [ requested_id require require.id resolved_id Duktape Duktape.modLoaded undefined fresh_require exports module result(ignored) ] */ - DUK_ASSERT_TOP(ctx, 11); + /* [ requested_id require require.id resolved_id last_comp Duktape Duktape.modLoaded undefined fresh_require exports module result(ignored) ] */ + DUK_ASSERT_TOP(ctx, DUK__IDX_MODULE + 2); /* fall through */ return_exports: - duk_get_prop_stridx(ctx, 9, DUK_STRIDX_EXPORTS); + duk_get_prop_stridx(ctx, DUK__IDX_MODULE, DUK_STRIDX_EXPORTS); + duk_compact(ctx, -1); /* compact the exports table */ return 1; /* return module.exports */ delete_rethrow: - duk_dup(ctx, 3); - duk_del_prop(ctx, 5); /* delete Duktape.modLoaded[resolved_id] */ + duk_dup(ctx, DUK__IDX_RESOLVED_ID); + duk_del_prop(ctx, DUK__IDX_MODLOADED); /* delete Duktape.modLoaded[resolved_id] */ duk_throw(ctx); /* rethrow original error */ return 0; /* not reachable */ } + +#undef DUK__IDX_REQUESTED_ID +#undef DUK__IDX_REQUIRE +#undef DUK__IDX_REQUIRE_ID +#undef DUK__IDX_RESOLVED_ID +#undef DUK__IDX_LASTCOMP +#undef DUK__IDX_DUKTAPE +#undef DUK__IDX_MODLOADED +#undef DUK__IDX_UNDEFINED +#undef DUK__IDX_FRESH_REQUIRE +#undef DUK__IDX_EXPORTS +#undef DUK__IDX_MODULE #else DUK_INTERNAL duk_ret_t duk_bi_global_object_require(duk_context *ctx) { DUK_UNREF(ctx); @@ -32102,24 +28910,20 @@ DUK_LOCAL_DECL void duk__dec_reviver_walk(duk_json_dec_ctx *js_ctx); DUK_LOCAL_DECL void duk__emit_1(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch); DUK_LOCAL_DECL void duk__emit_2(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch1, duk_uint_fast8_t ch2); -#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH) DUK_LOCAL_DECL void duk__unemit_1(duk_json_enc_ctx *js_ctx); -#endif DUK_LOCAL_DECL void duk__emit_hstring(duk_json_enc_ctx *js_ctx, duk_hstring *h); #if defined(DUK_USE_FASTINT) DUK_LOCAL_DECL void duk__emit_cstring(duk_json_enc_ctx *js_ctx, const char *p); #endif DUK_LOCAL_DECL void duk__emit_stridx(duk_json_enc_ctx *js_ctx, duk_small_uint_t stridx); DUK_LOCAL_DECL duk_uint8_t *duk__emit_esc_auto_fast(duk_json_enc_ctx *js_ctx, duk_uint_fast32_t cp, duk_uint8_t *q); -DUK_LOCAL_DECL duk_bool_t duk__enc_key_quotes_needed(duk_hstring *h_key); DUK_LOCAL_DECL void duk__enc_key_autoquote(duk_json_enc_ctx *js_ctx, duk_hstring *k); DUK_LOCAL_DECL void duk__enc_quote_string(duk_json_enc_ctx *js_ctx, duk_hstring *h_str); DUK_LOCAL_DECL void duk__enc_objarr_entry(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_top); DUK_LOCAL_DECL void duk__enc_objarr_exit(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_top); DUK_LOCAL_DECL void duk__enc_object(duk_json_enc_ctx *js_ctx); DUK_LOCAL_DECL void duk__enc_array(duk_json_enc_ctx *js_ctx); -DUK_LOCAL_DECL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_holder); -DUK_LOCAL_DECL void duk__enc_value2(duk_json_enc_ctx *js_ctx); +DUK_LOCAL_DECL duk_bool_t duk__enc_value(duk_json_enc_ctx *js_ctx, duk_idx_t idx_holder); DUK_LOCAL_DECL duk_bool_t duk__enc_allow_into_proplist(duk_tval *tv); DUK_LOCAL_DECL void duk__enc_double(duk_json_enc_ctx *js_ctx); #if defined(DUK_USE_FASTINT) @@ -32128,10 +28932,8 @@ DUK_LOCAL_DECL void duk__enc_fastint_tval(duk_json_enc_ctx *js_ctx, duk_tval *tv #if defined(DUK_USE_JX) || defined(DUK_USE_JC) DUK_LOCAL_DECL void duk__enc_buffer(duk_json_enc_ctx *js_ctx, duk_hbuffer *h); DUK_LOCAL_DECL void duk__enc_pointer(duk_json_enc_ctx *js_ctx, void *ptr); -#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH) DUK_LOCAL_DECL void duk__enc_bufferobject(duk_json_enc_ctx *js_ctx, duk_hbufferobject *h_bufobj); #endif -#endif DUK_LOCAL_DECL void duk__enc_newline_indent(duk_json_enc_ctx *js_ctx, duk_int_t depth); /* @@ -32262,8 +29064,8 @@ DUK_LOCAL void duk__dec_syntax_error(duk_json_dec_ctx *js_ctx) { * hidden, unfortunately, but we'll have an offset which * is often quite enough. */ - DUK_ERROR(js_ctx->thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_FMT_INVALID_JSON, - (long) (js_ctx->p - js_ctx->p_start)); + DUK_ERROR_FMT1(js_ctx->thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_FMT_INVALID_JSON, + (long) (js_ctx->p - js_ctx->p_start)); } DUK_LOCAL void duk__dec_eat_white(duk_json_dec_ctx *js_ctx) { @@ -32771,7 +29573,7 @@ DUK_LOCAL void duk__dec_objarr_entry(duk_json_dec_ctx *js_ctx) { DUK_ASSERT(js_ctx->recursion_depth >= 0); DUK_ASSERT(js_ctx->recursion_depth <= js_ctx->recursion_limit); if (js_ctx->recursion_depth >= js_ctx->recursion_limit) { - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_RANGE_ERROR, DUK_STR_JSONDEC_RECLIMIT); + DUK_ERROR_RANGE((duk_hthread *) ctx, DUK_STR_JSONDEC_RECLIMIT); } js_ctx->recursion_depth++; } @@ -33107,9 +29909,7 @@ DUK_LOCAL void duk__dec_reviver_walk(duk_json_dec_ctx *js_ctx) { #define DUK__EMIT_CSTR(js_ctx,p) duk__emit_cstring((js_ctx), (p)) #endif #define DUK__EMIT_STRIDX(js_ctx,i) duk__emit_stridx((js_ctx), (i)) -#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH) #define DUK__UNEMIT_1(js_ctx) duk__unemit_1((js_ctx)) -#endif DUK_LOCAL void duk__emit_1(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch) { DUK_BW_WRITE_ENSURE_U8(js_ctx->thr, &js_ctx->bw, ch); @@ -33140,12 +29940,10 @@ DUK_LOCAL void duk__emit_stridx(duk_json_enc_ctx *js_ctx, duk_small_uint_t strid DUK_BW_WRITE_ENSURE_HSTRING(js_ctx->thr, &js_ctx->bw, h); } -#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH) DUK_LOCAL void duk__unemit_1(duk_json_enc_ctx *js_ctx) { DUK_ASSERT(DUK_BW_GET_SIZE(js_ctx->thr, &js_ctx->bw) >= 1); DUK_BW_ADD_PTR(js_ctx->thr, &js_ctx->bw, -1); } -#endif /* DUK_USE_JSON_STRINGIFY_FASTPATH */ #define DUK__MKESC(nybbles,esc1,esc2) \ (((duk_uint_fast32_t) (nybbles)) << 16) | \ @@ -33206,58 +30004,50 @@ DUK_LOCAL duk_uint8_t *duk__emit_esc_auto_fast(duk_json_enc_ctx *js_ctx, duk_uin return q; } -/* Check whether key quotes would be needed (custom encoding). */ -DUK_LOCAL duk_bool_t duk__enc_key_quotes_needed(duk_hstring *h_key) { - const duk_uint8_t *p, *p_start, *p_end; - duk_small_uint_t ch; - - DUK_ASSERT(h_key != NULL); - p_start = DUK_HSTRING_GET_DATA(h_key); - p_end = p_start + DUK_HSTRING_GET_BYTELEN(h_key); - p = p_start; +DUK_LOCAL void duk__enc_key_autoquote(duk_json_enc_ctx *js_ctx, duk_hstring *k) { + const duk_int8_t *p, *p_start, *p_end; /* Note: intentionally signed. */ + duk_size_t k_len; + duk_codepoint_t cp; - DUK_DDD(DUK_DDDPRINT("duk__enc_key_quotes_needed: h_key=%!O, p_start=%p, p_end=%p, p=%p", - (duk_heaphdr *) h_key, (const void *) p_start, - (const void *) p_end, (const void *) p)); + DUK_ASSERT(k != NULL); - /* Since we only accept ASCII characters, there is no need for - * actual decoding. A non-ASCII character will be >= 0x80 which - * causes a false return value immediately. + /* Accept ASCII strings which conform to identifier requirements + * as being emitted without key quotes. Since we only accept ASCII + * there's no need for actual decoding: 'p' is intentionally signed + * so that bytes >= 0x80 extend to negative values and are rejected + * as invalid identifier codepoints. */ - if (p == p_end) { - /* Zero length string is not accepted without quotes */ - return 1; - } - - while (p < p_end) { - ch = (duk_small_uint_t) (*p); + if (js_ctx->flag_avoid_key_quotes) { + k_len = DUK_HSTRING_GET_BYTELEN(k); + p_start = (const duk_int8_t *) DUK_HSTRING_GET_DATA(k); + p_end = p_start + k_len; + p = p_start; - /* Accept ASCII IdentifierStart and IdentifierPart if not first char. - * Function selection is a bit uncommon. - */ - if ((p > p_start ? duk_unicode_is_identifier_part : - duk_unicode_is_identifier_start) ((duk_codepoint_t) ch)) { - p++; - continue; + if (p == p_end) { + /* Zero length string is not accepted without quotes */ + goto quote_normally; + } + cp = (duk_codepoint_t) (*p++); + if (DUK_UNLIKELY(!duk_unicode_is_identifier_start(cp))) { + goto quote_normally; + } + while (p < p_end) { + cp = (duk_codepoint_t) (*p++); + if (DUK_UNLIKELY(!duk_unicode_is_identifier_part(cp))) { + goto quote_normally; + } } - /* all non-ASCII characters also come here (first byte >= 0x80) */ - return 1; - } - - return 0; -} - -DUK_LOCAL void duk__enc_key_autoquote(duk_json_enc_ctx *js_ctx, duk_hstring *k) { - /* XXX: could reimplement so that we start emitting the key without - * quotes and backtrack if we hit a problem character. - */ - if (js_ctx->flag_avoid_key_quotes && !duk__enc_key_quotes_needed(k)) { + /* This seems faster than emitting bytes one at a time and + * then potentially rewinding. + */ DUK__EMIT_HSTR(js_ctx, k); - } else { - duk__enc_quote_string(js_ctx, k); + return; } + + quote_normally: + duk__enc_quote_string(js_ctx, k); } /* The Quote(value) operation: quote a string. @@ -33403,6 +30193,7 @@ DUK_LOCAL void duk__enc_quote_string(duk_json_enc_ctx *js_ctx, duk_hstring *h_st * replaced by serialized string but is not popped (caller does that). */ DUK_LOCAL void duk__enc_double(duk_json_enc_ctx *js_ctx) { + duk_hthread *thr; duk_context *ctx; duk_tval *tv; duk_double_t d; @@ -33413,12 +30204,12 @@ DUK_LOCAL void duk__enc_double(duk_json_enc_ctx *js_ctx) { duk_hstring *h_str; DUK_ASSERT(js_ctx != NULL); - ctx = (duk_context *) js_ctx->thr; - DUK_ASSERT(ctx != NULL); + thr = js_ctx->thr; + DUK_ASSERT(thr != NULL); + ctx = (duk_context *) thr; /* Caller must ensure 'tv' is indeed a double and not a fastint! */ - tv = duk_get_tval(ctx, -1); - DUK_ASSERT(tv != NULL); + tv = DUK_GET_TVAL_NEGIDX(ctx, -1); DUK_ASSERT(DUK_TVAL_IS_DOUBLE(tv)); d = DUK_TVAL_GET_DOUBLE(tv); @@ -33513,7 +30304,7 @@ DUK_LOCAL duk_uint8_t *duk__enc_buffer_data_hex(const duk_uint8_t *src, duk_size #if defined(DUK_USE_UNALIGNED_ACCESSES_POSSIBLE) q16 = (duk_uint16_t *) (void *) dst; #else - shift_dst = (duk_bool_t) (((duk_uintptr_t) dst) & 0x01U); + shift_dst = (duk_bool_t) (((duk_size_t) dst) & 0x01U); if (shift_dst) { DUK_DD(DUK_DDPRINT("unaligned accesses not possible, dst not aligned -> step to dst + 1")); q16 = (duk_uint16_t *) (void *) (dst + 1); @@ -33521,7 +30312,7 @@ DUK_LOCAL duk_uint8_t *duk__enc_buffer_data_hex(const duk_uint8_t *src, duk_size DUK_DD(DUK_DDPRINT("unaligned accesses not possible, dst is aligned")); q16 = (duk_uint16_t *) (void *) dst; } - DUK_ASSERT((((duk_uintptr_t) q16) & 0x01U) == 0); + DUK_ASSERT((((duk_size_t) q16) & 0x01U) == 0); #endif len_safe = src_len & ~0x03U; @@ -33669,7 +30460,6 @@ DUK_LOCAL void duk__enc_pointer(duk_json_enc_ctx *js_ctx, void *ptr) { #endif /* DUK_USE_JX || DUK_USE_JC */ #if defined(DUK_USE_JX) || defined(DUK_USE_JC) -#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH) DUK_LOCAL void duk__enc_bufferobject(duk_json_enc_ctx *js_ctx, duk_hbufferobject *h_bufobj) { DUK_ASSERT_HBUFFEROBJECT_VALID(h_bufobj); @@ -33682,7 +30472,6 @@ DUK_LOCAL void duk__enc_bufferobject(duk_json_enc_ctx *js_ctx, duk_hbufferobject (duk_size_t) h_bufobj->length); } } -#endif /* DUK_USE_JSON_STRINGIFY_FASTPATH */ #endif /* DUK_USE_JX || DUK_USE_JC */ /* Indent helper. Calling code relies on js_ctx->recursion_depth also being @@ -33775,7 +30564,7 @@ DUK_LOCAL void duk__enc_objarr_entry(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_ for (i = 0; i < n; i++) { if (DUK_UNLIKELY(js_ctx->visiting[i] == h_target)) { DUK_DD(DUK_DDPRINT("slow path loop detect")); - DUK_ERROR(js_ctx->thr, DUK_ERR_TYPE_ERROR, DUK_STR_CYCLIC_INPUT); + DUK_ERROR_TYPE((duk_hthread *) ctx, DUK_STR_CYCLIC_INPUT); } } if (js_ctx->recursion_depth < DUK_JSON_ENC_LOOPARRAY) { @@ -33784,7 +30573,7 @@ DUK_LOCAL void duk__enc_objarr_entry(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_ duk_push_sprintf(ctx, DUK_STR_FMT_PTR, (void *) h_target); duk_dup_top(ctx); /* -> [ ... voidp voidp ] */ if (duk_has_prop(ctx, js_ctx->idx_loop)) { - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_TYPE_ERROR, DUK_STR_CYCLIC_INPUT); + DUK_ERROR_TYPE((duk_hthread *) ctx, DUK_STR_CYCLIC_INPUT); } duk_push_true(ctx); /* -> [ ... voidp true ] */ duk_put_prop(ctx, js_ctx->idx_loop); /* -> [ ... ] */ @@ -33795,7 +30584,7 @@ DUK_LOCAL void duk__enc_objarr_entry(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_ DUK_ASSERT(js_ctx->recursion_depth >= 0); DUK_ASSERT(js_ctx->recursion_depth <= js_ctx->recursion_limit); if (js_ctx->recursion_depth >= js_ctx->recursion_limit) { - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_RANGE_ERROR, DUK_STR_JSONENC_RECLIMIT); + DUK_ERROR_RANGE((duk_hthread *) ctx, DUK_STR_JSONENC_RECLIMIT); } js_ctx->recursion_depth++; @@ -33843,9 +30632,9 @@ DUK_LOCAL void duk__enc_object(duk_json_enc_ctx *js_ctx) { duk_idx_t entry_top; duk_idx_t idx_obj; duk_idx_t idx_keys; - duk_bool_t first; - duk_bool_t undef; + duk_bool_t emitted; duk_uarridx_t arr_len, i; + duk_size_t prev_size; DUK_DDD(DUK_DDDPRINT("duk__enc_object: obj=%!T", (duk_tval *) duk_get_tval(ctx, -1))); @@ -33877,7 +30666,7 @@ DUK_LOCAL void duk__enc_object(duk_json_enc_ctx *js_ctx) { */ arr_len = (duk_uarridx_t) duk_get_length(ctx, idx_keys); - first = 1; + emitted = 0; for (i = 0; i < arr_len; i++) { duk_get_prop_index(ctx, idx_keys, i); /* -> [ ... key ] */ @@ -33885,43 +30674,38 @@ DUK_LOCAL void duk__enc_object(duk_json_enc_ctx *js_ctx) { (duk_tval *) duk_get_tval(ctx, idx_obj), (duk_tval *) duk_get_tval(ctx, -1))); - undef = duk__enc_value1(js_ctx, idx_obj); - if (undef) { - /* Value would yield 'undefined', so skip key altogether. - * Side effects have already happened. - */ - continue; - } - - /* [ ... key val ] */ - - if (first) { - first = 0; - } else { - DUK__EMIT_1(js_ctx, DUK_ASC_COMMA); - } - if (js_ctx->h_gap != NULL) { - DUK_ASSERT(js_ctx->recursion_depth >= 1); - duk__enc_newline_indent(js_ctx, js_ctx->recursion_depth); - } - - h_key = duk_get_hstring(ctx, -2); + h_key = duk_get_hstring(ctx, -1); DUK_ASSERT(h_key != NULL); - duk__enc_key_autoquote(js_ctx, h_key); - if (js_ctx->h_gap != NULL) { + prev_size = DUK_BW_GET_SIZE(js_ctx->thr, &js_ctx->bw); + if (DUK_UNLIKELY(js_ctx->h_gap != NULL)) { + duk__enc_newline_indent(js_ctx, js_ctx->recursion_depth); + duk__enc_key_autoquote(js_ctx, h_key); DUK__EMIT_2(js_ctx, DUK_ASC_COLON, DUK_ASC_SPACE); } else { + duk__enc_key_autoquote(js_ctx, h_key); DUK__EMIT_1(js_ctx, DUK_ASC_COLON); } - /* [ ... key val ] */ + /* [ ... key ] */ - duk__enc_value2(js_ctx); /* -> [ ... ] */ + if (DUK_UNLIKELY(duk__enc_value(js_ctx, idx_obj) == 0)) { + /* Value would yield 'undefined', so skip key altogether. + * Side effects have already happened. + */ + DUK_BW_SET_SIZE(js_ctx->thr, &js_ctx->bw, prev_size); + } else { + DUK__EMIT_1(js_ctx, DUK_ASC_COMMA); + emitted = 1; + } + + /* [ ... ] */ } - if (!first) { - if (js_ctx->h_gap != NULL) { + if (emitted) { + DUK_ASSERT(*((duk_uint8_t *) DUK_BW_GET_PTR(js_ctx->thr, &js_ctx->bw) - 1) == DUK_ASC_COMMA); + DUK__UNEMIT_1(js_ctx); /* eat trailing comma */ + if (DUK_UNLIKELY(js_ctx->h_gap != NULL)) { DUK_ASSERT(js_ctx->recursion_depth >= 1); duk__enc_newline_indent(js_ctx, js_ctx->recursion_depth - 1); } @@ -33941,7 +30725,7 @@ DUK_LOCAL void duk__enc_array(duk_json_enc_ctx *js_ctx) { duk_context *ctx = (duk_context *) js_ctx->thr; duk_idx_t entry_top; duk_idx_t idx_arr; - duk_bool_t undef; + duk_bool_t emitted; duk_uarridx_t i, arr_len; DUK_DDD(DUK_DDDPRINT("duk__enc_array: array=%!T", @@ -33956,15 +30740,13 @@ DUK_LOCAL void duk__enc_array(duk_json_enc_ctx *js_ctx) { DUK__EMIT_1(js_ctx, DUK_ASC_LBRACKET); arr_len = (duk_uarridx_t) duk_get_length(ctx, idx_arr); + emitted = 0; for (i = 0; i < arr_len; i++) { DUK_DDD(DUK_DDDPRINT("array entry loop: array=%!T, index=%ld, arr_len=%ld", (duk_tval *) duk_get_tval(ctx, idx_arr), (long) i, (long) arr_len)); - if (i > 0) { - DUK__EMIT_1(js_ctx, DUK_ASC_COMMA); - } - if (js_ctx->h_gap != NULL) { + if (DUK_UNLIKELY(js_ctx->h_gap != NULL)) { DUK_ASSERT(js_ctx->recursion_depth >= 1); duk__enc_newline_indent(js_ctx, js_ctx->recursion_depth); } @@ -33972,18 +30754,26 @@ DUK_LOCAL void duk__enc_array(duk_json_enc_ctx *js_ctx) { /* XXX: duk_push_uint_string() */ duk_push_uint(ctx, (duk_uint_t) i); duk_to_string(ctx, -1); /* -> [ ... key ] */ - undef = duk__enc_value1(js_ctx, idx_arr); - if (undef) { + /* [ ... key ] */ + + if (DUK_UNLIKELY(duk__enc_value(js_ctx, idx_arr) == 0)) { + /* Value would normally be omitted, replace with 'null'. */ DUK__EMIT_STRIDX(js_ctx, DUK_STRIDX_LC_NULL); } else { - /* [ ... key val ] */ - duk__enc_value2(js_ctx); + ; } + + /* [ ... ] */ + + DUK__EMIT_1(js_ctx, DUK_ASC_COMMA); + emitted = 1; } - if (arr_len > 0) { - if (js_ctx->h_gap != NULL) { + if (emitted) { + DUK_ASSERT(*((duk_uint8_t *) DUK_BW_GET_PTR(js_ctx->thr, &js_ctx->bw) - 1) == DUK_ASC_COMMA); + DUK__UNEMIT_1(js_ctx); /* eat trailing comma */ + if (DUK_UNLIKELY(js_ctx->h_gap != NULL)) { DUK_ASSERT(js_ctx->recursion_depth >= 1); duk__enc_newline_indent(js_ctx, js_ctx->recursion_depth - 1); } @@ -33995,31 +30785,32 @@ DUK_LOCAL void duk__enc_array(duk_json_enc_ctx *js_ctx) { DUK_ASSERT_TOP(ctx, entry_top); } -/* The Str(key, holder) operation: encode value, steps 1-4. +/* The Str(key, holder) operation. * - * Returns non-zero if the value between steps 4 and 5 would yield an - * 'undefined' final result. This is useful in JO() because we need to - * get the side effects out, but need to know whether or not a key will - * be omitted from the serialization. - * - * Stack policy: [ ... key ] -> [ ... key val ] if retval == 0. - * -> [ ... ] if retval != 0. + * Stack policy: [ ... key ] -> [ ... ] */ -DUK_LOCAL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_holder) { +DUK_LOCAL duk_bool_t duk__enc_value(duk_json_enc_ctx *js_ctx, duk_idx_t idx_holder) { duk_context *ctx = (duk_context *) js_ctx->thr; duk_hthread *thr = (duk_hthread *) ctx; duk_hobject *h; duk_tval *tv; + duk_tval *tv_holder; + duk_tval *tv_key; duk_small_int_t c; - DUK_DDD(DUK_DDDPRINT("duk__enc_value1: idx_holder=%ld, holder=%!T, key=%!T", + DUK_DDD(DUK_DDDPRINT("duk__enc_value: idx_holder=%ld, holder=%!T, key=%!T", (long) idx_holder, (duk_tval *) duk_get_tval(ctx, idx_holder), (duk_tval *) duk_get_tval(ctx, -1))); DUK_UNREF(thr); - duk_dup_top(ctx); /* -> [ ... key key ] */ - duk_get_prop(ctx, idx_holder); /* -> [ ... key val ] */ + tv_holder = DUK_GET_TVAL_POSIDX(ctx, idx_holder); + DUK_ASSERT(DUK_TVAL_IS_OBJECT(tv_holder)); + tv_key = DUK_GET_TVAL_NEGIDX(ctx, -1); + DUK_ASSERT(DUK_TVAL_IS_STRING(tv_key)); + (void) duk_hobject_getprop(thr, tv_holder, tv_key); + + /* -> [ ... key val ] */ DUK_DDD(DUK_DDDPRINT("value=%!T", (duk_tval *) duk_get_tval(ctx, -1))); @@ -34030,12 +30821,13 @@ DUK_LOCAL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hol if (h != NULL && DUK_HOBJECT_IS_CALLABLE(h)) { DUK_DDD(DUK_DDDPRINT("value is object, has callable toJSON() -> call it")); + /* XXX: duk_dup_unvalidated(ctx, -2) etc. */ duk_dup(ctx, -2); /* -> [ ... key val toJSON val ] */ duk_dup(ctx, -4); /* -> [ ... key val toJSON val key ] */ duk_call_method(ctx, 1); /* -> [ ... key val val' ] */ duk_remove(ctx, -2); /* -> [ ... key val' ] */ } else { - duk_pop(ctx); + duk_pop(ctx); /* -> [ ... key val ] */ } } @@ -34044,7 +30836,7 @@ DUK_LOCAL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hol DUK_DDD(DUK_DDDPRINT("value=%!T", (duk_tval *) duk_get_tval(ctx, -1))); if (js_ctx->h_replacer) { - /* XXX: here a "slice copy" would be useful */ + /* XXX: Here a "slice copy" would be useful. */ DUK_DDD(DUK_DDDPRINT("replacer is set, call replacer")); duk_push_hobject(ctx, js_ctx->h_replacer); /* -> [ ... key val replacer ] */ duk_dup(ctx, idx_holder); /* -> [ ... key val replacer holder ] */ @@ -34058,46 +30850,52 @@ DUK_LOCAL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hol DUK_DDD(DUK_DDDPRINT("value=%!T", (duk_tval *) duk_get_tval(ctx, -1))); - tv = duk_get_tval(ctx, -1); - DUK_ASSERT(tv != NULL); + tv = DUK_GET_TVAL_NEGIDX(ctx, -1); if (DUK_TVAL_IS_OBJECT(tv)) { h = DUK_TVAL_GET_OBJECT(tv); DUK_ASSERT(h != NULL); if (DUK_HOBJECT_IS_BUFFEROBJECT(h)) { +#if defined(DUK_USE_JX) || defined(DUK_USE_JC) duk_hbufferobject *h_bufobj; h_bufobj = (duk_hbufferobject *) h; DUK_ASSERT_HBUFFEROBJECT_VALID(h_bufobj); - if (h_bufobj->buf == NULL || !DUK_HBUFFEROBJECT_VALID_SLICE(h_bufobj)) { - duk_push_null(ctx); - } else if (DUK_HBUFFEROBJECT_FULL_SLICE(h_bufobj)) { - duk_push_hbuffer(ctx, h_bufobj->buf); - } else { - /* This is not very good because we're making a copy - * for serialization, but only for proper views. - * Better support would be to serialize slices - * directly but since we only push a raw buffer - * here we can't convey the slice offset/length. - */ - duk_uint8_t *p_buf; - p_buf = (duk_uint8_t *) duk_push_fixed_buffer(ctx, h_bufobj->length); - DUK_MEMCPY((void *) p_buf, - (const void *) (DUK_HBUFFEROBJECT_GET_SLICE_BASE(thr->heap, h_bufobj)), - h_bufobj->length); + /* Conceptually we'd extract the plain underlying buffer + * or its slice and then do a type mask check below to + * see if we should reject it. Do the mask check here + * instead to avoid making a copy of the buffer slice. + */ + + if (js_ctx->mask_for_undefined & DUK_TYPE_MASK_BUFFER) { + DUK_DDD(DUK_DDDPRINT("-> bufferobject (-> plain buffer) will result in undefined (type mask check)")); + goto pop2_undef; } - duk_remove(ctx, -2); + DUK_DDD(DUK_DDDPRINT("-> bufferobject won't result in undefined, encode directly")); + duk__enc_bufferobject(js_ctx, h_bufobj); + goto pop2_emitted; +#else + DUK_DDD(DUK_DDDPRINT("no JX/JC support, bufferobject/buffer will always result in undefined")); + goto pop2_undef; +#endif } else { c = (duk_small_int_t) DUK_HOBJECT_GET_CLASS_NUMBER(h); switch ((int) c) { case DUK_HOBJECT_CLASS_NUMBER: { DUK_DDD(DUK_DDDPRINT("value is a Number object -> coerce with ToNumber()")); duk_to_number(ctx, -1); + /* The coercion potentially invokes user .valueOf() and .toString() + * but can't result in a function value because [[DefaultValue]] would + * reject such a result: test-dev-json-stringify-coercion-1.js. + */ + DUK_ASSERT(!duk_is_callable(ctx, -1)); break; } case DUK_HOBJECT_CLASS_STRING: { DUK_DDD(DUK_DDDPRINT("value is a String object -> coerce with ToString()")); duk_to_string(ctx, -1); + /* Same coercion behavior as for Number. */ + DUK_ASSERT(!duk_is_callable(ctx, -1)); break; } #if defined(DUK_USE_JX) || defined(DUK_USE_JC) @@ -34109,6 +30907,32 @@ DUK_LOCAL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hol duk_remove(ctx, -2); break; } + default: { + /* Normal object which doesn't get automatically coerced to a + * primitive value. Functions are checked for specially. The + * primitive value coercions for Number, String, Pointer, and + * Boolean can't result in functions so suffices to check here. + */ + DUK_ASSERT(h != NULL); + if (DUK_HOBJECT_IS_CALLABLE(h)) { +#if defined(DUK_USE_JX) || defined(DUK_USE_JC) + if (js_ctx->flags & (DUK_JSON_FLAG_EXT_CUSTOM | + DUK_JSON_FLAG_EXT_COMPATIBLE)) { + /* We only get here when doing non-standard JSON encoding */ + DUK_DDD(DUK_DDDPRINT("-> function allowed, serialize to custom format")); + DUK_ASSERT(js_ctx->flag_ext_custom || js_ctx->flag_ext_compatible); + DUK__EMIT_STRIDX(js_ctx, js_ctx->stridx_custom_function); + goto pop2_emitted; + } else { + DUK_DDD(DUK_DDDPRINT("-> will result in undefined (function)")); + goto pop2_undef; + } +#else /* DUK_USE_JX || DUK_USE_JC */ + DUK_DDD(DUK_DDDPRINT("-> will result in undefined (function)")); + goto pop2_undef; +#endif /* DUK_USE_JX || DUK_USE_JC */ + } + } } /* end switch */ } } @@ -34120,59 +30944,13 @@ DUK_LOCAL duk_bool_t duk__enc_value1(duk_json_enc_ctx *js_ctx, duk_idx_t idx_hol if (duk_check_type_mask(ctx, -1, js_ctx->mask_for_undefined)) { /* will result in undefined */ DUK_DDD(DUK_DDDPRINT("-> will result in undefined (type mask check)")); - goto undef; + goto pop2_undef; } - - /* functions are detected specially */ - h = duk_get_hobject(ctx, -1); - if (h != NULL && DUK_HOBJECT_IS_CALLABLE(h)) { - if (js_ctx->flags & (DUK_JSON_FLAG_EXT_CUSTOM | - DUK_JSON_FLAG_EXT_COMPATIBLE)) { - /* function will be serialized to custom format */ - } else { - /* functions are not serialized, results in undefined */ - DUK_DDD(DUK_DDDPRINT("-> will result in undefined (function)")); - goto undef; - } - } - - DUK_DDD(DUK_DDDPRINT("-> will not result in undefined")); - return 0; - - undef: - duk_pop_2(ctx); - return 1; -} - -/* The Str(key, holder) operation: encode value, steps 5-10. - * - * This must not be called unless duk__enc_value1() returns non-zero. - * If so, this is guaranteed to produce a non-undefined result. - * Non-standard encodings (e.g. for undefined) are only used if - * duk__enc_value1() indicates they are accepted; they're not - * checked or asserted here again. - * - * Stack policy: [ ... key val ] -> [ ... ]. - */ -DUK_LOCAL void duk__enc_value2(duk_json_enc_ctx *js_ctx) { - duk_context *ctx = (duk_context *) js_ctx->thr; - duk_hthread *thr = (duk_hthread *) ctx; - duk_tval *tv; - - DUK_UNREF(thr); - - DUK_DDD(DUK_DDDPRINT("duk__enc_value2: key=%!T, val=%!T", - (duk_tval *) duk_get_tval(ctx, -2), - (duk_tval *) duk_get_tval(ctx, -1))); - - /* [ ... key val ] */ - - tv = duk_get_tval(ctx, -1); - DUK_ASSERT(tv != NULL); + tv = DUK_GET_TVAL_NEGIDX(ctx, -1); switch (DUK_TVAL_GET_TAG(tv)) { #if defined(DUK_USE_JX) || defined(DUK_USE_JC) - /* When JX/JC not in use, duk__enc_value1 will block undefined values. */ + /* When JX/JC not in use, the type mask above will avoid this case if needed. */ case DUK_TAG_UNDEFINED: { DUK__EMIT_STRIDX(js_ctx, js_ctx->stridx_custom_undefined); break; @@ -34188,7 +30966,7 @@ DUK_LOCAL void duk__enc_value2(duk_json_enc_ctx *js_ctx) { break; } #if defined(DUK_USE_JX) || defined(DUK_USE_JC) - /* When JX/JC not in use, duk__enc_value1 will block pointer values. */ + /* When JX/JC not in use, the type mask above will avoid this case if needed. */ case DUK_TAG_POINTER: { duk__enc_pointer(js_ctx, DUK_TVAL_GET_POINTER(tv)); break; @@ -34205,13 +30983,11 @@ DUK_LOCAL void duk__enc_value2(duk_json_enc_ctx *js_ctx) { duk_hobject *h = DUK_TVAL_GET_OBJECT(tv); DUK_ASSERT(h != NULL); -#if defined(DUK_USE_JX) || defined(DUK_USE_JC) - if (DUK_HOBJECT_IS_CALLABLE(h)) { - /* We only get here when doing non-standard JSON encoding */ - DUK_ASSERT(js_ctx->flag_ext_custom || js_ctx->flag_ext_compatible); - DUK__EMIT_STRIDX(js_ctx, js_ctx->stridx_custom_function); - } else /* continues below */ -#endif + /* Function values are handled completely above (including + * coercion results): + */ + DUK_ASSERT(!DUK_HOBJECT_IS_CALLABLE(h)); + if (DUK_HOBJECT_GET_CLASS_NUMBER(h) == DUK_HOBJECT_CLASS_ARRAY) { duk__enc_array(js_ctx); } else { @@ -34220,7 +30996,7 @@ DUK_LOCAL void duk__enc_value2(duk_json_enc_ctx *js_ctx) { break; } #if defined(DUK_USE_JX) || defined(DUK_USE_JC) - /* When JX/JC not in use, duk__enc_value1 will block buffer values. */ + /* When JX/JC not in use, the type mask above will avoid this case if needed. */ case DUK_TAG_BUFFER: { duk__enc_buffer(js_ctx, DUK_TVAL_GET_BUFFER(tv)); break; @@ -34257,9 +31033,13 @@ DUK_LOCAL void duk__enc_value2(duk_json_enc_ctx *js_ctx) { } } - /* [ ... key val ] -> [ ... ] */ + pop2_emitted: + duk_pop_2(ctx); /* [ ... key val ] -> [ ... ] */ + return 1; /* emitted */ - duk_pop_2(ctx); + pop2_undef: + duk_pop_2(ctx); /* [ ... key val ] -> [ ... ] */ + return 0; /* not emitted */ } /* E5 Section 15.12.3, main algorithm, step 4.b.ii steps 1-4. */ @@ -34300,7 +31080,10 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du DUK_ASSERT(js_ctx != NULL); DUK_ASSERT(js_ctx->thr != NULL); +#if 0 /* disabled for now */ restart_match: +#endif + DUK_ASSERT(tv != NULL); switch (DUK_TVAL_GET_TAG(tv)) { @@ -34375,13 +31158,13 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du DUK_ASSERT(js_ctx->recursion_depth <= js_ctx->recursion_limit); if (js_ctx->recursion_depth >= js_ctx->recursion_limit) { DUK_DD(DUK_DDPRINT("fast path recursion limit")); - DUK_ERROR(js_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_JSONDEC_RECLIMIT); + DUK_ERROR_RANGE(js_ctx->thr, DUK_STR_JSONDEC_RECLIMIT); } for (i = 0, n = (duk_uint_fast32_t) js_ctx->recursion_depth; i < n; i++) { if (DUK_UNLIKELY(js_ctx->visiting[i] == obj)) { DUK_DD(DUK_DDPRINT("fast path loop detect")); - DUK_ERROR(js_ctx->thr, DUK_ERR_TYPE_ERROR, DUK_STR_CYCLIC_INPUT); + DUK_ERROR_TYPE(js_ctx->thr, DUK_STR_CYCLIC_INPUT); } } @@ -34486,7 +31269,6 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du prev_size = DUK_BW_GET_SIZE(js_ctx->thr, &js_ctx->bw); if (DUK_UNLIKELY(js_ctx->h_gap != NULL)) { - duk__enc_newline_indent(js_ctx, js_ctx->recursion_depth); duk__enc_key_autoquote(js_ctx, k); DUK__EMIT_2(js_ctx, DUK_ASC_COLON, DUK_ASC_SPACE); @@ -34599,6 +31381,16 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du * automatic unboxing. Rely on internal value being * sane (to avoid infinite recursion). */ +#if 1 + /* The code below is incorrect if .toString() or .valueOf() have + * have been overridden. The correct approach would be to look up + * the method(s) and if they resolve to the built-in function we + * can safely bypass it and look up the internal value directly. + * Unimplemented for now, abort fast path for boxed values. + */ + goto abort_fastpath; +#else /* disabled */ + /* Disabled until fixed, see above. */ duk_tval *tv_internal; DUK_DD(DUK_DDPRINT("auto unboxing in fast path")); @@ -34614,6 +31406,7 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du DUK_ASSERT(js_ctx->recursion_depth > 0); js_ctx->recursion_depth--; /* required to keep recursion depth correct */ goto restart_match; +#endif /* disabled */ #if defined(DUK_USE_JX) || defined(DUK_USE_JC) } else if (c_bit & c_func) { DUK__EMIT_STRIDX(js_ctx, js_ctx->stridx_custom_function); @@ -34711,18 +31504,22 @@ DUK_LOCAL duk_bool_t duk__json_stringify_fast_value(duk_json_enc_ctx *js_ctx, du abort_fastpath: /* Error message doesn't matter: the error is ignored anyway. */ DUK_DD(DUK_DDPRINT("aborting fast path")); - DUK_ERROR(js_ctx->thr, DUK_ERR_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(js_ctx->thr); return 0; /* unreachable */ } DUK_LOCAL duk_ret_t duk__json_stringify_fast(duk_context *ctx) { duk_json_enc_ctx *js_ctx; + duk_tval *tv; DUK_ASSERT(ctx != NULL); - js_ctx = (duk_json_enc_ctx *) duk_get_pointer(ctx, -2); + tv = DUK_GET_TVAL_NEGIDX(ctx, -2); + DUK_ASSERT(DUK_TVAL_IS_POINTER(tv)); + js_ctx = (duk_json_enc_ctx *) DUK_TVAL_GET_POINTER(tv); DUK_ASSERT(js_ctx != NULL); - if (duk__json_stringify_fast_value(js_ctx, duk_get_tval((duk_context *) (js_ctx->thr), -1)) == 0) { + tv = DUK_GET_TVAL_NEGIDX(ctx, -1); + if (duk__json_stringify_fast_value(js_ctx, tv) == 0) { DUK_DD(DUK_DDPRINT("top level value not supported, fail fast path")); return DUK_RET_ERROR; /* error message doesn't matter, ignored anyway */ } @@ -34848,7 +31645,6 @@ void duk_bi_json_stringify_helper(duk_context *ctx, duk_json_enc_ctx js_ctx_alloc; duk_json_enc_ctx *js_ctx = &js_ctx_alloc; duk_hobject *h; - duk_bool_t undef; duk_idx_t idx_holder; duk_idx_t entry_top; @@ -35132,7 +31928,14 @@ void duk_bi_json_stringify_helper(duk_context *ctx, js_ctx->recursion_limit = DUK_USE_JSON_ENC_RECLIMIT; DUK_ASSERT(js_ctx->recursion_depth == 0); - undef = duk__enc_value1(js_ctx, idx_holder); /* [ ... holder key ] -> [ ... holder key val ] */ + + if (DUK_UNLIKELY(duk__enc_value(js_ctx, idx_holder) == 0)) { /* [ ... holder key ] -> [ ... holder ] */ + /* Result is undefined. */ + duk_push_undefined(ctx); + } else { + /* Convert buffer to result string. */ + DUK_BW_PUSH_AS_STRING(thr, &js_ctx->bw); + } DUK_DDD(DUK_DDDPRINT("after: flags=0x%08lx, loop=%!T, replacer=%!O, " "proplist=%!T, gap=%!O, holder=%!T", @@ -35141,16 +31944,7 @@ void duk_bi_json_stringify_helper(duk_context *ctx, (duk_heaphdr *) js_ctx->h_replacer, (duk_tval *) (js_ctx->idx_proplist >= 0 ? duk_get_tval(ctx, js_ctx->idx_proplist) : NULL), (duk_heaphdr *) js_ctx->h_gap, - (duk_tval *) duk_get_tval(ctx, -3))); - - if (undef) { - /* Result is undefined. */ - duk_push_undefined(ctx); - } else { - /* Finish and convert buffer to result string. */ - duk__enc_value2(js_ctx); /* [ ... key val ] -> [ ... ] */ - DUK_BW_PUSH_AS_STRING(thr, &js_ctx->bw); - } + (duk_tval *) duk_get_tval(ctx, idx_holder))); /* The stack has a variable shape here, so force it to the * desired one explicitly. @@ -35873,7 +32667,7 @@ DUK_LOCAL duk_double_t duk__push_this_number_plain(duk_context *ctx) { if (!h || (DUK_HOBJECT_GET_CLASS_NUMBER(h) != DUK_HOBJECT_CLASS_NUMBER)) { DUK_DDD(DUK_DDDPRINT("unacceptable this value: %!T", (duk_tval *) duk_get_tval(ctx, -1))); - DUK_ERROR((duk_hthread *) ctx, DUK_ERR_TYPE_ERROR, "expected a number"); + DUK_ERROR_TYPE((duk_hthread *) ctx, "number expected"); } duk_get_prop_stridx(ctx, -1, DUK_STRIDX_INT_VALUE); DUK_ASSERT(duk_is_number(ctx, -1)); @@ -38512,18 +35306,16 @@ DUK_INTERNAL duk_ret_t duk_bi_thread_resume(duk_context *ctx) { thr->heap->lj.iserror = is_error; -#if !defined(DUK_USE_CPP_EXCEPTIONS) DUK_ASSERT(thr->heap->lj.jmpbuf_ptr != NULL); /* call is from executor, so we know we have a jmpbuf */ -#endif duk_err_longjmp(thr); /* execution resumes in bytecode executor */ return 0; /* never here */ state_invalid_initial: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "invalid initial thread state/stack"); + DUK_ERROR_TYPE(thr, "invalid initial thread state/stack"); return 0; /* never here */ state_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "invalid state for resume"); + DUK_ERROR_TYPE(thr, "invalid state"); return 0; /* never here */ } @@ -38631,14 +35423,12 @@ DUK_INTERNAL duk_ret_t duk_bi_thread_yield(duk_context *ctx) { thr->heap->lj.iserror = is_error; -#if !defined(DUK_USE_CPP_EXCEPTIONS) DUK_ASSERT(thr->heap->lj.jmpbuf_ptr != NULL); /* call is from executor, so we know we have a jmpbuf */ -#endif duk_err_longjmp(thr); /* execution resumes in bytecode executor */ return 0; /* never here */ state_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "invalid state for yield"); + DUK_ERROR_TYPE(thr, "invalid state"); return 0; /* never here */ } @@ -39467,32 +36257,32 @@ DUK_LOCAL void duk__print_hobject(duk__dprint_state *st, duk_hobject *h) { ; } if (DUK_HOBJECT_HAS_EXOTIC_ARRAY(h)) { - DUK__COMMA(); duk_fb_sprintf(fb, "__special_array:true"); + DUK__COMMA(); duk_fb_sprintf(fb, "__exotic_array:true"); } else { ; } if (DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(h)) { - DUK__COMMA(); duk_fb_sprintf(fb, "__special_stringobj:true"); + DUK__COMMA(); duk_fb_sprintf(fb, "__exotic_stringobj:true"); } else { ; } if (DUK_HOBJECT_HAS_EXOTIC_ARGUMENTS(h)) { - DUK__COMMA(); duk_fb_sprintf(fb, "__special_arguments:true"); + DUK__COMMA(); duk_fb_sprintf(fb, "__exotic_arguments:true"); } else { ; } if (DUK_HOBJECT_HAS_EXOTIC_DUKFUNC(h)) { - DUK__COMMA(); duk_fb_sprintf(fb, "__special_dukfunc:true"); + DUK__COMMA(); duk_fb_sprintf(fb, "__exotic_dukfunc:true"); } else { ; } if (DUK_HOBJECT_IS_BUFFEROBJECT(h)) { - DUK__COMMA(); duk_fb_sprintf(fb, "__special_bufferobj:true"); + DUK__COMMA(); duk_fb_sprintf(fb, "__exotic_bufferobj:true"); } else { ; } if (DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ(h)) { - DUK__COMMA(); duk_fb_sprintf(fb, "__special_proxyobj:true"); + DUK__COMMA(); duk_fb_sprintf(fb, "__exotic_proxyobj:true"); } else { ; } @@ -39514,6 +36304,7 @@ DUK_LOCAL void duk__print_hobject(duk__dprint_state *st, duk_hobject *h) { DUK__COMMA(); duk_fb_sprintf(fb, "__func:"); duk_fb_put_funcptr(fb, (duk_uint8_t *) &f->func, sizeof(f->func)); DUK__COMMA(); duk_fb_sprintf(fb, "__nargs:%ld", (long) f->nargs); + DUK__COMMA(); duk_fb_sprintf(fb, "__magic:%ld", (long) f->magic); } else if (st->internal && DUK_HOBJECT_IS_BUFFEROBJECT(h)) { duk_hbufferobject *b = (duk_hbufferobject *) h; DUK__COMMA(); duk_fb_sprintf(fb, "__buf:"); @@ -39551,9 +36342,15 @@ DUK_LOCAL void duk__print_hobject(duk__dprint_state *st, duk_hobject *h) { DUK__COMMA(); duk_fb_sprintf(fb, "__class:%ld", (long) DUK_HOBJECT_GET_CLASS_NUMBER(h)); } + DUK__COMMA(); duk_fb_sprintf(fb, "__heapptr:%p", (void *) h); /* own pointer */ + /* prototype should be last, for readability */ - if (st->follow_proto && DUK_HOBJECT_GET_PROTOTYPE(NULL, h)) { - DUK__COMMA(); duk_fb_put_cstring(fb, "__prototype:"); duk__print_hobject(st, DUK_HOBJECT_GET_PROTOTYPE(NULL, h)); + if (DUK_HOBJECT_GET_PROTOTYPE(NULL, h)) { + if (st->follow_proto) { + DUK__COMMA(); duk_fb_put_cstring(fb, "__prototype:"); duk__print_hobject(st, DUK_HOBJECT_GET_PROTOTYPE(NULL, h)); + } else { + DUK__COMMA(); duk_fb_sprintf(fb, "__prototype:%p", (void *) DUK_HOBJECT_GET_PROTOTYPE(NULL, h)); + } } duk_fb_put_cstring(fb, brace2); @@ -40059,6 +36856,7 @@ DUK_LOCAL void duk__debug_do_detach1(duk_heap *heap, duk_int_t reason) { */ if (heap->dbg_detaching) { + DUK_D(DUK_DPRINT("debugger already detaching, ignore detach1")); return; } @@ -40082,9 +36880,10 @@ DUK_LOCAL void duk__debug_do_detach1(duk_heap *heap, duk_int_t reason) { heap->dbg_peek_cb = NULL; heap->dbg_read_flush_cb = NULL; heap->dbg_write_flush_cb = NULL; + heap->dbg_request_cb = NULL; /* heap->dbg_detached_cb: keep */ /* heap->dbg_udata: keep */ - heap->dbg_processing = 0; + /* heap->dbg_processing: keep on purpose to avoid debugger re-entry in detaching state */ heap->dbg_paused = 0; heap->dbg_state_dirty = 0; heap->dbg_force_restart = 0; @@ -40132,6 +36931,24 @@ DUK_INTERNAL void duk_debug_do_detach(duk_heap *heap) { duk__debug_do_detach2(heap); } +/* Called on a read/write error: NULL all callbacks except the detached + * callback so that we never accidentally call them after a read/write + * error has been indicated. This is especially important for the transport + * I/O callbacks to fulfill guaranteed callback semantics. + */ +DUK_LOCAL void duk__debug_null_most_callbacks(duk_hthread *thr) { + duk_heap *heap; + heap = thr->heap; + DUK_D(DUK_DPRINT("transport read/write error, NULL all callbacks expected detached")); + heap->dbg_read_cb = NULL; + heap->dbg_write_cb = NULL; /* this is especially critical to avoid another write call in detach1() */ + heap->dbg_peek_cb = NULL; + heap->dbg_read_flush_cb = NULL; + heap->dbg_write_flush_cb = NULL; + heap->dbg_request_cb = NULL; + /* keep heap->dbg_detached_cb */ +} + /* * Debug connection peek and flush primitives */ @@ -40270,8 +37087,8 @@ DUK_INTERNAL void duk_debug_read_bytes(duk_hthread *thr, duk_uint8_t *data, duk_ #endif got = heap->dbg_read_cb(heap->dbg_udata, (char *) p, left); if (got == 0 || got > left) { - heap->dbg_write_cb = NULL; /* squelch further writes */ DUK_D(DUK_DPRINT("connection error during read, return zero data")); + duk__debug_null_most_callbacks(thr); /* avoid calling write callback in detach1() */ DUK__SET_CONN_BROKEN(thr, 1); goto fail; } @@ -40329,7 +37146,7 @@ DUK_INTERNAL duk_int32_t duk_debug_read_int(duk_hthread *thr) { return (duk_int32_t) (((x - 0xc0) << 8) + t); } else if (x >= 0x80) { return (duk_int32_t) (x - 0x80); - } else if (x == 0x10) { + } else if (x == DUK_DBG_IB_INT4) { return (duk_int32_t) duk__debug_read_uint32_raw(thr); } @@ -40367,9 +37184,9 @@ DUK_INTERNAL duk_hstring *duk_debug_read_hstring(duk_hthread *thr) { if (x >= 0x60 && x <= 0x7f) { /* For short strings, use a fixed temp buffer. */ len = (duk_uint32_t) (x - 0x60); - } else if (x == 0x12) { + } else if (x == DUK_DBG_IB_STR2) { len = (duk_uint32_t) duk__debug_read_uint16_raw(thr); - } else if (x == 0x11) { + } else if (x == DUK_DBG_IB_STR4) { len = (duk_uint32_t) duk__debug_read_uint32_raw(thr); } else { goto fail; @@ -40426,7 +37243,56 @@ DUK_LOCAL duk_double_t duk__debug_read_double_raw(duk_hthread *thr) { return du.d; } -DUK_INTERNAL void duk_debug_read_tval(duk_hthread *thr) { +#if 0 +DUK_INTERNAL duk_heaphdr *duk_debug_read_heapptr(duk_hthread *thr) { + duk_small_uint_t x; + + DUK_ASSERT(thr != NULL); + + x = duk_debug_read_byte(thr); + if (x != DUK_DBG_IB_HEAPPTR) { + goto fail; + } + + return (duk_heaphdr *) duk__debug_read_pointer_raw(thr); + + fail: + DUK_D(DUK_DPRINT("debug connection error: failed to decode heapptr")); + DUK__SET_CONN_BROKEN(thr, 1); + return NULL; +} +#endif + +DUK_INTERNAL duk_heaphdr *duk_debug_read_any_ptr(duk_hthread *thr) { + duk_small_uint_t x; + + DUK_ASSERT(thr != NULL); + + x = duk_debug_read_byte(thr); + switch (x) { + case DUK_DBG_IB_OBJECT: + case DUK_DBG_IB_POINTER: + case DUK_DBG_IB_HEAPPTR: + /* Accept any pointer-like value; for 'object' dvalue, read + * and ignore the class number. + */ + if (x == DUK_DBG_IB_OBJECT) { + duk_debug_skip_byte(thr); + } + break; + default: + goto fail; + } + + return (duk_heaphdr *) duk__debug_read_pointer_raw(thr); + + fail: + DUK_D(DUK_DPRINT("debug connection error: failed to decode any pointer (object, pointer, heapptr)")); + DUK__SET_CONN_BROKEN(thr, 1); + return NULL; +} + +DUK_INTERNAL duk_tval *duk_debug_read_tval(duk_hthread *thr) { duk_context *ctx = (duk_context *) thr; duk_uint8_t x; duk_uint_t t; @@ -40440,88 +37306,105 @@ DUK_INTERNAL void duk_debug_read_tval(duk_hthread *thr) { t = (duk_uint_t) (x - 0xc0); t = (t << 8) + duk_debug_read_byte(thr); duk_push_uint(ctx, (duk_uint_t) t); - return; + goto return_ptr; } if (x >= 0x80) { duk_push_uint(ctx, (duk_uint_t) (x - 0x80)); - return; + goto return_ptr; } if (x >= 0x60) { len = (duk_uint32_t) (x - 0x60); duk__debug_read_hstring_raw(thr, len); - return; + goto return_ptr; } switch (x) { - case 0x10: { + case DUK_DBG_IB_INT4: { duk_int32_t i = duk__debug_read_int32_raw(thr); duk_push_i32(ctx, i); break; } - case 0x11: + case DUK_DBG_IB_STR4: { len = duk__debug_read_uint32_raw(thr); duk__debug_read_hstring_raw(thr, len); break; - case 0x12: + } + case DUK_DBG_IB_STR2: { len = duk__debug_read_uint16_raw(thr); duk__debug_read_hstring_raw(thr, len); break; - case 0x13: + } + case DUK_DBG_IB_BUF4: { len = duk__debug_read_uint32_raw(thr); duk__debug_read_hbuffer_raw(thr, len); break; - case 0x14: + } + case DUK_DBG_IB_BUF2: { len = duk__debug_read_uint16_raw(thr); duk__debug_read_hbuffer_raw(thr, len); break; - case 0x16: + } + case DUK_DBG_IB_UNDEFINED: { duk_push_undefined(ctx); break; - case 0x17: + } + case DUK_DBG_IB_NULL: { duk_push_null(ctx); break; - case 0x18: + } + case DUK_DBG_IB_TRUE: { duk_push_true(ctx); break; - case 0x19: + } + case DUK_DBG_IB_FALSE: { duk_push_false(ctx); break; - case 0x1a: { + } + case DUK_DBG_IB_NUMBER: { duk_double_t d; d = duk__debug_read_double_raw(thr); duk_push_number(ctx, d); break; } - case 0x1b: - /* XXX: not needed for now, so not implemented */ - DUK_D(DUK_DPRINT("reading object values unimplemented")); - goto fail; - case 0x1c: { + case DUK_DBG_IB_OBJECT: { + duk_heaphdr *h; + duk_debug_skip_byte(thr); + h = (duk_heaphdr *) duk__debug_read_pointer_raw(thr); + duk_push_heapptr(thr, (void *) h); + break; + } + case DUK_DBG_IB_POINTER: { void *ptr; ptr = duk__debug_read_pointer_raw(thr); duk_push_pointer(thr, ptr); break; } - case 0x1d: - /* XXX: not needed for now, so not implemented */ + case DUK_DBG_IB_LIGHTFUNC: { + /* XXX: Not needed for now, so not implemented. Note that + * function pointers may have different size/layout than + * a void pointer. + */ DUK_D(DUK_DPRINT("reading lightfunc values unimplemented")); goto fail; - case 0x1e: { + } + case DUK_DBG_IB_HEAPPTR: { duk_heaphdr *h; h = (duk_heaphdr *) duk__debug_read_pointer_raw(thr); duk_push_heapptr(thr, (void *) h); break; } - case 0x15: /* unused: not accepted in inbound messages */ + case DUK_DBG_IB_UNUSED: /* unused: not accepted in inbound messages */ default: goto fail; } - return; + return_ptr: + return DUK_GET_TVAL_NEGIDX(thr, -1); fail: DUK_D(DUK_DPRINT("debug connection error: failed to decode tval")); DUK__SET_CONN_BROKEN(thr, 1); + return NULL; } /* @@ -40565,7 +37448,7 @@ DUK_INTERNAL void duk_debug_write_bytes(duk_hthread *thr, const duk_uint8_t *dat #endif got = heap->dbg_write_cb(heap->dbg_udata, (const char *) p, left); if (got == 0 || got > left) { - heap->dbg_write_cb = NULL; /* squelch further writes */ + duk__debug_null_most_callbacks(thr); /* avoid calling write callback in detach1() */ DUK_D(DUK_DPRINT("connection error during write")); DUK__SET_CONN_BROKEN(thr, 1); return; @@ -40575,32 +37458,25 @@ DUK_INTERNAL void duk_debug_write_bytes(duk_hthread *thr, const duk_uint8_t *dat } DUK_INTERNAL void duk_debug_write_byte(duk_hthread *thr, duk_uint8_t x) { - duk_heap *heap; - duk_size_t got; - - DUK_ASSERT(thr != NULL); - heap = thr->heap; - DUK_ASSERT(heap != NULL); - - if (heap->dbg_write_cb == NULL) { - DUK_D(DUK_DPRINT("attempt to write 1 bytes in detached state, ignore")); - return; - } - - DUK_ASSERT(heap->dbg_write_cb != NULL); - got = heap->dbg_write_cb(heap->dbg_udata, (const char *) (&x), 1); - if (got != 1) { - DUK_D(DUK_DPRINT("connection error during write")); - DUK__SET_CONN_BROKEN(thr, 1); - } + duk_debug_write_bytes(thr, (const duk_uint8_t *) &x, 1); } DUK_INTERNAL void duk_debug_write_unused(duk_hthread *thr) { - duk_debug_write_byte(thr, 0x15); + duk_debug_write_byte(thr, DUK_DBG_IB_UNUSED); } DUK_INTERNAL void duk_debug_write_undefined(duk_hthread *thr) { - duk_debug_write_byte(thr, 0x16); + duk_debug_write_byte(thr, DUK_DBG_IB_UNDEFINED); +} + +#if defined(DUK_USE_DEBUGGER_INSPECT) +DUK_INTERNAL void duk_debug_write_null(duk_hthread *thr) { + duk_debug_write_byte(thr, DUK_DBG_IB_NULL); +} +#endif + +DUK_INTERNAL void duk_debug_write_boolean(duk_hthread *thr, duk_uint_t val) { + duk_debug_write_byte(thr, val ? DUK_DBG_IB_TRUE : DUK_DBG_IB_FALSE); } /* Write signed 32-bit integer. */ @@ -40619,7 +37495,7 @@ DUK_INTERNAL void duk_debug_write_int(duk_hthread *thr, duk_int32_t x) { len = 2; } else { /* Signed integers always map to 4 bytes now. */ - buf[0] = (duk_uint8_t) 0x10; + buf[0] = (duk_uint8_t) DUK_DBG_IB_INT4; buf[1] = (duk_uint8_t) ((x >> 24) & 0xff); buf[2] = (duk_uint8_t) ((x >> 16) & 0xff); buf[3] = (duk_uint8_t) ((x >> 8) & 0xff); @@ -40631,10 +37507,17 @@ DUK_INTERNAL void duk_debug_write_int(duk_hthread *thr, duk_int32_t x) { /* Write unsigned 32-bit integer. */ DUK_INTERNAL void duk_debug_write_uint(duk_hthread *thr, duk_uint32_t x) { - /* XXX: there's currently no need to support full 32-bit unsigned - * integer range in practice. If that becomes necessary, add a new - * dvalue type or encode as an IEEE double. + /* The debugger protocol doesn't support a plain integer encoding for + * the full 32-bit unsigned range (only 32-bit signed). For now, + * unsigned 32-bit values simply written as signed ones. This is not + * a concrete issue except for 32-bit heaphdr fields. Proper solutions + * would be to (a) write such integers as IEEE doubles or (b) add an + * unsigned 32-bit dvalue. */ + if (x >= 0x80000000UL) { + DUK_D(DUK_DPRINT("writing unsigned integer 0x%08lx as signed integer", + (long) x)); + } duk_debug_write_int(thr, (duk_int32_t) x); } @@ -40645,7 +37528,7 @@ DUK_INTERNAL void duk_debug_write_strbuf(duk_hthread *thr, const char *data, duk DUK_ASSERT(thr != NULL); DUK_ASSERT(length == 0 || data != NULL); - if (length <= 0x1fUL && marker_base == 0x11) { + if (length <= 0x1fUL && marker_base == DUK_DBG_IB_STR4) { /* For strings, special form for short lengths. */ buf[0] = (duk_uint8_t) (0x60 + length); buflen = 1; @@ -40668,7 +37551,7 @@ DUK_INTERNAL void duk_debug_write_strbuf(duk_hthread *thr, const char *data, duk } DUK_INTERNAL void duk_debug_write_string(duk_hthread *thr, const char *data, duk_size_t length) { - duk_debug_write_strbuf(thr, data, length, 0x11); + duk_debug_write_strbuf(thr, data, length, DUK_DBG_IB_STR4); } DUK_INTERNAL void duk_debug_write_cstring(duk_hthread *thr, const char *data) { @@ -40694,7 +37577,7 @@ DUK_LOCAL void duk__debug_write_hstring_safe_top(duk_hthread *thr) { } DUK_INTERNAL void duk_debug_write_buffer(duk_hthread *thr, const char *data, duk_size_t length) { - duk_debug_write_strbuf(thr, data, length, 0x13); + duk_debug_write_strbuf(thr, data, length, DUK_DBG_IB_BUF4); } DUK_INTERNAL void duk_debug_write_hbuffer(duk_hthread *thr, duk_hbuffer *h) { @@ -40724,14 +37607,14 @@ DUK_LOCAL void duk__debug_write_pointer_raw(duk_hthread *thr, void *ptr, duk_uin } DUK_INTERNAL void duk_debug_write_pointer(duk_hthread *thr, void *ptr) { - duk__debug_write_pointer_raw(thr, ptr, 0x1c); + duk__debug_write_pointer_raw(thr, ptr, DUK_DBG_IB_POINTER); } -#if defined(DUK_USE_DEBUGGER_DUMPHEAP) +#if defined(DUK_USE_DEBUGGER_DUMPHEAP) || defined(DUK_USE_DEBUGGER_INSPECT) DUK_INTERNAL void duk_debug_write_heapptr(duk_hthread *thr, duk_heaphdr *h) { - duk__debug_write_pointer_raw(thr, (void *) h, 0x1e); + duk__debug_write_pointer_raw(thr, (void *) h, DUK_DBG_IB_HEAPPTR); } -#endif /* DUK_USE_DEBUGGER_DUMPHEAP */ +#endif /* DUK_USE_DEBUGGER_DUMPHEAP || DUK_USE_DEBUGGER_INSPECT */ DUK_INTERNAL void duk_debug_write_hobject(duk_hthread *thr, duk_hobject *obj) { duk_uint8_t buf[3]; @@ -40741,7 +37624,7 @@ DUK_INTERNAL void duk_debug_write_hobject(duk_hthread *thr, duk_hobject *obj) { DUK_ASSERT(sizeof(obj) >= 1 && sizeof(obj) <= 16); DUK_ASSERT(obj != NULL); - buf[0] = 0x1b; + buf[0] = DUK_DBG_IB_OBJECT; buf[1] = (duk_uint8_t) DUK_HOBJECT_GET_CLASS_NUMBER(obj); buf[2] = sizeof(pu); duk_debug_write_bytes(thr, buf, 3); @@ -40756,32 +37639,34 @@ DUK_INTERNAL void duk_debug_write_tval(duk_hthread *thr, duk_tval *tv) { duk_c_function lf_func; duk_small_uint_t lf_flags; duk_uint8_t buf[4]; - duk_double_union du; + duk_double_union du1; + duk_double_union du2; + duk_int32_t i32; DUK_ASSERT(thr != NULL); DUK_ASSERT(tv != NULL); switch (DUK_TVAL_GET_TAG(tv)) { case DUK_TAG_UNDEFINED: - duk_debug_write_byte(thr, 0x16); + duk_debug_write_byte(thr, DUK_DBG_IB_UNDEFINED); break; case DUK_TAG_UNUSED: - duk_debug_write_byte(thr, 0x15); + duk_debug_write_byte(thr, DUK_DBG_IB_UNUSED); break; case DUK_TAG_NULL: - duk_debug_write_byte(thr, 0x17); + duk_debug_write_byte(thr, DUK_DBG_IB_NULL); break; case DUK_TAG_BOOLEAN: DUK_ASSERT(DUK_TVAL_GET_BOOLEAN(tv) == 0 || DUK_TVAL_GET_BOOLEAN(tv) == 1); - duk_debug_write_byte(thr, DUK_TVAL_GET_BOOLEAN(tv) ? 0x18 : 0x19); + duk_debug_write_boolean(thr, DUK_TVAL_GET_BOOLEAN(tv)); break; case DUK_TAG_POINTER: duk_debug_write_pointer(thr, (void *) DUK_TVAL_GET_POINTER(tv)); break; case DUK_TAG_LIGHTFUNC: DUK_TVAL_GET_LIGHTFUNC(tv, lf_func, lf_flags); - buf[0] = 0x1d; + buf[0] = DUK_DBG_IB_LIGHTFUNC; buf[1] = (duk_uint8_t) (lf_flags >> 8); buf[2] = (duk_uint8_t) (lf_flags & 0xff); buf[3] = sizeof(lf_func); @@ -40801,14 +37686,39 @@ DUK_INTERNAL void duk_debug_write_tval(duk_hthread *thr, duk_tval *tv) { case DUK_TAG_FASTINT: #endif default: - /* Numbers are normalized to big (network) endian. */ + /* Numbers are normalized to big (network) endian. We can + * (but are not required) to use integer dvalues when there's + * no loss of precision. + * + * XXX: share check with other code; this check is slow but + * reliable and doesn't require careful exponent/mantissa + * mask tricks as in the fastint downgrade code. + */ DUK_ASSERT(!DUK_TVAL_IS_UNUSED(tv)); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); - du.d = DUK_TVAL_GET_NUMBER(tv); - DUK_DBLUNION_DOUBLE_HTON(&du); - - duk_debug_write_byte(thr, 0x1a); - duk_debug_write_bytes(thr, (const duk_uint8_t *) du.uc, sizeof(du.uc)); + du1.d = DUK_TVAL_GET_NUMBER(tv); + i32 = (duk_int32_t) du1.d; + du2.d = (duk_double_t) i32; + + DUK_DD(DUK_DDPRINT("i32=%ld du1=%02x%02x%02x%02x%02x%02x%02x%02x " + "du2=%02x%02x%02x%02x%02x%02x%02x%02x", + (long) i32, + (unsigned int) du1.uc[0], (unsigned int) du1.uc[1], + (unsigned int) du1.uc[2], (unsigned int) du1.uc[3], + (unsigned int) du1.uc[4], (unsigned int) du1.uc[5], + (unsigned int) du1.uc[6], (unsigned int) du1.uc[7], + (unsigned int) du2.uc[0], (unsigned int) du2.uc[1], + (unsigned int) du2.uc[2], (unsigned int) du2.uc[3], + (unsigned int) du2.uc[4], (unsigned int) du2.uc[5], + (unsigned int) du2.uc[6], (unsigned int) du2.uc[7])); + + if (DUK_MEMCMP((const void *) du1.uc, (const void *) du2.uc, sizeof(du1.uc)) == 0) { + duk_debug_write_int(thr, i32); + } else { + DUK_DBLUNION_DOUBLE_HTON(&du1); + duk_debug_write_byte(thr, DUK_DBG_IB_NUMBER); + duk_debug_write_bytes(thr, (const duk_uint8_t *) du1.uc, sizeof(du1.uc)); + } } } @@ -40832,30 +37742,30 @@ DUK_LOCAL void duk__debug_write_tval_heapptr(duk_hthread *thr, duk_tval *tv) { #if 0 /* unused */ DUK_INTERNAL void duk_debug_write_request(duk_hthread *thr, duk_small_uint_t command) { - duk_debug_write_byte(thr, DUK_DBG_MARKER_REQUEST); + duk_debug_write_byte(thr, DUK_DBG_IB_REQUEST); duk_debug_write_int(thr, command); } #endif DUK_INTERNAL void duk_debug_write_reply(duk_hthread *thr) { - duk_debug_write_byte(thr, DUK_DBG_MARKER_REPLY); + duk_debug_write_byte(thr, DUK_DBG_IB_REPLY); } DUK_INTERNAL void duk_debug_write_error_eom(duk_hthread *thr, duk_small_uint_t err_code, const char *msg) { /* Allow NULL 'msg' */ - duk_debug_write_byte(thr, DUK_DBG_MARKER_ERROR); + duk_debug_write_byte(thr, DUK_DBG_IB_ERROR); duk_debug_write_int(thr, (duk_int32_t) err_code); duk_debug_write_cstring(thr, msg); duk_debug_write_eom(thr); } DUK_INTERNAL void duk_debug_write_notify(duk_hthread *thr, duk_small_uint_t command) { - duk_debug_write_byte(thr, DUK_DBG_MARKER_NOTIFY); + duk_debug_write_byte(thr, DUK_DBG_IB_NOTIFY); duk_debug_write_int(thr, command); } DUK_INTERNAL void duk_debug_write_eom(duk_hthread *thr) { - duk_debug_write_byte(thr, DUK_DBG_MARKER_EOM); + duk_debug_write_byte(thr, DUK_DBG_IB_EOM); /* As an initial implementation, write flush after every EOM (and the * version identifier). A better implementation would flush only when @@ -40993,45 +37903,46 @@ DUK_LOCAL duk_bool_t duk__debug_skip_dvalue(duk_hthread *thr) { return 0; } switch(x) { - case 0x00: + case DUK_DBG_IB_EOM: return 1; /* Return 1: got EOM */ - case 0x01: - case 0x02: - case 0x03: - case 0x04: + case DUK_DBG_IB_REQUEST: + case DUK_DBG_IB_REPLY: + case DUK_DBG_IB_ERROR: + case DUK_DBG_IB_NOTIFY: break; - case 0x10: + case DUK_DBG_IB_INT4: (void) duk__debug_read_uint32_raw(thr); break; - case 0x11: - case 0x13: + case DUK_DBG_IB_STR4: + case DUK_DBG_IB_BUF4: len = duk__debug_read_uint32_raw(thr); duk_debug_skip_bytes(thr, len); break; - case 0x12: - case 0x14: + case DUK_DBG_IB_STR2: + case DUK_DBG_IB_BUF2: len = duk__debug_read_uint16_raw(thr); duk_debug_skip_bytes(thr, len); break; - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: + case DUK_DBG_IB_UNUSED: + case DUK_DBG_IB_UNDEFINED: + case DUK_DBG_IB_NULL: + case DUK_DBG_IB_TRUE: + case DUK_DBG_IB_FALSE: break; - case 0x1a: + case DUK_DBG_IB_NUMBER: duk_debug_skip_bytes(thr, 8); break; - case 0x1b: + case DUK_DBG_IB_OBJECT: duk_debug_skip_byte(thr); len = duk_debug_read_byte(thr); duk_debug_skip_bytes(thr, len); break; - case 0x1c: + case DUK_DBG_IB_POINTER: + case DUK_DBG_IB_HEAPPTR: len = duk_debug_read_byte(thr); duk_debug_skip_bytes(thr, len); break; - case 0x1d: + case DUK_DBG_IB_LIGHTFUNC: duk_debug_skip_bytes(thr, 2); len = duk_debug_read_byte(thr); duk_debug_skip_bytes(thr, len); @@ -41057,11 +37968,7 @@ DUK_LOCAL void duk__debug_skip_to_eom(duk_hthread *thr) { } /* - * Process incoming debug requests - * - * Individual request handlers can push temporaries on the value stack and - * rely on duk__debug_process_message() to restore the value stack top - * automatically. + * Simple commands */ DUK_LOCAL void duk__debug_handle_basic_info(duk_hthread *thr, duk_heap *heap) { @@ -41081,6 +37988,7 @@ DUK_LOCAL void duk__debug_handle_basic_info(duk_hthread *thr, duk_heap *heap) { #else duk_debug_write_int(thr, 0); #endif + duk_debug_write_int(thr, (duk_int_t) sizeof(void *)); duk_debug_write_eom(thr); } @@ -41113,6 +38021,8 @@ DUK_LOCAL void duk__debug_handle_step(duk_hthread *thr, duk_heap *heap, duk_int3 duk_small_uint_t step_type; duk_uint_fast32_t line; + DUK_D(DUK_DPRINT("debug command StepInto/StepOver/StepOut: %d", (int) cmd)); + if (cmd == DUK_DBG_CMD_STEPINTO) { step_type = DUK_STEP_TYPE_INTO; } else if (cmd == DUK_DBG_CMD_STEPOVER) { @@ -41122,7 +38032,6 @@ DUK_LOCAL void duk__debug_handle_step(duk_hthread *thr, duk_heap *heap, duk_int3 step_type = DUK_STEP_TYPE_OUT; } - DUK_D(DUK_DPRINT("debug command StepInto/StepOver/StepOut: %d", (int) cmd)); line = duk_debug_curr_line(thr); if (line > 0) { heap->dbg_paused = 0; @@ -41196,7 +38105,7 @@ DUK_LOCAL void duk__debug_handle_get_var(duk_hthread *thr, duk_heap *heap) { str = duk_debug_read_hstring(thr); /* push to stack */ DUK_ASSERT(str != NULL); - if (duk_debug_peek_byte(thr) != DUK_DBG_MARKER_EOM) { + if (duk_debug_peek_byte(thr) != DUK_DBG_IB_EOM) { level = duk_debug_read_int(thr); /* optional callstack level */ if (level >= 0 || -level > (duk_int32_t) thr->callstack_top) { DUK_D(DUK_DPRINT("invalid callstack level for GetVar")); @@ -41234,7 +38143,6 @@ DUK_LOCAL void duk__debug_handle_get_var(duk_hthread *thr, duk_heap *heap) { } DUK_LOCAL void duk__debug_handle_put_var(duk_hthread *thr, duk_heap *heap) { - duk_context *ctx = (duk_context *) thr; duk_hstring *str; duk_tval *tv; duk_int32_t level; @@ -41244,10 +38152,12 @@ DUK_LOCAL void duk__debug_handle_put_var(duk_hthread *thr, duk_heap *heap) { str = duk_debug_read_hstring(thr); /* push to stack */ DUK_ASSERT(str != NULL); - duk_debug_read_tval(thr); /* push to stack */ - tv = duk_get_tval(ctx, -1); - DUK_ASSERT(tv != NULL); - if (duk_debug_peek_byte(thr) != DUK_DBG_MARKER_EOM) { + tv = duk_debug_read_tval(thr); + if (tv == NULL) { + /* detached */ + return; + } + if (duk_debug_peek_byte(thr) != DUK_DBG_IB_EOM) { level = duk_debug_read_int(thr); /* optional callstack level */ if (level >= 0 || -level > (duk_int32_t) thr->callstack_top) { DUK_D(DUK_DPRINT("invalid callstack level for PutVar")); @@ -41283,6 +38193,7 @@ DUK_LOCAL void duk__debug_handle_get_call_stack(duk_hthread *thr, duk_heap *heap duk_uint_fast32_t line; duk_size_t i; + DUK_ASSERT(thr != NULL); DUK_UNREF(heap); duk_debug_write_reply(thr); @@ -41321,6 +38232,9 @@ DUK_LOCAL void duk__debug_handle_get_call_stack(duk_hthread *thr, duk_heap *heap } curr_thr = curr_thr->resumer; } + /* SCANBUILD: warning about 'thr' potentially being NULL here, + * warning is incorrect because thr != NULL always here. + */ duk_debug_write_eom(thr); } @@ -41332,7 +38246,7 @@ DUK_LOCAL void duk__debug_handle_get_locals(duk_hthread *thr, duk_heap *heap) { DUK_UNREF(heap); - if (duk_debug_peek_byte(thr) != DUK_DBG_MARKER_EOM) { + if (duk_debug_peek_byte(thr) != DUK_DBG_IB_EOM) { level = duk_debug_read_int(thr); /* optional callstack level */ if (level >= 0 || -level > (duk_int32_t) thr->callstack_top) { DUK_D(DUK_DPRINT("invalid callstack level for GetLocals")); @@ -41402,7 +38316,7 @@ DUK_LOCAL void duk__debug_handle_eval(duk_hthread *thr, duk_heap *heap) { duk_push_undefined(ctx); /* 'this' binding shouldn't matter here */ (void) duk_debug_read_hstring(thr); - if (duk_debug_peek_byte(thr) != DUK_DBG_MARKER_EOM) { + if (duk_debug_peek_byte(thr) != DUK_DBG_IB_EOM) { level = duk_debug_read_int(thr); /* optional callstack level */ if (level >= 0 || -level > (duk_int32_t) thr->callstack_top) { DUK_D(DUK_DPRINT("invalid callstack level for Eval")); @@ -41469,7 +38383,90 @@ DUK_LOCAL void duk__debug_handle_detach(duk_hthread *thr, duk_heap *heap) { DUK__SET_CONN_BROKEN(thr, 0); /* not an error */ } +DUK_LOCAL void duk__debug_handle_apprequest(duk_hthread *thr, duk_heap *heap) { + duk_context *ctx = (duk_context *) thr; + duk_idx_t old_top; + + DUK_D(DUK_DPRINT("debug command AppRequest")); + + old_top = duk_get_top(ctx); /* save stack top */ + + if (heap->dbg_request_cb != NULL) { + duk_idx_t nrets; + duk_idx_t nvalues = 0; + duk_idx_t top, idx; + + /* Read tvals from the message and push them onto the valstack, + * then call the request callback to process the request. + */ + while (duk_debug_peek_byte(thr) != DUK_DBG_IB_EOM) { + duk_tval *tv; + if (!duk_check_stack(ctx, 1)) { + DUK_D(DUK_DPRINT("failed to allocate space for request dvalue(s)")); + goto fail; + } + tv = duk_debug_read_tval(thr); /* push to stack */ + if (tv == NULL) { + /* detached */ + return; + } + nvalues++; + } + DUK_ASSERT(duk_get_top(ctx) == old_top + nvalues); + + /* Request callback should push values for reply to client onto valstack */ + DUK_D(DUK_DPRINT("calling into AppRequest request_cb with nvalues=%ld, old_top=%ld, top=%ld", + (long) nvalues, (long) old_top, (long) duk_get_top(ctx))); + nrets = heap->dbg_request_cb(ctx, heap->dbg_udata, nvalues); + DUK_D(DUK_DPRINT("returned from AppRequest request_cb; nvalues=%ld -> nrets=%ld, old_top=%ld, top=%ld", + (long) nvalues, (long) nrets, (long) old_top, (long) duk_get_top(ctx))); + if (nrets >= 0) { + DUK_ASSERT(duk_get_top(ctx) >= old_top + nrets); + if (duk_get_top(ctx) < old_top + nrets) { + DUK_D(DUK_DPRINT("AppRequest callback doesn't match value stack configuration, " + "top=%ld < old_top=%ld + nrets=%ld; " + "this might mean it's unsafe to continue!", + (long) duk_get_top(ctx), (long) old_top, (long) nrets)); + goto fail; + } + + /* Reply with tvals pushed by request callback */ + duk_debug_write_byte(thr, DUK_DBG_IB_REPLY); + top = duk_get_top(ctx); + for (idx = top - nrets; idx < top; idx++) { + duk_debug_write_tval(thr, DUK_GET_TVAL_POSIDX(ctx, idx)); + } + duk_debug_write_eom(thr); + } else { + DUK_ASSERT(duk_get_top(ctx) >= old_top + 1); + if (duk_get_top(ctx) < old_top + 1) { + DUK_D(DUK_DPRINT("request callback return value doesn't match value stack configuration")); + goto fail; + } + duk_debug_write_error_eom(thr, DUK_DBG_ERR_APPLICATION, duk_get_string(ctx, -1)); + } + + duk_set_top(ctx, old_top); /* restore stack top */ + } else { + DUK_D(DUK_DPRINT("no request callback, treat AppRequest as unsupported")); + duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNSUPPORTED, "AppRequest unsupported by target"); + } + + return; + + fail: + duk_set_top(ctx, old_top); /* restore stack top */ + DUK__SET_CONN_BROKEN(thr, 1); +} + +/* + * DumpHeap command + */ + #if defined(DUK_USE_DEBUGGER_DUMPHEAP) +/* XXX: this has some overlap with object inspection; remove this and make + * DumpHeap return lists of heapptrs instead? + */ DUK_LOCAL void duk__debug_dump_heaphdr(duk_hthread *thr, duk_heap *heap, duk_heaphdr *hdr) { DUK_UNREF(heap); @@ -41637,55 +38634,533 @@ DUK_LOCAL void duk__debug_handle_dump_heap(duk_hthread *thr, duk_heap *heap) { DUK_LOCAL void duk__debug_handle_get_bytecode(duk_hthread *thr, duk_heap *heap) { duk_activation *act; - duk_hcompiledfunction *fun; + duk_hcompiledfunction *fun = NULL; duk_size_t i, n; duk_tval *tv; duk_hobject **fn; + duk_int32_t level = -1; + duk_uint8_t ibyte; DUK_UNREF(heap); DUK_D(DUK_DPRINT("debug command GetBytecode")); - duk_debug_write_reply(thr); - if (thr->callstack_top == 0) { - fun = NULL; - } else { - act = thr->callstack + thr->callstack_top - 1; + ibyte = duk_debug_peek_byte(thr); + if (ibyte != DUK_DBG_IB_EOM) { + tv = duk_debug_read_tval(thr); + if (tv == NULL) { + /* detached */ + return; + } + if (DUK_TVAL_IS_OBJECT(tv)) { + /* tentative, checked later */ + fun = (duk_hcompiledfunction *) DUK_TVAL_GET_OBJECT(tv); + DUK_ASSERT(fun != NULL); + } else if (DUK_TVAL_IS_NUMBER(tv)) { + level = (duk_int32_t) DUK_TVAL_GET_NUMBER(tv); + } else { + DUK_D(DUK_DPRINT("invalid argument to GetBytecode: %!T", tv)); + goto fail_args; + } + } + + if (fun == NULL) { + if (level >= 0 || -level > (duk_int32_t) thr->callstack_top) { + DUK_D(DUK_DPRINT("invalid callstack level for GetBytecode")); + goto fail_level; + } + act = thr->callstack + thr->callstack_top + level; fun = (duk_hcompiledfunction *) DUK_ACT_GET_FUNC(act); - if (!DUK_HOBJECT_IS_COMPILEDFUNCTION((duk_hobject *) fun)) { - fun = NULL; + } + + if (fun == NULL || !DUK_HOBJECT_IS_COMPILEDFUNCTION((duk_hobject *) fun)) { + DUK_D(DUK_DPRINT("invalid argument to GetBytecode: %!O", fun)); + goto fail_args; + } + DUK_ASSERT(fun != NULL && DUK_HOBJECT_IS_COMPILEDFUNCTION((duk_hobject *) fun)); + + duk_debug_write_reply(thr); + n = DUK_HCOMPILEDFUNCTION_GET_CONSTS_COUNT(heap, fun); + duk_debug_write_int(thr, (duk_int32_t) n); + tv = DUK_HCOMPILEDFUNCTION_GET_CONSTS_BASE(heap, fun); + for (i = 0; i < n; i++) { + duk_debug_write_tval(thr, tv); + tv++; + } + n = DUK_HCOMPILEDFUNCTION_GET_FUNCS_COUNT(heap, fun); + duk_debug_write_int(thr, (duk_int32_t) n); + fn = DUK_HCOMPILEDFUNCTION_GET_FUNCS_BASE(heap, fun); + for (i = 0; i < n; i++) { + duk_debug_write_hobject(thr, *fn); + fn++; + } + duk_debug_write_string(thr, + (const char *) DUK_HCOMPILEDFUNCTION_GET_CODE_BASE(heap, fun), + (duk_size_t) DUK_HCOMPILEDFUNCTION_GET_CODE_SIZE(heap, fun)); + duk_debug_write_eom(thr); + return; + + fail_args: + duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNKNOWN, "invalid argument"); + return; + + fail_level: + duk_debug_write_error_eom(thr, DUK_DBG_ERR_NOTFOUND, "invalid callstack level"); + return; +} + +/* + * Object inspection commands: GetHeapObjInfo, GetObjPropDesc, + * GetObjPropDescRange + */ + +#if defined(DUK_USE_DEBUGGER_INSPECT) + +#if 0 /* pruned */ +DUK_LOCAL const char * const duk__debug_getinfo_heaphdr_keys[] = { + "reachable", + "temproot", + "finalizable", + "finalized", + "readonly" + /* NULL not needed here */ +}; +DUK_LOCAL duk_uint_t duk__debug_getinfo_heaphdr_masks[] = { + DUK_HEAPHDR_FLAG_REACHABLE, + DUK_HEAPHDR_FLAG_TEMPROOT, + DUK_HEAPHDR_FLAG_FINALIZABLE, + DUK_HEAPHDR_FLAG_FINALIZED, + DUK_HEAPHDR_FLAG_READONLY, + 0 /* terminator */ +}; +#endif +DUK_LOCAL const char * const duk__debug_getinfo_hstring_keys[] = { +#if 0 + "arridx", + "internal", + "reserved_word", + "strict_reserved_word", + "eval_or_arguments", +#endif + "extdata" + /* NULL not needed here */ +}; +DUK_LOCAL duk_uint_t duk__debug_getinfo_hstring_masks[] = { +#if 0 + DUK_HSTRING_FLAG_ARRIDX, + DUK_HSTRING_FLAG_INTERNAL, + DUK_HSTRING_FLAG_RESERVED_WORD, + DUK_HSTRING_FLAG_STRICT_RESERVED_WORD, + DUK_HSTRING_FLAG_EVAL_OR_ARGUMENTS, +#endif + DUK_HSTRING_FLAG_EXTDATA, + 0 /* terminator */ +}; +DUK_LOCAL const char * const duk__debug_getinfo_hobject_keys[] = { + "extensible", + "constructable", + "bound", + "compiledfunction", + "nativefunction", + "bufferobject", + "thread", + "array_part", + "strict", + "notail", + "newenv", + "namebinding", + "createargs", + "envrecclosed", + "exotic_array", + "exotic_stringobj", + "exotic_arguments", + "exotic_dukfunc", + "exotic_proxyobj" + /* NULL not needed here */ +}; +DUK_LOCAL duk_uint_t duk__debug_getinfo_hobject_masks[] = { + DUK_HOBJECT_FLAG_EXTENSIBLE, + DUK_HOBJECT_FLAG_CONSTRUCTABLE, + DUK_HOBJECT_FLAG_BOUND, + DUK_HOBJECT_FLAG_COMPILEDFUNCTION, + DUK_HOBJECT_FLAG_NATIVEFUNCTION, + DUK_HOBJECT_FLAG_BUFFEROBJECT, + DUK_HOBJECT_FLAG_THREAD, + DUK_HOBJECT_FLAG_ARRAY_PART, + DUK_HOBJECT_FLAG_STRICT, + DUK_HOBJECT_FLAG_NOTAIL, + DUK_HOBJECT_FLAG_NEWENV, + DUK_HOBJECT_FLAG_NAMEBINDING, + DUK_HOBJECT_FLAG_CREATEARGS, + DUK_HOBJECT_FLAG_ENVRECCLOSED, + DUK_HOBJECT_FLAG_EXOTIC_ARRAY, + DUK_HOBJECT_FLAG_EXOTIC_STRINGOBJ, + DUK_HOBJECT_FLAG_EXOTIC_ARGUMENTS, + DUK_HOBJECT_FLAG_EXOTIC_DUKFUNC, + DUK_HOBJECT_FLAG_EXOTIC_PROXYOBJ, + 0 /* terminator */ +}; +DUK_LOCAL const char * const duk__debug_getinfo_hbuffer_keys[] = { + "dynamic", + "external" + /* NULL not needed here */ +}; +DUK_LOCAL duk_uint_t duk__debug_getinfo_hbuffer_masks[] = { + DUK_HBUFFER_FLAG_DYNAMIC, + DUK_HBUFFER_FLAG_EXTERNAL, + 0 /* terminator */ +}; + +DUK_LOCAL void duk__debug_getinfo_flags_key(duk_hthread *thr, const char *key) { + duk_debug_write_uint(thr, 0); + duk_debug_write_cstring(thr, key); +} + +DUK_LOCAL void duk__debug_getinfo_prop_uint(duk_hthread *thr, const char *key, duk_uint_t val) { + duk_debug_write_uint(thr, 0); + duk_debug_write_cstring(thr, key); + duk_debug_write_uint(thr, val); +} + +DUK_LOCAL void duk__debug_getinfo_prop_int(duk_hthread *thr, const char *key, duk_int_t val) { + duk_debug_write_uint(thr, 0); + duk_debug_write_cstring(thr, key); + duk_debug_write_int(thr, val); +} + +DUK_LOCAL void duk__debug_getinfo_prop_bool(duk_hthread *thr, const char *key, duk_bool_t val) { + duk_debug_write_uint(thr, 0); + duk_debug_write_cstring(thr, key); + duk_debug_write_boolean(thr, val); +} + +DUK_LOCAL void duk__debug_getinfo_bitmask(duk_hthread *thr, const char * const * keys, duk_uint_t *masks, duk_uint_t flags) { + const char *key; + duk_uint_t mask; + + for (;;) { + mask = *masks++; + if (!mask) { + break; } + key = *keys++; + DUK_ASSERT(key != NULL); + + DUK_DD(DUK_DDPRINT("inspect bitmask: key=%s, mask=0x%08lx, flags=0x%08lx", key, (unsigned long) mask, (unsigned long) flags)); + duk__debug_getinfo_prop_bool(thr, key, flags & mask); } - DUK_ASSERT(fun == NULL || DUK_HOBJECT_IS_COMPILEDFUNCTION((duk_hobject *) fun)); +} - if (fun != NULL) { - n = DUK_HCOMPILEDFUNCTION_GET_CONSTS_COUNT(heap, fun); - duk_debug_write_int(thr, (duk_int32_t) n); - tv = DUK_HCOMPILEDFUNCTION_GET_CONSTS_BASE(heap, fun); - for (i = 0; i < n; i++) { - duk_debug_write_tval(thr, tv); - tv++; +/* Inspect a property using a virtual index into a conceptual property list + * consisting of (1) all array part items from [0,a_size[ (even when above + * .length) and (2) all entry part items from [0,e_next[. Unused slots are + * indicated using dvalue 'unused'. + */ +DUK_LOCAL duk_bool_t duk__debug_getprop_index(duk_hthread *thr, duk_heap *heap, duk_hobject *h_obj, duk_uint_t idx) { + duk_uint_t a_size; + duk_tval *tv; + duk_hstring *h_key; + duk_hobject *h_getset; + duk_uint_t flags; + + DUK_UNREF(heap); + + a_size = DUK_HOBJECT_GET_ASIZE(h_obj); + if (idx < a_size) { + duk_debug_write_uint(thr, DUK_PROPDESC_FLAGS_WEC); + duk_debug_write_uint(thr, idx); + tv = DUK_HOBJECT_A_GET_VALUE_PTR(heap, h_obj, idx); + duk_debug_write_tval(thr, tv); + return 1; + } + + idx -= a_size; + if (idx >= DUK_HOBJECT_GET_ENEXT(h_obj)) { + return 0; + } + + h_key = DUK_HOBJECT_E_GET_KEY(heap, h_obj, idx); + if (h_key == NULL) { + duk_debug_write_uint(thr, 0); + duk_debug_write_null(thr); + duk_debug_write_unused(thr); + return 1; + } + + flags = DUK_HOBJECT_E_GET_FLAGS(heap, h_obj, idx); + if (DUK_HSTRING_HAS_INTERNAL(h_key)) { + flags |= DUK_DBG_PROPFLAG_INTERNAL; + } + duk_debug_write_uint(thr, flags); + duk_debug_write_hstring(thr, h_key); + if (flags & DUK_PROPDESC_FLAG_ACCESSOR) { + h_getset = DUK_HOBJECT_E_GET_VALUE_GETTER(heap, h_obj, idx); + if (h_getset) { + duk_debug_write_hobject(thr, h_getset); + } else { + duk_debug_write_null(thr); + } + h_getset = DUK_HOBJECT_E_GET_VALUE_SETTER(heap, h_obj, idx); + if (h_getset) { + duk_debug_write_hobject(thr, h_getset); + } else { + duk_debug_write_null(thr); } + } else { + tv = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(heap, h_obj, idx); + duk_debug_write_tval(thr, tv); + } + return 1; +} - n = DUK_HCOMPILEDFUNCTION_GET_FUNCS_COUNT(heap, fun); - duk_debug_write_int(thr, (duk_int32_t) n); - fn = DUK_HCOMPILEDFUNCTION_GET_FUNCS_BASE(heap, fun); - for (i = 0; i < n; i++) { - duk_debug_write_hobject(thr, *fn); - fn++; +DUK_LOCAL void duk__debug_handle_get_heap_obj_info(duk_hthread *thr, duk_heap *heap) { + duk_heaphdr *h; + + DUK_D(DUK_DPRINT("debug command GetHeapObjInfo")); + DUK_UNREF(heap); + + h = duk_debug_read_any_ptr(thr); + if (!h) { + duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNKNOWN, "invalid target"); + return; + } + + duk_debug_write_reply(thr); + + /* As with all inspection code, we rely on the debug client providing + * a valid, non-stale pointer: there's no portable way to safely + * validate the pointer here. + */ + + duk__debug_getinfo_flags_key(thr, "heapptr"); + duk_debug_write_heapptr(thr, h); + + /* XXX: comes out as signed now */ + duk__debug_getinfo_prop_uint(thr, "heaphdr_flags", (duk_uint_t) DUK_HEAPHDR_GET_FLAGS(h)); + duk__debug_getinfo_prop_uint(thr, "heaphdr_type", (duk_uint_t) DUK_HEAPHDR_GET_TYPE(h)); +#if defined(DUK_USE_REFERENCE_COUNTING) + duk__debug_getinfo_prop_uint(thr, "refcount", (duk_uint_t) DUK_HEAPHDR_GET_REFCOUNT(h)); +#endif +#if 0 /* pruned */ + duk__debug_getinfo_bitmask(thr, + duk__debug_getinfo_heaphdr_keys, + duk__debug_getinfo_heaphdr_masks, + DUK_HEAPHDR_GET_FLAGS_RAW(h)); +#endif + + switch (DUK_HEAPHDR_GET_TYPE(h)) { + case DUK_HTYPE_STRING: { + duk_hstring *h_str; + + h_str = (duk_hstring *) h; + duk__debug_getinfo_bitmask(thr, + duk__debug_getinfo_hstring_keys, + duk__debug_getinfo_hstring_masks, + DUK_HEAPHDR_GET_FLAGS_RAW(h)); + duk__debug_getinfo_prop_uint(thr, "bytelen", DUK_HSTRING_GET_BYTELEN(h_str)); + duk__debug_getinfo_prop_uint(thr, "charlen", DUK_HSTRING_GET_CHARLEN(h_str)); + duk__debug_getinfo_prop_uint(thr, "hash", DUK_HSTRING_GET_HASH(h_str)); + duk__debug_getinfo_flags_key(thr, "data"); + duk_debug_write_hstring(thr, h_str); + break; + } + case DUK_HTYPE_OBJECT: { + duk_hobject *h_obj; + duk_hobject *h_proto; + + h_obj = (duk_hobject *) h; + h_proto = DUK_HOBJECT_GET_PROTOTYPE(heap, h_obj); + + /* duk_hobject specific fields. */ + duk__debug_getinfo_bitmask(thr, + duk__debug_getinfo_hobject_keys, + duk__debug_getinfo_hobject_masks, + DUK_HEAPHDR_GET_FLAGS_RAW(h)); + duk__debug_getinfo_prop_uint(thr, "class_number", DUK_HOBJECT_GET_CLASS_NUMBER(h_obj)); + duk__debug_getinfo_flags_key(thr, "class_name"); + duk_debug_write_hstring(thr, DUK_HOBJECT_GET_CLASS_STRING(heap, h_obj)); + duk__debug_getinfo_flags_key(thr, "prototype"); + if (h_proto != NULL) { + duk_debug_write_hobject(thr, h_proto); + } else { + duk_debug_write_null(thr); + } + duk__debug_getinfo_flags_key(thr, "props"); + duk_debug_write_pointer(thr, (void *) DUK_HOBJECT_GET_PROPS(heap, h_obj)); + duk__debug_getinfo_prop_uint(thr, "e_size", (duk_uint_t) DUK_HOBJECT_GET_ESIZE(h_obj)); + duk__debug_getinfo_prop_uint(thr, "e_next", (duk_uint_t) DUK_HOBJECT_GET_ENEXT(h_obj)); + duk__debug_getinfo_prop_uint(thr, "a_size", (duk_uint_t) DUK_HOBJECT_GET_ASIZE(h_obj)); + duk__debug_getinfo_prop_uint(thr, "h_size", (duk_uint_t) DUK_HOBJECT_GET_HSIZE(h_obj)); + + /* duk_hnativefunction specific fields. */ + if (DUK_HOBJECT_IS_NATIVEFUNCTION(h_obj)) { + duk_hnativefunction *h_fun; + h_fun = (duk_hnativefunction *) h_obj; + + duk__debug_getinfo_prop_int(thr, "nargs", h_fun->nargs); + duk__debug_getinfo_prop_int(thr, "magic", h_fun->magic); + duk__debug_getinfo_prop_bool(thr, "varargs", h_fun->magic == DUK_HNATIVEFUNCTION_NARGS_VARARGS); + /* Native function pointer may be different from a void pointer, + * and we serialize it from memory directly now (no byte swapping etc). + */ + duk__debug_getinfo_flags_key(thr, "funcptr"); + duk_debug_write_buffer(thr, (const char *) &h_fun->func, sizeof(h_fun->func)); + } + + if (DUK_HOBJECT_IS_COMPILEDFUNCTION(h_obj)) { + duk_hcompiledfunction *h_fun; + duk_hbuffer *h_buf; + h_fun = (duk_hcompiledfunction *) h_obj; + + duk__debug_getinfo_prop_int(thr, "nregs", h_fun->nregs); + duk__debug_getinfo_prop_int(thr, "nargs", h_fun->nargs); + duk__debug_getinfo_prop_uint(thr, "start_line", h_fun->start_line); + duk__debug_getinfo_prop_uint(thr, "end_line", h_fun->end_line); + h_buf = (duk_hbuffer *) DUK_HCOMPILEDFUNCTION_GET_DATA(thr->heap, h_fun); + if (h_buf != NULL) { + duk__debug_getinfo_flags_key(thr, "data"); + duk_debug_write_heapptr(thr, (duk_heaphdr *) h_buf); + } + } + + if (DUK_HOBJECT_IS_THREAD(h_obj)) { + /* XXX: Currently no inspection of threads, e.g. value stack, call + * stack, catch stack, etc. + */ + duk_hthread *h_thr; + h_thr = (duk_hthread *) h_obj; + DUK_UNREF(h_thr); + } + + if (DUK_HOBJECT_IS_BUFFEROBJECT(h_obj)) { + duk_hbufferobject *h_bufobj; + h_bufobj = (duk_hbufferobject *) h_obj; + + duk__debug_getinfo_prop_uint(thr, "slice_offset", h_bufobj->offset); + duk__debug_getinfo_prop_uint(thr, "slice_length", h_bufobj->length); + duk__debug_getinfo_prop_uint(thr, "elem_shift", (duk_uint_t) h_bufobj->shift); + duk__debug_getinfo_prop_uint(thr, "elem_type", (duk_uint_t) h_bufobj->elem_type); + duk__debug_getinfo_prop_bool(thr, "is_view", (duk_uint_t) h_bufobj->is_view); + if (h_bufobj->buf != NULL) { + duk__debug_getinfo_flags_key(thr, "buffer"); + duk_debug_write_heapptr(thr, (duk_heaphdr *) h_bufobj->buf); + } } + break; + } + case DUK_HTYPE_BUFFER: { + duk_hbuffer *h_buf; - duk_debug_write_string(thr, - (const char *) DUK_HCOMPILEDFUNCTION_GET_CODE_BASE(heap, fun), - (duk_size_t) DUK_HCOMPILEDFUNCTION_GET_CODE_SIZE(heap, fun)); + h_buf = (duk_hbuffer *) h; + duk__debug_getinfo_bitmask(thr, + duk__debug_getinfo_hbuffer_keys, + duk__debug_getinfo_hbuffer_masks, + DUK_HEAPHDR_GET_FLAGS_RAW(h)); + duk__debug_getinfo_prop_uint(thr, "size", (duk_uint_t) DUK_HBUFFER_GET_SIZE(h_buf)); + duk__debug_getinfo_flags_key(thr, "dataptr"); + duk_debug_write_pointer(thr, (void *) DUK_HBUFFER_GET_DATA_PTR(thr->heap, h_buf)); + duk__debug_getinfo_flags_key(thr, "data"); + duk_debug_write_hbuffer(thr, h_buf); /* tolerates NULL h_buf */ + break; + } + default: { + /* Since we already started writing the reply, just emit nothing. */ + DUK_D(DUK_DPRINT("inspect target pointer has invalid heaphdr type")); + } + } + + duk_debug_write_eom(thr); +} + +DUK_LOCAL void duk__debug_handle_get_obj_prop_desc(duk_hthread *thr, duk_heap *heap) { + duk_heaphdr *h; + duk_hobject *h_obj; + duk_hstring *h_key; + duk_propdesc desc; + + DUK_D(DUK_DPRINT("debug command GetObjPropDesc")); + DUK_UNREF(heap); + + h = duk_debug_read_any_ptr(thr); + if (!h) { + duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNKNOWN, "invalid target"); + return; + } + h_key = duk_debug_read_hstring(thr); + if (h == NULL || DUK_HEAPHDR_GET_TYPE(h) != DUK_HTYPE_OBJECT || h_key == NULL) { + goto fail_args; + } + h_obj = (duk_hobject *) h; + + if (duk_hobject_get_own_propdesc(thr, h_obj, h_key, &desc, 0 /*flags*/)) { + duk_int_t virtual_idx; + duk_bool_t rc; + + /* To use the shared helper need the virtual index. */ + DUK_ASSERT(desc.e_idx >= 0 || desc.a_idx >= 0); + virtual_idx = (desc.a_idx >= 0 ? desc.a_idx : + (duk_int_t) DUK_HOBJECT_GET_ASIZE(h_obj) + desc.e_idx); + + duk_debug_write_reply(thr); + rc = duk__debug_getprop_index(thr, heap, h_obj, (duk_uint_t) virtual_idx); + DUK_ASSERT(rc == 1); + DUK_UNREF(rc); + duk_debug_write_eom(thr); } else { - duk_debug_write_int(thr, 0); - duk_debug_write_int(thr, 0); - duk_debug_write_cstring(thr, ""); + duk_debug_write_error_eom(thr, DUK_DBG_ERR_NOTFOUND, "not found"); + } + return; + + fail_args: + duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNKNOWN, "invalid args"); +} + +DUK_LOCAL void duk__debug_handle_get_obj_prop_desc_range(duk_hthread *thr, duk_heap *heap) { + duk_heaphdr *h; + duk_hobject *h_obj; + duk_uint_t idx, idx_start, idx_end; + + DUK_D(DUK_DPRINT("debug command GetObjPropDescRange")); + DUK_UNREF(heap); + + h = duk_debug_read_any_ptr(thr); + idx_start = duk_debug_read_int(thr); + idx_end = duk_debug_read_int(thr); + if (h == NULL || DUK_HEAPHDR_GET_TYPE(h) != DUK_HTYPE_OBJECT) { + goto fail_args; + } + h_obj = (duk_hobject *) h; + + /* The index range space is conceptually the array part followed by the + * entry part. Unlike normal enumeration all slots are exposed here as + * is and return 'unused' if the slots are not in active use. In particular + * the array part is included for the full a_size regardless of what the + * array .length is. + */ + + duk_debug_write_reply(thr); + for (idx = idx_start; idx < idx_end; idx++) { + if (!duk__debug_getprop_index(thr, heap, h_obj, idx)) { + break; + } } duk_debug_write_eom(thr); + return; + + fail_args: + duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNKNOWN, "invalid args"); } +#endif /* DUK_USE_DEBUGGER_INSPECT */ + +/* + * Process incoming debug requests + * + * Individual request handlers can push temporaries on the value stack and + * rely on duk__debug_process_message() to restore the value stack top + * automatically. + */ + /* Process one debug message. Automatically restore value stack top to its * entry value, so that individual message handlers don't need exact value * stack handling which is convenient. @@ -41706,7 +39181,7 @@ DUK_LOCAL void duk__debug_process_message(duk_hthread *thr) { x = duk_debug_read_byte(thr); switch (x) { - case DUK_DBG_MARKER_REQUEST: { + case DUK_DBG_IB_REQUEST: { cmd = duk_debug_read_int(thr); switch (cmd) { case DUK_DBG_CMD_BASICINFO: { @@ -41781,6 +39256,24 @@ DUK_LOCAL void duk__debug_process_message(duk_hthread *thr) { duk__debug_handle_get_bytecode(thr, heap); break; } + case DUK_DBG_CMD_APPREQUEST: { + duk__debug_handle_apprequest(thr, heap); + break; + } +#if defined(DUK_USE_DEBUGGER_INSPECT) + case DUK_DBG_CMD_GETHEAPOBJINFO: { + duk__debug_handle_get_heap_obj_info(thr, heap); + break; + } + case DUK_DBG_CMD_GETOBJPROPDESC: { + duk__debug_handle_get_obj_prop_desc(thr, heap); + break; + } + case DUK_DBG_CMD_GETOBJPROPDESCRANGE: { + duk__debug_handle_get_obj_prop_desc_range(thr, heap); + break; + } +#endif /* DUK_USE_DEBUGGER_INSPECT */ default: { DUK_D(DUK_DPRINT("debug command unsupported: %d", (int) cmd)); duk_debug_write_error_eom(thr, DUK_DBG_ERR_UNSUPPORTED, "unsupported command"); @@ -41788,15 +39281,15 @@ DUK_LOCAL void duk__debug_process_message(duk_hthread *thr) { } /* switch cmd */ break; } - case DUK_DBG_MARKER_REPLY: { + case DUK_DBG_IB_REPLY: { DUK_D(DUK_DPRINT("debug reply, skipping")); break; } - case DUK_DBG_MARKER_ERROR: { + case DUK_DBG_IB_ERROR: { DUK_D(DUK_DPRINT("debug error, skipping")); break; } - case DUK_DBG_MARKER_NOTIFY: { + case DUK_DBG_IB_NOTIFY: { DUK_D(DUK_DPRINT("debug notify, skipping")); break; } @@ -41818,6 +39311,134 @@ DUK_LOCAL void duk__debug_process_message(duk_hthread *thr) { return; } +DUK_LOCAL void duk__check_resend_status(duk_hthread *thr) { + if (thr->heap->dbg_read_cb != NULL && thr->heap->dbg_state_dirty) { + duk_debug_send_status(thr); + thr->heap->dbg_state_dirty = 0; + } +} + +DUK_INTERNAL duk_bool_t duk_debug_process_messages(duk_hthread *thr, duk_bool_t no_block) { + duk_context *ctx = (duk_context *) thr; +#if defined(DUK_USE_ASSERTIONS) + duk_idx_t entry_top; +#endif + duk_bool_t retval = 0; + + DUK_ASSERT(thr != NULL); + DUK_UNREF(ctx); + DUK_ASSERT(thr->heap != NULL); +#if defined(DUK_USE_ASSERTIONS) + entry_top = duk_get_top(ctx); +#endif + + DUK_D(DUK_DPRINT("process debug messages: read_cb=%s, no_block=%ld, detaching=%ld, processing=%ld", + thr->heap->dbg_read_cb ? "not NULL" : "NULL", (long) no_block, + (long) thr->heap->dbg_detaching, (long) thr->heap->dbg_processing)); + DUK_DD(DUK_DDPRINT("top at entry: %ld", (long) duk_get_top(ctx))); + + /* thr->heap->dbg_detaching may be != 0 if a debugger write outside + * the message loop caused a transport error and detach1() to run. + */ + DUK_ASSERT(thr->heap->dbg_detaching == 0 || thr->heap->dbg_detaching == 1); + DUK_ASSERT(thr->heap->dbg_processing == 0); + thr->heap->dbg_processing = 1; + + /* Ensure dirty state causes a Status even if never process any + * messages. This is expected by the bytecode executor when in + * the running state. + */ + duk__check_resend_status(thr); + + for (;;) { + /* Process messages until we're no longer paused or we peek + * and see there's nothing to read right now. + */ + DUK_DD(DUK_DDPRINT("top at loop top: %ld", (long) duk_get_top(ctx))); + DUK_ASSERT(thr->heap->dbg_processing == 1); + + while (thr->heap->dbg_read_cb == NULL && thr->heap->dbg_detaching) { + /* Detach is pending; can be triggered from outside the + * debugger loop (e.g. Status notify write error) or by + * previous message handling. Call detached callback + * here, in a controlled state, to ensure a possible + * reattach inside the detached_cb is handled correctly. + * + * Recheck for detach in a while loop: an immediate + * reattach involves a call to duk_debugger_attach() + * which writes a debugger handshake line immediately + * inside the API call. If the transport write fails + * for that handshake, we can immediately end up in a + * "transport broken, detaching" case several times here. + * Loop back until we're either cleanly attached or + * fully detached. + * + * NOTE: Reset dbg_processing = 1 forcibly, in case we + * re-attached; duk_debugger_attach() sets dbg_processing + * to 0 at the moment. + */ + + DUK_D(DUK_DPRINT("detach pending (dbg_read_cb == NULL, dbg_detaching != 0), call detach2")); + + duk__debug_do_detach2(thr->heap); + thr->heap->dbg_processing = 1; /* may be set to 0 by duk_debugger_attach() inside callback */ + + DUK_D(DUK_DPRINT("after detach2 (and possible reattach): dbg_read_cb=%s, dbg_detaching=%ld", + thr->heap->dbg_read_cb ? "not NULL" : "NULL", (long) thr->heap->dbg_detaching)); + } + DUK_ASSERT(thr->heap->dbg_detaching == 0); /* true even with reattach */ + DUK_ASSERT(thr->heap->dbg_processing == 1); /* even after a detach and possible reattach */ + + if (thr->heap->dbg_read_cb == NULL) { + DUK_D(DUK_DPRINT("debug connection broken (and not detaching), stop processing messages")); + break; + } + + if (!thr->heap->dbg_paused || no_block) { + if (!duk_debug_read_peek(thr)) { + /* Note: peek cannot currently trigger a detach + * so the dbg_detaching == 0 assert outside the + * loop is correct. + */ + DUK_D(DUK_DPRINT("processing debug message, peek indicated no data, stop processing messages")); + break; + } + DUK_D(DUK_DPRINT("processing debug message, peek indicated there is data, handle it")); + } else { + DUK_D(DUK_DPRINT("paused, process debug message, blocking if necessary")); + } + + duk__check_resend_status(thr); + duk__debug_process_message(thr); + duk__check_resend_status(thr); + + retval = 1; /* processed one or more messages */ + } + + DUK_ASSERT(thr->heap->dbg_detaching == 0); + DUK_ASSERT(thr->heap->dbg_processing == 1); + thr->heap->dbg_processing = 0; + + /* As an initial implementation, read flush after exiting the message + * loop. If transport is broken, this is a no-op (with debug logs). + */ + duk_debug_read_flush(thr); /* this cannot initiate a detach */ + DUK_ASSERT(thr->heap->dbg_detaching == 0); + + DUK_DD(DUK_DDPRINT("top at exit: %ld", (long) duk_get_top(ctx))); + +#if defined(DUK_USE_ASSERTIONS) + /* Easy to get wrong, so assert for it. */ + DUK_ASSERT(entry_top == duk_get_top(ctx)); +#endif + + return retval; +} + +/* + * Halt execution helper + */ + /* Halt execution and enter a debugger message loop until execution is resumed * by the client. PC for the current activation may be temporarily decremented * so that the "current" instruction will be shown by the client. This helper @@ -41862,18 +39483,17 @@ DUK_INTERNAL void duk_debug_halt_execution(duk_hthread *thr, duk_bool_t use_prev /* Process debug messages until we are no longer paused. */ - /* NOTE: This is a bit fragile. It's important to ensure that neither - * duk_debug_send_status() or duk_debug_process_messages() throws an - * error or act->curr_pc will never be reset. + /* NOTE: This is a bit fragile. It's important to ensure that + * duk_debug_process_messages() never throws an error or + * act->curr_pc will never be reset. */ - thr->heap->dbg_processing = 1; - duk_debug_send_status(thr); + thr->heap->dbg_state_dirty = 1; while (thr->heap->dbg_paused) { + DUK_ASSERT(DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)); DUK_ASSERT(thr->heap->dbg_processing); duk_debug_process_messages(thr, 0 /*no_block*/); } - thr->heap->dbg_processing = 0; /* XXX: Decrementing and restoring act->curr_pc works now, but if the * debugger message loop gains the ability to adjust the current PC @@ -41887,79 +39507,6 @@ DUK_INTERNAL void duk_debug_halt_execution(duk_hthread *thr, duk_bool_t use_prev } } -DUK_INTERNAL duk_bool_t duk_debug_process_messages(duk_hthread *thr, duk_bool_t no_block) { - duk_context *ctx = (duk_context *) thr; -#if defined(DUK_USE_ASSERTIONS) - duk_idx_t entry_top; -#endif - duk_bool_t retval = 0; - - DUK_ASSERT(thr != NULL); - DUK_UNREF(ctx); - DUK_ASSERT(thr->heap != NULL); - DUK_ASSERT(DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)); -#if defined(DUK_USE_ASSERTIONS) - entry_top = duk_get_top(ctx); -#endif - - DUK_DD(DUK_DDPRINT("top at entry: %ld", (long) duk_get_top(ctx))); - - for (;;) { - /* Process messages until we're no longer paused or we peek - * and see there's nothing to read right now. - */ - DUK_DD(DUK_DDPRINT("top at loop top: %ld", (long) duk_get_top(ctx))); - - if (thr->heap->dbg_read_cb == NULL) { - DUK_D(DUK_DPRINT("debug connection broken, stop processing messages")); - break; - } else if (!thr->heap->dbg_paused || no_block) { - if (!duk_debug_read_peek(thr)) { - DUK_D(DUK_DPRINT("processing debug message, peek indicated no data, stop processing")); - break; - } - DUK_D(DUK_DPRINT("processing debug message, peek indicated there is data, handle it")); - } else { - DUK_D(DUK_DPRINT("paused, process debug message, blocking if necessary")); - } - - duk__debug_process_message(thr); - - if (thr->heap->dbg_read_cb == NULL) { - /* Became detached during message handling (perhaps because - * of an error or by an explicit Detach). Call detached - * callback here, between messages, to avoid confusing the - * broken connection and a possible replacement (which may - * be provided by an instant reattach inside the detached - * callback). - */ - duk__debug_do_detach2(thr->heap); - } - if (thr->heap->dbg_state_dirty) { - /* Executed something that may have affected status, - * resend. - */ - duk_debug_send_status(thr); - thr->heap->dbg_state_dirty = 0; - } - retval = 1; /* processed one or more messages */ - } - - /* As an initial implementation, read flush after exiting the message - * loop. - */ - duk_debug_read_flush(thr); - - DUK_DD(DUK_DDPRINT("top at exit: %ld", (long) duk_get_top(ctx))); - -#if defined(DUK_USE_ASSERTIONS) - /* Easy to get wrong, so assert for it. */ - DUK_ASSERT(entry_top == duk_get_top(ctx)); -#endif - - return retval; -} - /* * Breakpoint management */ @@ -42381,6 +39928,7 @@ DUK_LOCAL void duk__add_fileline(duk_hthread *thr, duk_hthread *thr_callstack, c duk_hobject *func; duk_uint32_t pc; + DUK_UNREF(pc); act = thr_callstack->callstack + i; DUK_ASSERT(act >= thr_callstack->callstack && act < thr_callstack->callstack + thr_callstack->callstack_size); @@ -42620,18 +40168,20 @@ DUK_INTERNAL void duk_err_augment_error_throw(duk_hthread *thr) { DUK_INTERNAL void duk_err_longjmp(duk_hthread *thr) { DUK_ASSERT(thr != NULL); -#if defined(DUK_USE_CPP_EXCEPTIONS) - /* XXX: detecting uncaught exception case for C++ case; perhaps need - * some marker in heap->lj state that a try-catch is active. For now, - * invokes C++ uncaught exception handling. + DUK_DD(DUK_DDPRINT("longjmp error: type=%d iserror=%d value1=%!T value2=%!T", + (int) thr->heap->lj.type, (int) thr->heap->lj.iserror, + &thr->heap->lj.value1, &thr->heap->lj.value2)); + +#if !defined(DUK_USE_CPP_EXCEPTIONS) + /* If we don't have a jmpbuf_ptr, there is little we can do + * except panic. The caller's expectation is that we never + * return. + * + * With C++ exceptions we now just propagate an uncaught error + * instead of invoking the fatal error handler. Because there's + * a dummy jmpbuf for C++ exceptions now, this could be changed. */ -#else if (!thr->heap->lj.jmpbuf_ptr) { - /* - * If we don't have a jmpbuf_ptr, there is little we can do - * except panic. The caller's expectation is that we never - * return. - */ DUK_D(DUK_DPRINT("uncaught error: type=%d iserror=%d value1=%!T value2=%!T", (int) thr->heap->lj.type, (int) thr->heap->lj.iserror, @@ -42640,16 +40190,17 @@ DUK_INTERNAL void duk_err_longjmp(duk_hthread *thr) { duk_fatal((duk_context *) thr, DUK_ERR_UNCAUGHT_ERROR, "uncaught error"); DUK_UNREACHABLE(); } -#endif +#endif /* DUK_USE_CPP_EXCEPTIONS */ #if defined(DUK_USE_CPP_EXCEPTIONS) { duk_internal_exception exc; /* dummy */ throw exc; } -#else +#else /* DUK_USE_CPP_EXCEPTIONS */ DUK_LONGJMP(thr->heap->lj.jmpbuf_ptr->jb); -#endif +#endif /* DUK_USE_CPP_EXCEPTIONS */ + DUK_UNREACHABLE(); } #line 1 "duk_error_misc.c" @@ -43001,7 +40552,7 @@ DUK_INTERNAL duk_hbuffer *duk_hbuffer_alloc(duk_heap *heap, duk_size_t size, duk if (flags & DUK_BUF_FLAG_EXTERNAL) { header_size = sizeof(duk_hbuffer_external); alloc_size = sizeof(duk_hbuffer_external); - } if (flags & DUK_BUF_FLAG_DYNAMIC) { + } else if (flags & DUK_BUF_FLAG_DYNAMIC) { header_size = sizeof(duk_hbuffer_dynamic); alloc_size = sizeof(duk_hbuffer_dynamic); } else { @@ -43132,7 +40683,7 @@ DUK_INTERNAL void duk_hbuffer_resize(duk_hthread *thr, duk_hbuffer_dynamic *buf, */ if (new_size > DUK_HBUFFER_MAX_BYTELEN) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, "buffer too long"); + DUK_ERROR_RANGE(thr, "buffer too long"); } /* @@ -43169,9 +40720,7 @@ DUK_INTERNAL void duk_hbuffer_resize(duk_hthread *thr, duk_hbuffer_dynamic *buf, DUK_HBUFFER_DYNAMIC_SET_SIZE(buf, new_size); DUK_HBUFFER_DYNAMIC_SET_DATA_PTR(thr->heap, buf, res); } else { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, "buffer resize failed: %ld to %ld", - (long) DUK_HBUFFER_DYNAMIC_GET_SIZE(buf), - (long) new_size); + DUK_ERROR_ALLOC_DEFMSG(thr); } DUK_ASSERT(res != NULL || new_size == 0); @@ -43213,7 +40762,7 @@ DUK_INTERNAL duk_uint_t duk_hbufferobject_clamp_bytelength(duk_hbufferobject *h_ /* include removed: duk_internal.h */ -/* constants for built-in string data depacking */ +/* Constants for built-in string data depacking. */ #define DUK__BITPACK_LETTER_LIMIT 26 #define DUK__BITPACK_UNDERSCORE 26 #define DUK__BITPACK_FF 27 @@ -43221,6 +40770,11 @@ DUK_INTERNAL duk_uint_t duk_hbufferobject_clamp_bytelength(duk_hbufferobject *h_ #define DUK__BITPACK_SWITCH 30 #define DUK__BITPACK_SEVENBIT 31 +#if defined(DUK_USE_ROM_STRINGS) +/* Fixed seed value used with ROM strings. */ +#define DUK__FIXED_HASH_SEED 0xabcd1234 +#endif + /* * Free a heap object. * @@ -43389,6 +40943,7 @@ DUK_LOCAL void duk__free_run_finalizers(duk_heap *heap) { DUK_ASSERT(heap != NULL); DUK_ASSERT(heap->heap_thread != NULL); + #if defined(DUK_USE_REFERENCE_COUNTING) DUK_ASSERT(heap->refzero_list == NULL); /* refzero not running -> must be empty */ #endif @@ -43404,7 +40959,7 @@ DUK_LOCAL void duk__free_run_finalizers(duk_heap *heap) { /* Prevent mark-and-sweep for the pending finalizers, also prevents * refzero handling from moving objects away from the heap_allocated - * list. + * list. (The flag meaning is slightly abused here.) */ DUK_ASSERT(!DUK_HEAP_HAS_MARKANDSWEEP_RUNNING(heap)); DUK_HEAP_SET_MARKANDSWEEP_RUNNING(heap); @@ -43546,10 +41101,35 @@ DUK_INTERNAL void duk_heap_free(duk_heap *heap) { /* * Allocate a heap. * - * String table is initialized with built-in strings from genstrings.py. + * String table is initialized with built-in strings from genbuiltins.py, + * either by dynamically creating the strings or by referring to ROM strings. */ -/* intern built-in strings from precooked data (genstrings.py) */ +#if defined(DUK_USE_ROM_STRINGS) +DUK_LOCAL duk_bool_t duk__init_heap_strings(duk_heap *heap) { +#if defined(DUK_USE_ASSERTIONS) + duk_small_uint_t i; +#endif + + /* With ROM-based strings, heap->strs[] and thr->strs[] are omitted + * so nothing to initialize for strs[]. + */ + +#if defined(DUK_USE_ASSERTIONS) + for (i = 0; i < sizeof(duk_rom_strings) / sizeof(const duk_hstring *); i++) { + duk_uint32_t hash; + const duk_hstring *h; + h = duk_rom_strings[i]; + DUK_ASSERT(h != NULL); + hash = duk_heap_hashstring(heap, (const duk_uint8_t *) DUK_HSTRING_GET_DATA(h), DUK_HSTRING_GET_BYTELEN(h)); + DUK_DD(DUK_DDPRINT("duk_rom_strings[%d] -> hash 0x%08lx, computed 0x%08lx", + (int) i, (unsigned long) DUK_HSTRING_GET_HASH(h), (unsigned long) hash)); + DUK_ASSERT(hash == (duk_uint32_t) DUK_HSTRING_GET_HASH(h)); + } +#endif + return 1; +} +#else /* DUK_USE_ROM_STRINGS */ DUK_LOCAL duk_bool_t duk__init_heap_strings(duk_heap *heap) { duk_bitdecoder_ctx bd_ctx; duk_bitdecoder_ctx *bd = &bd_ctx; /* convenience */ @@ -43605,6 +41185,7 @@ DUK_LOCAL duk_bool_t duk__init_heap_strings(duk_heap *heap) { if (!h) { goto error; } + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) h)); /* Special flags checks. Since these strings are always * reachable and a string cannot appear twice in the string @@ -43640,6 +41221,7 @@ DUK_LOCAL duk_bool_t duk__init_heap_strings(duk_heap *heap) { error: return 0; } +#endif /* DUK_USE_ROM_STRINGS */ DUK_LOCAL duk_bool_t duk__init_heap_thread(duk_heap *heap) { duk_hthread *thr; @@ -43654,11 +41236,15 @@ DUK_LOCAL duk_bool_t duk__init_heap_thread(duk_heap *heap) { return 0; } thr->state = DUK_HTHREAD_STATE_INACTIVE; +#if defined(DUK_USE_ROM_STRINGS) + /* No strs[] pointer. */ +#else /* DUK_USE_ROM_STRINGS */ #if defined(DUK_USE_HEAPPTR16) thr->strs16 = heap->strs16; #else thr->strs = heap->strs; #endif +#endif /* DUK_USE_ROM_STRINGS */ heap->heap_thread = thr; DUK_HTHREAD_INCREF(thr, thr); /* Note: first argument not really used */ @@ -43774,9 +41360,7 @@ DUK_LOCAL void duk__dump_type_sizes(void) { DUK__DUMPSZ(duk_tval); /* structs from duk_forwdecl.h */ -#if !defined(DUK_USE_CPP_EXCEPTIONS) - DUK__DUMPSZ(duk_jmpbuf); -#endif + DUK__DUMPSZ(duk_jmpbuf); /* just one 'int' for C++ exceptions */ DUK__DUMPSZ(duk_heaphdr); DUK__DUMPSZ(duk_heaphdr_string); DUK__DUMPSZ(duk_hstring); @@ -44002,8 +41586,11 @@ duk_heap *duk_heap_alloc(duk_alloc_function alloc_func, res->strtable = (duk_hstring **) NULL; #endif #endif +#if defined(DUK_USE_ROM_STRINGS) + /* no res->strs[] */ +#else /* DUK_USE_ROM_STRINGS */ #if defined(DUK_USE_HEAPPTR16) -/* res->strs16[] is zeroed and zero decodes to NULL, so no NULL inits. */ + /* res->strs16[] is zeroed and zero decodes to NULL, so no NULL inits. */ #else { duk_small_uint_t i; @@ -44012,12 +41599,14 @@ duk_heap *duk_heap_alloc(duk_alloc_function alloc_func, } } #endif +#endif /* DUK_USE_ROM_STRINGS */ #if defined(DUK_USE_DEBUGGER_SUPPORT) res->dbg_read_cb = NULL; res->dbg_write_cb = NULL; res->dbg_peek_cb = NULL; res->dbg_read_flush_cb = NULL; res->dbg_write_flush_cb = NULL; + res->dbg_request_cb = NULL; res->dbg_udata = NULL; res->dbg_step_thread = NULL; #endif @@ -44048,11 +41637,17 @@ duk_heap *duk_heap_alloc(duk_alloc_function alloc_func, * * This still generates a /Wp64 warning on VS2010 when compiling for x86. */ +#if defined(DUK_USE_ROM_STRINGS) + /* XXX: make a common DUK_USE_ option, and allow custom fixed seed? */ + DUK_D(DUK_DPRINT("using rom strings, force heap hash_seed to fixed value 0x%08lx", (long) DUK__FIXED_HASH_SEED)); + res->hash_seed = (duk_uint32_t) DUK__FIXED_HASH_SEED; +#else /* DUK_USE_ROM_STRINGS */ res->hash_seed = (duk_uint32_t) (duk_intptr_t) res; res->rnd_state = (duk_uint32_t) (duk_intptr_t) res; #if !defined(DUK_USE_STRHASH_DENSE) res->hash_seed ^= 5381; /* Bernstein hash init value is normally 5381; XOR it in in case pointer low bits are 0 */ #endif +#endif /* DUK_USE_ROM_STRINGS */ #if defined(DUK_USE_EXPLICIT_NULL_INIT) res->lj.jmpbuf_ptr = NULL; @@ -44195,6 +41790,14 @@ duk_heap *duk_heap_alloc(duk_alloc_function alloc_func, } return NULL; } + +#undef DUK__BITPACK_LETTER_LIMIT +#undef DUK__BITPACK_UNDERSCORE +#undef DUK__BITPACK_FF +#undef DUK__BITPACK_SWITCH1 +#undef DUK__BITPACK_SWITCH +#undef DUK__BITPACK_SEVENBIT +#undef DUK__FIXED_HASH_SEED #line 1 "duk_heap_hashstring.c" /* * String hash computation (interning). @@ -44210,11 +41813,15 @@ duk_heap *duk_heap_alloc(duk_alloc_function alloc_func, * hash tables work reasonably well (i.e., there aren't too many collisions * with real world inputs). Unless the hash is cryptographic, it's always * possible to craft inputs with maximal hash collisions. + * + * NOTE: The hash algorithms must match src/dukutil.py:duk_heap_hashstring() + * for ROM string support! */ /* include removed: duk_internal.h */ #if defined(DUK_USE_STRHASH_DENSE) +/* Constants for duk_hashstring(). */ #define DUK__STRHASH_SHORTSTRING 4096L #define DUK__STRHASH_MEDIUMSTRING (256L * 1024L) #define DUK__STRHASH_BLOCKSIZE 256L @@ -44458,7 +42065,12 @@ DUK_LOCAL void duk__mark_heaphdr(duk_heap *heap, duk_heaphdr *h) { if (!h) { return; } - +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY(h)) { + DUK_DDD(DUK_DDDPRINT("readonly object %p, skip", (void *) h)); + return; + } +#endif if (DUK_HEAPHDR_HAS_REACHABLE(h)) { DUK_DDD(DUK_DDDPRINT("already marked reachable, skip")); return; @@ -44601,6 +42213,7 @@ DUK_LOCAL void duk__mark_finalizable(duk_heap *heap) { "finalized -> mark as finalizable " "and treat as a reachability root: %p", (void *) hdr)); + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY(hdr)); DUK_HEAPHDR_SET_FINALIZABLE(hdr); count_finalizable ++; } @@ -45036,8 +42649,9 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_int_t flags, duk_size_t *out_ curr = heap->heap_allocated; heap->heap_allocated = NULL; while (curr) { - /* strings are never placed on the heap allocated list */ + /* Strings and ROM objects are never placed on the heap allocated list. */ DUK_ASSERT(DUK_HEAPHDR_GET_TYPE(curr) != DUK_HTYPE_STRING); + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY(curr)); next = DUK_HEAPHDR_GET_NEXT(heap, curr); @@ -45067,6 +42681,7 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_int_t flags, duk_size_t *out_ DUK_HEAPHDR_SET_PREV(heap, curr, NULL); #endif DUK_HEAPHDR_SET_NEXT(heap, curr, heap->finalize_list); + DUK_ASSERT_HEAPHDR_LINKS(heap, curr); heap->finalize_list = curr; #ifdef DUK_USE_DEBUG count_finalize++; @@ -45092,6 +42707,7 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_int_t flags, duk_size_t *out_ /* * Plain, boring reachable object. */ + DUK_DD(DUK_DDPRINT("keep object: %!iO", curr)); count_keep++; } @@ -45104,6 +42720,8 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_int_t flags, duk_size_t *out_ #ifdef DUK_USE_DOUBLE_LINKED_HEAP DUK_HEAPHDR_SET_PREV(heap, curr, prev); #endif + DUK_ASSERT_HEAPHDR_LINKS(heap, prev); + DUK_ASSERT_HEAPHDR_LINKS(heap, curr); prev = curr; } @@ -45158,6 +42776,7 @@ DUK_LOCAL void duk__sweep_heap(duk_heap *heap, duk_int_t flags, duk_size_t *out_ if (prev) { DUK_HEAPHDR_SET_NEXT(heap, prev, NULL); } + DUK_ASSERT_HEAPHDR_LINKS(heap, prev); #ifdef DUK_USE_DEBUG DUK_D(DUK_DPRINT("mark-and-sweep sweep objects (non-string): %ld freed, %ld kept, %ld rescued, %ld queued for finalization", @@ -45192,6 +42811,7 @@ DUK_LOCAL void duk__run_object_finalizers(duk_heap *heap, duk_small_uint_t flags DUK_ASSERT(!DUK_HEAPHDR_HAS_TEMPROOT(curr)); DUK_ASSERT(!DUK_HEAPHDR_HAS_FINALIZABLE(curr)); DUK_ASSERT(!DUK_HEAPHDR_HAS_FINALIZED(curr)); + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY(curr)); /* No finalizers for ROM objects */ if (DUK_LIKELY((flags & DUK_MS_FLAG_SKIP_FINALIZERS) == 0)) { /* Run the finalizer, duk_hobject_run_finalizer() sets FINALIZED. @@ -45457,12 +43077,14 @@ DUK_INTERNAL duk_bool_t duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t * If we don't have a thread, the entire mark-and-sweep is now * skipped (although we could just skip finalizations). */ - /* XXX: if thr != NULL, the thr may still be in the middle of - * initialization; improve the thread viability test. + + /* If thr != NULL, the thr may still be in the middle of + * initialization. + * XXX: Improve the thread viability test. */ thr = duk__get_temp_hthread(heap); if (thr == NULL) { - DUK_D(DUK_DPRINT("temporary hack: gc skipped because we don't have a temp thread")); + DUK_D(DUK_DPRINT("gc skipped because we don't have a temp thread")); /* reset voluntary gc trigger count */ #ifdef DUK_USE_VOLUNTARY_GC @@ -45471,6 +43093,22 @@ DUK_INTERNAL duk_bool_t duk_heap_mark_and_sweep(duk_heap *heap, duk_small_uint_t return 0; /* OK */ } + /* If debugger is paused, garbage collection is disabled by default. */ + /* XXX: will need a force flag if garbage collection is triggered + * explicitly during paused state. + */ +#if defined(DUK_USE_DEBUGGER_SUPPORT) + if (DUK_HEAP_IS_PAUSED(heap)) { + /* Checking this here rather that in memory alloc primitives + * reduces checking code there but means a failed allocation + * will go through a few retries before giving up. That's + * fine because this only happens during debugging. + */ + DUK_D(DUK_DPRINT("gc skipped because debugger is paused")); + return 0; + } +#endif + DUK_D(DUK_DPRINT("garbage collect (mark-and-sweep) starting, requested flags: 0x%08lx, effective flags: 0x%08lx", (unsigned long) flags, (unsigned long) (flags | heap->mark_and_sweep_base_flags))); @@ -46104,6 +43742,11 @@ DUK_INTERNAL void duk_heap_remove_any_from_heap_allocated(duk_heap *heap, duk_he } else { ; } + + /* The prev/next pointers of the removed duk_heaphdr are left as garbage. + * It's up to the caller to ensure they're written before inserting the + * object back. + */ } #endif @@ -46185,11 +43828,14 @@ DUK_LOCAL void duk__queue_refzero(duk_heap *heap, duk_heaphdr *hdr) { DUK_HEAPHDR_SET_NEXT(heap, hdr, NULL); DUK_HEAPHDR_SET_PREV(heap, hdr, hdr_prev); DUK_HEAPHDR_SET_NEXT(heap, hdr_prev, hdr); + DUK_ASSERT_HEAPHDR_LINKS(heap, hdr); + DUK_ASSERT_HEAPHDR_LINKS(heap, hdr_prev); heap->refzero_list_tail = hdr; } else { DUK_ASSERT(heap->refzero_list_tail == NULL); DUK_HEAPHDR_SET_NEXT(heap, hdr, NULL); DUK_HEAPHDR_SET_PREV(heap, hdr, NULL); + DUK_ASSERT_HEAPHDR_LINKS(heap, hdr); heap->refzero_list = hdr; heap->refzero_list_tail = hdr; } @@ -46508,8 +44154,14 @@ DUK_LOCAL void duk__refzero_free_pending(duk_hthread *thr) { DUK_ASSERT(!DUK_HEAPHDR_HAS_FINALIZABLE(h1)); DUK_ASSERT(DUK_HEAPHDR_HAS_FINALIZED(h1)); DUK_HEAPHDR_CLEAR_FINALIZED(h1); + h2 = heap->heap_allocated; DUK_HEAPHDR_SET_PREV(heap, h1, NULL); - DUK_HEAPHDR_SET_NEXT(heap, h1, heap->heap_allocated); + if (h2) { + DUK_HEAPHDR_SET_PREV(heap, h2, h1); + } + DUK_HEAPHDR_SET_NEXT(heap, h1, h2); + DUK_ASSERT_HEAPHDR_LINKS(heap, h1); + DUK_ASSERT_HEAPHDR_LINKS(heap, h2); heap->heap_allocated = h1; } else { /* no -> decref members, then free */ @@ -46562,21 +44214,33 @@ DUK_INTERNAL void duk_heaphdr_refzero(duk_hthread *thr, duk_heaphdr *h) { DUK_DDD(DUK_DDDPRINT("refzero %p: %!O", (void *) h, (duk_heaphdr *) h)); /* - * If mark-and-sweep is running, don't process 'refzero' situations at all. - * They may happen because mark-and-sweep needs to finalize refcounts for - * each object it sweeps. Otherwise the target objects of swept objects - * would have incorrect refcounts. + * Refzero handling is skipped entirely if (1) mark-and-sweep is + * running or (2) execution is paused in the debugger. The objects + * are left in the heap, and will be freed by mark-and-sweep or + * eventual heap destruction. + * + * This is necessary during mark-and-sweep because refcounts are also + * updated during the sweep phase (otherwise objects referenced by a + * swept object would have incorrect refcounts) which then calls here. + * This could be avoided by using separate decref macros in + * mark-and-sweep; however, mark-and-sweep also calls finalizers which + * would use the ordinary decref macros anyway and still call this + * function. * * This check must be enabled also when mark-and-sweep support has been * disabled: the flag is also used in heap destruction when running * finalizers for remaining objects, and the flag prevents objects from * being moved around in heap linked lists. - * - * Note: mark-and-sweep could use a separate decref handler to avoid coming - * here at all. However, mark-and-sweep may also call finalizers, which - * can do arbitrary operations and would use this decref variant anyway. */ + + /* XXX: ideally this would be just one flag (maybe a derived one) so + * that a single bit test is sufficient to check the condition. + */ +#if defined(DUK_USE_DEBUGGER_SUPPORT) + if (DUK_UNLIKELY(DUK_HEAP_HAS_MARKANDSWEEP_RUNNING(heap) || DUK_HEAP_IS_PAUSED(heap))) { +#else if (DUK_UNLIKELY(DUK_HEAP_HAS_MARKANDSWEEP_RUNNING(heap))) { +#endif DUK_DDD(DUK_DDDPRINT("refzero handling suppressed when mark-and-sweep running, object: %p", (void *) h)); return; } @@ -46627,7 +44291,7 @@ DUK_INTERNAL void duk_heaphdr_refzero(duk_hthread *thr, duk_heaphdr *h) { DUK_INTERNAL void duk_tval_incref(duk_tval *tv) { DUK_ASSERT(tv != NULL); - if (DUK_TVAL_IS_HEAP_ALLOCATED(tv)) { + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv)) { duk_heaphdr *h = DUK_TVAL_GET_HEAPHDR(tv); DUK_ASSERT(h != NULL); DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h)); @@ -46642,7 +44306,7 @@ DUK_INTERNAL void duk_tval_incref_allownull(duk_tval *tv) { if (tv == NULL) { return; } - if (DUK_TVAL_IS_HEAP_ALLOCATED(tv)) { + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv)) { duk_heaphdr *h = DUK_TVAL_GET_HEAPHDR(tv); DUK_ASSERT(h != NULL); DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h)); @@ -46656,7 +44320,7 @@ DUK_INTERNAL void duk_tval_decref(duk_hthread *thr, duk_tval *tv) { DUK_ASSERT(thr != NULL); DUK_ASSERT(tv != NULL); - if (DUK_TVAL_IS_HEAP_ALLOCATED(tv)) { + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv)) { duk_heaphdr *h = DUK_TVAL_GET_HEAPHDR(tv); DUK_ASSERT(h != NULL); DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h)); @@ -46671,7 +44335,7 @@ DUK_INTERNAL void duk_tval_decref_allownull(duk_hthread *thr, duk_tval *tv) { if (tv == NULL) { return; } - if (DUK_TVAL_IS_HEAP_ALLOCATED(tv)) { + if (DUK_TVAL_NEEDS_REFCOUNT_UPDATE(tv)) { duk_heaphdr *h = DUK_TVAL_GET_HEAPHDR(tv); DUK_ASSERT(h != NULL); DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h)); @@ -46709,6 +44373,11 @@ DUK_INTERNAL void duk_heaphdr_decref(duk_hthread *thr, duk_heaphdr *h) { DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h)); DUK_ASSERT(DUK_HEAPHDR_GET_REFCOUNT(h) >= 1); +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY(h)) { + return; + } +#endif if (DUK_HEAPHDR_PREDEC_REFCOUNT(h) != 0) { return; } @@ -46722,10 +44391,14 @@ DUK_INTERNAL void duk_heaphdr_decref_allownull(duk_hthread *thr, duk_heaphdr *h) if (h == NULL) { return; } - DUK_ASSERT(DUK_HEAPHDR_HTYPE_VALID(h)); - DUK_ASSERT(DUK_HEAPHDR_GET_REFCOUNT(h) >= 1); +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY(h)) { + return; + } +#endif + DUK_ASSERT(DUK_HEAPHDR_GET_REFCOUNT(h) >= 1); if (DUK_HEAPHDR_PREDEC_REFCOUNT(h) != 0) { return; } @@ -47033,7 +44706,7 @@ DUK_INTERNAL duk_uint_fast32_t duk_heap_strcache_offset_char2byte(duk_hthread *t return byte_offset; error: - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, "string scan error"); + DUK_ERROR_INTERNAL_DEFMSG(thr); return 0; } #line 1 "duk_heap_stringtable.c" @@ -47109,6 +44782,7 @@ duk_hstring *duk__alloc_init_hstring(duk_heap *heap, data[blen] = (duk_uint8_t) 0; } + DUK_ASSERT(!DUK_HSTRING_HAS_ARRIDX(res)); if (duk_js_to_arrayindex_raw_string(str, blen, &dummy)) { DUK_HSTRING_SET_ARRIDX(res); } @@ -47120,22 +44794,35 @@ duk_hstring *duk__alloc_init_hstring(duk_heap *heap, * (such as string has already been interned and has the 'internal' * flag set). */ + DUK_ASSERT(!DUK_HSTRING_HAS_INTERNAL(res)); if (blen > 0 && str[0] == (duk_uint8_t) 0xff) { DUK_HSTRING_SET_INTERNAL(res); } DUK_HSTRING_SET_HASH(res, strhash); DUK_HSTRING_SET_BYTELEN(res, blen); + clen = (duk_uint32_t) duk_unicode_unvalidated_utf8_length(str, (duk_size_t) blen); DUK_ASSERT(clen <= blen); +#if defined(DUK_USE_HSTRING_CLEN) DUK_HSTRING_SET_CHARLEN(res, clen); +#endif + + /* Using an explicit 'ASCII' flag has larger footprint (one call site + * only) but is quite useful for the case when there's no explicit + * 'clen' in duk_hstring. + */ + DUK_ASSERT(!DUK_HSTRING_HAS_ASCII(res)); + if (clen == blen) { + DUK_HSTRING_SET_ASCII(res); + } DUK_DDD(DUK_DDDPRINT("interned string, hash=0x%08lx, blen=%ld, clen=%ld, has_arridx=%ld, has_extdata=%ld", (unsigned long) DUK_HSTRING_GET_HASH(res), (long) DUK_HSTRING_GET_BYTELEN(res), (long) DUK_HSTRING_GET_CHARLEN(res), - (long) DUK_HSTRING_HAS_ARRIDX(res) ? 1 : 0, - (long) DUK_HSTRING_HAS_EXTDATA(res) ? 1 : 0)); + (long) (DUK_HSTRING_HAS_ARRIDX(res) ? 1 : 0), + (long) (DUK_HSTRING_HAS_EXTDATA(res) ? 1 : 0))); return res; @@ -47886,7 +45573,7 @@ DUK_LOCAL duk_hstring *duk__do_intern(duk_heap *heap, const duk_uint8_t *str, du #endif #if defined(DUK_USE_HSTRING_EXTDATA) && defined(DUK_USE_EXTSTR_INTERN_CHECK) - extdata = (const duk_uint8_t *) DUK_USE_EXTSTR_INTERN_CHECK(heap->heap_udata, (void *) str, (duk_size_t) blen); + extdata = (const duk_uint8_t *) DUK_USE_EXTSTR_INTERN_CHECK(heap->heap_udata, (void *) DUK_LOSE_CONST(str), (duk_size_t) blen); #else extdata = (const duk_uint8_t *) NULL; #endif @@ -47931,6 +45618,27 @@ DUK_LOCAL duk_hstring *duk__do_lookup(duk_heap *heap, const duk_uint8_t *str, du *out_strhash = duk_heap_hashstring(heap, str, (duk_size_t) blen); +#if defined(DUK_USE_ROM_STRINGS) + { + duk_small_uint_t i; + /* XXX: This is VERY inefficient now, and should be e.g. a + * binary search or perfect hash, to be fixed. + */ + for (i = 0; i < (duk_small_uint_t) (sizeof(duk_rom_strings) / sizeof(duk_hstring *)); i++) { + duk_hstring *romstr; + romstr = (duk_hstring *) DUK_LOSE_CONST(duk_rom_strings[i]); + if (blen == DUK_HSTRING_GET_BYTELEN(romstr) && + DUK_MEMCMP((const void *) str, (const void *) DUK_HSTRING_GET_DATA(romstr), blen) == 0) { + DUK_DD(DUK_DDPRINT("intern check: rom string: %!O, computed hash 0x%08lx, rom hash 0x%08lx", + romstr, (unsigned long) *out_strhash, (unsigned long) DUK_HSTRING_GET_HASH(romstr))); + DUK_ASSERT(*out_strhash == DUK_HSTRING_GET_HASH(romstr)); + *out_strhash = DUK_HSTRING_GET_HASH(romstr); + return romstr; + } + } + } +#endif /* DUK_USE_ROM_STRINGS */ + #if defined(DUK_USE_STRTAB_CHAIN) res = duk__find_matching_string_chain(heap, str, blen, *out_strhash); #elif defined(DUK_USE_STRTAB_PROBE) @@ -47981,7 +45689,7 @@ DUK_INTERNAL duk_hstring *duk_heap_string_intern(duk_heap *heap, const duk_uint8 DUK_INTERNAL duk_hstring *duk_heap_string_intern_checked(duk_hthread *thr, const duk_uint8_t *str, duk_uint32_t blen) { duk_hstring *res = duk_heap_string_intern(thr->heap, str, blen); if (!res) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, "failed to intern string"); + DUK_ERROR_ALLOC_DEFMSG(thr); } return res; } @@ -48007,7 +45715,7 @@ DUK_INTERNAL duk_hstring *duk_heap_string_intern_u32(duk_heap *heap, duk_uint32_ DUK_INTERNAL duk_hstring *duk_heap_string_intern_u32_checked(duk_hthread *thr, duk_uint32_t val) { duk_hstring *res = duk_heap_string_intern_u32(thr->heap, val); if (!res) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, "failed to intern string"); + DUK_ERROR_ALLOC_DEFMSG(thr); } return res; } @@ -48183,7 +45891,8 @@ DUK_LOCAL void duk__init_object_parts(duk_heap *heap, duk_hobject *obj, duk_uint DUK_HEAPHDR_SET_PREV(heap, &obj->hdr, NULL); #endif #endif - DUK_HEAP_INSERT_INTO_HEAP_ALLOCATED(heap, &obj->hdr); + DUK_ASSERT_HEAPHDR_LINKS(heap, &obj->hdr); + DUK_HEAP_INSERT_INTO_HEAP_ALLOCATED(heap, &obj->hdr); /* * obj->props is intentionally left as NULL, and duk_hobject_props.c must deal @@ -48343,7 +46052,7 @@ DUK_INTERNAL duk_hthread *duk_hthread_alloc(duk_heap *heap, duk_uint_t hobject_f DUK_INTERNAL duk_hobject *duk_hobject_alloc_checked(duk_hthread *thr, duk_uint_t hobject_flags) { duk_hobject *res = duk_hobject_alloc(thr->heap, hobject_flags); if (!res) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, "failed to allocate an object"); + DUK_ERROR_ALLOC_DEFMSG(thr); } return res; } @@ -49053,6 +46762,7 @@ DUK_INTERNAL void duk_hobject_run_finalizer(duk_hthread *thr, duk_hobject *obj) * may trigger an error (getter may throw one, for instance). */ + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); if (DUK_HEAPHDR_HAS_FINALIZED((duk_heaphdr *) obj)) { DUK_D(DUK_DPRINT("object already finalized, avoid running finalizer twice: %!O", obj)); return; @@ -49109,7 +46819,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_prototype_chain_contains(duk_hthread *thr, d if (ignore_loop) { break; } else { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_PROTOTYPE_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_PROTOTYPE_CHAIN_LIMIT); } } h = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, h); @@ -49460,9 +47170,6 @@ DUK_INTERNAL duk_uint_fast32_t duk_hobject_pc2line_query(duk_context *ctx, duk_i * Local prototypes */ -#define DUK__DESC_FLAG_PUSH_VALUE (1 << 0) /* push value to stack */ -#define DUK__DESC_FLAG_IGNORE_PROTOLOOP (1 << 1) /* don't throw for prototype loop */ - DUK_LOCAL_DECL duk_bool_t duk__check_arguments_map_for_get(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *temp_desc); DUK_LOCAL_DECL void duk__check_arguments_map_for_put(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *temp_desc, duk_bool_t throw_flag); DUK_LOCAL_DECL void duk__check_arguments_map_for_delete(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *temp_desc); @@ -49470,9 +47177,8 @@ DUK_LOCAL_DECL void duk__check_arguments_map_for_delete(duk_hthread *thr, duk_ho DUK_LOCAL_DECL duk_bool_t duk__handle_put_array_length_smaller(duk_hthread *thr, duk_hobject *obj, duk_uint32_t old_len, duk_uint32_t new_len, duk_bool_t force_flag, duk_uint32_t *out_result_len); DUK_LOCAL_DECL duk_bool_t duk__handle_put_array_length(duk_hthread *thr, duk_hobject *obj); -DUK_LOCAL_DECL duk_bool_t duk__get_property_desc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags); -DUK_LOCAL_DECL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_uint32_t arr_idx, duk_propdesc *out_desc, duk_small_uint_t flags); -DUK_LOCAL_DECL duk_bool_t duk__get_own_property_desc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags); +DUK_LOCAL_DECL duk_bool_t duk__get_propdesc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags); +DUK_LOCAL_DECL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_uint32_t arr_idx, duk_propdesc *out_desc, duk_small_uint_t flags); DUK_LOCAL duk_uint32_t duk__get_old_array_length(duk_hthread *thr, duk_hobject *obj, duk_propdesc *temp_desc); /* @@ -49493,6 +47199,9 @@ DUK_LOCAL duk_uint32_t duk__tval_number_to_arr_idx(duk_tval *tv) { DUK_ASSERT(tv != NULL); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); + /* -0 is accepted here as index 0 because ToString(-0) == "0" which is + * in canonical form and thus an array index. + */ dbl = DUK_TVAL_GET_NUMBER(tv); idx = (duk_uint32_t) dbl; if ((duk_double_t) idx == dbl) { @@ -49548,6 +47257,7 @@ DUK_LOCAL duk_uint32_t duk__push_tval_to_hstring_arr_idx(duk_context *ctx, duk_t /* String is an own (virtual) property of a lightfunc. */ DUK_LOCAL duk_bool_t duk__key_is_lightfunc_ownprop(duk_hthread *thr, duk_hstring *key) { + DUK_UNREF(thr); return (key == DUK_HTHREAD_STRING_LENGTH(thr) || key == DUK_HTHREAD_STRING_NAME(thr)); } @@ -49722,7 +47432,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_proxy_check(duk_hthread *thr, duk_hobject *o tv_handler = duk_hobject_find_existing_entry_tval_ptr(thr->heap, obj, DUK_HTHREAD_STRING_INT_HANDLER(thr)); if (!tv_handler) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REVOKED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REVOKED); return 0; } DUK_ASSERT(DUK_TVAL_IS_OBJECT(tv_handler)); @@ -49733,7 +47443,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_proxy_check(duk_hthread *thr, duk_hobject *o tv_target = duk_hobject_find_existing_entry_tval_ptr(thr->heap, obj, DUK_HTHREAD_STRING_INT_TARGET(thr)); if (!tv_target) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REVOKED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REVOKED); return 0; } DUK_ASSERT(DUK_TVAL_IS_OBJECT(tv_target)); @@ -49901,6 +47611,7 @@ void duk__realloc_props(duk_hthread *thr, DUK_ASSERT(new_h_size == 0 || new_h_size >= new_e_size); /* required to guarantee success of rehashing, * intentionally use unadjusted new_e_size */ + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); /* @@ -49969,7 +47680,7 @@ void duk__realloc_props(duk_hthread *thr, */ if (new_e_size_adjusted + new_a_size > DUK_HOBJECT_MAX_PROPERTIES) { - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_OBJECT_PROPERTY_LIMIT); + DUK_ERROR_ALLOC_DEFMSG(thr); } /* @@ -50319,7 +48030,7 @@ void duk__realloc_props(duk_hthread *thr, thr->heap->mark_and_sweep_base_flags = prev_mark_and_sweep_base_flags; #endif - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_OBJECT_RESIZE_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } /* @@ -50441,6 +48152,13 @@ DUK_INTERNAL void duk_hobject_compact_props(duk_hthread *thr, duk_hobject *obj) DUK_ASSERT(thr != NULL); DUK_ASSERT(obj != NULL); +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)) { + DUK_DD(DUK_DDPRINT("ignore attempt to compact a rom object")); + return; + } +#endif + e_size = duk__count_used_e_keys(thr, obj); duk__compute_a_stats(thr, obj, &a_used, &a_size); @@ -50783,7 +48501,7 @@ duk_bool_t duk__lookup_arguments_map(duk_hthread *thr, (void *) thr, (void *) obj, (void *) key, (void *) temp_desc, (duk_heaphdr *) obj, (duk_heaphdr *) key)); - if (!duk__get_own_property_desc(thr, obj, DUK_HTHREAD_STRING_INT_MAP(thr), temp_desc, DUK__DESC_FLAG_PUSH_VALUE)) { + if (!duk_hobject_get_own_propdesc(thr, obj, DUK_HTHREAD_STRING_INT_MAP(thr), temp_desc, DUK_GETDESC_FLAG_PUSH_VALUE)) { DUK_DDD(DUK_DDDPRINT("-> no 'map'")); return 0; } @@ -50792,7 +48510,7 @@ duk_bool_t duk__lookup_arguments_map(duk_hthread *thr, DUK_ASSERT(map != NULL); duk_pop(ctx); /* map is reachable through obj */ - if (!duk__get_own_property_desc(thr, map, key, temp_desc, DUK__DESC_FLAG_PUSH_VALUE)) { + if (!duk_hobject_get_own_propdesc(thr, map, key, temp_desc, DUK_GETDESC_FLAG_PUSH_VALUE)) { DUK_DDD(DUK_DDDPRINT("-> 'map' exists, but key not in map")); return 0; } @@ -50803,7 +48521,7 @@ duk_bool_t duk__lookup_arguments_map(duk_hthread *thr, DUK_ASSERT(duk_is_string(ctx, -1)); /* guaranteed when building arguments */ /* get varenv for varname (callee's declarative lexical environment) */ - rc = duk__get_own_property_desc(thr, obj, DUK_HTHREAD_STRING_INT_VARENV(thr), temp_desc, DUK__DESC_FLAG_PUSH_VALUE); + rc = duk_hobject_get_own_propdesc(thr, obj, DUK_HTHREAD_STRING_INT_VARENV(thr), temp_desc, DUK_GETDESC_FLAG_PUSH_VALUE); DUK_UNREF(rc); DUK_ASSERT(rc != 0); /* arguments MUST have an initialized lexical environment reference */ varenv = duk_require_hobject(ctx, -1); @@ -50910,7 +48628,7 @@ DUK_LOCAL void duk__check_arguments_map_for_delete(duk_hthread *thr, duk_hobject DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); - if (!duk__get_own_property_desc(thr, obj, DUK_HTHREAD_STRING_INT_MAP(thr), temp_desc, DUK__DESC_FLAG_PUSH_VALUE)) { + if (!duk_hobject_get_own_propdesc(thr, obj, DUK_HTHREAD_STRING_INT_MAP(thr), temp_desc, DUK_GETDESC_FLAG_PUSH_VALUE)) { DUK_DDD(DUK_DDDPRINT("arguments: key not mapped, no exotic delete behavior")); return; } @@ -50934,13 +48652,13 @@ DUK_LOCAL void duk__check_arguments_map_for_delete(duk_hthread *thr, duk_hobject * * If property is found: * - Fills descriptor fields to 'out_desc' - * - If DUK__DESC_FLAG_PUSH_VALUE is set, pushes a value related to the + * - If DUK_GETDESC_FLAG_PUSH_VALUE is set, pushes a value related to the * property onto the stack ('undefined' for accessor properties). * - Returns non-zero * * If property is not found: * - 'out_desc' is left in untouched state (possibly garbage) - * - Nothing is pushed onto the stack (not even with DUK__DESC_FLAG_PUSH_VALUE + * - Nothing is pushed onto the stack (not even with DUK_GETDESC_FLAG_PUSH_VALUE * set) * - Returns zero * @@ -50968,11 +48686,11 @@ DUK_LOCAL void duk__check_arguments_map_for_delete(duk_hthread *thr, duk_hobject * accessor properties later, this would need to change. */ -DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_uint32_t arr_idx, duk_propdesc *out_desc, duk_small_uint_t flags) { +DUK_LOCAL duk_bool_t duk__get_own_propdesc_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_uint32_t arr_idx, duk_propdesc *out_desc, duk_small_uint_t flags) { duk_context *ctx = (duk_context *) thr; duk_tval *tv; - DUK_DDD(DUK_DDDPRINT("duk__get_own_property_desc: thr=%p, obj=%p, key=%p, out_desc=%p, flags=%lx, " + DUK_DDD(DUK_DDDPRINT("duk_hobject_get_own_propdesc: thr=%p, obj=%p, key=%p, out_desc=%p, flags=%lx, " "arr_idx=%ld (obj -> %!O, key -> %!O)", (void *) thr, (void *) obj, (void *) key, (void *) out_desc, (long) flags, (long) arr_idx, @@ -51003,7 +48721,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec tv = DUK_HOBJECT_A_GET_VALUE_PTR(thr->heap, obj, arr_idx); if (!DUK_TVAL_IS_UNUSED(tv)) { DUK_DDD(DUK_DDDPRINT("-> found in array part")); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_tval(ctx, tv); } /* implicit attributes */ @@ -51034,7 +48752,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec DUK_DDD(DUK_DDDPRINT("-> found accessor property in entry part")); out_desc->get = DUK_HOBJECT_E_GET_VALUE_GETTER(thr->heap, obj, e_idx); out_desc->set = DUK_HOBJECT_E_GET_VALUE_SETTER(thr->heap, obj, e_idx); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { /* a dummy undefined value is pushed to make valstack * behavior uniform for caller */ @@ -51043,7 +48761,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec } else { DUK_DDD(DUK_DDDPRINT("-> found plain property in entry part")); tv = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, obj, e_idx); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_tval(ctx, tv); } } @@ -51070,7 +48788,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec DUK_ASSERT(h_val); if (arr_idx < DUK_HSTRING_GET_CHARLEN(h_val)) { DUK_DDD(DUK_DDDPRINT("-> found, array index inside string")); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_hstring(ctx, h_val); duk_substring(ctx, -1, arr_idx, arr_idx + 1); /* [str] -> [substr] */ } @@ -51090,7 +48808,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec h_val = duk_hobject_get_internal_value_string(thr->heap, obj); DUK_ASSERT(h_val != NULL); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_uint(ctx, (duk_uint_t) DUK_HSTRING_GET_CHARLEN(h_val)); } out_desc->flags = DUK_PROPDESC_FLAG_VIRTUAL; /* E5 Section 15.5.5.1 */ @@ -51117,7 +48835,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec if (arr_idx < (h_bufobj->length >> h_bufobj->shift)) { byte_off = arr_idx << h_bufobj->shift; /* no wrap assuming h_bufobj->length is valid */ elem_size = 1 << h_bufobj->shift; - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_uint8_t *data; if (h_bufobj->buf != NULL && DUK_HBUFFEROBJECT_VALID_BYTEOFFSET_EXCL(h_bufobj, byte_off + elem_size)) { @@ -51141,7 +48859,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec } else if (key == DUK_HTHREAD_STRING_LENGTH(thr)) { DUK_DDD(DUK_DDDPRINT("-> found, key is 'length', length exotic behavior")); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { /* Length in elements: take into account shift, but * intentionally don't check the underlying buffer here. */ @@ -51155,7 +48873,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec /* If neutered must return 0; length is zeroed during * neutering. */ - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_uint(ctx, h_bufobj->length); } out_desc->flags = DUK_PROPDESC_FLAG_VIRTUAL; @@ -51164,13 +48882,13 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec /* If neutered must return 0; offset is zeroed during * neutering. */ - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_uint(ctx, h_bufobj->offset); } out_desc->flags = DUK_PROPDESC_FLAG_VIRTUAL; return 1; /* cannot be arguments exotic */ } else if (key == DUK_HTHREAD_STRING_BYTES_PER_ELEMENT(thr)) { - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_push_uint(ctx, 1 << h_bufobj->shift); } out_desc->flags = DUK_PROPDESC_FLAG_VIRTUAL; @@ -51183,7 +48901,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec if (key == DUK_HTHREAD_STRING_LENGTH(thr)) { DUK_DDD(DUK_DDDPRINT("-> found, key is 'length', length exotic behavior")); - if (flags & DUK__DESC_FLAG_PUSH_VALUE) { + if (flags & DUK_GETDESC_FLAG_PUSH_VALUE) { duk_int16_t func_nargs = ((duk_hnativefunction *) obj)->nargs; duk_push_int(ctx, func_nargs == DUK_HNATIVEFUNCTION_NARGS_VARARGS ? 0 : func_nargs); } @@ -51223,12 +48941,12 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec * - only numbered indices are relevant, so arr_idx fast reject is good * (this is valid unless there are more than 4**32-1 arguments). * - since variable lookup has no side effects, this can be skipped if - * DUK__DESC_FLAG_PUSH_VALUE is not set. + * DUK_GETDESC_FLAG_PUSH_VALUE is not set. */ if (DUK_HOBJECT_HAS_EXOTIC_ARGUMENTS(obj) && arr_idx != DUK__NO_ARRAY_INDEX && - (flags & DUK__DESC_FLAG_PUSH_VALUE)) { + (flags & DUK_GETDESC_FLAG_PUSH_VALUE)) { duk_propdesc temp_desc; /* Magically bound variable cannot be an accessor. However, @@ -51239,7 +48957,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec */ /* replaces top of stack with new value if necessary */ - DUK_ASSERT((flags & DUK__DESC_FLAG_PUSH_VALUE) != 0); + DUK_ASSERT((flags & DUK_GETDESC_FLAG_PUSH_VALUE) != 0); if (duk__check_arguments_map_for_get(thr, obj, key, &temp_desc)) { DUK_DDD(DUK_DDDPRINT("-> arguments exotic behavior overrides result: %!T -> %!T", @@ -51253,14 +48971,14 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc_raw(duk_hthread *thr, duk_hobjec return 1; } -DUK_LOCAL duk_bool_t duk__get_own_property_desc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags) { +DUK_INTERNAL duk_bool_t duk_hobject_get_own_propdesc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags) { DUK_ASSERT(thr != NULL); DUK_ASSERT(obj != NULL); DUK_ASSERT(key != NULL); DUK_ASSERT(out_desc != NULL); DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); - return duk__get_own_property_desc_raw(thr, obj, key, DUK_HSTRING_GET_ARRIDX_SLOW(key), out_desc, flags); + return duk__get_own_propdesc_raw(thr, obj, key, DUK_HSTRING_GET_ARRIDX_SLOW(key), out_desc, flags); } /* @@ -51268,13 +48986,13 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc(duk_hthread *thr, duk_hobject *o * * If property is found: * - Fills descriptor fields to 'out_desc' - * - If DUK__DESC_FLAG_PUSH_VALUE is set, pushes a value related to the + * - If DUK_GETDESC_FLAG_PUSH_VALUE is set, pushes a value related to the * property onto the stack ('undefined' for accessor properties). * - Returns non-zero * * If property is not found: * - 'out_desc' is left in untouched state (possibly garbage) - * - Nothing is pushed onto the stack (not even with DUK__DESC_FLAG_PUSH_VALUE + * - Nothing is pushed onto the stack (not even with DUK_GETDESC_FLAG_PUSH_VALUE * set) * - Returns zero * @@ -51282,7 +49000,7 @@ DUK_LOCAL duk_bool_t duk__get_own_property_desc(duk_hthread *thr, duk_hobject *o * pointers. */ -DUK_LOCAL duk_bool_t duk__get_property_desc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags) { +DUK_LOCAL duk_bool_t duk__get_propdesc(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_propdesc *out_desc, duk_small_uint_t flags) { duk_hobject *curr; duk_uint32_t arr_idx; duk_uint_t sanity; @@ -51296,7 +49014,7 @@ DUK_LOCAL duk_bool_t duk__get_property_desc(duk_hthread *thr, duk_hobject *obj, arr_idx = DUK_HSTRING_GET_ARRIDX_FAST(key); - DUK_DDD(DUK_DDDPRINT("duk__get_property_desc: thr=%p, obj=%p, key=%p, out_desc=%p, flags=%lx, " + DUK_DDD(DUK_DDDPRINT("duk__get_propdesc: thr=%p, obj=%p, key=%p, out_desc=%p, flags=%lx, " "arr_idx=%ld (obj -> %!O, key -> %!O)", (void *) thr, (void *) obj, (void *) key, (void *) out_desc, (long) flags, (long) arr_idx, @@ -51306,18 +49024,18 @@ DUK_LOCAL duk_bool_t duk__get_property_desc(duk_hthread *thr, duk_hobject *obj, DUK_ASSERT(curr != NULL); sanity = DUK_HOBJECT_PROTOTYPE_CHAIN_SANITY; do { - if (duk__get_own_property_desc_raw(thr, curr, key, arr_idx, out_desc, flags)) { + if (duk__get_own_propdesc_raw(thr, curr, key, arr_idx, out_desc, flags)) { /* stack contains value (if requested), 'out_desc' is set */ return 1; } /* not found in 'curr', next in prototype chain; impose max depth */ if (sanity-- == 0) { - if (flags & DUK__DESC_FLAG_IGNORE_PROTOLOOP) { + if (flags & DUK_GETDESC_FLAG_IGNORE_PROTOLOOP) { /* treat like property not found */ break; } else { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_PROTOTYPE_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_PROTOTYPE_CHAIN_LIMIT); } } curr = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, curr); @@ -51422,6 +49140,7 @@ DUK_LOCAL duk_bool_t duk__putprop_shallow_fastpath_array_tval(duk_hthread *thr, DUK_HOBJECT_HAS_EXTENSIBLE(obj))) { return 0; } + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); /* caller ensures */ #if defined(DUK_USE_FASTINT) if (DUK_TVAL_IS_FASTINT(tv_key)) { @@ -51453,7 +49172,7 @@ DUK_LOCAL duk_bool_t duk__putprop_shallow_fastpath_array_tval(duk_hthread *thr, "(arr_idx=%ld, old_len=%ld)", (long) idx, (long) old_len)); if (!(temp_desc->flags & DUK_PROPDESC_FLAG_WRITABLE)) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_WRITABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_WRITABLE); return 0; /* not reachable */ } new_len = idx + 1; @@ -51461,11 +49180,7 @@ DUK_LOCAL duk_bool_t duk__putprop_shallow_fastpath_array_tval(duk_hthread *thr, /* No resize has occurred so temp_desc->e_idx is still OK */ tv = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, obj, temp_desc->e_idx); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(tv, new_len); /* no need for decref/incref because value is a number */ -#else - DUK_TVAL_SET_NUMBER(tv, (duk_double_t) new_len); /* no need for decref/incref because value is a number */ -#endif } else { ; } @@ -51546,8 +49261,9 @@ DUK_LOCAL duk_bool_t duk__putprop_fastpath_bufobj_tval(duk_hthread *thr, duk_hob DUK_TVAL_IS_NUMBER(tv_val))) { return 0; } - h_bufobj = (duk_hbufferobject *) obj; + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); /* caller ensures; rom objects are never bufferobjects now */ + h_bufobj = (duk_hbufferobject *) obj; #if defined(DUK_USE_FASTINT) if (DUK_TVAL_IS_FASTINT(tv_key)) { idx = duk__tval_fastint_to_arr_idx(tv_key); @@ -51640,10 +49356,10 @@ DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, /* Note: unconditional throw */ DUK_DDD(DUK_DDDPRINT("base object is undefined or null -> reject")); #if defined(DUK_USE_PARANOID_ERRORS) - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_BASE); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_BASE); #else - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "cannot read property %s of %s", - duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); + DUK_ERROR_FMT2(thr, DUK_ERR_TYPE_ERROR, "cannot read property %s of %s", + duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); #endif return 0; } @@ -51757,7 +49473,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, arr_idx = duk__push_tval_to_hstring_arr_idx(ctx, tv_key, &key); DUK_ASSERT(key != NULL); - if (duk__get_own_property_desc_raw(thr, h_target, key, arr_idx, &desc, DUK__DESC_FLAG_PUSH_VALUE)) { + if (duk__get_own_propdesc_raw(thr, h_target, key, arr_idx, &desc, DUK_GETDESC_FLAG_PUSH_VALUE)) { duk_tval *tv_hook = duk_require_tval(ctx, -3); /* value from hook */ duk_tval *tv_targ = duk_require_tval(ctx, -1); /* value from target */ duk_bool_t datadesc_reject; @@ -51779,7 +49495,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, (desc.get == NULL) && !DUK_TVAL_IS_UNDEFINED(tv_hook); if (datadesc_reject || accdesc_reject) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REJECTED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REJECTED); } duk_pop_2(ctx); @@ -51959,7 +49675,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, sanity = DUK_HOBJECT_PROTOTYPE_CHAIN_SANITY; do { - if (!duk__get_own_property_desc_raw(thr, curr, key, arr_idx, &desc, DUK__DESC_FLAG_PUSH_VALUE)) { + if (!duk__get_own_propdesc_raw(thr, curr, key, arr_idx, &desc, DUK_GETDESC_FLAG_PUSH_VALUE)) { goto next_in_chain; } @@ -52001,7 +49717,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, * hit might be useful. */ if (sanity-- == 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_PROTOTYPE_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_PROTOTYPE_CHAIN_LIMIT); } curr = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, curr); } while (curr); @@ -52071,7 +49787,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, DUK_HOBJECT_IS_FUNCTION(h) && DUK_HOBJECT_HAS_STRICT(h)) { /* XXX: sufficient to check 'strict', assert for 'is function' */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_STRICT_CALLER_READ); + DUK_ERROR_TYPE(thr, DUK_STR_STRICT_CALLER_READ); } } } @@ -52148,7 +49864,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *tv_obj, } else { /* Note: unconditional throw */ DUK_DDD(DUK_DDDPRINT("base object is not an object -> reject")); - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_BASE); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_BASE); } /* XXX: fast path for arrays? */ @@ -52179,7 +49895,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *tv_obj, * non-configurable property. */ - if (duk__get_own_property_desc_raw(thr, h_target, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ + if (duk__get_own_propdesc_raw(thr, h_target, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ DUK_DDD(DUK_DDDPRINT("proxy 'has': target has matching property %!O, check for " "conflicting property; desc.flags=0x%08lx, " "desc.get=%p, desc.set=%p", @@ -52191,7 +49907,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *tv_obj, */ if (!((desc.flags & DUK_PROPDESC_FLAG_CONFIGURABLE) && /* property is configurable and */ DUK_HOBJECT_HAS_EXTENSIBLE(h_target))) { /* ... target is extensible */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REJECTED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REJECTED); } } } @@ -52206,7 +49922,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *tv_obj, /* XXX: inline into a prototype walking loop? */ - rc = duk__get_property_desc(thr, obj, key, &desc, 0 /*flags*/); /* don't push value */ + rc = duk__get_propdesc(thr, obj, key, &desc, 0 /*flags*/); /* don't push value */ /* fall through */ pop_and_return: @@ -52236,7 +49952,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_hasprop_raw(duk_hthread *thr, duk_hobject *o DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); - return duk__get_property_desc(thr, obj, key, &dummy, DUK__DESC_FLAG_IGNORE_PROTOLOOP); /* don't push value */ + return duk__get_propdesc(thr, obj, key, &dummy, DUK_GETDESC_FLAG_IGNORE_PROTOLOOP); /* don't push value */ } /* @@ -52264,7 +49980,7 @@ DUK_LOCAL duk_uint32_t duk__get_old_array_length(duk_hthread *thr, duk_hobject * * See test-bi-array-push-maxlen.js. */ - rc = duk__get_own_property_desc_raw(thr, obj, DUK_HTHREAD_STRING_LENGTH(thr), DUK__NO_ARRAY_INDEX, temp_desc, 0 /*flags*/); /* don't push value */ + rc = duk__get_own_propdesc_raw(thr, obj, DUK_HTHREAD_STRING_LENGTH(thr), DUK__NO_ARRAY_INDEX, temp_desc, 0 /*flags*/); /* don't push value */ DUK_UNREF(rc); DUK_ASSERT(rc != 0); /* arrays MUST have a 'length' property */ DUK_ASSERT(temp_desc->e_idx >= 0); @@ -52307,7 +50023,7 @@ DUK_LOCAL duk_uint32_t duk__to_new_array_length_checked(duk_hthread *thr) { d = duk_to_number(ctx, -1); res = (duk_uint32_t) d; if ((duk_double_t) res != d) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_INVALID_ARRAY_LENGTH); + DUK_ERROR_RANGE(thr, DUK_STR_INVALID_ARRAY_LENGTH); } duk_pop(ctx); return res; @@ -52556,11 +50272,7 @@ DUK_LOCAL duk_bool_t duk__handle_put_array_length(duk_hthread *thr, duk_hobject tv = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, obj, desc.e_idx); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); /* no decref needed for a number */ -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(tv, new_len); -#else - DUK_TVAL_SET_NUMBER(tv, (duk_double_t) new_len); -#endif DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); return 1; } @@ -52583,11 +50295,7 @@ DUK_LOCAL duk_bool_t duk__handle_put_array_length(duk_hthread *thr, duk_hobject tv = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, obj, desc.e_idx); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); /* no decref needed for a number */ -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(tv, result_len); -#else - DUK_TVAL_SET_NUMBER(tv, (duk_double_t) result_len); -#endif DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); /* XXX: shrink array allocation or entries compaction here? */ @@ -52680,10 +50388,10 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, DUK_DDD(DUK_DDDPRINT("base object is undefined or null -> reject (object=%!iT)", (duk_tval *) tv_obj)); #if defined(DUK_USE_PARANOID_ERRORS) - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_BASE); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_BASE); #else - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "cannot write property %s of %s", - duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); + DUK_ERROR_FMT2(thr, DUK_ERR_TYPE_ERROR, "cannot write property %s of %s", + duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); #endif return 0; } @@ -52724,6 +50432,18 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, orig = DUK_TVAL_GET_OBJECT(tv_obj); DUK_ASSERT(orig != NULL); +#if defined(DUK_USE_ROM_OBJECTS) + /* With this check in place fast paths won't need read-only + * object checks. This is technically incorrect if there are + * setters that cause no writes to ROM objects, but current + * built-ins don't have such setters. + */ + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) orig)) { + DUK_DD(DUK_DDPRINT("attempt to putprop on read-only target object")); + goto fail_not_writable_no_pop; /* Must avoid duk_pop() in exit path */ + } +#endif + /* The fast path for array property put is not fully compliant: * If one places conflicting number-indexed properties into * Array.prototype (for example, a non-writable Array.prototype[7]) @@ -52774,7 +50494,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, arr_idx = duk__push_tval_to_hstring_arr_idx(ctx, tv_key, &key); DUK_ASSERT(key != NULL); - if (duk__get_own_property_desc_raw(thr, h_target, key, arr_idx, &desc, DUK__DESC_FLAG_PUSH_VALUE)) { + if (duk__get_own_propdesc_raw(thr, h_target, key, arr_idx, &desc, DUK_GETDESC_FLAG_PUSH_VALUE)) { duk_tval *tv_targ = duk_require_tval(ctx, -1); duk_bool_t datadesc_reject; duk_bool_t accdesc_reject; @@ -52794,7 +50514,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, !(desc.flags & DUK_PROPDESC_FLAG_CONFIGURABLE) && (desc.set == NULL); if (datadesc_reject || accdesc_reject) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REJECTED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REJECTED); } duk_pop_2(ctx); @@ -52944,7 +50664,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, DUK_ASSERT(curr != NULL); sanity = DUK_HOBJECT_PROTOTYPE_CHAIN_SANITY; do { - if (!duk__get_own_property_desc_raw(thr, curr, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ + if (!duk__get_own_propdesc_raw(thr, curr, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ goto next_in_chain; } @@ -52952,6 +50672,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, /* * Found existing accessor property (own or inherited). * Call setter with 'this' set to orig, and value as the only argument. + * Setter calls are OK even for ROM objects. * * Note: no exotic arguments object behavior, because [[Put]] never * calls [[DefineOwnProperty]] (E5 Section 8.12.5, step 5.b). @@ -53067,7 +50788,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, * hit might be useful. */ if (sanity-- == 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_PROTOTYPE_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_PROTOTYPE_CHAIN_LIMIT); } curr = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, curr); } while (curr); @@ -53101,6 +50822,14 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, DUK_DDD(DUK_DDDPRINT("update an existing property of the original object")); DUK_ASSERT(orig != NULL); +#if defined(DUK_USE_ROM_OBJECTS) + /* This should not happen because DUK_TAG_OBJECT case checks + * for this already, but check just in case. + */ + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) orig)) { + goto fail_not_writable; + } +#endif /* Although there are writable virtual properties (e.g. plain buffer * and buffer object number indices), they are handled before we come @@ -53184,6 +50913,15 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, DUK_ASSERT(orig != NULL); +#if defined(DUK_USE_ROM_OBJECTS) + /* This should not happen because DUK_TAG_OBJECT case checks + * for this already, but check just in case. + */ + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) orig)) { + goto fail_not_writable; + } +#endif + /* Not possible because array object 'length' is present * from its creation and cannot be deleted, and is thus * caught as an existing property above. @@ -53365,7 +51103,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, DUK_DDD(DUK_DDDPRINT("write successful, pending array length update to: %ld", (long) new_array_length)); - rc = duk__get_own_property_desc_raw(thr, orig, DUK_HTHREAD_STRING_LENGTH(thr), DUK__NO_ARRAY_INDEX, &desc, 0 /*flags*/); /* don't push value */ + rc = duk__get_own_propdesc_raw(thr, orig, DUK_HTHREAD_STRING_LENGTH(thr), DUK__NO_ARRAY_INDEX, &desc, 0 /*flags*/); /* don't push value */ DUK_UNREF(rc); DUK_ASSERT(rc != 0); DUK_ASSERT(desc.e_idx >= 0); @@ -53373,11 +51111,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, tv = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, orig, desc.e_idx); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv)); /* no need for decref/incref because value is a number */ -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(tv, new_array_length); -#else - DUK_TVAL_SET_NUMBER(tv, (duk_double_t) new_array_length); -#endif } /* @@ -53430,22 +51164,24 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, duk_pop(ctx); /* remove key */ return 1; +#if defined(DUK_USE_ES6_PROXY) fail_proxy_rejected: DUK_DDD(DUK_DDDPRINT("result: error, proxy rejects")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REJECTED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REJECTED); } /* Note: no key on stack */ return 0; +#endif fail_base_primitive: DUK_DDD(DUK_DDDPRINT("result: error, base primitive")); if (throw_flag) { #if defined(DUK_USE_PARANOID_ERRORS) - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_BASE); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_BASE); #else - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "cannot write property %s of %s", - duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); + DUK_ERROR_FMT2(thr, DUK_ERR_TYPE_ERROR, "cannot write property %s of %s", + duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); #endif } duk_pop(ctx); /* remove key */ @@ -53454,7 +51190,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, fail_not_extensible: DUK_DDD(DUK_DDDPRINT("result: error, not extensible")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_EXTENSIBLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_EXTENSIBLE); } duk_pop(ctx); /* remove key */ return 0; @@ -53462,15 +51198,24 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, fail_not_writable: DUK_DDD(DUK_DDDPRINT("result: error, not writable")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_WRITABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_WRITABLE); } duk_pop(ctx); /* remove key */ return 0; +#if defined(DUK_USE_ROM_OBJECTS) + fail_not_writable_no_pop: + DUK_DDD(DUK_DDDPRINT("result: error, not writable")); + if (throw_flag) { + DUK_ERROR_TYPE(thr, DUK_STR_NOT_WRITABLE); + } + return 0; +#endif + fail_array_length_partial: DUK_DDD(DUK_DDDPRINT("result: error, array length write only partially successful")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_ARRAY_LENGTH_WRITE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_ARRAY_LENGTH_WRITE_FAILED); } duk_pop(ctx); /* remove key */ return 0; @@ -53478,7 +51223,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, fail_no_setter: DUK_DDD(DUK_DDDPRINT("result: error, accessor property without setter")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_SETTER_UNDEFINED); + DUK_ERROR_TYPE(thr, DUK_STR_SETTER_UNDEFINED); } duk_pop(ctx); /* remove key */ return 0; @@ -53486,7 +51231,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, fail_internal: DUK_DDD(DUK_DDDPRINT("result: error, internal")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); } duk_pop(ctx); /* remove key */ return 0; @@ -53520,11 +51265,18 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop_raw(duk_hthread *thr, duk_hobject *o arr_idx = DUK_HSTRING_GET_ARRIDX_FAST(key); /* 0 = don't push current value */ - if (!duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ + if (!duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ DUK_DDD(DUK_DDDPRINT("property not found, succeed always")); goto success; } +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)) { + DUK_DD(DUK_DDPRINT("attempt to delprop on read-only target object")); + goto fail_not_configurable; + } +#endif + if ((desc.flags & DUK_PROPDESC_FLAG_CONFIGURABLE) == 0 && !force_flag) { goto fail_not_configurable; } @@ -53628,7 +51380,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop_raw(duk_hthread *thr, duk_hobject *o DUK_DDD(DUK_DDDPRINT("delete failed: property found, force flag, but virtual")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROPERTY_IS_VIRTUAL); + DUK_ERROR_TYPE(thr, DUK_STR_PROPERTY_IS_VIRTUAL); } return 0; @@ -53636,7 +51388,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop_raw(duk_hthread *thr, duk_hobject *o DUK_DDD(DUK_DDDPRINT("delete failed: property found, not configurable")); if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CONFIGURABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); } return 0; } @@ -53681,7 +51433,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *tv_obj, duk_push_tval(ctx, tv_obj); duk_push_tval(ctx, tv_key); - tv_obj = duk_get_tval(ctx, -2); + tv_obj = DUK_GET_TVAL_NEGIDX(ctx, -2); if (DUK_TVAL_IS_OBJECT(tv_obj)) { duk_hobject *obj = DUK_TVAL_GET_OBJECT(tv_obj); DUK_ASSERT(obj != NULL); @@ -53711,7 +51463,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *tv_obj, arr_idx = duk__push_tval_to_hstring_arr_idx(ctx, tv_key, &key); DUK_ASSERT(key != NULL); - if (duk__get_own_property_desc_raw(thr, h_target, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ + if (duk__get_own_propdesc_raw(thr, h_target, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ int desc_reject; DUK_DDD(DUK_DDDPRINT("proxy 'deleteProperty': target has matching property %!O, check for " @@ -53723,7 +51475,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *tv_obj, desc_reject = !(desc.flags & DUK_PROPDESC_FLAG_CONFIGURABLE); if (desc_reject) { /* unconditional */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REJECTED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REJECTED); } } rc = 1; /* success */ @@ -53809,23 +51561,25 @@ DUK_INTERNAL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *tv_obj, /* Note: unconditional throw */ DUK_ASSERT(duk_get_top(ctx) == entry_top); #if defined(DUK_USE_PARANOID_ERRORS) - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_BASE); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_BASE); #else - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "cannot delete property %s of %s", - duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); + DUK_ERROR_FMT2(thr, DUK_ERR_TYPE_ERROR, "cannot delete property %s of %s", + duk_push_string_tval_readable(ctx, tv_key), duk_push_string_tval_readable(ctx, tv_obj)); #endif return 0; +#if defined(DUK_USE_ES6_PROXY) fail_proxy_rejected: if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROXY_REJECTED); + DUK_ERROR_TYPE(thr, DUK_STR_PROXY_REJECTED); } duk_set_top(ctx, entry_top); return 0; +#endif fail_not_configurable: if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CONFIGURABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); } duk_set_top(ctx, entry_top); return 0; @@ -53867,13 +51621,13 @@ DUK_INTERNAL void duk_hobject_define_property_internal(duk_hthread *thr, duk_hob DUK_ASSERT(thr->heap != NULL); DUK_ASSERT(obj != NULL); DUK_ASSERT(key != NULL); - + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); DUK_ASSERT(duk_is_valid_index(ctx, -1)); /* contains value */ arr_idx = DUK_HSTRING_GET_ARRIDX_SLOW(key); - if (duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ + if (duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &desc, 0 /*flags*/)) { /* don't push value */ if (desc.e_idx >= 0) { if (flags & DUK_PROPDESC_FLAG_NO_OVERWRITE) { DUK_DDD(DUK_DDDPRINT("property already exists in the entry part -> skip as requested")); @@ -53952,11 +51706,11 @@ DUK_INTERNAL void duk_hobject_define_property_internal(duk_hthread *thr, duk_hob return; error_internal: - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); return; error_virtual: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_REDEFINE_VIRT_PROP); + DUK_ERROR_TYPE(thr, DUK_STR_REDEFINE_VIRT_PROP); return; } @@ -53979,6 +51733,7 @@ DUK_INTERNAL void duk_hobject_define_property_internal_arridx(duk_hthread *thr, DUK_ASSERT(thr != NULL); DUK_ASSERT(thr->heap != NULL); DUK_ASSERT(obj != NULL); + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); if (DUK_HOBJECT_HAS_ARRAY_PART(obj) && arr_idx != DUK__NO_ARRAY_INDEX && @@ -54039,6 +51794,7 @@ DUK_INTERNAL void duk_hobject_define_accessor_internal(duk_hthread *thr, duk_hob DUK_ASSERT(key != NULL); DUK_ASSERT((propflags & ~DUK_PROPDESC_FLAGS_MASK) == 0); /* setter and/or getter may be NULL */ + DUK_ASSERT(!DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)); DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); @@ -54069,7 +51825,11 @@ DUK_INTERNAL void duk_hobject_set_length(duk_hthread *thr, duk_hobject *obj, duk duk_push_hobject(ctx, obj); duk_push_hstring_stridx(ctx, DUK_STRIDX_LENGTH); duk_push_u32(ctx, length); - (void) duk_hobject_putprop(thr, duk_get_tval(ctx, -3), duk_get_tval(ctx, -2), duk_get_tval(ctx, -1), 0); + (void) duk_hobject_putprop(thr, + DUK_GET_TVAL_NEGIDX(ctx, -3), + DUK_GET_TVAL_NEGIDX(ctx, -2), + DUK_GET_TVAL_NEGIDX(ctx, -1), + 0); duk_pop_n(ctx, 3); } @@ -54082,7 +51842,9 @@ DUK_INTERNAL duk_uint32_t duk_hobject_get_length(duk_hthread *thr, duk_hobject * duk_double_t val; duk_push_hobject(ctx, obj); duk_push_hstring_stridx(ctx, DUK_STRIDX_LENGTH); - (void) duk_hobject_getprop(thr, duk_get_tval(ctx, -2), duk_get_tval(ctx, -1)); + (void) duk_hobject_getprop(thr, + DUK_GET_TVAL_NEGIDX(ctx, -2), + DUK_GET_TVAL_NEGIDX(ctx, -1)); val = duk_to_number(ctx, -1); duk_pop_n(ctx, 3); if (val >= 0.0 && val < DUK_DOUBLE_2TO32) { @@ -54117,7 +51879,7 @@ DUK_INTERNAL duk_ret_t duk_hobject_object_get_own_property_descriptor(duk_contex DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); - rc = duk__get_own_property_desc(thr, obj, key, &pd, DUK__DESC_FLAG_PUSH_VALUE); + rc = duk_hobject_get_own_propdesc(thr, obj, key, &pd, DUK_GETDESC_FLAG_PUSH_VALUE); if (!rc) { duk_push_undefined(ctx); @@ -54256,7 +52018,6 @@ void duk_hobject_prepare_property_descriptor(duk_context *ctx, duk_tval *tv = duk_require_tval(ctx, -1); duk_hobject *h_set; - is_acc_desc = 1; if (DUK_TVAL_IS_UNDEFINED(tv)) { /* undefined is accepted */ DUK_ASSERT(setter == NULL); @@ -54309,7 +52070,7 @@ void duk_hobject_prepare_property_descriptor(duk_context *ctx, return; type_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_INVALID_DESCRIPTOR); + DUK_ERROR_TYPE(thr, DUK_STR_INVALID_DESCRIPTOR); } /* @@ -54507,7 +52268,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, * steps 1-4. */ - if (!duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &curr, DUK__DESC_FLAG_PUSH_VALUE)) { + if (!duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE)) { DUK_DDD(DUK_DDDPRINT("property does not exist")); if (!DUK_HOBJECT_HAS_EXTENSIBLE(obj) && !force_flag) { @@ -54729,6 +52490,14 @@ void duk_hobject_define_property_helper(duk_context *ctx, goto fail_virtual; } + /* Reject attempt to change a read-only object. */ +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)) { + DUK_DD(DUK_DDPRINT("attempt to define property on read-only target object")); + goto fail_not_configurable; + } +#endif + /* descriptor type specific checks */ if (has_set || has_get) { /* IsAccessorDescriptor(desc) == true */ @@ -54759,7 +52528,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, DUK_DDD(DUK_DDDPRINT("property to convert is stored in an array entry, abandon array and re-lookup")); duk__abandon_array_checked(thr, obj); duk_pop(ctx); /* remove old value */ - rc = duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &curr, DUK__DESC_FLAG_PUSH_VALUE); + rc = duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE); DUK_UNREF(rc); DUK_ASSERT(rc != 0); DUK_ASSERT(curr.e_idx >= 0 && curr.a_idx < 0); @@ -54783,7 +52552,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, * XXX: would be faster to update directly */ duk_pop(ctx); /* remove old value */ - rc = duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &curr, DUK__DESC_FLAG_PUSH_VALUE); + rc = duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE); DUK_UNREF(rc); DUK_ASSERT(rc != 0); } @@ -54827,7 +52596,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, * XXX: would be faster to update directly */ duk_pop(ctx); /* remove old value */ - rc = duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &curr, DUK__DESC_FLAG_PUSH_VALUE); + rc = duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE); DUK_UNREF(rc); DUK_ASSERT(rc != 0); } else { @@ -54918,7 +52687,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, DUK_DDD(DUK_DDDPRINT("array index, new property attributes do not match array defaults, abandon array and re-lookup")); duk__abandon_array_checked(thr, obj); duk_pop(ctx); /* remove old value */ - rc = duk__get_own_property_desc_raw(thr, obj, key, arr_idx, &curr, DUK__DESC_FLAG_PUSH_VALUE); + rc = duk__get_own_propdesc_raw(thr, obj, key, arr_idx, &curr, DUK_GETDESC_FLAG_PUSH_VALUE); DUK_UNREF(rc); DUK_ASSERT(rc != 0); DUK_ASSERT(curr.e_idx >= 0 && curr.a_idx < 0); @@ -54999,7 +52768,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, (long) arridx_new_array_length)); /* Note: reuse 'curr' */ - rc = duk__get_own_property_desc_raw(thr, obj, DUK_HTHREAD_STRING_LENGTH(thr), DUK__NO_ARRAY_INDEX, &curr, 0 /*flags*/); /* don't push value */ + rc = duk__get_own_propdesc_raw(thr, obj, DUK_HTHREAD_STRING_LENGTH(thr), DUK__NO_ARRAY_INDEX, &curr, 0 /*flags*/); /* don't push value */ DUK_UNREF(rc); DUK_ASSERT(rc != 0); DUK_ASSERT(curr.e_idx >= 0); @@ -55007,11 +52776,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, tmp = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, obj, curr.e_idx); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tmp)); /* no need for decref/incref because value is a number */ -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(tmp, arridx_new_array_length); -#else - DUK_TVAL_SET_NUMBER(tmp, (duk_double_t) arridx_new_array_length); -#endif } if (key == DUK_HTHREAD_STRING_LENGTH(thr) && arrlen_new_len < arrlen_old_len) { /* @@ -55043,11 +52808,7 @@ void duk_hobject_define_property_helper(duk_context *ctx, tmp = DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(thr->heap, obj, curr.e_idx); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tmp)); /* no decref needed for a number */ -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(tmp, result_len); -#else - DUK_TVAL_SET_NUMBER(tmp, (duk_double_t) result_len); -#endif DUK_ASSERT(DUK_TVAL_IS_NUMBER(tmp)); if (pending_write_protect) { @@ -55126,23 +52887,23 @@ void duk_hobject_define_property_helper(duk_context *ctx, return; fail_virtual: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_PROPERTY_IS_VIRTUAL); + DUK_ERROR_TYPE(thr, DUK_STR_PROPERTY_IS_VIRTUAL); return; fail_not_writable_array_length: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_ARRAY_LENGTH_NOT_WRITABLE); + DUK_ERROR_TYPE(thr, DUK_STR_ARRAY_LENGTH_NOT_WRITABLE); return; fail_not_extensible: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_EXTENSIBLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_EXTENSIBLE); return; fail_not_configurable: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CONFIGURABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); return; fail_array_length_partial: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_ARRAY_LENGTH_WRITE_FAILED); + DUK_ERROR_TYPE(thr, DUK_STR_ARRAY_LENGTH_WRITE_FAILED); return; } @@ -55164,7 +52925,7 @@ DUK_INTERNAL duk_bool_t duk_hobject_object_ownprop_helper(duk_context *ctx, duk_ h_obj = duk_push_this_coercible_to_object(ctx); DUK_ASSERT(h_obj != NULL); - ret = duk__get_own_property_desc(thr, h_obj, h_v, &desc, 0 /*flags*/); /* don't push value */ + ret = duk_hobject_get_own_propdesc(thr, h_obj, h_v, &desc, 0 /*flags*/); /* don't push value */ duk_push_boolean(ctx, ret && ((desc.flags & required_desc_flags) == required_desc_flags)); return 1; @@ -55194,6 +52955,13 @@ DUK_INTERNAL void duk_hobject_object_seal_freeze_helper(duk_hthread *thr, duk_ho DUK_ASSERT_VALSTACK_SPACE(thr, DUK__VALSTACK_SPACE); +#if defined(DUK_USE_ROM_OBJECTS) + if (DUK_HEAPHDR_HAS_READONLY((duk_heaphdr *) obj)) { + DUK_DD(DUK_DDPRINT("attempt to seal/freeze a readonly object, reject")); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CONFIGURABLE); + } +#endif + /* * Abandon array part because all properties must become non-configurable. * Note that this is now done regardless of whether this is always the case @@ -55340,6 +53108,17 @@ DUK_INTERNAL duk_ucodepoint_t duk_hstring_char_code_at_raw(duk_hthread *thr, duk cp = duk_unicode_decode_xutf8_checked(thr, &p, p_start, p_end); return cp; } + +#if !defined(DUK_USE_HSTRING_CLEN) +DUK_INTERNAL duk_size_t duk_hstring_get_charlen(duk_hstring *h) { + if (DUK_HSTRING_HAS_ASCII(h)) { + /* Most practical strings will go here. */ + return DUK_HSTRING_GET_BYTELEN(h); + } else { + return duk_unicode_unvalidated_utf8_length(DUK_HSTRING_GET_DATA(h), DUK_HSTRING_GET_BYTELEN(h)); + } +} +#endif /* !DUK_USE_HSTRING_CLEN */ #line 1 "duk_hthread_alloc.c" /* * duk_hthread allocation and freeing. @@ -55451,7 +53230,7 @@ DUK_INTERNAL void *duk_hthread_get_catchstack_ptr(duk_heap *heap, void *ud) { #define DUK__CLASS_BITS 5 #define DUK__BIDX_BITS 7 -#define DUK__STRIDX_BITS 9 /* XXX: try to optimize to 8 */ +#define DUK__STRIDX_BITS 9 /* XXX: try to optimize to 8 (would now be possible, <200 used) */ #define DUK__NATIDX_BITS 8 #define DUK__NUM_NORMAL_PROPS_BITS 6 #define DUK__NUM_FUNC_PROPS_BITS 6 @@ -55482,6 +53261,170 @@ DUK_INTERNAL void *duk_hthread_get_catchstack_ptr(duk_heap *heap, void *ud) { * by genbuiltins.py. */ +#if defined(DUK_USE_ROM_OBJECTS) +#if defined(DUK_USE_ROM_GLOBAL_CLONE) || defined(DUK_USE_ROM_GLOBAL_INHERIT) +DUK_LOCAL void duk__duplicate_ram_global_object(duk_hthread *thr) { + duk_context *ctx; + duk_hobject *h1; +#if defined(DUK_USE_ROM_GLOBAL_CLONE) + duk_hobject *h2; + duk_uint8_t *props; + duk_size_t alloc_size; +#endif + + ctx = (duk_context *) thr; + + /* XXX: refactor into internal helper, duk_clone_hobject() */ + +#if defined(DUK_USE_ROM_GLOBAL_INHERIT) + /* Inherit from ROM-based global object: less RAM usage, less transparent. */ + duk_push_object_helper(ctx, + DUK_HOBJECT_FLAG_EXTENSIBLE | + DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_GLOBAL), + DUK_BIDX_GLOBAL); + h1 = duk_get_hobject(ctx, -1); + DUK_ASSERT(h1 != NULL); +#elif defined(DUK_USE_ROM_GLOBAL_CLONE) + /* Clone the properties of the ROM-based global object to create a + * fully RAM-based global object. Uses more memory than the inherit + * model but more compliant. + */ + duk_push_object_helper(ctx, + DUK_HOBJECT_FLAG_EXTENSIBLE | + DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_GLOBAL), + DUK_BIDX_OBJECT_PROTOTYPE); + h1 = duk_get_hobject(ctx, -1); + DUK_ASSERT(h1 != NULL); + h2 = thr->builtins[DUK_BIDX_GLOBAL]; + DUK_ASSERT(h2 != NULL); + + /* Copy the property table verbatim; this handles attributes etc. + * For ROM objects it's not necessary (or possible) to update + * refcounts so leave them as is. + */ + alloc_size = DUK_HOBJECT_P_ALLOC_SIZE(h2); + DUK_ASSERT(alloc_size > 0); + props = DUK_ALLOC(thr->heap, alloc_size); + if (!props) { + DUK_ERROR_ALLOC_DEFMSG(thr); + return; + } + DUK_ASSERT(DUK_HOBJECT_GET_PROPS(thr->heap, h2) != NULL); + DUK_MEMCPY((void *) props, (const void *) DUK_HOBJECT_GET_PROPS(thr->heap, h2), alloc_size); + + /* XXX: keep property attributes or tweak them here? + * Properties will now be non-configurable even when they're + * normally configurable for the global object. + */ + + DUK_ASSERT(DUK_HOBJECT_GET_PROPS(thr->heap, h1) == NULL); + DUK_HOBJECT_SET_PROPS(thr->heap, h1, props); + DUK_HOBJECT_SET_ESIZE(h1, DUK_HOBJECT_GET_ESIZE(h2)); + DUK_HOBJECT_SET_ENEXT(h1, DUK_HOBJECT_GET_ENEXT(h2)); + DUK_HOBJECT_SET_ASIZE(h1, DUK_HOBJECT_GET_ASIZE(h2)); + DUK_HOBJECT_SET_HSIZE(h1, DUK_HOBJECT_GET_HSIZE(h2)); +#else +#error internal error in defines +#endif + + duk_hobject_compact_props(thr, h1); + DUK_ASSERT(thr->builtins[DUK_BIDX_GLOBAL] != NULL); + DUK_ASSERT(!DUK_HEAPHDR_NEEDS_REFCOUNT_UPDATE((duk_heaphdr *) thr->builtins[DUK_BIDX_GLOBAL])); /* no need to decref */ + thr->builtins[DUK_BIDX_GLOBAL] = h1; + DUK_HOBJECT_INCREF(thr, h1); + DUK_D(DUK_DPRINT("duplicated global object: %!O", h1)); + + + /* Create a fresh object environment for the global scope. This is + * needed so that the global scope points to the newly created RAM-based + * global object. + */ + duk_push_object_helper(ctx, + DUK_HOBJECT_FLAG_EXTENSIBLE | + DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_OBJENV), + -1); /* no prototype */ + h1 = duk_get_hobject(ctx, -1); + DUK_ASSERT(h1 != NULL); + duk_dup(ctx, -2); + duk_dup(ctx, -1); /* -> [ ... new_global new_globalenv new_global new_global ] */ + duk_xdef_prop_stridx(thr, -3, DUK_STRIDX_INT_TARGET, DUK_PROPDESC_FLAGS_NONE); + duk_xdef_prop_stridx(thr, -2, DUK_STRIDX_INT_THIS, DUK_PROPDESC_FLAGS_NONE); /* always provideThis=true */ + + duk_hobject_compact_props(thr, h1); + DUK_ASSERT(thr->builtins[DUK_BIDX_GLOBAL_ENV] != NULL); + DUK_ASSERT(!DUK_HEAPHDR_NEEDS_REFCOUNT_UPDATE((duk_heaphdr *) thr->builtins[DUK_BIDX_GLOBAL_ENV])); /* no need to decref */ + thr->builtins[DUK_BIDX_GLOBAL_ENV] = h1; + DUK_HOBJECT_INCREF(thr, h1); + DUK_D(DUK_DPRINT("duplicated global env: %!O", h1)); + + duk_pop_2(ctx); +} +#endif /* DUK_USE_ROM_GLOBAL_CLONE || DUK_USE_ROM_GLOBAL_INHERIT */ + +DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { + /* Setup builtins from ROM objects. All heaps/threads will share + * the same readonly objects. + */ + duk_small_uint_t i; + + for (i = 0; i < DUK_NUM_BUILTINS; i++) { + duk_hobject *h; + h = (duk_hobject *) DUK_LOSE_CONST(duk_rom_builtins_bidx[i]); + DUK_ASSERT(h != NULL); + thr->builtins[i] = h; + } + +#if defined(DUK_USE_ROM_GLOBAL_CLONE) || defined(DUK_USE_ROM_GLOBAL_INHERIT) + /* By default the global object is read-only which is often much + * more of an issue than having read-only built-in objects (like + * RegExp, Date, etc). Use a RAM-based copy of the global object + * and the global environment object for convenience. + */ + duk__duplicate_ram_global_object(thr); +#endif +} +#else /* DUK_USE_ROM_OBJECTS */ +DUK_LOCAL void duk__push_stridx(duk_context *ctx, duk_bitdecoder_ctx *bd) { + duk_small_uint_t n; + + n = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRIDX_BITS); + DUK_ASSERT_DISABLE(n >= 0); /* unsigned */ + DUK_ASSERT(n < DUK_HEAP_NUM_STRINGS); + duk_push_hstring_stridx(ctx, n); +} +DUK_LOCAL void duk__push_string(duk_context *ctx, duk_bitdecoder_ctx *bd) { + duk_small_uint_t n; + duk_small_uint_t i; + duk_uint8_t *p; + + n = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRING_LENGTH_BITS); + p = (duk_uint8_t *) duk_push_fixed_buffer(ctx, n); + for (i = 0; i < n; i++) { + *p++ = (duk_uint8_t) duk_bd_decode(bd, DUK__STRING_CHAR_BITS); + } + duk_to_string(ctx, -1); +} +DUK_LOCAL void duk__push_stridx_or_string(duk_context *ctx, duk_bitdecoder_ctx *bd) { + if (duk_bd_decode_flag(bd)) { + duk__push_string(ctx, bd); + } else { + duk__push_stridx(ctx, bd); + } +} +DUK_LOCAL void duk__push_double(duk_context *ctx, duk_bitdecoder_ctx *bd) { + duk_double_union du; + duk_small_uint_t i; + + for (i = 0; i < 8; i++) { + /* Encoding endianness must match target memory layout, + * build scripts and genbuiltins.py must ensure this. + */ + du.uc[i] = (duk_uint8_t) duk_bd_decode(bd, 8); + } + + duk_push_number(ctx, du.d); /* push operation normalizes NaNs */ +} + DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { duk_context *ctx = (duk_context *) thr; duk_bitdecoder_ctx bd_ctx; @@ -55489,7 +53432,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { duk_hobject *h; duk_small_uint_t i, j; - DUK_D(DUK_DPRINT("INITBUILTINS BEGIN")); + DUK_D(DUK_DPRINT("INITBUILTINS BEGIN: DUK_NUM_BUILTINS=%d, DUK_NUM_BUILTINS_ALL=%d", (int) DUK_NUM_BUILTINS, (int) DUK_NUM_ALL_BUILTINS)); DUK_MEMZERO(&bd_ctx, sizeof(bd_ctx)); bd->data = (const duk_uint8_t *) duk_builtins_data; @@ -55497,18 +53440,22 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { /* * First create all built-in bare objects on the empty valstack. - * During init, their indices will correspond to built-in indices. * - * Built-ins will be reachable from both valstack and thr->builtins. + * Built-ins in the index range [0,DUK_NUM_BUILTINS-1] have value + * stack indices matching their eventual thr->builtins[] index. + * + * Built-ins in the index range [DUK_NUM_BUILTINS,DUK_NUM_ALL_BUILTINS] + * will exist on the value stack during init but won't be placed + * into thr->builtins[]. These are objects referenced in some way + * from thr->builtins[] roots but which don't need to be indexed by + * Duktape through thr->builtins[] (e.g. user custom objects). */ - /* XXX: there is no need to resize valstack because builtin count - * is much less than the default space; assert for it. - */ + duk_require_stack(ctx, DUK_NUM_ALL_BUILTINS); DUK_DD(DUK_DDPRINT("create empty built-ins")); DUK_ASSERT_TOP(ctx, 0); - for (i = 0; i < DUK_NUM_BUILTINS; i++) { + for (i = 0; i < DUK_NUM_ALL_BUILTINS; i++) { duk_small_uint_t class_num; duk_small_int_t len = -1; /* must be signed */ @@ -55517,7 +53464,6 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { if (class_num == DUK_HOBJECT_CLASS_FUNCTION) { duk_small_uint_t natidx; - duk_small_uint_t stridx; duk_int_t c_nargs; /* must hold DUK_VARARGS */ duk_c_function c_func; duk_int16_t magic; @@ -55526,7 +53472,6 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { DUK_ASSERT(len >= 0); natidx = (duk_small_uint_t) duk_bd_decode(bd, DUK__NATIDX_BITS); - stridx = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRIDX_BITS); c_func = duk_bi_native_functions[natidx]; c_nargs = (duk_small_uint_t) duk_bd_decode_flagged(bd, DUK__NARGS_BITS, len /*def_value*/); @@ -55548,8 +53493,16 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { /* XXX: function properties */ - duk_push_hstring_stridx(ctx, stridx); - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_NAME, DUK_PROPDESC_FLAGS_NONE); + /* Built-in 'name' is not writable by default. Function '.name' + * is writable to allow user code to set a '.name' on a native + * function. + */ + duk__push_stridx_or_string(ctx, bd); + duk_xdef_prop_stridx(ctx, + -2, + DUK_STRIDX_NAME, + (i == DUK_BIDX_FUNCTION_PROTOTYPE) ? + DUK_PROPDESC_FLAGS_W : DUK_PROPDESC_FLAGS_NONE); /* Almost all global level Function objects are constructable * but not all: Function.prototype is a non-constructable, @@ -55577,8 +53530,10 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { DUK_HOBJECT_SET_CLASS_NUMBER(h, class_num); - thr->builtins[i] = h; - DUK_HOBJECT_INCREF(thr, &h->hdr); + if (i < DUK_NUM_BUILTINS) { + thr->builtins[i] = h; + DUK_HOBJECT_INCREF(thr, &h->hdr); + } if (len >= 0) { /* @@ -55639,17 +53594,18 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { */ DUK_DD(DUK_DDPRINT("initialize built-in object properties")); - for (i = 0; i < DUK_NUM_BUILTINS; i++) { + for (i = 0; i < DUK_NUM_ALL_BUILTINS; i++) { duk_small_uint_t t; duk_small_uint_t num; DUK_DDD(DUK_DDDPRINT("initializing built-in object at index %ld", (long) i)); - h = thr->builtins[i]; + h = duk_require_hobject(ctx, i); + DUK_ASSERT(h != NULL); t = (duk_small_uint_t) duk_bd_decode(bd, DUK__BIDX_BITS); if (t != DUK__NO_BIDX_MARKER) { DUK_DDD(DUK_DDDPRINT("set internal prototype: built-in %ld", (long) t)); - DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, h, thr->builtins[t]); + DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, h, duk_require_hobject(ctx, t)); } t = (duk_small_uint_t) duk_bd_decode(bd, DUK__BIDX_BITS); @@ -55678,10 +53634,9 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { num = (duk_small_uint_t) duk_bd_decode(bd, DUK__NUM_NORMAL_PROPS_BITS); DUK_DDD(DUK_DDDPRINT("built-in object %ld, %ld normal valued properties", (long) i, (long) num)); for (j = 0; j < num; j++) { - duk_small_uint_t stridx; duk_small_uint_t prop_flags; - stridx = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRIDX_BITS); + duk__push_stridx_or_string(ctx, bd); /* * Property attribute defaults are defined in E5 Section 15 (first @@ -55693,54 +53648,25 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { if (duk_bd_decode_flag(bd)) { prop_flags = (duk_small_uint_t) duk_bd_decode(bd, DUK__PROP_FLAGS_BITS); } else { - if (stridx == DUK_STRIDX_LENGTH) { - prop_flags = DUK_PROPDESC_FLAGS_NONE; - } else { - prop_flags = DUK_PROPDESC_FLAGS_WC; - } + prop_flags = DUK_PROPDESC_FLAGS_WC; } t = (duk_small_uint_t) duk_bd_decode(bd, DUK__PROP_TYPE_BITS); - DUK_DDD(DUK_DDDPRINT("built-in %ld, normal-valued property %ld, stridx %ld, flags 0x%02lx, type %ld", - (long) i, (long) j, (long) stridx, (unsigned long) prop_flags, (long) t)); + DUK_DDD(DUK_DDDPRINT("built-in %ld, normal-valued property %ld, key %!T, flags 0x%02lx, type %ld", + (long) i, (long) j, duk_get_tval(ctx, -1), (unsigned long) prop_flags, (long) t)); switch (t) { case DUK__PROP_TYPE_DOUBLE: { - duk_double_union du; - duk_small_uint_t k; - - for (k = 0; k < 8; k++) { - /* Encoding endianness must match target memory layout, - * build scripts and genbuiltins.py must ensure this. - */ - du.uc[k] = (duk_uint8_t) duk_bd_decode(bd, 8); - } - - duk_push_number(ctx, du.d); /* push operation normalizes NaNs */ + duk__push_double(ctx, bd); break; } case DUK__PROP_TYPE_STRING: { - duk_small_uint_t n; - duk_small_uint_t k; - duk_uint8_t *p; - - n = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRING_LENGTH_BITS); - p = (duk_uint8_t *) duk_push_fixed_buffer(ctx, n); - for (k = 0; k < n; k++) { - *p++ = (duk_uint8_t) duk_bd_decode(bd, DUK__STRING_CHAR_BITS); - } - - duk_to_string(ctx, -1); + duk__push_string(ctx, bd); break; } case DUK__PROP_TYPE_STRIDX: { - duk_small_uint_t n; - - n = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRIDX_BITS); - DUK_ASSERT_DISABLE(n >= 0); /* unsigned */ - DUK_ASSERT(n < DUK_HEAP_NUM_STRINGS); - duk_push_hstring_stridx(ctx, n); + duk__push_stridx(ctx, bd); break; } case DUK__PROP_TYPE_BUILTIN: { @@ -55769,8 +53695,11 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { duk_c_function c_func_getter; duk_c_function c_func_setter; - DUK_DDD(DUK_DDDPRINT("built-in accessor property: objidx=%ld, stridx=%ld, getteridx=%ld, setteridx=%ld, flags=0x%04lx", - (long) i, (long) stridx, (long) natidx_getter, (long) natidx_setter, (unsigned long) prop_flags)); + /* XXX: this is a bit awkward because there is no exposed helper + * in the API style, only this internal helper. + */ + DUK_DDD(DUK_DDDPRINT("built-in accessor property: objidx=%ld, key=%!T, getteridx=%ld, setteridx=%ld, flags=0x%04lx", + (long) i, duk_get_tval(ctx, -1), (long) natidx_getter, (long) natidx_setter, (unsigned long) prop_flags)); c_func_getter = duk_bi_native_functions[natidx_getter]; c_func_setter = duk_bi_native_functions[natidx_setter]; @@ -55779,14 +53708,16 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { /* XXX: magic for getter/setter? use duk_def_prop()? */ + DUK_ASSERT((prop_flags & DUK_PROPDESC_FLAG_WRITABLE) == 0); /* genbuiltins.py ensures */ + prop_flags |= DUK_PROPDESC_FLAG_ACCESSOR; /* accessor flag not encoded explicitly */ duk_hobject_define_accessor_internal(thr, duk_require_hobject(ctx, i), - DUK_HTHREAD_GET_STRING(thr, stridx), + duk_get_hstring(ctx, -3), duk_require_hobject(ctx, -2), duk_require_hobject(ctx, -1), prop_flags); - duk_pop_2(ctx); /* getter and setter, now reachable through object */ + duk_pop_3(ctx); /* key, getter and setter, now reachable through object */ goto skip_value; } default: { @@ -55796,7 +53727,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { } DUK_ASSERT((prop_flags & DUK_PROPDESC_FLAG_ACCESSOR) == 0); - duk_xdef_prop_stridx(ctx, i, stridx, prop_flags); + duk_xdef_prop(ctx, i, prop_flags); skip_value: continue; /* avoid empty label at the end of a compound statement */ @@ -55806,7 +53737,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { num = (duk_small_uint_t) duk_bd_decode(bd, DUK__NUM_FUNC_PROPS_BITS); DUK_DDD(DUK_DDDPRINT("built-in object %ld, %ld function valued properties", (long) i, (long) num)); for (j = 0; j < num; j++) { - duk_small_uint_t stridx; + duk_hstring *h_key; duk_small_uint_t natidx; duk_int_t c_nargs; /* must hold DUK_VARARGS */ duk_small_uint_t c_length; @@ -55817,7 +53748,10 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { duk_small_int_t lightfunc_eligible; #endif - stridx = (duk_small_uint_t) duk_bd_decode(bd, DUK__STRIDX_BITS); + duk__push_stridx_or_string(ctx, bd); + h_key = duk_get_hstring(ctx, -1); + DUK_ASSERT(h_key != NULL); + DUK_UNREF(h_key); natidx = (duk_small_uint_t) duk_bd_decode(bd, DUK__NATIDX_BITS); c_length = (duk_small_uint_t) duk_bd_decode(bd, DUK__LENGTH_PROP_BITS); @@ -55828,8 +53762,8 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { c_func = duk_bi_native_functions[natidx]; - DUK_DDD(DUK_DDDPRINT("built-in %ld, function-valued property %ld, stridx %ld, natidx %ld, length %ld, nargs %ld", - (long) i, (long) j, (long) stridx, (long) natidx, (long) c_length, + DUK_DDD(DUK_DDDPRINT("built-in %ld, function-valued property %ld, key %!O, natidx %ld, length %ld, nargs %ld", + (long) i, (long) j, (duk_heaphdr *) h_key, (long) natidx, (long) c_length, (c_nargs == DUK_VARARGS ? (long) -1 : (long) c_nargs))); /* Cast converts magic to 16-bit signed value */ @@ -55840,15 +53774,16 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { ((c_nargs >= DUK_LFUNC_NARGS_MIN && c_nargs <= DUK_LFUNC_NARGS_MAX) || (c_nargs == DUK_VARARGS)) && (c_length <= DUK_LFUNC_LENGTH_MAX) && (magic >= DUK_LFUNC_MAGIC_MIN && magic <= DUK_LFUNC_MAGIC_MAX); - if (stridx == DUK_STRIDX_EVAL || - stridx == DUK_STRIDX_YIELD || - stridx == DUK_STRIDX_RESUME || - stridx == DUK_STRIDX_REQUIRE) { + + if (h_key == DUK_HTHREAD_STRING_EVAL(thr) || + h_key == DUK_HTHREAD_STRING_YIELD(thr) || + h_key == DUK_HTHREAD_STRING_RESUME(thr) || + h_key == DUK_HTHREAD_STRING_REQUIRE(thr)) { /* These functions have trouble working as lightfuncs. * Some of them have specific asserts and some may have * additional properties (e.g. 'require.id' may be written). */ - DUK_D(DUK_DPRINT("reject as lightfunc: stridx=%d, i=%d, j=%d", (int) stridx, (int) i, (int) j)); + DUK_D(DUK_DPRINT("reject as lightfunc: key=%!O, i=%d, j=%d", (duk_heaphdr *) h_key, (int) i, (int) j)); lightfunc_eligible = 0; } @@ -55865,7 +53800,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { DUK_D(DUK_DPRINT("built-in function NOT ELIGIBLE as light function: i=%d, j=%d c_length=%ld, c_nargs=%ld, magic=%ld", (int) i, (int) j, (long) c_length, (long) c_nargs, (long) magic)); #endif /* DUK_USE_LIGHTFUNC_BUILTINS */ - /* [ (builtin objects) ] */ + /* [ (builtin objects) name ] */ duk_push_c_function_noconstruct_noexotic(ctx, c_func, c_nargs); h_func = duk_require_hnativefunction(ctx, -1); @@ -55889,12 +53824,12 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { */ h_func->magic = magic; - /* [ (builtin objects) func ] */ + /* [ (builtin objects) name func ] */ duk_push_int(ctx, c_length); duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_LENGTH, DUK_PROPDESC_FLAGS_NONE); - duk_push_hstring_stridx(ctx, stridx); + duk_dup(ctx, -2); duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_NAME, DUK_PROPDESC_FLAGS_NONE); /* XXX: other properties of function instances; 'arguments', 'caller'. */ @@ -55902,7 +53837,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { DUK_DD(DUK_DDPRINT("built-in object %ld, function property %ld -> %!T", (long) i, (long) j, (duk_tval *) duk_get_tval(ctx, -1))); - /* [ (builtin objects) func ] */ + /* [ (builtin objects) name func ] */ /* * The default property attributes are correct for all @@ -55913,7 +53848,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { lightfunc_skip: #endif - duk_xdef_prop_stridx(ctx, i, stridx, DUK_PROPDESC_FLAGS_WC); + duk_xdef_prop(ctx, i, DUK_PROPDESC_FLAGS_WC); /* [ (builtin objects) ] */ } @@ -55953,6 +53888,7 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { (void) duk_hobject_delprop_raw(thr, thr->builtins[DUK_BIDX_OBJECT_CONSTRUCTOR], DUK_HTHREAD_STRING_SET_PROTOTYPE_OF(thr), DUK_DELPROP_FLAG_THROW); #endif + /* XXX: relocate */ duk_push_string(ctx, /* Endianness indicator */ #if defined(DUK_USE_INTEGER_LE) @@ -56021,6 +53957,13 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { #endif #if defined(DUK_USE_LIGHTFUNC_BUILTINS) "L" +#endif +#if defined(DUK_USE_ROM_STRINGS) || defined(DUK_USE_ROM_OBJECTS) + /* XXX: This won't be shown in practice now + * because this code is not run when builtins + * are in ROM. + */ + "Z" #endif " " /* Object property allocation layout */ @@ -56077,27 +54020,29 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) { */ DUK_DD(DUK_DDPRINT("compact built-ins")); - for (i = 0; i < DUK_NUM_BUILTINS; i++) { - duk_hobject_compact_props(thr, thr->builtins[i]); + for (i = 0; i < DUK_NUM_ALL_BUILTINS; i++) { + duk_hobject_compact_props(thr, duk_require_hobject(ctx, i)); } DUK_D(DUK_DPRINT("INITBUILTINS END")); #ifdef DUK_USE_DDPRINT - for (i = 0; i < DUK_NUM_BUILTINS; i++) { + for (i = 0; i < DUK_NUM_ALL_BUILTINS; i++) { DUK_DD(DUK_DDPRINT("built-in object %ld after initialization and compacting: %!@iO", - (long) i, (duk_heaphdr *) thr->builtins[i])); + (long) i, (duk_heaphdr *) duk_require_hobject(ctx, i))); } #endif /* * Pop built-ins from stack: they are now INCREF'd and - * reachable from the builtins[] array. + * reachable from the builtins[] array or indirectly + * through builtins[]. */ - duk_pop_n(ctx, DUK_NUM_BUILTINS); + duk_set_top(ctx, 0); DUK_ASSERT_TOP(ctx, 0); } +#endif /* DUK_USE_ROM_OBJECTS */ DUK_INTERNAL void duk_hthread_copy_builtin_objects(duk_hthread *thr_from, duk_hthread *thr_to) { duk_small_uint_t i; @@ -56260,7 +54205,7 @@ DUK_INTERNAL void duk_hthread_callstack_grow(duk_hthread *thr) { /* this is a bit approximate (errors out before max is reached); this is OK */ if (new_size >= thr->callstack_max) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_CALLSTACK_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_CALLSTACK_LIMIT); } DUK_DD(DUK_DDPRINT("growing callstack %ld -> %ld", (long) old_size, (long) new_size)); @@ -56274,7 +54219,7 @@ DUK_INTERNAL void duk_hthread_callstack_grow(duk_hthread *thr) { new_ptr = (duk_activation *) DUK_REALLOC_INDIRECT(thr->heap, duk_hthread_get_callstack_ptr, (void *) thr, sizeof(duk_activation) * new_size); if (!new_ptr) { /* No need for a NULL/zero-size check because new_size > 0) */ - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_REALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } thr->callstack = new_ptr; thr->callstack_size = new_size; @@ -56565,7 +54510,7 @@ DUK_INTERNAL void duk_hthread_catchstack_grow(duk_hthread *thr) { /* this is a bit approximate (errors out before max is reached); this is OK */ if (new_size >= thr->catchstack_max) { - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_CATCHSTACK_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_CATCHSTACK_LIMIT); } DUK_DD(DUK_DDPRINT("growing catchstack %ld -> %ld", (long) old_size, (long) new_size)); @@ -56579,7 +54524,7 @@ DUK_INTERNAL void duk_hthread_catchstack_grow(duk_hthread *thr) { new_ptr = (duk_catcher *) DUK_REALLOC_INDIRECT(thr->heap, duk_hthread_get_catchstack_ptr, (void *) thr, sizeof(duk_catcher) * new_size); if (!new_ptr) { /* No need for a NULL/zero-size check because new_size > 0) */ - DUK_ERROR(thr, DUK_ERR_ALLOC_ERROR, DUK_STR_REALLOC_FAILED); + DUK_ERROR_ALLOC_DEFMSG(thr); } thr->catchstack = new_ptr; thr->catchstack_size = new_size; @@ -56734,11 +54679,8 @@ DUK_LOCAL void duk__handle_call_error(duk_hthread *thr, duk_hthread *entry_curr_thread, duk_uint_fast8_t entry_thread_state, duk_instr_t **entry_ptr_curr_pc, - duk_idx_t idx_func -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , duk_jmpbuf *old_jmpbuf_ptr -#endif - ); + duk_idx_t idx_func, + duk_jmpbuf *old_jmpbuf_ptr); DUK_LOCAL void duk__handle_safe_call_inner(duk_hthread *thr, duk_safe_call_function func, duk_idx_t idx_retbase, @@ -56751,11 +54693,8 @@ DUK_LOCAL void duk__handle_safe_call_error(duk_hthread *thr, duk_idx_t num_stack_rets, duk_size_t entry_valstack_bottom_index, duk_size_t entry_callstack_top, - duk_size_t entry_catchstack_top -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , duk_jmpbuf *old_jmpbuf_ptr -#endif - ); + duk_size_t entry_catchstack_top, + duk_jmpbuf *old_jmpbuf_ptr); DUK_LOCAL void duk__handle_safe_call_shared(duk_hthread *thr, duk_idx_t idx_retbase, duk_idx_t num_stack_rets, @@ -57144,7 +55083,7 @@ DUK_LOCAL void duk__handle_bound_chain_for_call(duk_hthread *thr, /* Function.prototype.bind() should never let this happen, * ugly error message is enough. */ - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); } DUK_ASSERT(DUK_TVAL_GET_OBJECT(tv_func) != NULL); @@ -57196,7 +55135,7 @@ DUK_LOCAL void duk__handle_bound_chain_for_call(duk_hthread *thr, } while (--sanity > 0); if (sanity == 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_BOUND_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_BOUND_CHAIN_LIMIT); } DUK_DDD(DUK_DDDPRINT("final non-bound function is: %!T", duk_get_tval(ctx, idx_func))); @@ -57427,7 +55366,7 @@ DUK_LOCAL duk_hobject *duk__nonbound_func_lookup(duk_context *ctx, for (;;) { /* Use loop to minimize code size of relookup after bound function case */ - tv_func = duk_get_tval(ctx, idx_func); + tv_func = DUK_GET_TVAL_POSIDX(ctx, idx_func); DUK_ASSERT(tv_func != NULL); if (DUK_TVAL_IS_OBJECT(tv_func)) { @@ -57467,9 +55406,9 @@ DUK_LOCAL duk_hobject *duk__nonbound_func_lookup(duk_context *ctx, not_callable_error: DUK_ASSERT(tv_func != NULL); #if defined(DUK_USE_PARANOID_ERRORS) - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CALLABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CALLABLE); #else - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "%s not callable", duk_push_string_tval_readable(ctx, tv_func)); + DUK_ERROR_FMT1(thr, DUK_ERR_TYPE_ERROR, "%s not callable", duk_push_string_tval_readable(ctx, tv_func)); #endif DUK_UNREACHABLE(); return NULL; /* never executed */ @@ -57677,10 +55616,8 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, duk_hthread *entry_curr_thread; duk_uint_fast8_t entry_thread_state; duk_instr_t **entry_ptr_curr_pc; -#if !defined(DUK_USE_CPP_EXCEPTIONS) duk_jmpbuf *old_jmpbuf_ptr = NULL; duk_jmpbuf our_jmpbuf; -#endif duk_idx_t idx_func; /* valstack index of 'func' and retval (relative to entry valstack_bottom) */ /* XXX: Multiple tv_func lookups are now avoided by making a local @@ -57742,15 +55679,14 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, (void *) entry_curr_thread, (long) entry_thread_state)); -#if !defined(DUK_USE_CPP_EXCEPTIONS) old_jmpbuf_ptr = thr->heap->lj.jmpbuf_ptr; thr->heap->lj.jmpbuf_ptr = &our_jmpbuf; -#endif #if defined(DUK_USE_CPP_EXCEPTIONS) try { #else - if (DUK_LIKELY(DUK_SETJMP(thr->heap->lj.jmpbuf_ptr->jb) == 0)) { + DUK_ASSERT(thr->heap->lj.jmpbuf_ptr == &our_jmpbuf); + if (DUK_SETJMP(our_jmpbuf.jb) == 0) { #endif /* Call handling and success path. Success path exit cleans * up almost all state. @@ -57767,9 +55703,7 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, DUK_ASSERT(DUK_TVAL_IS_UNDEFINED(&thr->heap->lj.value1)); DUK_ASSERT(DUK_TVAL_IS_UNDEFINED(&thr->heap->lj.value2)); -#if !defined(DUK_USE_CPP_EXCEPTIONS) thr->heap->lj.jmpbuf_ptr = old_jmpbuf_ptr; -#endif return DUK_EXEC_SUCCESS; #if defined(DUK_USE_CPP_EXCEPTIONS) @@ -57792,11 +55726,8 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, entry_curr_thread, entry_thread_state, entry_ptr_curr_pc, - idx_func -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , old_jmpbuf_ptr -#endif - ); + idx_func, + old_jmpbuf_ptr); /* Longjmp state is cleaned up by error handling */ DUK_ASSERT(thr->heap->lj.type == DUK_LJ_TYPE_UNKNOWN); @@ -57813,9 +55744,10 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, } DUK_D(DUK_DPRINT("unexpected c++ std::exception (perhaps thrown by user code)")); try { - DUK_ERROR(thr, DUK_ERR_API_ERROR, "caught invalid c++ std::exception '%s' (perhaps thrown by user code)", what); + DUK_ERROR_FMT1(thr, DUK_ERR_API_ERROR, "caught invalid c++ std::exception '%s' (perhaps thrown by user code)", what); } catch (duk_internal_exception exc) { DUK_D(DUK_DPRINT("caught api error thrown from unexpected c++ std::exception")); + DUK_UNREF(exc); duk__handle_call_error(thr, entry_valstack_bottom_index, entry_valstack_end, @@ -57825,15 +55757,17 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, entry_curr_thread, entry_thread_state, entry_ptr_curr_pc, - idx_func); + idx_func, + old_jmpbuf_ptr); return DUK_EXEC_ERROR; } } catch (...) { DUK_D(DUK_DPRINT("unexpected c++ exception (perhaps thrown by user code)")); try { - DUK_ERROR(thr, DUK_ERR_API_ERROR, "caught invalid c++ exception (perhaps thrown by user code)"); + DUK_ERROR_API(thr, "caught invalid c++ exception (perhaps thrown by user code)"); } catch (duk_internal_exception exc) { DUK_D(DUK_DPRINT("caught api error thrown from unexpected c++ exception")); + DUK_UNREF(exc); duk__handle_call_error(thr, entry_valstack_bottom_index, entry_valstack_end, @@ -57843,7 +55777,8 @@ DUK_INTERNAL duk_int_t duk_handle_call_protected(duk_hthread *thr, entry_curr_thread, entry_thread_state, entry_ptr_curr_pc, - idx_func); + idx_func, + old_jmpbuf_ptr); return DUK_EXEC_ERROR; } } @@ -57990,7 +55925,7 @@ DUK_LOCAL void duk__handle_call_inner(duk_hthread *thr, * limit which is also essentially the same as a C callstack limit * (except perhaps with some relaxed threading assumptions). */ - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_C_CALLSTACK_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_C_CALLSTACK_LIMIT); } thr->heap->call_recursion_depth++; } @@ -58091,7 +56026,7 @@ DUK_LOCAL void duk__handle_call_inner(duk_hthread *thr, nregs = nargs; } else { /* XXX: this should be an assert */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_NOT_CALLABLE); + DUK_ERROR_TYPE(thr, DUK_STR_NOT_CALLABLE); } } else { duk_small_uint_t lf_flags; @@ -58337,7 +56272,7 @@ DUK_LOCAL void duk__handle_call_inner(duk_hthread *thr, duk_error_throw_from_negative_rc(thr, rc); DUK_UNREACHABLE(); } else if (rc > 1) { - DUK_ERROR(thr, DUK_ERR_API_ERROR, "c function returned invalid rc"); + DUK_ERROR_API(thr, "c function returned invalid rc"); } DUK_ASSERT(rc == 0 || rc == 1); @@ -58431,7 +56366,7 @@ DUK_LOCAL void duk__handle_call_inner(duk_hthread *thr, return; thread_state_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "invalid thread state for call (%ld)", (long) thr->state); + DUK_ERROR_FMT1(thr, DUK_ERR_TYPE_ERROR, "invalid thread state for call (%ld)", (long) thr->state); DUK_UNREACHABLE(); return; /* never executed */ } @@ -58445,11 +56380,8 @@ DUK_LOCAL void duk__handle_call_error(duk_hthread *thr, duk_hthread *entry_curr_thread, duk_uint_fast8_t entry_thread_state, duk_instr_t **entry_ptr_curr_pc, - duk_idx_t idx_func -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , duk_jmpbuf *old_jmpbuf_ptr -#endif - ) { + duk_idx_t idx_func, + duk_jmpbuf *old_jmpbuf_ptr) { duk_context *ctx; duk_tval *tv_ret; @@ -58471,7 +56403,6 @@ DUK_LOCAL void duk__handle_call_error(duk_hthread *thr, */ DUK_ASSERT(thr->ptr_curr_pc == NULL); -#if !defined(DUK_USE_CPP_EXCEPTIONS) /* Restore the previous setjmp catcher so that any error in * error handling will propagate outwards rather than re-enter * the same handler. However, the error handling path must be @@ -58479,7 +56410,6 @@ DUK_LOCAL void duk__handle_call_error(duk_hthread *thr, * reliable, see e.g. https://github.com/svaarala/duktape/issues/476. */ thr->heap->lj.jmpbuf_ptr = old_jmpbuf_ptr; -#endif /* XXX: callstack unwind may now throw an error when closing * scopes; this is a sandboxing issue, described in: @@ -58592,10 +56522,8 @@ DUK_INTERNAL duk_int_t duk_handle_safe_call(duk_hthread *thr, duk_hthread *entry_curr_thread; duk_uint_fast8_t entry_thread_state; duk_instr_t **entry_ptr_curr_pc; -#if !defined(DUK_USE_CPP_EXCEPTIONS) duk_jmpbuf *old_jmpbuf_ptr = NULL; duk_jmpbuf our_jmpbuf; -#endif duk_idx_t idx_retbase; duk_int_t retval; @@ -58642,15 +56570,14 @@ DUK_INTERNAL duk_int_t duk_handle_safe_call(duk_hthread *thr, /* setjmp catchpoint setup */ -#if !defined(DUK_USE_CPP_EXCEPTIONS) old_jmpbuf_ptr = thr->heap->lj.jmpbuf_ptr; thr->heap->lj.jmpbuf_ptr = &our_jmpbuf; -#endif #if defined(DUK_USE_CPP_EXCEPTIONS) try { #else - if (DUK_LIKELY(DUK_SETJMP(thr->heap->lj.jmpbuf_ptr->jb) == 0)) { + DUK_ASSERT(thr->heap->lj.jmpbuf_ptr == &our_jmpbuf); + if (DUK_SETJMP(our_jmpbuf.jb) == 0) { /* Success path. */ #endif DUK_DDD(DUK_DDDPRINT("safe_call setjmp catchpoint setup complete")); @@ -58669,33 +56596,24 @@ DUK_INTERNAL duk_int_t duk_handle_safe_call(duk_hthread *thr, DUK_ASSERT(DUK_TVAL_IS_UNDEFINED(&thr->heap->lj.value1)); DUK_ASSERT(DUK_TVAL_IS_UNDEFINED(&thr->heap->lj.value2)); -#if !defined(DUK_USE_CPP_EXCEPTIONS) /* Note: either pointer may be NULL (at entry), so don't assert */ thr->heap->lj.jmpbuf_ptr = old_jmpbuf_ptr; -#endif retval = DUK_EXEC_SUCCESS; #if defined(DUK_USE_CPP_EXCEPTIONS) } catch (duk_internal_exception &exc) { + DUK_UNREF(exc); #else } else { /* Error path. */ #endif - -#if defined(DUK_USE_CPP_EXCEPTIONS) - DUK_UNREF(exc); -#endif - duk__handle_safe_call_error(thr, idx_retbase, num_stack_rets, entry_valstack_bottom_index, entry_callstack_top, - entry_catchstack_top -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , old_jmpbuf_ptr -#endif - ); + entry_catchstack_top, + old_jmpbuf_ptr); /* Longjmp state is cleaned up by error handling */ DUK_ASSERT(thr->heap->lj.type == DUK_LJ_TYPE_UNKNOWN); @@ -58713,37 +56631,39 @@ DUK_INTERNAL duk_int_t duk_handle_safe_call(duk_hthread *thr, } DUK_D(DUK_DPRINT("unexpected c++ std::exception (perhaps thrown by user code)")); try { - DUK_ERROR(thr, DUK_ERR_API_ERROR, "caught invalid c++ std::exception '%s' (perhaps thrown by user code)", what); + DUK_ERROR_FMT1(thr, DUK_ERR_API_ERROR, "caught invalid c++ std::exception '%s' (perhaps thrown by user code)", what); } catch (duk_internal_exception exc) { DUK_D(DUK_DPRINT("caught api error thrown from unexpected c++ std::exception")); + DUK_UNREF(exc); duk__handle_safe_call_error(thr, idx_retbase, num_stack_rets, entry_valstack_bottom_index, entry_callstack_top, - entry_catchstack_top); + entry_catchstack_top, + old_jmpbuf_ptr); retval = DUK_EXEC_ERROR; } } catch (...) { DUK_D(DUK_DPRINT("unexpected c++ exception (perhaps thrown by user code)")); try { - DUK_ERROR(thr, DUK_ERR_API_ERROR, "caught invalid c++ exception (perhaps thrown by user code)"); + DUK_ERROR_API(thr, "caught invalid c++ exception (perhaps thrown by user code)"); } catch (duk_internal_exception exc) { DUK_D(DUK_DPRINT("caught api error thrown from unexpected c++ exception")); + DUK_UNREF(exc); duk__handle_safe_call_error(thr, idx_retbase, num_stack_rets, entry_valstack_bottom_index, entry_callstack_top, - entry_catchstack_top); + entry_catchstack_top, + old_jmpbuf_ptr); retval = DUK_EXEC_ERROR; } } #endif -#if !defined(DUK_USE_CPP_EXCEPTIONS) DUK_ASSERT(thr->heap->lj.jmpbuf_ptr == old_jmpbuf_ptr); /* success/error path both do this */ -#endif duk__handle_safe_call_shared(thr, idx_retbase, @@ -58815,7 +56735,7 @@ DUK_LOCAL void duk__handle_safe_call_inner(duk_hthread *thr, * limit which is also essentially the same as a C callstack limit * (except perhaps with some relaxed threading assumptions). */ - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_C_CALLSTACK_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_C_CALLSTACK_LIMIT); } thr->heap->call_recursion_depth++; @@ -58861,7 +56781,7 @@ DUK_LOCAL void duk__handle_safe_call_inner(duk_hthread *thr, return; thread_state_error: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "invalid thread state for safe_call (%ld)", (long) thr->state); + DUK_ERROR_FMT1(thr, DUK_ERR_TYPE_ERROR, "invalid thread state for safe_call (%ld)", (long) thr->state); DUK_UNREACHABLE(); } @@ -58870,11 +56790,8 @@ DUK_LOCAL void duk__handle_safe_call_error(duk_hthread *thr, duk_idx_t num_stack_rets, duk_size_t entry_valstack_bottom_index, duk_size_t entry_callstack_top, - duk_size_t entry_catchstack_top -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , duk_jmpbuf *old_jmpbuf_ptr -#endif - ) { + duk_size_t entry_catchstack_top, + duk_jmpbuf *old_jmpbuf_ptr) { duk_context *ctx; DUK_ASSERT(thr != NULL); @@ -58899,9 +56816,7 @@ DUK_LOCAL void duk__handle_safe_call_error(duk_hthread *thr, DUK_ASSERT(thr->catchstack_top >= entry_catchstack_top); /* Note: either pointer may be NULL (at entry), so don't assert. */ -#if !defined(DUK_USE_CPP_EXCEPTIONS) thr->heap->lj.jmpbuf_ptr = old_jmpbuf_ptr; -#endif DUK_ASSERT(thr->catchstack_top >= entry_catchstack_top); DUK_ASSERT(thr->callstack_top >= entry_callstack_top); @@ -59835,7 +57750,7 @@ DUK_LOCAL void duk__recursion_increase(duk_compiler_ctx *comp_ctx) { DUK_ASSERT(comp_ctx != NULL); DUK_ASSERT(comp_ctx->recursion_depth >= 0); if (comp_ctx->recursion_depth >= comp_ctx->recursion_limit) { - DUK_ERROR(comp_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_COMPILER_RECURSION_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_COMPILER_RECURSION_LIMIT); } comp_ctx->recursion_depth++; } @@ -59894,7 +57809,7 @@ DUK_LOCAL void duk__advance_helper(duk_compiler_ctx *comp_ctx, duk_small_int_t e if (expect >= 0 && comp_ctx->curr_token.t != expect) { DUK_D(DUK_DPRINT("parse error: expect=%ld, got=%ld", (long) expect, (long) comp_ctx->curr_token.t)); - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_PARSE_ERROR); + DUK_ERROR_SYNTAX(thr, DUK_STR_PARSE_ERROR); } /* make current token the previous; need to fiddle with valstack "backing store" */ @@ -59966,23 +57881,23 @@ DUK_LOCAL void duk__init_func_valstack_slots(duk_compiler_ctx *comp_ctx) { duk_push_array(ctx); func->consts_idx = entry_top + 1; - func->h_consts = duk_get_hobject(ctx, entry_top + 1); + func->h_consts = DUK_GET_HOBJECT_POSIDX(ctx, entry_top + 1); DUK_ASSERT(func->h_consts != NULL); duk_push_array(ctx); func->funcs_idx = entry_top + 2; - func->h_funcs = duk_get_hobject(ctx, entry_top + 2); + func->h_funcs = DUK_GET_HOBJECT_POSIDX(ctx, entry_top + 2); DUK_ASSERT(func->h_funcs != NULL); DUK_ASSERT(func->fnum_next == 0); duk_push_array(ctx); func->decls_idx = entry_top + 3; - func->h_decls = duk_get_hobject(ctx, entry_top + 3); + func->h_decls = DUK_GET_HOBJECT_POSIDX(ctx, entry_top + 3); DUK_ASSERT(func->h_decls != NULL); duk_push_array(ctx); func->labelnames_idx = entry_top + 4; - func->h_labelnames = duk_get_hobject(ctx, entry_top + 4); + func->h_labelnames = DUK_GET_HOBJECT_POSIDX(ctx, entry_top + 4); DUK_ASSERT(func->h_labelnames != NULL); duk_push_dynamic_buffer(ctx, 0); @@ -59993,12 +57908,12 @@ DUK_LOCAL void duk__init_func_valstack_slots(duk_compiler_ctx *comp_ctx) { duk_push_array(ctx); func->argnames_idx = entry_top + 6; - func->h_argnames = duk_get_hobject(ctx, entry_top + 6); + func->h_argnames = DUK_GET_HOBJECT_POSIDX(ctx, entry_top + 6); DUK_ASSERT(func->h_argnames != NULL); duk_push_object_internal(ctx); func->varmap_idx = entry_top + 7; - func->h_varmap = duk_get_hobject(ctx, entry_top + 7); + func->h_varmap = DUK_GET_HOBJECT_POSIDX(ctx, entry_top + 7); DUK_ASSERT(func->h_varmap != NULL); } @@ -60024,7 +57939,7 @@ DUK_LOCAL void duk__reset_func_for_pass2(duk_compiler_ctx *comp_ctx) { /* truncated in case pass 3 needed */ duk_push_object_internal(ctx); duk_replace(ctx, func->varmap_idx); - func->h_varmap = duk_get_hobject(ctx, func->varmap_idx); + func->h_varmap = DUK_GET_HOBJECT_POSIDX(ctx, func->varmap_idx); DUK_ASSERT(func->h_varmap != NULL); } @@ -60042,7 +57957,7 @@ DUK_LOCAL duk_int_t duk__cleanup_varmap(duk_compiler_ctx *comp_ctx) { /* [ ... varmap ] */ - h_varmap = duk_get_hobject(ctx, -1); + h_varmap = DUK_GET_HOBJECT_NEGIDX(ctx, -1); DUK_ASSERT(h_varmap != NULL); ret = 0; @@ -60109,7 +58024,7 @@ DUK_LOCAL void duk__convert_to_func_template(duk_compiler_ctx *comp_ctx, duk_boo /* Valstack should suffice here, required on function valstack init */ (void) duk_push_compiledfunction(ctx); - h_res = (duk_hcompiledfunction *) duk_get_hobject(ctx, -1); /* XXX: specific getter */ + h_res = (duk_hcompiledfunction *) DUK_GET_HOBJECT_NEGIDX(ctx, -1); /* XXX: specific getter */ DUK_ASSERT(h_res != NULL); if (func->is_function) { @@ -60548,7 +58463,7 @@ DUK_LOCAL void duk__emit(duk_compiler_ctx *comp_ctx, duk_instr_t ins) { return; fail_bc_limit: - DUK_ERROR(comp_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_BYTECODE_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_BYTECODE_LIMIT); } /* Update function min/max line from current token. Needed to improve @@ -60827,7 +58742,7 @@ DUK_LOCAL void duk__emit_a_b_c(duk_compiler_ctx *comp_ctx, duk_small_uint_t op_f return; error_outofregs: - DUK_ERROR(comp_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_REG_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_REG_LIMIT); } DUK_LOCAL void duk__emit_a_b(duk_compiler_ctx *comp_ctx, duk_small_uint_t op_flags, duk_regconst_t a, duk_regconst_t b) { @@ -60886,7 +58801,7 @@ DUK_LOCAL void duk__emit_a_bc(duk_compiler_ctx *comp_ctx, duk_small_uint_t op_fl return; error_outofregs: - DUK_ERROR(comp_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_REG_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_REG_LIMIT); } DUK_LOCAL void duk__emit_abc(duk_compiler_ctx *comp_ctx, duk_small_uint_t op, duk_regconst_t abc) { @@ -60912,7 +58827,7 @@ DUK_LOCAL void duk__emit_abc(duk_compiler_ctx *comp_ctx, duk_small_uint_t op, du return; error_outofregs: - DUK_ERROR(comp_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_REG_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_REG_LIMIT); } DUK_LOCAL void duk__emit_extraop_b_c(duk_compiler_ctx *comp_ctx, duk_small_uint_t extraop_flags, duk_regconst_t b, duk_regconst_t c) { @@ -61060,7 +58975,7 @@ DUK_LOCAL void duk__insert_jump_entry(duk_compiler_ctx *comp_ctx, duk_int_t jump return; fail_bc_limit: - DUK_ERROR(comp_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_BYTECODE_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_BYTECODE_LIMIT); } /* Does not assume that jump_pc contains a DUK_OP_JUMP previously; this is intentional @@ -61115,7 +59030,7 @@ DUK_LOCAL void duk__patch_trycatch(duk_compiler_ctx *comp_ctx, duk_int_t ldconst */ DUK_D(DUK_DPRINT("failed to patch trycatch: flags=%ld, reg_catch=%ld, const_varname=%ld (0x%08lx)", (long) flags, (long) reg_catch, (long) const_varname, (long) const_varname)); - DUK_ERROR(comp_ctx->thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_REG_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_REG_LIMIT); } instr->ins |= DUK_ENC_OP_A_BC(0, 0, const_varname); } else { @@ -61314,7 +59229,7 @@ DUK_LOCAL duk_reg_t duk__alloctemps(duk_compiler_ctx *comp_ctx, duk_small_int_t comp_ctx->curr_func.temp_next += num; if (comp_ctx->curr_func.temp_next > DUK__MAX_TEMPS) { /* == DUK__MAX_TEMPS is OK */ - DUK_ERROR(comp_ctx->thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_TEMP_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_TEMP_LIMIT); } /* maintain highest 'used' temporary, needed to figure out nregs of function */ @@ -61346,7 +59261,7 @@ DUK_LOCAL duk_regconst_t duk__getconst(duk_compiler_ctx *comp_ctx) { n = (duk_int_t) duk_get_length(ctx, f->consts_idx); - tv1 = duk_get_tval(ctx, -1); + tv1 = DUK_GET_TVAL_NEGIDX(ctx, -1); DUK_ASSERT(tv1 != NULL); #if defined(DUK_USE_FASTINT) @@ -61374,7 +59289,7 @@ DUK_LOCAL duk_regconst_t duk__getconst(duk_compiler_ctx *comp_ctx) { } if (n > DUK__MAX_CONSTS) { - DUK_ERROR(comp_ctx->thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_CONST_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_CONST_LIMIT); } DUK_DDD(DUK_DDDPRINT("allocating new constant for %!T -> const index %ld", @@ -61422,7 +59337,7 @@ duk_regconst_t duk__ispec_toregconst_raw(duk_compiler_ctx *comp_ctx, case DUK_ISPEC_VALUE: { duk_tval *tv; - tv = duk_get_tval(ctx, x->valstack_idx); + tv = DUK_GET_TVAL_POSIDX(ctx, x->valstack_idx); DUK_ASSERT(tv != NULL); switch (DUK_TVAL_GET_TAG(tv)) { @@ -61567,7 +59482,7 @@ duk_regconst_t duk__ispec_toregconst_raw(duk_compiler_ctx *comp_ctx, } } - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); return 0; } @@ -61612,8 +59527,8 @@ DUK_LOCAL void duk__ivalue_toplain_raw(duk_compiler_ctx *comp_ctx, duk_ivalue *x /* inline arithmetic check for constant values */ /* XXX: use the exactly same arithmetic function here as in executor */ if (x->x1.t == DUK_ISPEC_VALUE && x->x2.t == DUK_ISPEC_VALUE && x->t == DUK_IVAL_ARITH) { - tv1 = duk_get_tval(ctx, x->x1.valstack_idx); - tv2 = duk_get_tval(ctx, x->x2.valstack_idx); + tv1 = DUK_GET_TVAL_POSIDX(ctx, x->x1.valstack_idx); + tv2 = DUK_GET_TVAL_POSIDX(ctx, x->x2.valstack_idx); DUK_ASSERT(tv1 != NULL); DUK_ASSERT(tv2 != NULL); @@ -61791,7 +59706,7 @@ DUK_LOCAL void duk__ivalue_toplain_raw(duk_compiler_ctx *comp_ctx, duk_ivalue *x } } - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); return; } @@ -62013,7 +59928,7 @@ DUK_LOCAL void duk__add_label(duk_compiler_ctx *comp_ctx, duk_hstring *h_label, li--; if (li->h_label == h_label && h_label != DUK_HTHREAD_STRING_EMPTY_STRING(thr)) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_DUPLICATE_LABEL); + DUK_ERROR_SYNTAX(thr, DUK_STR_DUPLICATE_LABEL); } } @@ -62143,7 +60058,7 @@ DUK_LOCAL void duk__lookup_active_label(duk_compiler_ctx *comp_ctx, duk_hstring * finding a match deeper in the label stack. */ if (h_label != DUK_HTHREAD_STRING_EMPTY_STRING(thr)) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_LABEL); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_LABEL); } else { DUK_DDD(DUK_DDDPRINT("continue matched an empty label which does not " "allow a continue -> continue lookup deeper in label stack")); @@ -62152,7 +60067,7 @@ DUK_LOCAL void duk__lookup_active_label(duk_compiler_ctx *comp_ctx, duk_hstring } /* XXX: match flag is awkward, rework */ if (!match) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_LABEL); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_LABEL); } DUK_DDD(DUK_DDDPRINT("label match: %!O -> label_id %ld, catch_depth=%ld, pc_label=%ld", @@ -62336,7 +60251,7 @@ DUK_LOCAL void duk__nud_array_literal(duk_compiler_ctx *comp_ctx, duk_ivalue *re return; syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_ARRAY_LITERAL); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_ARRAY_LITERAL); } /* duplicate/invalid key checks; returns 1 if syntax error */ @@ -62637,7 +60552,7 @@ DUK_LOCAL void duk__nud_object_literal(duk_compiler_ctx *comp_ctx, duk_ivalue *r return; syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_OBJECT_LITERAL); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_OBJECT_LITERAL); } /* Parse argument list. Arguments are written to temps starting from @@ -62937,7 +60852,7 @@ DUK_LOCAL void duk__expr_nud(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { duk_regconst_t rc_varname; if (comp_ctx->curr_func.is_strict) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_CANNOT_DELETE_IDENTIFIER); + DUK_ERROR_SYNTAX(thr, DUK_STR_CANNOT_DELETE_IDENTIFIER); } DUK__SETTEMP(comp_ctx, temp_at_entry); @@ -63047,12 +60962,13 @@ DUK_LOCAL void duk__expr_nud(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { duk__expr(comp_ctx, res, DUK__BP_MULTIPLICATIVE /*rbp_flags*/); /* UnaryExpression */ if (res->t == DUK_IVAL_PLAIN && res->x1.t == DUK_ISPEC_VALUE && duk_is_number(ctx, res->x1.valstack_idx)) { - /* this optimization is important to handle negative literals (which are not directly - * provided by the lexical grammar + /* this optimization is important to handle negative literals + * (which are not directly provided by the lexical grammar) */ - duk_tval *tv_num = duk_get_tval(ctx, res->x1.valstack_idx); + duk_tval *tv_num; duk_double_union du; + tv_num = DUK_GET_TVAL_POSIDX(ctx, res->x1.valstack_idx); DUK_ASSERT(tv_num != NULL); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv_num)); du.d = DUK_TVAL_GET_NUMBER(tv_num); @@ -63075,8 +60991,9 @@ DUK_LOCAL void duk__expr_nud(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { /* Very minimal inlining to handle common idioms '!0' and '!1', * and also boolean arguments like '!false' and '!true'. */ - duk_tval *tv_val = duk_get_tval(ctx, res->x1.valstack_idx); + duk_tval *tv_val; + tv_val = DUK_GET_TVAL_POSIDX(ctx, res->x1.valstack_idx); DUK_ASSERT(tv_val != NULL); if (DUK_TVAL_IS_NUMBER(tv_val)) { duk_double_t d; @@ -63106,7 +61023,7 @@ DUK_LOCAL void duk__expr_nud(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { } /* end switch */ - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_PARSE_ERROR); + DUK_ERROR_SYNTAX(thr, DUK_STR_PARSE_ERROR); return; unary_extraop: @@ -63209,7 +61126,7 @@ DUK_LOCAL void duk__expr_nud(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { } syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_EXPRESSION); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_EXPRESSION); } /* XXX: add flag to indicate whether caller cares about return value; this @@ -63264,7 +61181,7 @@ DUK_LOCAL void duk__expr_led(duk_compiler_ctx *comp_ctx, duk_ivalue *left, duk_i /* NB: must accept reserved words as property name */ if (comp_ctx->curr_token.t_nores != DUK_TOK_IDENTIFIER) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_EXPECTED_IDENTIFIER); + DUK_ERROR_SYNTAX(thr, DUK_STR_EXPECTED_IDENTIFIER); } res->t = DUK_IVAL_PROP; @@ -63658,7 +61575,7 @@ DUK_LOCAL void duk__expr_led(duk_compiler_ctx *comp_ctx, duk_ivalue *left, duk_i } DUK_D(DUK_DPRINT("parse error: unexpected token: %ld", (long) tok)); - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_PARSE_ERROR); + DUK_ERROR_SYNTAX(thr, DUK_STR_PARSE_ERROR); return; #if 0 @@ -64093,11 +62010,11 @@ DUK_LOCAL void duk__expr_led(duk_compiler_ctx *comp_ctx, duk_ivalue *left, duk_i } syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_EXPRESSION); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_EXPRESSION); return; syntax_error_lvalue: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_LVALUE); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_LVALUE); return; } @@ -64182,7 +62099,7 @@ DUK_LOCAL void duk__expr(duk_compiler_ctx *comp_ctx, duk_ivalue *res, duk_small_ /* XXX: possibly incorrect handling of empty expression */ DUK_DDD(DUK_DDDPRINT("empty expression")); if (!(rbp_flags & DUK__EXPR_FLAG_ALLOW_EMPTY)) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_EMPTY_EXPR_NOT_ALLOWED); + DUK_ERROR_SYNTAX(thr, DUK_STR_EMPTY_EXPR_NOT_ALLOWED); } res->t = DUK_IVAL_PLAIN; res->x1.t = DUK_ISPEC_VALUE; @@ -64222,7 +62139,7 @@ DUK_LOCAL void duk__exprtop(duk_compiler_ctx *comp_ctx, duk_ivalue *res, duk_sma duk__expr(comp_ctx, res, rbp_flags); if (!(rbp_flags & DUK__EXPR_FLAG_ALLOW_EMPTY) && duk__expr_is_empty(comp_ctx)) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_EMPTY_EXPR_NOT_ALLOWED); + DUK_ERROR_SYNTAX(thr, DUK_STR_EMPTY_EXPR_NOT_ALLOWED); } } @@ -64431,7 +62348,7 @@ DUK_LOCAL void duk__parse_var_decl(duk_compiler_ctx *comp_ctx, duk_ivalue *res, return; syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_VAR_DECLARATION); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_VAR_DECLARATION); } DUK_LOCAL void duk__parse_var_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res, duk_small_uint_t expr_flags) { @@ -64803,7 +62720,7 @@ DUK_LOCAL void duk__parse_for_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res, return; syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_FOR); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_FOR); } DUK_LOCAL void duk__parse_switch_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res, duk_int_t pc_label_site) { @@ -65002,7 +62919,7 @@ DUK_LOCAL void duk__parse_switch_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *re return; syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_SWITCH); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_SWITCH); } DUK_LOCAL void duk__parse_if_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { @@ -65136,7 +63053,7 @@ DUK_LOCAL void duk__parse_break_or_continue_stmt(duk_compiler_ctx *comp_ctx, duk duk__lookup_active_label(comp_ctx, comp_ctx->curr_token.str1, is_break, &label_id, &label_catch_depth, &label_pc, &label_is_closest); duk__advance(comp_ctx); } else { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_BREAK_CONT_LABEL); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_BREAK_CONT_LABEL); } /* Use a fast break/continue when possible. A fast break/continue is @@ -65178,7 +63095,7 @@ DUK_LOCAL void duk__parse_return_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *re * not as part of eval or global code. */ if (!comp_ctx->curr_func.is_function) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_RETURN); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_RETURN); } ret_flags = 0; @@ -65275,7 +63192,7 @@ DUK_LOCAL void duk__parse_throw_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res /* Unlike break/continue, throw statement does not allow an empty value. */ if (comp_ctx->curr_token.lineterm) { - DUK_ERROR(comp_ctx->thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_THROW); + DUK_ERROR_SYNTAX(comp_ctx->thr, DUK_STR_INVALID_THROW); } reg_val = duk__exprtop_toreg(comp_ctx, res, DUK__BP_FOR_EXPR /*rbp_flags*/); @@ -65516,7 +63433,7 @@ DUK_LOCAL void duk__parse_try_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res) return; syntax_error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_TRY); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_TRY); } DUK_LOCAL void duk__parse_with_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res) { @@ -65526,7 +63443,7 @@ DUK_LOCAL void duk__parse_with_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res) duk_small_uint_t trycatch_flags; if (comp_ctx->curr_func.is_strict) { - DUK_ERROR(comp_ctx->thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_WITH_IN_STRICT_MODE); + DUK_ERROR_SYNTAX(comp_ctx->thr, DUK_STR_WITH_IN_STRICT_MODE); } comp_ctx->curr_func.catch_depth++; @@ -65708,7 +63625,7 @@ DUK_LOCAL void duk__parse_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res, duk_ stmt_flags = 0; break; } else { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_FUNC_STMT_NOT_ALLOWED); + DUK_ERROR_SYNTAX(thr, DUK_STR_FUNC_STMT_NOT_ALLOWED); } break; } @@ -66045,7 +63962,7 @@ DUK_LOCAL void duk__parse_stmt(duk_compiler_ctx *comp_ctx, duk_ivalue *res, duk_ DUK_DDD(DUK_DDDPRINT("automatic semicolon terminates statement (allowed for compatibility " "even though no lineterm present before next token)")); } else { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_UNTERMINATED_STMT); + DUK_ERROR_SYNTAX(thr, DUK_STR_UNTERMINATED_STMT); } } } else { @@ -66470,12 +64387,12 @@ DUK_LOCAL void duk__init_varmap_and_prologue_for_pass2(duk_compiler_ctx *comp_ct return; error_outofregs: - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, DUK_STR_REG_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_REG_LIMIT); DUK_UNREACHABLE(); return; error_argname: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_ARG_NAME); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_ARG_NAME); DUK_UNREACHABLE(); return; } @@ -66724,7 +64641,7 @@ DUK_LOCAL void duk__parse_func_body(duk_compiler_ctx *comp_ctx, duk_bool_t expec if (compile_round >= 3) { /* Should never happen but avoid infinite loop just in case. */ DUK_D(DUK_DPRINT("more than 3 compile passes needed, should never happen")); - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); } DUK_D(DUK_DPRINT("need additional round to compile function, round now %d", (int) compile_round)); } @@ -66772,7 +64689,7 @@ DUK_LOCAL void duk__parse_func_body(duk_compiler_ctx *comp_ctx, duk_bool_t expec return; error_funcname: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_FUNC_NAME); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_FUNC_NAME); } /* @@ -66821,7 +64738,7 @@ DUK_LOCAL void duk__parse_func_formals(duk_compiler_ctx *comp_ctx) { */ if (comp_ctx->curr_token.t != DUK_TOK_IDENTIFIER) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, "expected identifier"); + DUK_ERROR_SYNTAX(thr, "expected identifier"); } DUK_ASSERT(comp_ctx->curr_token.t == DUK_TOK_IDENTIFIER); DUK_ASSERT(comp_ctx->curr_token.str1 != NULL); @@ -66876,7 +64793,7 @@ DUK_LOCAL void duk__parse_func_like_raw(duk_compiler_ctx *comp_ctx, duk_bool_t i duk_push_number(ctx, comp_ctx->curr_token.num); duk_to_string(ctx, -1); } else { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_GETSET_NAME); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_GETSET_NAME); } comp_ctx->curr_func.h_name = duk_get_hstring(ctx, -1); /* borrowed reference */ DUK_ASSERT(comp_ctx->curr_func.h_name != NULL); @@ -66895,7 +64812,7 @@ DUK_LOCAL void duk__parse_func_like_raw(duk_compiler_ctx *comp_ctx, duk_bool_t i /* valstack will be unbalanced, which is OK */ DUK_ASSERT(!is_setget); if (is_decl) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_FUNC_NAME_REQUIRED); + DUK_ERROR_SYNTAX(thr, DUK_STR_FUNC_NAME_REQUIRED); } } } @@ -67027,7 +64944,7 @@ DUK_LOCAL duk_int_t duk__parse_func_like_fnum(duk_compiler_ctx *comp_ctx, duk_bo fnum = old_func.fnum_next++; if (fnum > DUK__MAX_FUNCS) { - DUK_ERROR(comp_ctx->thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_FUNC_LIMIT); + DUK_ERROR_RANGE(comp_ctx->thr, DUK_STR_FUNC_LIMIT); } /* array writes autoincrement length */ @@ -67671,6 +65588,8 @@ DUK_LOCAL void duk__vm_arith_unary_op(duk_hthread *thr, duk_tval *tv_x, duk_idx_ DUK_ASSERT(thr != NULL); DUK_ASSERT(ctx != NULL); DUK_ASSERT(opcode == DUK_EXTRAOP_UNM || opcode == DUK_EXTRAOP_UNP); + DUK_ASSERT(tv_x != NULL); + DUK_ASSERT(idx_x >= 0); #if defined(DUK_USE_FASTINT) if (DUK_TVAL_IS_FASTINT(tv_x)) { @@ -67698,7 +65617,7 @@ DUK_LOCAL void duk__vm_arith_unary_op(duk_hthread *thr, duk_tval *tv_x, duk_idx_ if (!DUK_TVAL_IS_NUMBER(tv_x)) { duk_to_number(ctx, idx_x); /* side effects, perform in-place */ - tv_x = duk_get_tval(ctx, idx_x); + tv_x = DUK_GET_TVAL_POSIDX(ctx, idx_x); DUK_ASSERT(tv_x != NULL); DUK_ASSERT(DUK_TVAL_IS_NUMBER(tv_x)); } @@ -67901,11 +65820,7 @@ DUK_LOCAL void duk__set_catcher_regs(duk_hthread *thr, duk_size_t cat_idx, duk_t tv1 = thr->valstack + thr->catchstack[cat_idx].idx_base + 1; DUK_ASSERT(tv1 < thr->valstack_top); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32_UPDREF(thr, tv1, (duk_uint32_t) lj_type); /* side effects */ -#else - DUK_TVAL_SET_NUMBER_UPDREF(thr, tv1, (duk_double_t) lj_type); /* side effects */ -#endif } DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_size_t cat_idx, duk_tval *tv_val_unstable, duk_small_uint_t lj_type) { @@ -67975,7 +65890,7 @@ DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_size_t cat_idx, duk_tval DUK_HOBJECT_FLAG_EXTENSIBLE | DUK_HOBJECT_CLASS_AS_FLAGS(DUK_HOBJECT_CLASS_DECENV), act_lex_env); - new_env = duk_get_hobject(ctx, -1); + new_env = DUK_GET_HOBJECT_NEGIDX(ctx, -1); DUK_ASSERT(new_env != NULL); DUK_DDD(DUK_DDDPRINT("new_env allocated: %!iO", (duk_heaphdr *) new_env)); @@ -68237,7 +66152,7 @@ duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, call_flags); /* call_flags */ if (setup_rc == 0) { /* Shouldn't happen but check anyway. */ - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); } resumee->resumer = thr; @@ -68461,7 +66376,7 @@ duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, * but it's better for internal errors to bubble outwards so that we won't * infinite loop in this catchpoint. */ - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR_EXEC_LONGJMP); + DUK_ERROR_INTERNAL_DEFMSG(thr); DUK_UNREACHABLE(); return retval; } @@ -68514,11 +66429,7 @@ DUK_LOCAL void duk__handle_break_or_continue(duk_hthread *thr, cat_idx = (duk_size_t) (cat - thr->catchstack); /* get before side effects */ -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32(&tv_tmp, (duk_uint32_t) label_id); -#else - DUK_TVAL_SET_NUMBER(&tv_tmp, (duk_double_t) label_id); -#endif duk__handle_finally(thr, cat_idx, &tv_tmp, lj_type); DUK_DD(DUK_DDPRINT("-> break/continue caught by 'finally', restart execution")); @@ -68539,7 +66450,7 @@ DUK_LOCAL void duk__handle_break_or_continue(duk_hthread *thr, /* should never happen, but be robust */ DUK_D(DUK_DPRINT("-> break/continue not caught by anything in the current function (should never happen), throw internal error")); - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(thr); return; } @@ -68734,10 +66645,11 @@ DUK_LOCAL void duk__interrupt_handle_debugger(duk_hthread *thr, duk_bool_t *out_ duk_breakpoint *bp; duk_breakpoint **bp_active; duk_uint_fast32_t line = 0; - duk_bool_t send_status; duk_bool_t process_messages; duk_bool_t processed_messages = 0; + DUK_ASSERT(thr->heap->dbg_processing == 0); /* don't re-enter e.g. during Eval */ + ctx = (duk_context *) thr; act = thr->callstack + thr->callstack_top - 1; @@ -68814,16 +66726,12 @@ DUK_LOCAL void duk__interrupt_handle_debugger(duk_hthread *thr, duk_bool_t *out_ * counter is used to rate limit getting timestamps. */ - if (thr->heap->dbg_state_dirty || thr->heap->dbg_paused) { - send_status = 1; - } else { - send_status = 0; - } - - if (thr->heap->dbg_paused) { + process_messages = 0; + if (thr->heap->dbg_state_dirty || thr->heap->dbg_paused || thr->heap->dbg_detaching) { + /* Enter message processing loop for sending Status notifys and + * to finish a pending detach. + */ process_messages = 1; - } else { - process_messages = 0; } /* XXX: remove heap->dbg_exec_counter, use heap->inst_count_interrupt instead? */ @@ -68848,33 +66756,33 @@ DUK_LOCAL void duk__interrupt_handle_debugger(duk_hthread *thr, duk_bool_t *out_ */ thr->heap->dbg_last_time = now; - send_status = 1; + thr->heap->dbg_state_dirty = 1; process_messages = 1; } } /* - * Send status + * Process messages and send status if necessary. + * + * If we're paused, we'll block for new messages. If we're not + * paused, we'll process anything we can peek but won't block + * for more. Detach (and re-attach) handling is all localized + * to duk_debug_process_messages() too. + * + * Debugger writes outside the message loop may cause debugger + * detach1 phase to run, after which dbg_read_cb == NULL and + * dbg_detaching != 0. The message loop will finish the detach + * by running detach2 phase, so enter the message loop also when + * detaching. */ act = NULL; /* may be changed */ - if (send_status) { - duk_debug_send_status(thr); - thr->heap->dbg_state_dirty = 0; - } - - /* - * Process messages. If we're paused, we'll block for new messages. - * if we're not paused, we'll process anything we can peek but won't - * block for more. - */ - if (process_messages) { + DUK_ASSERT(thr->heap->dbg_processing == 0); processed_messages = duk_debug_process_messages(thr, 0 /*no_block*/); + DUK_ASSERT(thr->heap->dbg_processing == 0); } - /* XXX: any case here where we need to re-send status? */ - /* Continue checked execution if there are breakpoints or we're stepping. * Also use checked execution if paused flag is active - it shouldn't be * because the debug message loop shouldn't terminate if it was. Step out @@ -68982,14 +66890,19 @@ DUK_LOCAL duk_small_uint_t duk__executor_interrupt(duk_hthread *thr) { thr->interrupt_init = 0; thr->interrupt_counter = 0; DUK_HEAP_CLEAR_INTERRUPT_RUNNING(thr->heap); - DUK_ERROR(thr, DUK_ERR_RANGE_ERROR, "execution timeout"); + DUK_ERROR_RANGE(thr, "execution timeout"); } #endif /* DUK_USE_EXEC_TIMEOUT_CHECK */ #if defined(DUK_USE_DEBUGGER_SUPPORT) - if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap)) { + if (!thr->heap->dbg_processing && + (thr->heap->dbg_read_cb != NULL || thr->heap->dbg_detaching)) { + /* Avoid recursive re-entry; enter when we're attached or + * detaching (to finish off the pending detach). + */ duk__interrupt_handle_debugger(thr, &immediate, &retval); act = thr->callstack + thr->callstack_top - 1; /* relookup if changed */ + DUK_UNREF(act); /* 'act' is no longer accessed, scanbuild fix */ } #endif /* DUK_USE_DEBUGGER_SUPPORT */ @@ -69023,6 +66936,7 @@ DUK_LOCAL duk_small_uint_t duk__executor_interrupt(duk_hthread *thr) { * in checked or normal mode. Note that we can't do this when an activation * is created, because breakpoint status (and stepping status) may change * later, so we must recheck every time we're executing an activation. + * This primitive should be side effect free to avoid changes during check. */ #if defined(DUK_USE_DEBUGGER_SUPPORT) @@ -69187,16 +67101,31 @@ DUK_LOCAL void duk__executor_recheck_debugger(duk_hthread *thr, duk_activation * #define DUK__FUN() ((duk_hcompiledfunction *) DUK_ACT_GET_FUNC((thr)->callstack + (thr)->callstack_top - 1)) #endif #define DUK__STRICT() (DUK_HOBJECT_HAS_STRICT((duk_hobject *) DUK__FUN())) + +/* Reg/const access macros: these are very footprint and performance sensitive + * so modify with care. + */ #define DUK__REG(x) (*(thr->valstack_bottom + (x))) #define DUK__REGP(x) (thr->valstack_bottom + (x)) #define DUK__CONST(x) (*(consts + (x))) #define DUK__CONSTP(x) (consts + (x)) +#if 0 #define DUK__REGCONST(x) ((x) < DUK_BC_REGLIMIT ? DUK__REG((x)) : DUK__CONST((x) - DUK_BC_REGLIMIT)) #define DUK__REGCONSTP(x) ((x) < DUK_BC_REGLIMIT ? DUK__REGP((x)) : DUK__CONSTP((x) - DUK_BC_REGLIMIT)) +#define DUK__REGCONST(x) *((((x) < DUK_BC_REGLIMIT ? thr->valstack_bottom : consts2) + (x))) +#define DUK__REGCONSTP(x) (((x) < DUK_BC_REGLIMIT ? thr->valstack_bottom : consts2) + (x)) +#endif +/* This macro works when a regconst field is 9 bits, [0,0x1ff]. Adding + * DUK_LIKELY/DUK_UNLIKELY increases code footprint and doesn't seem to + * improve performance on x64 (and actually harms performance in some tests). + */ +#define DUK__RCISREG(x) (((x) & 0x100) == 0) +#define DUK__REGCONST(x) (*((DUK__RCISREG((x)) ? thr->valstack_bottom : consts2) + (x))) +#define DUK__REGCONSTP(x) ((DUK__RCISREG((x)) ? thr->valstack_bottom : consts2) + (x)) #ifdef DUK_USE_VERBOSE_EXECUTOR_ERRORS #define DUK__INTERNAL_ERROR(msg) do { \ - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, (msg)); \ + DUK_ERROR_INTERNAL(thr, (msg)); \ } while (0) #else #define DUK__INTERNAL_ERROR(msg) do { \ @@ -69219,11 +67148,8 @@ DUK_LOCAL void duk__executor_recheck_debugger(duk_hthread *thr, duk_activation * DUK_LOCAL void duk__handle_executor_error(duk_heap *heap, duk_hthread *entry_thread, duk_size_t entry_callstack_top, - duk_int_t entry_call_recursion_depth -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , duk_jmpbuf *entry_jmpbuf_ptr -#endif - ) { + duk_int_t entry_call_recursion_depth, + duk_jmpbuf *entry_jmpbuf_ptr) { duk_small_uint_t lj_ret; /* Longjmp callers are required to sync-and-null thr->ptr_curr_pc @@ -69237,13 +67163,11 @@ DUK_LOCAL void duk__handle_executor_error(duk_heap *heap, /* Must be restored here to handle e.g. yields properly. */ heap->call_recursion_depth = entry_call_recursion_depth; -#if !defined(DUK_USE_CPP_EXCEPTIONS) /* Switch to caller's setjmp() catcher so that if an error occurs * during error handling, it is always propagated outwards instead * of causing an infinite loop in our own handler. */ heap->lj.jmpbuf_ptr = (duk_jmpbuf *) entry_jmpbuf_ptr; -#endif lj_ret = duk__handle_longjmp(heap->curr_thread, entry_thread, entry_callstack_top); @@ -69254,10 +67178,8 @@ DUK_LOCAL void duk__handle_executor_error(duk_heap *heap, /* Rethrow error to calling state. */ DUK_ASSERT(lj_ret == DUK__LONGJMP_RETHROW); -#if !defined(DUK_USE_CPP_EXCEPTIONS) /* Longjmp handling has restored jmpbuf_ptr. */ DUK_ASSERT(heap->lj.jmpbuf_ptr == entry_jmpbuf_ptr); -#endif /* Thread may have changed, e.g. YIELD converted to THROW. */ duk_err_longjmp(heap->curr_thread); @@ -69271,10 +67193,8 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) { duk_hthread *entry_thread; duk_size_t entry_callstack_top; duk_int_t entry_call_recursion_depth; -#if !defined(DUK_USE_CPP_EXCEPTIONS) duk_jmpbuf *entry_jmpbuf_ptr; - duk_jmpbuf jmpbuf; -#endif + duk_jmpbuf our_jmpbuf; duk_heap *heap; DUK_ASSERT(exec_thr != NULL); @@ -69289,9 +67209,7 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) { heap = entry_thread->heap; entry_callstack_top = entry_thread->callstack_top; entry_call_recursion_depth = entry_thread->heap->call_recursion_depth; -#if !defined(DUK_USE_CPP_EXCEPTIONS) entry_jmpbuf_ptr = entry_thread->heap->lj.jmpbuf_ptr; -#endif /* * Note: we currently assume that the setjmp() catchpoint is @@ -69303,23 +67221,20 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) { */ for (;;) { -#if !defined(DUK_USE_CPP_EXCEPTIONS) - heap->lj.jmpbuf_ptr = &jmpbuf; + heap->lj.jmpbuf_ptr = &our_jmpbuf; DUK_ASSERT(heap->lj.jmpbuf_ptr != NULL); -#endif #if defined(DUK_USE_CPP_EXCEPTIONS) try { #else - if (DUK_LIKELY(DUK_SETJMP(heap->lj.jmpbuf_ptr->jb) == 0)) { + DUK_ASSERT(heap->lj.jmpbuf_ptr == &our_jmpbuf); + if (DUK_SETJMP(our_jmpbuf.jb) == 0) { #endif /* Execute bytecode until returned or longjmp(). */ duk__js_execute_bytecode_inner(entry_thread, entry_callstack_top); -#if !defined(DUK_USE_CPP_EXCEPTIONS) /* Successful return: restore jmpbuf and return to caller. */ - heap->lj.jmpbuf_ptr = (duk_jmpbuf *) entry_jmpbuf_ptr; -#endif + heap->lj.jmpbuf_ptr = entry_jmpbuf_ptr; return; #if defined(DUK_USE_CPP_EXCEPTIONS) @@ -69335,11 +67250,8 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) { duk__handle_executor_error(heap, entry_thread, entry_callstack_top, - entry_call_recursion_depth -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , entry_jmpbuf_ptr -#endif - ); + entry_call_recursion_depth, + entry_jmpbuf_ptr); } #if defined(DUK_USE_CPP_EXCEPTIONS) catch (std::exception &exc) { @@ -69350,33 +67262,29 @@ DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr) { DUK_D(DUK_DPRINT("unexpected c++ std::exception (perhaps thrown by user code)")); try { DUK_ASSERT(heap->curr_thread != NULL); - DUK_ERROR(heap->curr_thread, DUK_ERR_API_ERROR, "caught invalid c++ std::exception '%s' (perhaps thrown by user code)", what); + DUK_ERROR_FMT1(heap->curr_thread, DUK_ERR_API_ERROR, "caught invalid c++ std::exception '%s' (perhaps thrown by user code)", what); } catch (duk_internal_exception exc) { DUK_D(DUK_DPRINT("caught api error thrown from unexpected c++ std::exception")); + DUK_UNREF(exc); duk__handle_executor_error(heap, entry_thread, entry_callstack_top, - entry_call_recursion_depth -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , entry_jmpbuf_ptr -#endif - ); + entry_call_recursion_depth, + entry_jmpbuf_ptr); } } catch (...) { DUK_D(DUK_DPRINT("unexpected c++ exception (perhaps thrown by user code)")); try { DUK_ASSERT(heap->curr_thread != NULL); - DUK_ERROR(heap->curr_thread, DUK_ERR_API_ERROR, "caught invalid c++ exception (perhaps thrown by user code)"); + DUK_ERROR_API(heap->curr_thread, "caught invalid c++ exception (perhaps thrown by user code)"); } catch (duk_internal_exception exc) { DUK_D(DUK_DPRINT("caught api error thrown from unexpected c++ exception")); + DUK_UNREF(exc); duk__handle_executor_error(heap, entry_thread, entry_callstack_top, - entry_call_recursion_depth -#if !defined(DUK_USE_CPP_EXCEPTIONS) - , entry_jmpbuf_ptr -#endif - ); + entry_call_recursion_depth, + entry_jmpbuf_ptr); } } #endif @@ -69399,6 +67307,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th */ duk_hthread *thr; /* stable */ duk_tval *consts; /* stable */ + duk_tval *consts2; /* stable; precalculated for faster lookups */ duk_uint_fast32_t ins; /* 'funcs' is quite rarely used, so no local for it */ #if defined(DUK_USE_EXEC_FUN_LOCAL) @@ -69485,13 +67394,12 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th DUK_ASSERT(thr->valstack_top - thr->valstack_bottom == fun->nregs); consts = DUK_HCOMPILEDFUNCTION_GET_CONSTS_BASE(thr->heap, fun); DUK_ASSERT(consts != NULL); + consts2 = consts - DUK_BC_REGLIMIT; #if defined(DUK_USE_DEBUGGER_SUPPORT) if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->heap) && !thr->heap->dbg_processing) { - thr->heap->dbg_processing = 1; duk__executor_recheck_debugger(thr, act, fun); - act = thr->callstack + thr->callstack_top - 1; /* relookup after side effects */ - thr->heap->dbg_processing = 0; + act = thr->callstack + thr->callstack_top - 1; /* relookup after side effects (no side effects currently however) */ } #endif /* DUK_USE_DEBUGGER_SUPPORT */ @@ -70042,12 +67950,12 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th } else { duk_push_tval(ctx, DUK__REGCONSTP(c)); } - tv1 = duk_get_tval(ctx, -1); + tv1 = DUK_GET_TVAL_NEGIDX(ctx, -1); act = thr->callstack + thr->callstack_top - 1; if (duk_js_declvar_activation(thr, act, name, tv1, prop_flags, is_func_decl)) { /* already declared, must update binding value */ - tv1 = duk_get_tval(ctx, -1); + tv1 = DUK_GET_TVAL_NEGIDX(ctx, -1); duk_js_putvar_activation(thr, act, name, tv1, DUK__STRICT()); } @@ -70167,7 +68075,8 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th duk_js_push_closure(thr, (duk_hcompiledfunction *) fun_temp, act->var_env, - act->lex_env); + act->lex_env, + 1 /*add_auto_proto*/); duk_replace(ctx, (duk_idx_t) a); break; @@ -70774,6 +68683,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th /* must relookup act in case of side effects */ duk_js_init_activation_environment_records_delayed(thr, act); act = thr->callstack + thr->callstack_top - 1; + DUK_UNREF(act); /* 'act' is no longer accessed, scanbuild fix */ } DUK_ASSERT(act->lex_env != NULL); DUK_ASSERT(act->var_env != NULL); @@ -70836,7 +68746,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th DUK_DDD(DUK_DDDPRINT("activating object env: %!iT", (duk_tval *) duk_get_tval(ctx, -1))); DUK_ASSERT(act->lex_env != NULL); - new_env = duk_get_hobject(ctx, -1); + new_env = DUK_GET_HOBJECT_NEGIDX(ctx, -1); DUK_ASSERT(new_env != NULL); act = thr->callstack + thr->callstack_top - 1; /* relookup (side effects) */ @@ -70995,7 +68905,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th } duk_push_number(ctx, y); - tv1 = duk_get_tval(ctx, -1); + tv1 = DUK_GET_TVAL_NEGIDX(ctx, -1); DUK_ASSERT(tv1 != NULL); duk_js_putvar_activation(thr, act, name, tv1, DUK__STRICT()); duk_pop(ctx); @@ -71049,7 +68959,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th } duk_push_number(ctx, y); - tv_val = duk_get_tval(ctx, -1); + tv_val = DUK_GET_TVAL_NEGIDX(ctx, -1); DUK_ASSERT(tv_val != NULL); tv_obj = DUK__REGCONSTP(b); tv_key = DUK__REGCONSTP(c); @@ -71077,7 +68987,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th } case DUK_EXTRAOP_INVALID: { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, "INVALID opcode (%ld)", (long) DUK_DEC_BC(ins)); + DUK_ERROR_FMT1(thr, DUK_ERR_INTERNAL_ERROR, "INVALID opcode (%ld)", (long) DUK_DEC_BC(ins)); break; } @@ -71189,7 +69099,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th act = thr->callstack + thr->callstack_top - 1; if (duk_js_getvar_activation(thr, act, name, 0 /*throw*/)) { /* -> [... val this] */ - tv = duk_get_tval(ctx, -2); + tv = DUK_GET_TVAL_NEGIDX(ctx, -2); duk_push_hstring(ctx, duk_js_typeof(thr, tv)); duk_replace(ctx, (duk_idx_t) b); duk_pop_2(ctx); @@ -71362,11 +69272,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th tv1 = thr->valstack + cat->idx_base + 1; DUK_ASSERT(tv1 >= thr->valstack && tv1 < thr->valstack_top); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32_UPDREF(thr, tv1, (duk_uint32_t) DUK_LJ_TYPE_NORMAL); /* side effects */ -#else - DUK_TVAL_SET_NUMBER_UPDREF(thr, tv1, (duk_double_t) DUK_LJ_TYPE_NORMAL); /* side effects */ -#endif tv1 = NULL; DUK_CAT_CLEAR_FINALLY_ENABLED(cat); @@ -71420,11 +69326,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th tv1 = thr->valstack + cat->idx_base + 1; DUK_ASSERT(tv1 >= thr->valstack && tv1 < thr->valstack_top); -#if defined(DUK_USE_FASTINT) DUK_TVAL_SET_FASTINT_U32_UPDREF(thr, tv1, (duk_uint32_t) DUK_LJ_TYPE_NORMAL); /* side effects */ -#else - DUK_TVAL_SET_NUMBER_UPDREF(thr, tv1, (duk_double_t) DUK_LJ_TYPE_NORMAL); /* side effects */ -#endif tv1 = NULL; DUK_CAT_CLEAR_FINALLY_ENABLED(cat); @@ -71537,9 +69439,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th duk_err_setup_heap_ljstate(thr, (duk_small_int_t) cont_type); -#if !defined(DUK_USE_CPP_EXCEPTIONS) DUK_ASSERT(thr->heap->lj.jmpbuf_ptr != NULL); /* always in executor */ -#endif duk_err_longjmp(thr); DUK_UNREACHABLE(); } @@ -71576,9 +69476,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th duk_err_setup_heap_ljstate(thr, DUK_LJ_TYPE_THROW); -#if !defined(DUK_USE_CPP_EXCEPTIONS) DUK_ASSERT(thr->heap->lj.jmpbuf_ptr != NULL); /* always in executor */ -#endif duk_err_longjmp(thr); DUK_UNREACHABLE(); break; @@ -71749,7 +69647,7 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th #ifndef DUK_USE_VERBOSE_EXECUTOR_ERRORS internal_error: - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, "internal error in bytecode executor"); + DUK_ERROR_INTERNAL(thr, "internal error in bytecode executor"); #endif } @@ -71760,6 +69658,16 @@ DUK_LOCAL DUK_NOINLINE void duk__js_execute_bytecode_inner(duk_hthread *entry_th #undef DUK__RETHAND_RESTART #undef DUK__RETHAND_FINISHED +#undef DUK__FUN +#undef DUK__STRICT +#undef DUK__REG +#undef DUK__REGP +#undef DUK__CONST +#undef DUK__CONSTP +#undef DUK__RCISREG +#undef DUK__REGCONST +#undef DUK__REGCONSTP + #undef DUK__INTERNAL_ERROR #undef DUK__SYNC_CURR_PC #undef DUK__SYNC_AND_NULL_CURR_PC @@ -72159,7 +70067,7 @@ DUK_INTERNAL void duk_js_checkobjectcoercible(duk_hthread *thr, duk_tval *tv_x) tag == DUK_TAG_NULL || tag == DUK_TAG_POINTER || tag == DUK_TAG_BUFFER) { - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "not object coercible"); + DUK_ERROR_TYPE(thr, "not object coercible"); } } #endif @@ -72496,7 +70404,10 @@ DUK_INTERNAL duk_bool_t duk_js_equals_helper(duk_hthread *thr, duk_tval *tv_x, d DUK_ASSERT(DUK_TVAL_GET_BOOLEAN(tv_y) == 0 || DUK_TVAL_GET_BOOLEAN(tv_y) == 1); duk_push_tval(ctx, tv_x); duk_push_int(ctx, DUK_TVAL_GET_BOOLEAN(tv_y)); - rc = duk_js_equals_helper(thr, duk_get_tval(ctx, -2), duk_get_tval(ctx, -1), 0 /*flags:nonstrict*/); + rc = duk_js_equals_helper(thr, + DUK_GET_TVAL_NEGIDX(ctx, -2), + DUK_GET_TVAL_NEGIDX(ctx, -1), + 0 /*flags:nonstrict*/); duk_pop_2(ctx); return rc; } @@ -72514,7 +70425,10 @@ DUK_INTERNAL duk_bool_t duk_js_equals_helper(duk_hthread *thr, duk_tval *tv_x, d duk_push_tval(ctx, tv_x); duk_push_tval(ctx, tv_y); duk_to_primitive(ctx, -2, DUK_HINT_NONE); /* apparently no hint? */ - rc = duk_js_equals_helper(thr, duk_get_tval(ctx, -2), duk_get_tval(ctx, -1), 0 /*flags:nonstrict*/); + rc = duk_js_equals_helper(thr, + DUK_GET_TVAL_NEGIDX(ctx, -2), + DUK_GET_TVAL_NEGIDX(ctx, -1), + 0 /*flags:nonstrict*/); duk_pop_2(ctx); return rc; } @@ -72669,8 +70583,8 @@ DUK_INTERNAL duk_bool_t duk_js_compare_helper(duk_hthread *thr, duk_tval *tv_x, } /* Note: reuse variables */ - tv_x = duk_get_tval(ctx, -2); - tv_y = duk_get_tval(ctx, -1); + tv_x = DUK_GET_TVAL_NEGIDX(ctx, -2); + tv_y = DUK_GET_TVAL_NEGIDX(ctx, -1); if (DUK_TVAL_IS_STRING(tv_x) && DUK_TVAL_IS_STRING(tv_y)) { duk_hstring *h1 = DUK_TVAL_GET_STRING(tv_x); @@ -72841,7 +70755,7 @@ DUK_INTERNAL duk_bool_t duk_js_instanceof(duk_hthread *thr, duk_tval *tv_x, duk_ * * XXX: add a separate flag, DUK_HOBJECT_FLAG_ALLOW_INSTANCEOF? */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "invalid instanceof rval"); + DUK_ERROR_TYPE(thr, "invalid instanceof rval"); } if (!DUK_HOBJECT_HAS_BOUND(func)) { @@ -72858,7 +70772,7 @@ DUK_INTERNAL duk_bool_t duk_js_instanceof(duk_hthread *thr, duk_tval *tv_x, duk_ } while (--sanity > 0); if (sanity == 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_BOUND_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_BOUND_CHAIN_LIMIT); } /* @@ -72930,7 +70844,7 @@ DUK_INTERNAL duk_bool_t duk_js_instanceof(duk_hthread *thr, duk_tval *tv_x, duk_ } while (--sanity > 0); if (sanity == 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_PROTOTYPE_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_PROTOTYPE_CHAIN_LIMIT); } DUK_UNREACHABLE(); @@ -72979,7 +70893,9 @@ DUK_INTERNAL duk_bool_t duk_js_in(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv duk_require_type_mask(ctx, -1, DUK_TYPE_MASK_OBJECT | DUK_TYPE_MASK_LIGHTFUNC); duk_to_string(ctx, -2); /* coerce lval with ToString() */ - retval = duk_hobject_hasprop(thr, duk_get_tval(ctx, -1), duk_get_tval(ctx, -2)); + retval = duk_hobject_hasprop(thr, + DUK_GET_TVAL_NEGIDX(ctx, -1), + DUK_GET_TVAL_NEGIDX(ctx, -2)); duk_pop_2(ctx); return retval; @@ -73002,6 +70918,8 @@ DUK_INTERNAL duk_bool_t duk_js_in(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv DUK_INTERNAL duk_hstring *duk_js_typeof(duk_hthread *thr, duk_tval *tv_x) { duk_small_int_t stridx = 0; + DUK_UNREF(thr); + switch (DUK_TVAL_GET_TAG(tv_x)) { case DUK_TAG_UNDEFINED: { stridx = DUK_STRIDX_LC_UNDEFINED; @@ -73240,7 +71158,8 @@ DUK_INTERNAL void duk_js_push_closure(duk_hthread *thr, duk_hcompiledfunction *fun_temp, duk_hobject *outer_var_env, - duk_hobject *outer_lex_env) { + duk_hobject *outer_lex_env, + duk_bool_t add_auto_proto) { duk_context *ctx = (duk_context *) thr; duk_hcompiledfunction *fun_clos; duk_small_uint_t i; @@ -73252,6 +71171,7 @@ void duk_js_push_closure(duk_hthread *thr, DUK_ASSERT(DUK_HCOMPILEDFUNCTION_GET_BYTECODE(thr->heap, fun_temp) != NULL); DUK_ASSERT(outer_var_env != NULL); DUK_ASSERT(outer_lex_env != NULL); + DUK_UNREF(len_value); duk_push_compiledfunction(ctx); duk_push_hobject(ctx, &fun_temp->obj); /* -> [ ... closure template ] */ @@ -73499,11 +71419,13 @@ void duk_js_push_closure(duk_hthread *thr, /* [ ... closure template ] */ - duk_push_object(ctx); /* -> [ ... closure template newobj ] */ - duk_dup(ctx, -3); /* -> [ ... closure template newobj closure ] */ - duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_CONSTRUCTOR, DUK_PROPDESC_FLAGS_WC); /* -> [ ... closure template newobj ] */ - duk_compact(ctx, -1); /* compact the prototype */ - duk_xdef_prop_stridx(ctx, -3, DUK_STRIDX_PROTOTYPE, DUK_PROPDESC_FLAGS_W); /* -> [ ... closure template ] */ + if (add_auto_proto) { + duk_push_object(ctx); /* -> [ ... closure template newobj ] */ + duk_dup(ctx, -3); /* -> [ ... closure template newobj closure ] */ + duk_xdef_prop_stridx(ctx, -2, DUK_STRIDX_CONSTRUCTOR, DUK_PROPDESC_FLAGS_WC); /* -> [ ... closure template newobj ] */ + duk_compact(ctx, -1); /* compact the prototype */ + duk_xdef_prop_stridx(ctx, -3, DUK_STRIDX_PROTOTYPE, DUK_PROPDESC_FLAGS_W); /* -> [ ... closure template ] */ + } /* * "arguments" and "caller" must be mapped to throwers for strict @@ -73570,7 +71492,7 @@ void duk_js_push_closure(duk_hthread *thr, DUK_ASSERT(DUK_HOBJECT_GET_PROTOTYPE(thr->heap, &fun_clos->obj) == thr->builtins[DUK_BIDX_FUNCTION_PROTOTYPE]); DUK_ASSERT(DUK_HOBJECT_HAS_EXTENSIBLE(&fun_clos->obj)); DUK_ASSERT(duk_has_prop_stridx(ctx, -2, DUK_STRIDX_LENGTH) != 0); - DUK_ASSERT(duk_has_prop_stridx(ctx, -2, DUK_STRIDX_PROTOTYPE) != 0); + DUK_ASSERT(add_auto_proto == 0 || duk_has_prop_stridx(ctx, -2, DUK_STRIDX_PROTOTYPE) != 0); DUK_ASSERT(duk_has_prop_stridx(ctx, -2, DUK_STRIDX_NAME) != 0); /* non-standard */ DUK_ASSERT(!DUK_HOBJECT_HAS_STRICT(&fun_clos->obj) || duk_has_prop_stridx(ctx, -2, DUK_STRIDX_CALLER) != 0); @@ -74242,7 +72164,7 @@ duk_bool_t duk__get_identifier_reference(duk_hthread *thr, } if (sanity-- == 0) { - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_PROTOTYPE_CHAIN_LIMIT); + DUK_ERROR_RANGE(thr, DUK_STR_PROTOTYPE_CHAIN_LIMIT); } env = DUK_HOBJECT_GET_PROTOTYPE(thr->heap, env); }; @@ -74380,9 +72302,9 @@ duk_bool_t duk__getvar_helper(duk_hthread *thr, return 1; } else { if (throw_flag) { - DUK_ERROR(thr, DUK_ERR_REFERENCE_ERROR, - "identifier '%s' undefined", - (const char *) DUK_HSTRING_GET_DATA(name)); + DUK_ERROR_FMT1(thr, DUK_ERR_REFERENCE_ERROR, + "identifier '%s' undefined", + (const char *) DUK_HSTRING_GET_DATA(name)); } return 0; @@ -74898,7 +72820,7 @@ duk_bool_t duk__declvar_helper(duk_hthread *thr, fail_existing_attributes: fail_not_extensible: - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, "declaration failed"); + DUK_ERROR_TYPE(thr, "declaration failed"); return 0; } @@ -75119,7 +73041,7 @@ DUK_LOCAL void duk__fill_lexer_buffer(duk_lexer_ctx *lex_ctx, duk_small_uint_t s duk_ucodepoint_t x; duk_small_uint_t contlen; const duk_uint8_t *p, *p_end; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) duk_ucodepoint_t mincp; #endif duk_int_t input_line; @@ -75183,21 +73105,21 @@ DUK_LOCAL void duk__fill_lexer_buffer(duk_lexer_ctx *lex_ctx, duk_small_uint_t s } else if (x < 0xe0UL) { /* 110x xxxx 10xx xxxx */ contlen = 1; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) mincp = 0x80UL; #endif x = x & 0x1fUL; } else if (x < 0xf0UL) { /* 1110 xxxx 10xx xxxx 10xx xxxx */ contlen = 2; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) mincp = 0x800UL; #endif x = x & 0x0fUL; } else if (x < 0xf8UL) { /* 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx */ contlen = 3; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) mincp = 0x10000UL; #endif x = x & 0x07UL; @@ -75228,7 +73150,7 @@ DUK_LOCAL void duk__fill_lexer_buffer(duk_lexer_ctx *lex_ctx, duk_small_uint_t s if (x > 0x10ffffUL) { goto error_encoding; } -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) if (x < mincp || (x >= 0xd800UL && x <= 0xdfffUL) || x == 0xfffeUL) { goto error_encoding; } @@ -75251,7 +73173,7 @@ DUK_LOCAL void duk__fill_lexer_buffer(duk_lexer_ctx *lex_ctx, duk_small_uint_t s lex_ctx->input_offset = (duk_size_t) (p - lex_ctx->input); lex_ctx->input_line = input_line; - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "utf8 decode failed"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "utf-8 decode failed"); } DUK_LOCAL void duk__advance_bytes(duk_lexer_ctx *lex_ctx, duk_small_uint_t count_bytes) { @@ -75292,7 +73214,7 @@ DUK_LOCAL duk_codepoint_t duk__read_char(duk_lexer_ctx *lex_ctx) { duk_small_uint_t len; duk_small_uint_t i; const duk_uint8_t *p; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) duk_ucodepoint_t mincp; #endif duk_size_t input_offset; @@ -75347,21 +73269,21 @@ DUK_LOCAL duk_codepoint_t duk__read_char(duk_lexer_ctx *lex_ctx) { } else if (x < 0xe0UL) { /* 110x xxxx 10xx xxxx */ len = 2; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) mincp = 0x80UL; #endif x = x & 0x1fUL; } else if (x < 0xf0UL) { /* 1110 xxxx 10xx xxxx 10xx xxxx */ len = 3; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) mincp = 0x800UL; #endif x = x & 0x0fUL; } else if (x < 0xf8UL) { /* 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx */ len = 4; -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) mincp = 0x10000UL; #endif x = x & 0x07UL; @@ -75392,7 +73314,7 @@ DUK_LOCAL duk_codepoint_t duk__read_char(duk_lexer_ctx *lex_ctx) { if (x > 0x10ffffUL) { goto error_encoding; } -#ifdef DUK_USE_STRICT_UTF8_SOURCE +#if defined(DUK_USE_STRICT_UTF8_SOURCE) if (x < mincp || (x >= 0xd800UL && x <= 0xdfffUL) || x == 0xfffeUL) { goto error_encoding; } @@ -75411,7 +73333,7 @@ DUK_LOCAL duk_codepoint_t duk__read_char(duk_lexer_ctx *lex_ctx) { error_clipped: /* clipped codepoint */ error_encoding: /* invalid codepoint encoding or codepoint */ - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "utf8 decode failed"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "utf-8 decode failed"); return 0; } @@ -75504,7 +73426,7 @@ DUK_INTERNAL void duk_lexer_initctx(duk_lexer_ctx *lex_ctx) { DUK_ASSERT(lex_ctx != NULL); DUK_MEMZERO(lex_ctx, sizeof(*lex_ctx)); -#ifdef DUK_USE_EXPLICIT_NULL_INIT +#if defined(DUK_USE_EXPLICIT_NULL_INIT) #if defined(DUK_USE_LEXER_SLIDING_WINDOW) lex_ctx->window = NULL; #endif @@ -75547,7 +73469,7 @@ DUK_LOCAL duk_codepoint_t duk__hexval(duk_lexer_ctx *lex_ctx, duk_codepoint_t x) /* Throwing an error this deep makes the error rather vague, but * saves hundreds of bytes of code. */ - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "decode error"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "decode error"); return 0; } @@ -75649,7 +73571,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, duk_bool_t got_lineterm = 0; /* got lineterm preceding non-whitespace, non-lineterm token */ if (++lex_ctx->token_count >= lex_ctx->token_limit) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_RANGE_ERROR, "token limit"); + DUK_ERROR_RANGE(lex_ctx->thr, "token limit"); return; /* unreachable */ } @@ -75740,8 +73662,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, for (;;) { x = DUK__L0(); if (x < 0) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "eof while parsing multiline comment"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "eof in multiline comment"); } DUK__ADVANCECHARS(lex_ctx, 1); if (last_asterisk && x == '/') { @@ -75754,7 +73675,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, } goto restart_lineupdate; } else if (regexp_mode) { -#ifdef DUK_USE_REGEXP_SUPPORT +#if defined(DUK_USE_REGEXP_SUPPORT) /* * "/" followed by something in regexp mode. See E5 Section 7.8.5. * @@ -75819,8 +73740,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, DUK__ADVANCECHARS(lex_ctx, 1); /* skip opening slash on first loop */ x = DUK__L0(); if (x < 0 || duk_unicode_is_line_terminator(x)) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "eof or line terminator while parsing regexp"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "eof or line terminator in regexp"); } x = DUK__L0(); /* re-read to avoid spill / fetch */ if (state == 0) { @@ -75869,7 +73789,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, advtok = DUK__ADVTOK(0, DUK_TOK_REGEXP); #else - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "regexp support disabled"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "regexp support disabled"); #endif } else if (DUK__L1() == '=') { /* "/=" and not in regexp mode */ @@ -76034,8 +73954,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, DUK__ADVANCECHARS(lex_ctx, 1); /* eat opening quote on first loop */ x = DUK__L0(); if (x < 0 || duk_unicode_is_line_terminator(x)) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "eof or line terminator while parsing string literal"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "eof or line terminator in string literal"); } if (x == quote) { DUK__ADVANCECHARS(lex_ctx, 1); /* eat closing quote */ @@ -76056,8 +73975,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, adv = 2 - 1; /* note: long live range */ if (x < 0) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "eof while parsing string literal"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "eof or line terminator in string literal"); } if (duk_unicode_is_line_terminator(x)) { /* line continuation */ @@ -76109,11 +74027,10 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, /* Zero escape (also allowed in non-strict mode) */ ch = 0; /* adv = 2 - 1 default OK */ -#ifdef DUK_USE_OCTAL_SUPPORT +#if defined(DUK_USE_OCTAL_SUPPORT) } else if (strict_mode) { /* No other escape beginning with a digit in strict mode */ - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid escape while parsing string literal"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid escape in string literal"); } else if (DUK__ISDIGIT03(x) && DUK__ISOCTDIGIT(DUK__L2()) && DUK__ISOCTDIGIT(DUK__L3())) { /* Three digit octal escape, digits validated. */ adv = 4 - 1; @@ -76140,8 +74057,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, /* fall through to error */ #endif } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid escape while parsing string literal"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid escape in string literal"); } DUK__APPENDBUFFER(lex_ctx, ch); @@ -76232,8 +74148,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, if (DUK__L0() == '\\') { duk_codepoint_t ch; if (DUK__L1() != 'u') { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid unicode escape while parsing identifier"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid unicode escape in identifier"); } ch = duk__decode_uniesc_from_window(lex_ctx, 2); @@ -76242,8 +74157,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, * character is escaped, must have a stricter check here. */ if (!(first ? duk_unicode_is_identifier_start(ch) : duk_unicode_is_identifier_part(ch))) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid unicode escaped character while parsing identifier"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid unicode escape in identifier"); } DUK__APPENDBUFFER(lex_ctx, ch); DUK__ADVANCECHARS(lex_ctx, 6); @@ -76277,7 +74191,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, /* * Interned identifier is compared against reserved words, which are - * currently interned into the heap context. See genstrings.py. + * currently interned into the heap context. See genbuiltins.py. * * Note that an escape in the identifier disables recognition of * keywords; e.g. "\u0069f = 1;" is a valid statement (assigns to @@ -76351,7 +74265,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, DUK__ADVANCECHARS(lex_ctx, 2); int_only = 1; allow_hex = 1; -#ifdef DUK_USE_OCTAL_SUPPORT +#if defined(DUK_USE_OCTAL_SUPPORT) } else if (!strict_mode && x == '0' && DUK__ISDIGIT(y)) { /* Note: if DecimalLiteral starts with a '0', it can only be * followed by a period or an exponent indicator which starts @@ -76411,7 +74325,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, DUK_S2N_FLAG_ALLOW_FRAC | DUK_S2N_FLAG_ALLOW_NAKED_FRAC | DUK_S2N_FLAG_ALLOW_EMPTY_FRAC | -#ifdef DUK_USE_OCTAL_SUPPORT +#if defined(DUK_USE_OCTAL_SUPPORT) (strict_mode ? 0 : DUK_S2N_FLAG_ALLOW_AUTO_OCT_INT) | #endif DUK_S2N_FLAG_ALLOW_AUTO_HEX_INT; @@ -76420,7 +74334,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, duk_numconv_parse((duk_context *) lex_ctx->thr, 10 /*radix*/, s2n_flags); val = duk_to_number((duk_context *) lex_ctx->thr, -1); if (DUK_ISNAN(val)) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "invalid numeric literal"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid numeric literal"); } duk_replace((duk_context *) lex_ctx->thr, lex_ctx->slot1_idx); /* could also just pop? */ @@ -76431,7 +74345,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, */ if (DUK__ISDIGIT(DUK__L0()) || duk_unicode_is_identifier_start(DUK__L0())) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "invalid numeric literal"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid numeric literal"); } out_token->num = val; @@ -76442,7 +74356,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, } else if (x < 0) { advtok = DUK__ADVTOK(0, DUK_TOK_EOF); } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, "error parsing token"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid token"); } skip_slow_path: @@ -76468,7 +74382,7 @@ void duk_lexer_parse_js_input_element(duk_lexer_ctx *lex_ctx, } } -#ifdef DUK_USE_REGEXP_SUPPORT +#if defined(DUK_USE_REGEXP_SUPPORT) /* * Parse a RegExp token. The grammar is described in E5 Section 15.10. @@ -76484,7 +74398,7 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token duk_codepoint_t x, y; if (++lex_ctx->token_count >= lex_ctx->token_limit) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_RANGE_ERROR, "token limit"); + DUK_ERROR_RANGE(lex_ctx->thr, "token limit"); return; /* unreachable */ } @@ -76549,26 +74463,32 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token duk_uint_fast32_t val1 = 0; duk_uint_fast32_t val2 = DUK_RE_QUANTIFIER_INFINITE; duk_small_int_t digits = 0; +#if defined(DUK_USE_ES6_REGEXP_BRACES) + duk_lexer_point lex_pt; +#endif + +#if defined(DUK_USE_ES6_REGEXP_BRACES) + /* Store lexer position, restoring if quantifier is invalid. */ + DUK_LEXER_GETPOINT(lex_ctx, &lex_pt); +#endif + for (;;) { DUK__ADVANCECHARS(lex_ctx, 1); /* eat '{' on entry */ x = DUK__L0(); if (DUK__ISDIGIT(x)) { - if (digits >= DUK__MAX_RE_QUANT_DIGITS) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp quantifier (too many digits)"); - } digits++; val1 = val1 * 10 + (duk_uint_fast32_t) duk__hexval(lex_ctx, x); } else if (x == ',') { + if (digits > DUK__MAX_RE_QUANT_DIGITS) { + goto invalid_quantifier; + } if (val2 != DUK_RE_QUANTIFIER_INFINITE) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp quantifier (double comma)"); + goto invalid_quantifier; } if (DUK__L1() == '}') { /* form: { DecimalDigits , }, val1 = min count */ if (digits == 0) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp quantifier (missing digits)"); + goto invalid_quantifier; } out_token->qmin = val1; out_token->qmax = DUK_RE_QUANTIFIER_INFINITE; @@ -76579,9 +74499,11 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token val1 = 0; digits = 0; /* not strictly necessary because of lookahead '}' above */ } else if (x == '}') { + if (digits > DUK__MAX_RE_QUANT_DIGITS) { + goto invalid_quantifier; + } if (digits == 0) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp quantifier (missing digits)"); + goto invalid_quantifier; } if (val2 != DUK_RE_QUANTIFIER_INFINITE) { /* val2 = min count, val1 = max count */ @@ -76595,8 +74517,7 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token DUK__ADVANCECHARS(lex_ctx, 1); break; } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp quantifier (unknown char)"); + goto invalid_quantifier; } } if (DUK__L0() == '?') { @@ -76607,6 +74528,18 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token } advtok = DUK__ADVTOK(0, DUK_RETOK_QUANTIFIER); break; + invalid_quantifier: +#if defined(DUK_USE_ES6_REGEXP_BRACES) + /* Failed to match the quantifier, restore lexer and parse + * opening brace as a literal. + */ + DUK_LEXER_SETPOINT(lex_ctx, &lex_pt); + advtok = DUK__ADVTOK(1, DUK_RETOK_ATOM_CHAR); + out_token->num = '{'; +#else + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp quantifier"); +#endif + break; } case '.': { advtok = DUK__ADVTOK(1, DUK_RETOK_ATOM_PERIOD); @@ -76643,8 +74576,7 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token out_token->num = (x % 32); advtok = DUK__ADVTOK(3, DUK_RETOK_ATOM_CHAR); } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp control escape"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); } } else if (y == 'x') { out_token->num = duk__decode_hexesc_from_window(lex_ctx, 2); @@ -76668,8 +74600,7 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token /* E5 Section 15.10.2.11 */ if (y == '0') { if (DUK__ISDIGIT(DUK__L2())) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp escape"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); } out_token->num = 0x0000; advtok = DUK__ADVTOK(2, DUK_RETOK_ATOM_CHAR); @@ -76679,8 +74610,7 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token duk_small_int_t i; for (i = 0; ; i++) { if (i >= DUK__MAX_RE_DECESC_DIGITS) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp escape (decimal escape too long)"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); } DUK__ADVANCECHARS(lex_ctx, 1); /* eat backslash on entry */ x = DUK__L0(); @@ -76705,8 +74635,7 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token */ out_token->num = y; } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp escape"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); } break; } @@ -76746,13 +74675,14 @@ DUK_INTERNAL void duk_lexer_parse_re_token(duk_lexer_ctx *lex_ctx, duk_re_token } break; } - case ']': - case '}': { +#if !defined(DUK_USE_ES6_REGEXP_BRACES) + case '}': +#endif + case ']': { /* Although these could be parsed as PatternCharacters unambiguously (here), * E5 Section 15.10.1 grammar explicitly forbids these as PatternCharacters. */ - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp character"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp character"); break; } case -1: { @@ -76800,9 +74730,9 @@ DUK_LOCAL void duk__emit_u16_direct_ranges(duk_lexer_ctx *lex_ctx, duk_re_range_callback gen_range, void *userdata, - duk_uint16_t *ranges, + const duk_uint16_t *ranges, duk_small_int_t num) { - duk_uint16_t *ranges_end; + const duk_uint16_t *ranges_end; DUK_UNREF(lex_ctx); @@ -76830,8 +74760,7 @@ DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_re_range DUK_UNREF(ch); if (x < 0) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "eof while parsing character class"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "eof in character class"); } else if (x == ']') { DUK_ASSERT(!dash); /* lookup should prevent this */ if (start >= 0) { @@ -76882,8 +74811,7 @@ DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_re_range (x >= 'A' && x <= 'Z')) { ch = (x % 32); } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp control escape"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); return; /* never reached, but avoids warnings of * potentially unused variables. */ @@ -76941,8 +74869,7 @@ DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_re_range if (x == '0' && !DUK__ISDIGIT(DUK__L0())) { ch = 0x0000; } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid decimal escape"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); } } else if (!duk_unicode_is_identifier_part(x) #if defined(DUK_USE_NONSTD_REGEXP_DOLLAR_ESCAPE) @@ -76952,8 +74879,7 @@ DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_re_range /* IdentityEscape */ ch = x; } else { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid regexp escape"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid regexp escape"); } } else { /* character represents itself */ @@ -76970,8 +74896,7 @@ DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_re_range */ if (start >= 0) { if (dash) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid range"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid range"); } else { gen_range(userdata, start, start, 0); start = -1; @@ -76982,8 +74907,7 @@ DUK_INTERNAL void duk_lexer_parse_re_ranges(duk_lexer_ctx *lex_ctx, duk_re_range if (start >= 0) { if (dash) { if (start > ch) { - DUK_ERROR(lex_ctx->thr, DUK_ERR_SYNTAX_ERROR, - "invalid range"); + DUK_ERROR_SYNTAX(lex_ctx->thr, "invalid range"); } gen_range(userdata, start, ch, 0); start = -1; @@ -79073,7 +76997,7 @@ DUK_INTERNAL void duk_numconv_parse(duk_context *ctx, duk_small_int_t radix, duk * doesn't need to get tracked using a bigint. */ DUK_DDD(DUK_DDDPRINT("parse failed: exponent too large")); - goto parse_int_error; + goto parse_explimit_error; } dig_expt++; } @@ -79265,9 +77189,9 @@ DUK_INTERNAL void duk_numconv_parse(duk_context *ctx, duk_small_int_t radix, duk duk_push_nan(ctx); return; - parse_int_error: + parse_explimit_error: DUK_DDD(DUK_DDDPRINT("parse failed, internal error, can't return a value")); - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, "number parse error"); + DUK_ERROR_RANGE(thr, "exponent too large"); return; } #line 1 "duk_regexp_compiler.c" @@ -79384,7 +77308,7 @@ DUK_LOCAL duk_uint32_t duk__append_i32(duk_re_compiler_ctx *re_ctx, duk_int32_t #endif /* special helper for emitting u16 lists (used for character ranges for built-in char classes) */ -DUK_LOCAL void duk__append_u16_list(duk_re_compiler_ctx *re_ctx, duk_uint16_t *values, duk_uint32_t count) { +DUK_LOCAL void duk__append_u16_list(duk_re_compiler_ctx *re_ctx, const duk_uint16_t *values, duk_uint32_t count) { /* Call sites don't need the result length so it's not accumulated. */ while (count > 0) { (void) duk__append_u32(re_ctx, (duk_uint32_t) (*values++)); @@ -79569,8 +77493,7 @@ DUK_LOCAL void duk__parse_disjunction(duk_re_compiler_ctx *re_ctx, duk_bool_t ex DUK_ASSERT(out_atom_info != NULL); if (re_ctx->recursion_depth >= re_ctx->recursion_limit) { - DUK_ERROR(re_ctx->thr, DUK_ERR_RANGE_ERROR, - DUK_STR_REGEXP_COMPILER_RECURSION_LIMIT); + DUK_ERROR_RANGE(re_ctx->thr, DUK_STR_REGEXP_COMPILER_RECURSION_LIMIT); } re_ctx->recursion_depth++; @@ -79643,12 +77566,10 @@ DUK_LOCAL void duk__parse_disjunction(duk_re_compiler_ctx *re_ctx, duk_bool_t ex } case DUK_RETOK_QUANTIFIER: { if (atom_start_offset < 0) { - DUK_ERROR(re_ctx->thr, DUK_ERR_SYNTAX_ERROR, - DUK_STR_INVALID_QUANTIFIER_NO_ATOM); + DUK_ERROR_SYNTAX(re_ctx->thr, DUK_STR_INVALID_QUANTIFIER_NO_ATOM); } if (re_ctx->curr_token.qmin > re_ctx->curr_token.qmax) { - DUK_ERROR(re_ctx->thr, DUK_ERR_SYNTAX_ERROR, - DUK_STR_INVALID_QUANTIFIER_VALUES); + DUK_ERROR_SYNTAX(re_ctx->thr, DUK_STR_INVALID_QUANTIFIER_VALUES); } if (atom_char_length >= 0) { /* @@ -79716,8 +77637,7 @@ DUK_LOCAL void duk__parse_disjunction(duk_re_compiler_ctx *re_ctx, duk_bool_t ex atom_copies = (re_ctx->curr_token.qmax == DUK_RE_QUANTIFIER_INFINITE) ? re_ctx->curr_token.qmin : re_ctx->curr_token.qmax; if (atom_copies > DUK_RE_MAX_ATOM_COPIES) { - DUK_ERROR(re_ctx->thr, DUK_ERR_RANGE_ERROR, - DUK_STR_QUANTIFIER_TOO_MANY_COPIES); + DUK_ERROR_RANGE(re_ctx->thr, DUK_STR_QUANTIFIER_TOO_MANY_COPIES); } /* wipe the capture range made by the atom (if any) */ @@ -79979,21 +77899,18 @@ DUK_LOCAL void duk__parse_disjunction(duk_re_compiler_ctx *re_ctx, duk_bool_t ex } case DUK_RETOK_ATOM_END_GROUP: { if (expect_eof) { - DUK_ERROR(re_ctx->thr, DUK_ERR_SYNTAX_ERROR, - DUK_STR_UNEXPECTED_CLOSING_PAREN); + DUK_ERROR_SYNTAX(re_ctx->thr, DUK_STR_UNEXPECTED_CLOSING_PAREN); } goto done; } case DUK_RETOK_EOF: { if (!expect_eof) { - DUK_ERROR(re_ctx->thr, DUK_ERR_SYNTAX_ERROR, - DUK_STR_UNEXPECTED_END_OF_PATTERN); + DUK_ERROR_SYNTAX(re_ctx->thr, DUK_STR_UNEXPECTED_END_OF_PATTERN); } goto done; } default: { - DUK_ERROR(re_ctx->thr, DUK_ERR_SYNTAX_ERROR, - DUK_STR_UNEXPECTED_REGEXP_TOKEN); + DUK_ERROR_SYNTAX(re_ctx->thr, DUK_STR_UNEXPECTED_REGEXP_TOKEN); } } @@ -80087,7 +78004,7 @@ DUK_LOCAL duk_uint32_t duk__parse_regexp_flags(duk_hthread *thr, duk_hstring *h) return flags; error: - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_REGEXP_FLAGS); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_REGEXP_FLAGS); return 0; /* never here */ } @@ -80235,7 +78152,7 @@ DUK_INTERNAL void duk_regexp_compile(duk_hthread *thr) { * Compilation */ - DUK_D(DUK_DPRINT("starting regexp compilation")); + DUK_DD(DUK_DDPRINT("starting regexp compilation")); duk__append_u32(&re_ctx, DUK_REOP_SAVE); duk__append_u32(&re_ctx, 0); @@ -80254,7 +78171,7 @@ DUK_INTERNAL void duk_regexp_compile(duk_hthread *thr) { */ if (re_ctx.highest_backref > re_ctx.captures) { - DUK_ERROR(thr, DUK_ERR_SYNTAX_ERROR, DUK_STR_INVALID_BACKREFS); + DUK_ERROR_SYNTAX(thr, DUK_STR_INVALID_BACKREFS); } /* @@ -80279,8 +78196,8 @@ DUK_INTERNAL void duk_regexp_compile(duk_hthread *thr) { duk_remove(ctx, -4); /* -> [ ... flags escaped_source bytecode ] */ duk_remove(ctx, -3); /* -> [ ... escaped_source bytecode ] */ - DUK_D(DUK_DPRINT("regexp compilation successful, bytecode: %!T, escaped source: %!T", - (duk_tval *) duk_get_tval(ctx, -1), (duk_tval *) duk_get_tval(ctx, -2))); + DUK_DD(DUK_DDPRINT("regexp compilation successful, bytecode: %!T, escaped source: %!T", + (duk_tval *) duk_get_tval(ctx, -1), (duk_tval *) duk_get_tval(ctx, -2))); } /* @@ -80420,7 +78337,7 @@ DUK_LOCAL const duk_uint8_t *duk__utf8_backtrack(duk_hthread *thr, const duk_uin return p; fail: - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_REGEXP_BACKTRACK_FAILED); + DUK_ERROR_INTERNAL_DEFMSG(thr); return NULL; /* never here */ } @@ -80451,7 +78368,7 @@ DUK_LOCAL const duk_uint8_t *duk__utf8_advance(duk_hthread *thr, const duk_uint8 return p; fail: - DUK_ERROR(thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_REGEXP_ADVANCE_FAILED); + DUK_ERROR_INTERNAL_DEFMSG(thr); return NULL; /* never here */ } @@ -80495,7 +78412,7 @@ DUK_LOCAL duk_codepoint_t duk__inp_get_prev_cp(duk_re_matcher_ctx *re_ctx, const DUK_LOCAL const duk_uint8_t *duk__match_regexp(duk_re_matcher_ctx *re_ctx, const duk_uint8_t *pc, const duk_uint8_t *sp) { if (re_ctx->recursion_depth >= re_ctx->recursion_limit) { - DUK_ERROR(re_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_REGEXP_EXECUTOR_RECURSION_LIMIT); + DUK_ERROR_RANGE(re_ctx->thr, DUK_STR_REGEXP_EXECUTOR_RECURSION_LIMIT); } re_ctx->recursion_depth++; @@ -80503,7 +78420,7 @@ DUK_LOCAL const duk_uint8_t *duk__match_regexp(duk_re_matcher_ctx *re_ctx, const duk_small_int_t op; if (re_ctx->steps_count >= re_ctx->steps_limit) { - DUK_ERROR(re_ctx->thr, DUK_ERR_RANGE_ERROR, DUK_STR_REGEXP_EXECUTOR_STEP_LIMIT); + DUK_ERROR_RANGE(re_ctx->thr, DUK_STR_REGEXP_EXECUTOR_STEP_LIMIT); } re_ctx->steps_count++; @@ -80994,7 +78911,7 @@ DUK_LOCAL const duk_uint8_t *duk__match_regexp(duk_re_matcher_ctx *re_ctx, const return NULL; internal_error: - DUK_ERROR(re_ctx->thr, DUK_ERR_INTERNAL_ERROR, DUK_STR_REGEXP_INTERNAL_ERROR); + DUK_ERROR_INTERNAL_DEFMSG(re_ctx->thr); return NULL; /* never here */ } @@ -81354,89 +79271,6 @@ DUK_INTERNAL void duk_regexp_match_force_global(duk_hthread *thr) { /* regexp support disabled */ #endif /* DUK_USE_REGEXP_SUPPORT */ -#line 1 "duk_replacements.c" -/* - * Replacements for missing platform functions. - * - * Unlike the originals, fpclassify() and signbit() replacements don't - * work on any floating point types, only doubles. The C typing here - * mimics the standard prototypes. - */ - -/* include removed: duk_internal.h */ - -#if defined(DUK_USE_COMPUTED_NAN) -DUK_INTERNAL double duk_computed_nan; -#endif - -#if defined(DUK_USE_COMPUTED_INFINITY) -DUK_INTERNAL double duk_computed_infinity; -#endif - -#if defined(DUK_USE_REPL_FPCLASSIFY) -DUK_INTERNAL int duk_repl_fpclassify(double x) { - duk_double_union u; - duk_uint_fast16_t expt; - duk_small_int_t mzero; - - u.d = x; - expt = (duk_uint_fast16_t) (u.us[DUK_DBL_IDX_US0] & 0x7ff0UL); - if (expt > 0x0000UL && expt < 0x7ff0UL) { - /* expt values [0x001,0x7fe] = normal */ - return DUK_FP_NORMAL; - } - - mzero = (u.ui[DUK_DBL_IDX_UI1] == 0 && (u.ui[DUK_DBL_IDX_UI0] & 0x000fffffUL) == 0); - if (expt == 0x0000UL) { - /* expt 0x000 is zero/subnormal */ - if (mzero) { - return DUK_FP_ZERO; - } else { - return DUK_FP_SUBNORMAL; - } - } else { - /* expt 0xfff is infinite/nan */ - if (mzero) { - return DUK_FP_INFINITE; - } else { - return DUK_FP_NAN; - } - } -} -#endif - -#if defined(DUK_USE_REPL_SIGNBIT) -DUK_INTERNAL int duk_repl_signbit(double x) { - duk_double_union u; - u.d = x; - return (int) (u.uc[DUK_DBL_IDX_UC0] & 0x80UL); -} -#endif - -#if defined(DUK_USE_REPL_ISFINITE) -DUK_INTERNAL int duk_repl_isfinite(double x) { - int c = DUK_FPCLASSIFY(x); - if (c == DUK_FP_NAN || c == DUK_FP_INFINITE) { - return 0; - } else { - return 1; - } -} -#endif - -#if defined(DUK_USE_REPL_ISNAN) -DUK_INTERNAL int duk_repl_isnan(double x) { - int c = DUK_FPCLASSIFY(x); - return (c == DUK_FP_NAN); -} -#endif - -#if defined(DUK_USE_REPL_ISINF) -DUK_INTERNAL int duk_repl_isinf(double x) { - int c = DUK_FPCLASSIFY(x); - return (c == DUK_FP_INFINITE); -} -#endif #line 1 "duk_selftest.c" /* * Self tests to ensure execution environment is sane. Intended to catch @@ -82272,7 +80106,7 @@ const duk_uint16_t duk_unicode_re_canon_lookup[65536] = { 558,558,560,560,562,562,564,565,566,567,568,569,570,571,571,573,574,11390, 11391,577,577,579,580,581,582,582,584,584,586,586,588,588,590,590,11375, 11373,11376,385,390,597,393,394,600,399,602,400,604,605,606,607,403,609, -610,404,612,42893,614,615,407,406,618,11362,620,621,622,412,624,11374,413, +610,404,612,42893L,614,615,407,406,618,11362,620,621,622,412,624,11374,413, 627,628,415,630,631,632,633,634,635,636,11364,638,639,422,641,642,425,644, 645,646,647,430,580,433,434,581,653,654,655,656,657,439,659,660,661,662, 663,664,665,666,667,668,669,670,671,672,673,674,675,676,677,678,679,680, @@ -82730,7 +80564,7 @@ const duk_uint16_t duk_unicode_re_canon_lookup[65536] = { 7499,7500,7501,7502,7503,7504,7505,7506,7507,7508,7509,7510,7511,7512,7513, 7514,7515,7516,7517,7518,7519,7520,7521,7522,7523,7524,7525,7526,7527,7528, 7529,7530,7531,7532,7533,7534,7535,7536,7537,7538,7539,7540,7541,7542,7543, -7544,42877,7546,7547,7548,11363,7550,7551,7552,7553,7554,7555,7556,7557, +7544,42877L,7546,7547,7548,11363,7550,7551,7552,7553,7554,7555,7556,7557, 7558,7559,7560,7561,7562,7563,7564,7565,7566,7567,7568,7569,7570,7571,7572, 7573,7574,7575,7576,7577,7578,7579,7580,7581,7582,7583,7584,7585,7586,7587, 7588,7589,7590,7591,7592,7593,7594,7595,7596,7597,7598,7599,7600,7601,7602, @@ -84790,2738 +82624,3284 @@ const duk_uint16_t duk_unicode_re_canon_lookup[65536] = { 32726,32727,32728,32729,32730,32731,32732,32733,32734,32735,32736,32737, 32738,32739,32740,32741,32742,32743,32744,32745,32746,32747,32748,32749, 32750,32751,32752,32753,32754,32755,32756,32757,32758,32759,32760,32761, -32762,32763,32764,32765,32766,32767,32768,32769,32770,32771,32772,32773, -32774,32775,32776,32777,32778,32779,32780,32781,32782,32783,32784,32785, -32786,32787,32788,32789,32790,32791,32792,32793,32794,32795,32796,32797, -32798,32799,32800,32801,32802,32803,32804,32805,32806,32807,32808,32809, -32810,32811,32812,32813,32814,32815,32816,32817,32818,32819,32820,32821, -32822,32823,32824,32825,32826,32827,32828,32829,32830,32831,32832,32833, -32834,32835,32836,32837,32838,32839,32840,32841,32842,32843,32844,32845, -32846,32847,32848,32849,32850,32851,32852,32853,32854,32855,32856,32857, -32858,32859,32860,32861,32862,32863,32864,32865,32866,32867,32868,32869, -32870,32871,32872,32873,32874,32875,32876,32877,32878,32879,32880,32881, -32882,32883,32884,32885,32886,32887,32888,32889,32890,32891,32892,32893, -32894,32895,32896,32897,32898,32899,32900,32901,32902,32903,32904,32905, -32906,32907,32908,32909,32910,32911,32912,32913,32914,32915,32916,32917, -32918,32919,32920,32921,32922,32923,32924,32925,32926,32927,32928,32929, -32930,32931,32932,32933,32934,32935,32936,32937,32938,32939,32940,32941, -32942,32943,32944,32945,32946,32947,32948,32949,32950,32951,32952,32953, -32954,32955,32956,32957,32958,32959,32960,32961,32962,32963,32964,32965, -32966,32967,32968,32969,32970,32971,32972,32973,32974,32975,32976,32977, -32978,32979,32980,32981,32982,32983,32984,32985,32986,32987,32988,32989, -32990,32991,32992,32993,32994,32995,32996,32997,32998,32999,33000,33001, -33002,33003,33004,33005,33006,33007,33008,33009,33010,33011,33012,33013, -33014,33015,33016,33017,33018,33019,33020,33021,33022,33023,33024,33025, -33026,33027,33028,33029,33030,33031,33032,33033,33034,33035,33036,33037, -33038,33039,33040,33041,33042,33043,33044,33045,33046,33047,33048,33049, -33050,33051,33052,33053,33054,33055,33056,33057,33058,33059,33060,33061, -33062,33063,33064,33065,33066,33067,33068,33069,33070,33071,33072,33073, -33074,33075,33076,33077,33078,33079,33080,33081,33082,33083,33084,33085, -33086,33087,33088,33089,33090,33091,33092,33093,33094,33095,33096,33097, -33098,33099,33100,33101,33102,33103,33104,33105,33106,33107,33108,33109, -33110,33111,33112,33113,33114,33115,33116,33117,33118,33119,33120,33121, -33122,33123,33124,33125,33126,33127,33128,33129,33130,33131,33132,33133, -33134,33135,33136,33137,33138,33139,33140,33141,33142,33143,33144,33145, -33146,33147,33148,33149,33150,33151,33152,33153,33154,33155,33156,33157, -33158,33159,33160,33161,33162,33163,33164,33165,33166,33167,33168,33169, -33170,33171,33172,33173,33174,33175,33176,33177,33178,33179,33180,33181, -33182,33183,33184,33185,33186,33187,33188,33189,33190,33191,33192,33193, -33194,33195,33196,33197,33198,33199,33200,33201,33202,33203,33204,33205, -33206,33207,33208,33209,33210,33211,33212,33213,33214,33215,33216,33217, -33218,33219,33220,33221,33222,33223,33224,33225,33226,33227,33228,33229, -33230,33231,33232,33233,33234,33235,33236,33237,33238,33239,33240,33241, -33242,33243,33244,33245,33246,33247,33248,33249,33250,33251,33252,33253, -33254,33255,33256,33257,33258,33259,33260,33261,33262,33263,33264,33265, -33266,33267,33268,33269,33270,33271,33272,33273,33274,33275,33276,33277, -33278,33279,33280,33281,33282,33283,33284,33285,33286,33287,33288,33289, -33290,33291,33292,33293,33294,33295,33296,33297,33298,33299,33300,33301, -33302,33303,33304,33305,33306,33307,33308,33309,33310,33311,33312,33313, -33314,33315,33316,33317,33318,33319,33320,33321,33322,33323,33324,33325, -33326,33327,33328,33329,33330,33331,33332,33333,33334,33335,33336,33337, -33338,33339,33340,33341,33342,33343,33344,33345,33346,33347,33348,33349, -33350,33351,33352,33353,33354,33355,33356,33357,33358,33359,33360,33361, -33362,33363,33364,33365,33366,33367,33368,33369,33370,33371,33372,33373, -33374,33375,33376,33377,33378,33379,33380,33381,33382,33383,33384,33385, -33386,33387,33388,33389,33390,33391,33392,33393,33394,33395,33396,33397, -33398,33399,33400,33401,33402,33403,33404,33405,33406,33407,33408,33409, -33410,33411,33412,33413,33414,33415,33416,33417,33418,33419,33420,33421, -33422,33423,33424,33425,33426,33427,33428,33429,33430,33431,33432,33433, -33434,33435,33436,33437,33438,33439,33440,33441,33442,33443,33444,33445, -33446,33447,33448,33449,33450,33451,33452,33453,33454,33455,33456,33457, -33458,33459,33460,33461,33462,33463,33464,33465,33466,33467,33468,33469, -33470,33471,33472,33473,33474,33475,33476,33477,33478,33479,33480,33481, -33482,33483,33484,33485,33486,33487,33488,33489,33490,33491,33492,33493, -33494,33495,33496,33497,33498,33499,33500,33501,33502,33503,33504,33505, -33506,33507,33508,33509,33510,33511,33512,33513,33514,33515,33516,33517, -33518,33519,33520,33521,33522,33523,33524,33525,33526,33527,33528,33529, -33530,33531,33532,33533,33534,33535,33536,33537,33538,33539,33540,33541, -33542,33543,33544,33545,33546,33547,33548,33549,33550,33551,33552,33553, -33554,33555,33556,33557,33558,33559,33560,33561,33562,33563,33564,33565, -33566,33567,33568,33569,33570,33571,33572,33573,33574,33575,33576,33577, -33578,33579,33580,33581,33582,33583,33584,33585,33586,33587,33588,33589, -33590,33591,33592,33593,33594,33595,33596,33597,33598,33599,33600,33601, -33602,33603,33604,33605,33606,33607,33608,33609,33610,33611,33612,33613, -33614,33615,33616,33617,33618,33619,33620,33621,33622,33623,33624,33625, -33626,33627,33628,33629,33630,33631,33632,33633,33634,33635,33636,33637, -33638,33639,33640,33641,33642,33643,33644,33645,33646,33647,33648,33649, -33650,33651,33652,33653,33654,33655,33656,33657,33658,33659,33660,33661, -33662,33663,33664,33665,33666,33667,33668,33669,33670,33671,33672,33673, -33674,33675,33676,33677,33678,33679,33680,33681,33682,33683,33684,33685, -33686,33687,33688,33689,33690,33691,33692,33693,33694,33695,33696,33697, -33698,33699,33700,33701,33702,33703,33704,33705,33706,33707,33708,33709, -33710,33711,33712,33713,33714,33715,33716,33717,33718,33719,33720,33721, -33722,33723,33724,33725,33726,33727,33728,33729,33730,33731,33732,33733, -33734,33735,33736,33737,33738,33739,33740,33741,33742,33743,33744,33745, -33746,33747,33748,33749,33750,33751,33752,33753,33754,33755,33756,33757, -33758,33759,33760,33761,33762,33763,33764,33765,33766,33767,33768,33769, -33770,33771,33772,33773,33774,33775,33776,33777,33778,33779,33780,33781, -33782,33783,33784,33785,33786,33787,33788,33789,33790,33791,33792,33793, -33794,33795,33796,33797,33798,33799,33800,33801,33802,33803,33804,33805, -33806,33807,33808,33809,33810,33811,33812,33813,33814,33815,33816,33817, -33818,33819,33820,33821,33822,33823,33824,33825,33826,33827,33828,33829, -33830,33831,33832,33833,33834,33835,33836,33837,33838,33839,33840,33841, -33842,33843,33844,33845,33846,33847,33848,33849,33850,33851,33852,33853, -33854,33855,33856,33857,33858,33859,33860,33861,33862,33863,33864,33865, -33866,33867,33868,33869,33870,33871,33872,33873,33874,33875,33876,33877, -33878,33879,33880,33881,33882,33883,33884,33885,33886,33887,33888,33889, -33890,33891,33892,33893,33894,33895,33896,33897,33898,33899,33900,33901, -33902,33903,33904,33905,33906,33907,33908,33909,33910,33911,33912,33913, -33914,33915,33916,33917,33918,33919,33920,33921,33922,33923,33924,33925, -33926,33927,33928,33929,33930,33931,33932,33933,33934,33935,33936,33937, -33938,33939,33940,33941,33942,33943,33944,33945,33946,33947,33948,33949, -33950,33951,33952,33953,33954,33955,33956,33957,33958,33959,33960,33961, -33962,33963,33964,33965,33966,33967,33968,33969,33970,33971,33972,33973, -33974,33975,33976,33977,33978,33979,33980,33981,33982,33983,33984,33985, -33986,33987,33988,33989,33990,33991,33992,33993,33994,33995,33996,33997, -33998,33999,34000,34001,34002,34003,34004,34005,34006,34007,34008,34009, -34010,34011,34012,34013,34014,34015,34016,34017,34018,34019,34020,34021, -34022,34023,34024,34025,34026,34027,34028,34029,34030,34031,34032,34033, -34034,34035,34036,34037,34038,34039,34040,34041,34042,34043,34044,34045, -34046,34047,34048,34049,34050,34051,34052,34053,34054,34055,34056,34057, -34058,34059,34060,34061,34062,34063,34064,34065,34066,34067,34068,34069, -34070,34071,34072,34073,34074,34075,34076,34077,34078,34079,34080,34081, -34082,34083,34084,34085,34086,34087,34088,34089,34090,34091,34092,34093, -34094,34095,34096,34097,34098,34099,34100,34101,34102,34103,34104,34105, -34106,34107,34108,34109,34110,34111,34112,34113,34114,34115,34116,34117, -34118,34119,34120,34121,34122,34123,34124,34125,34126,34127,34128,34129, -34130,34131,34132,34133,34134,34135,34136,34137,34138,34139,34140,34141, -34142,34143,34144,34145,34146,34147,34148,34149,34150,34151,34152,34153, -34154,34155,34156,34157,34158,34159,34160,34161,34162,34163,34164,34165, -34166,34167,34168,34169,34170,34171,34172,34173,34174,34175,34176,34177, -34178,34179,34180,34181,34182,34183,34184,34185,34186,34187,34188,34189, -34190,34191,34192,34193,34194,34195,34196,34197,34198,34199,34200,34201, -34202,34203,34204,34205,34206,34207,34208,34209,34210,34211,34212,34213, -34214,34215,34216,34217,34218,34219,34220,34221,34222,34223,34224,34225, -34226,34227,34228,34229,34230,34231,34232,34233,34234,34235,34236,34237, -34238,34239,34240,34241,34242,34243,34244,34245,34246,34247,34248,34249, -34250,34251,34252,34253,34254,34255,34256,34257,34258,34259,34260,34261, -34262,34263,34264,34265,34266,34267,34268,34269,34270,34271,34272,34273, -34274,34275,34276,34277,34278,34279,34280,34281,34282,34283,34284,34285, -34286,34287,34288,34289,34290,34291,34292,34293,34294,34295,34296,34297, -34298,34299,34300,34301,34302,34303,34304,34305,34306,34307,34308,34309, -34310,34311,34312,34313,34314,34315,34316,34317,34318,34319,34320,34321, -34322,34323,34324,34325,34326,34327,34328,34329,34330,34331,34332,34333, -34334,34335,34336,34337,34338,34339,34340,34341,34342,34343,34344,34345, -34346,34347,34348,34349,34350,34351,34352,34353,34354,34355,34356,34357, -34358,34359,34360,34361,34362,34363,34364,34365,34366,34367,34368,34369, -34370,34371,34372,34373,34374,34375,34376,34377,34378,34379,34380,34381, -34382,34383,34384,34385,34386,34387,34388,34389,34390,34391,34392,34393, -34394,34395,34396,34397,34398,34399,34400,34401,34402,34403,34404,34405, -34406,34407,34408,34409,34410,34411,34412,34413,34414,34415,34416,34417, -34418,34419,34420,34421,34422,34423,34424,34425,34426,34427,34428,34429, -34430,34431,34432,34433,34434,34435,34436,34437,34438,34439,34440,34441, -34442,34443,34444,34445,34446,34447,34448,34449,34450,34451,34452,34453, -34454,34455,34456,34457,34458,34459,34460,34461,34462,34463,34464,34465, -34466,34467,34468,34469,34470,34471,34472,34473,34474,34475,34476,34477, -34478,34479,34480,34481,34482,34483,34484,34485,34486,34487,34488,34489, -34490,34491,34492,34493,34494,34495,34496,34497,34498,34499,34500,34501, -34502,34503,34504,34505,34506,34507,34508,34509,34510,34511,34512,34513, -34514,34515,34516,34517,34518,34519,34520,34521,34522,34523,34524,34525, -34526,34527,34528,34529,34530,34531,34532,34533,34534,34535,34536,34537, -34538,34539,34540,34541,34542,34543,34544,34545,34546,34547,34548,34549, -34550,34551,34552,34553,34554,34555,34556,34557,34558,34559,34560,34561, -34562,34563,34564,34565,34566,34567,34568,34569,34570,34571,34572,34573, -34574,34575,34576,34577,34578,34579,34580,34581,34582,34583,34584,34585, -34586,34587,34588,34589,34590,34591,34592,34593,34594,34595,34596,34597, -34598,34599,34600,34601,34602,34603,34604,34605,34606,34607,34608,34609, -34610,34611,34612,34613,34614,34615,34616,34617,34618,34619,34620,34621, -34622,34623,34624,34625,34626,34627,34628,34629,34630,34631,34632,34633, -34634,34635,34636,34637,34638,34639,34640,34641,34642,34643,34644,34645, -34646,34647,34648,34649,34650,34651,34652,34653,34654,34655,34656,34657, -34658,34659,34660,34661,34662,34663,34664,34665,34666,34667,34668,34669, -34670,34671,34672,34673,34674,34675,34676,34677,34678,34679,34680,34681, -34682,34683,34684,34685,34686,34687,34688,34689,34690,34691,34692,34693, -34694,34695,34696,34697,34698,34699,34700,34701,34702,34703,34704,34705, -34706,34707,34708,34709,34710,34711,34712,34713,34714,34715,34716,34717, -34718,34719,34720,34721,34722,34723,34724,34725,34726,34727,34728,34729, -34730,34731,34732,34733,34734,34735,34736,34737,34738,34739,34740,34741, -34742,34743,34744,34745,34746,34747,34748,34749,34750,34751,34752,34753, -34754,34755,34756,34757,34758,34759,34760,34761,34762,34763,34764,34765, -34766,34767,34768,34769,34770,34771,34772,34773,34774,34775,34776,34777, -34778,34779,34780,34781,34782,34783,34784,34785,34786,34787,34788,34789, -34790,34791,34792,34793,34794,34795,34796,34797,34798,34799,34800,34801, -34802,34803,34804,34805,34806,34807,34808,34809,34810,34811,34812,34813, -34814,34815,34816,34817,34818,34819,34820,34821,34822,34823,34824,34825, -34826,34827,34828,34829,34830,34831,34832,34833,34834,34835,34836,34837, -34838,34839,34840,34841,34842,34843,34844,34845,34846,34847,34848,34849, -34850,34851,34852,34853,34854,34855,34856,34857,34858,34859,34860,34861, -34862,34863,34864,34865,34866,34867,34868,34869,34870,34871,34872,34873, -34874,34875,34876,34877,34878,34879,34880,34881,34882,34883,34884,34885, -34886,34887,34888,34889,34890,34891,34892,34893,34894,34895,34896,34897, -34898,34899,34900,34901,34902,34903,34904,34905,34906,34907,34908,34909, -34910,34911,34912,34913,34914,34915,34916,34917,34918,34919,34920,34921, -34922,34923,34924,34925,34926,34927,34928,34929,34930,34931,34932,34933, -34934,34935,34936,34937,34938,34939,34940,34941,34942,34943,34944,34945, -34946,34947,34948,34949,34950,34951,34952,34953,34954,34955,34956,34957, -34958,34959,34960,34961,34962,34963,34964,34965,34966,34967,34968,34969, -34970,34971,34972,34973,34974,34975,34976,34977,34978,34979,34980,34981, -34982,34983,34984,34985,34986,34987,34988,34989,34990,34991,34992,34993, -34994,34995,34996,34997,34998,34999,35000,35001,35002,35003,35004,35005, -35006,35007,35008,35009,35010,35011,35012,35013,35014,35015,35016,35017, -35018,35019,35020,35021,35022,35023,35024,35025,35026,35027,35028,35029, -35030,35031,35032,35033,35034,35035,35036,35037,35038,35039,35040,35041, -35042,35043,35044,35045,35046,35047,35048,35049,35050,35051,35052,35053, -35054,35055,35056,35057,35058,35059,35060,35061,35062,35063,35064,35065, -35066,35067,35068,35069,35070,35071,35072,35073,35074,35075,35076,35077, -35078,35079,35080,35081,35082,35083,35084,35085,35086,35087,35088,35089, -35090,35091,35092,35093,35094,35095,35096,35097,35098,35099,35100,35101, -35102,35103,35104,35105,35106,35107,35108,35109,35110,35111,35112,35113, -35114,35115,35116,35117,35118,35119,35120,35121,35122,35123,35124,35125, -35126,35127,35128,35129,35130,35131,35132,35133,35134,35135,35136,35137, -35138,35139,35140,35141,35142,35143,35144,35145,35146,35147,35148,35149, -35150,35151,35152,35153,35154,35155,35156,35157,35158,35159,35160,35161, -35162,35163,35164,35165,35166,35167,35168,35169,35170,35171,35172,35173, -35174,35175,35176,35177,35178,35179,35180,35181,35182,35183,35184,35185, -35186,35187,35188,35189,35190,35191,35192,35193,35194,35195,35196,35197, -35198,35199,35200,35201,35202,35203,35204,35205,35206,35207,35208,35209, -35210,35211,35212,35213,35214,35215,35216,35217,35218,35219,35220,35221, -35222,35223,35224,35225,35226,35227,35228,35229,35230,35231,35232,35233, -35234,35235,35236,35237,35238,35239,35240,35241,35242,35243,35244,35245, -35246,35247,35248,35249,35250,35251,35252,35253,35254,35255,35256,35257, -35258,35259,35260,35261,35262,35263,35264,35265,35266,35267,35268,35269, -35270,35271,35272,35273,35274,35275,35276,35277,35278,35279,35280,35281, -35282,35283,35284,35285,35286,35287,35288,35289,35290,35291,35292,35293, -35294,35295,35296,35297,35298,35299,35300,35301,35302,35303,35304,35305, -35306,35307,35308,35309,35310,35311,35312,35313,35314,35315,35316,35317, -35318,35319,35320,35321,35322,35323,35324,35325,35326,35327,35328,35329, -35330,35331,35332,35333,35334,35335,35336,35337,35338,35339,35340,35341, -35342,35343,35344,35345,35346,35347,35348,35349,35350,35351,35352,35353, -35354,35355,35356,35357,35358,35359,35360,35361,35362,35363,35364,35365, -35366,35367,35368,35369,35370,35371,35372,35373,35374,35375,35376,35377, -35378,35379,35380,35381,35382,35383,35384,35385,35386,35387,35388,35389, -35390,35391,35392,35393,35394,35395,35396,35397,35398,35399,35400,35401, -35402,35403,35404,35405,35406,35407,35408,35409,35410,35411,35412,35413, -35414,35415,35416,35417,35418,35419,35420,35421,35422,35423,35424,35425, -35426,35427,35428,35429,35430,35431,35432,35433,35434,35435,35436,35437, -35438,35439,35440,35441,35442,35443,35444,35445,35446,35447,35448,35449, -35450,35451,35452,35453,35454,35455,35456,35457,35458,35459,35460,35461, -35462,35463,35464,35465,35466,35467,35468,35469,35470,35471,35472,35473, -35474,35475,35476,35477,35478,35479,35480,35481,35482,35483,35484,35485, -35486,35487,35488,35489,35490,35491,35492,35493,35494,35495,35496,35497, -35498,35499,35500,35501,35502,35503,35504,35505,35506,35507,35508,35509, -35510,35511,35512,35513,35514,35515,35516,35517,35518,35519,35520,35521, -35522,35523,35524,35525,35526,35527,35528,35529,35530,35531,35532,35533, -35534,35535,35536,35537,35538,35539,35540,35541,35542,35543,35544,35545, -35546,35547,35548,35549,35550,35551,35552,35553,35554,35555,35556,35557, -35558,35559,35560,35561,35562,35563,35564,35565,35566,35567,35568,35569, -35570,35571,35572,35573,35574,35575,35576,35577,35578,35579,35580,35581, -35582,35583,35584,35585,35586,35587,35588,35589,35590,35591,35592,35593, -35594,35595,35596,35597,35598,35599,35600,35601,35602,35603,35604,35605, -35606,35607,35608,35609,35610,35611,35612,35613,35614,35615,35616,35617, -35618,35619,35620,35621,35622,35623,35624,35625,35626,35627,35628,35629, -35630,35631,35632,35633,35634,35635,35636,35637,35638,35639,35640,35641, -35642,35643,35644,35645,35646,35647,35648,35649,35650,35651,35652,35653, -35654,35655,35656,35657,35658,35659,35660,35661,35662,35663,35664,35665, -35666,35667,35668,35669,35670,35671,35672,35673,35674,35675,35676,35677, -35678,35679,35680,35681,35682,35683,35684,35685,35686,35687,35688,35689, -35690,35691,35692,35693,35694,35695,35696,35697,35698,35699,35700,35701, -35702,35703,35704,35705,35706,35707,35708,35709,35710,35711,35712,35713, -35714,35715,35716,35717,35718,35719,35720,35721,35722,35723,35724,35725, -35726,35727,35728,35729,35730,35731,35732,35733,35734,35735,35736,35737, -35738,35739,35740,35741,35742,35743,35744,35745,35746,35747,35748,35749, -35750,35751,35752,35753,35754,35755,35756,35757,35758,35759,35760,35761, -35762,35763,35764,35765,35766,35767,35768,35769,35770,35771,35772,35773, -35774,35775,35776,35777,35778,35779,35780,35781,35782,35783,35784,35785, -35786,35787,35788,35789,35790,35791,35792,35793,35794,35795,35796,35797, -35798,35799,35800,35801,35802,35803,35804,35805,35806,35807,35808,35809, -35810,35811,35812,35813,35814,35815,35816,35817,35818,35819,35820,35821, -35822,35823,35824,35825,35826,35827,35828,35829,35830,35831,35832,35833, -35834,35835,35836,35837,35838,35839,35840,35841,35842,35843,35844,35845, -35846,35847,35848,35849,35850,35851,35852,35853,35854,35855,35856,35857, -35858,35859,35860,35861,35862,35863,35864,35865,35866,35867,35868,35869, -35870,35871,35872,35873,35874,35875,35876,35877,35878,35879,35880,35881, -35882,35883,35884,35885,35886,35887,35888,35889,35890,35891,35892,35893, -35894,35895,35896,35897,35898,35899,35900,35901,35902,35903,35904,35905, -35906,35907,35908,35909,35910,35911,35912,35913,35914,35915,35916,35917, -35918,35919,35920,35921,35922,35923,35924,35925,35926,35927,35928,35929, -35930,35931,35932,35933,35934,35935,35936,35937,35938,35939,35940,35941, -35942,35943,35944,35945,35946,35947,35948,35949,35950,35951,35952,35953, -35954,35955,35956,35957,35958,35959,35960,35961,35962,35963,35964,35965, -35966,35967,35968,35969,35970,35971,35972,35973,35974,35975,35976,35977, -35978,35979,35980,35981,35982,35983,35984,35985,35986,35987,35988,35989, -35990,35991,35992,35993,35994,35995,35996,35997,35998,35999,36000,36001, -36002,36003,36004,36005,36006,36007,36008,36009,36010,36011,36012,36013, -36014,36015,36016,36017,36018,36019,36020,36021,36022,36023,36024,36025, -36026,36027,36028,36029,36030,36031,36032,36033,36034,36035,36036,36037, -36038,36039,36040,36041,36042,36043,36044,36045,36046,36047,36048,36049, -36050,36051,36052,36053,36054,36055,36056,36057,36058,36059,36060,36061, -36062,36063,36064,36065,36066,36067,36068,36069,36070,36071,36072,36073, -36074,36075,36076,36077,36078,36079,36080,36081,36082,36083,36084,36085, -36086,36087,36088,36089,36090,36091,36092,36093,36094,36095,36096,36097, -36098,36099,36100,36101,36102,36103,36104,36105,36106,36107,36108,36109, -36110,36111,36112,36113,36114,36115,36116,36117,36118,36119,36120,36121, -36122,36123,36124,36125,36126,36127,36128,36129,36130,36131,36132,36133, -36134,36135,36136,36137,36138,36139,36140,36141,36142,36143,36144,36145, -36146,36147,36148,36149,36150,36151,36152,36153,36154,36155,36156,36157, -36158,36159,36160,36161,36162,36163,36164,36165,36166,36167,36168,36169, -36170,36171,36172,36173,36174,36175,36176,36177,36178,36179,36180,36181, -36182,36183,36184,36185,36186,36187,36188,36189,36190,36191,36192,36193, -36194,36195,36196,36197,36198,36199,36200,36201,36202,36203,36204,36205, -36206,36207,36208,36209,36210,36211,36212,36213,36214,36215,36216,36217, -36218,36219,36220,36221,36222,36223,36224,36225,36226,36227,36228,36229, -36230,36231,36232,36233,36234,36235,36236,36237,36238,36239,36240,36241, -36242,36243,36244,36245,36246,36247,36248,36249,36250,36251,36252,36253, -36254,36255,36256,36257,36258,36259,36260,36261,36262,36263,36264,36265, -36266,36267,36268,36269,36270,36271,36272,36273,36274,36275,36276,36277, -36278,36279,36280,36281,36282,36283,36284,36285,36286,36287,36288,36289, -36290,36291,36292,36293,36294,36295,36296,36297,36298,36299,36300,36301, -36302,36303,36304,36305,36306,36307,36308,36309,36310,36311,36312,36313, -36314,36315,36316,36317,36318,36319,36320,36321,36322,36323,36324,36325, -36326,36327,36328,36329,36330,36331,36332,36333,36334,36335,36336,36337, -36338,36339,36340,36341,36342,36343,36344,36345,36346,36347,36348,36349, -36350,36351,36352,36353,36354,36355,36356,36357,36358,36359,36360,36361, -36362,36363,36364,36365,36366,36367,36368,36369,36370,36371,36372,36373, -36374,36375,36376,36377,36378,36379,36380,36381,36382,36383,36384,36385, -36386,36387,36388,36389,36390,36391,36392,36393,36394,36395,36396,36397, -36398,36399,36400,36401,36402,36403,36404,36405,36406,36407,36408,36409, -36410,36411,36412,36413,36414,36415,36416,36417,36418,36419,36420,36421, -36422,36423,36424,36425,36426,36427,36428,36429,36430,36431,36432,36433, -36434,36435,36436,36437,36438,36439,36440,36441,36442,36443,36444,36445, -36446,36447,36448,36449,36450,36451,36452,36453,36454,36455,36456,36457, -36458,36459,36460,36461,36462,36463,36464,36465,36466,36467,36468,36469, -36470,36471,36472,36473,36474,36475,36476,36477,36478,36479,36480,36481, -36482,36483,36484,36485,36486,36487,36488,36489,36490,36491,36492,36493, -36494,36495,36496,36497,36498,36499,36500,36501,36502,36503,36504,36505, -36506,36507,36508,36509,36510,36511,36512,36513,36514,36515,36516,36517, -36518,36519,36520,36521,36522,36523,36524,36525,36526,36527,36528,36529, -36530,36531,36532,36533,36534,36535,36536,36537,36538,36539,36540,36541, -36542,36543,36544,36545,36546,36547,36548,36549,36550,36551,36552,36553, -36554,36555,36556,36557,36558,36559,36560,36561,36562,36563,36564,36565, -36566,36567,36568,36569,36570,36571,36572,36573,36574,36575,36576,36577, -36578,36579,36580,36581,36582,36583,36584,36585,36586,36587,36588,36589, -36590,36591,36592,36593,36594,36595,36596,36597,36598,36599,36600,36601, -36602,36603,36604,36605,36606,36607,36608,36609,36610,36611,36612,36613, -36614,36615,36616,36617,36618,36619,36620,36621,36622,36623,36624,36625, -36626,36627,36628,36629,36630,36631,36632,36633,36634,36635,36636,36637, -36638,36639,36640,36641,36642,36643,36644,36645,36646,36647,36648,36649, -36650,36651,36652,36653,36654,36655,36656,36657,36658,36659,36660,36661, -36662,36663,36664,36665,36666,36667,36668,36669,36670,36671,36672,36673, -36674,36675,36676,36677,36678,36679,36680,36681,36682,36683,36684,36685, -36686,36687,36688,36689,36690,36691,36692,36693,36694,36695,36696,36697, -36698,36699,36700,36701,36702,36703,36704,36705,36706,36707,36708,36709, -36710,36711,36712,36713,36714,36715,36716,36717,36718,36719,36720,36721, -36722,36723,36724,36725,36726,36727,36728,36729,36730,36731,36732,36733, -36734,36735,36736,36737,36738,36739,36740,36741,36742,36743,36744,36745, -36746,36747,36748,36749,36750,36751,36752,36753,36754,36755,36756,36757, -36758,36759,36760,36761,36762,36763,36764,36765,36766,36767,36768,36769, -36770,36771,36772,36773,36774,36775,36776,36777,36778,36779,36780,36781, -36782,36783,36784,36785,36786,36787,36788,36789,36790,36791,36792,36793, -36794,36795,36796,36797,36798,36799,36800,36801,36802,36803,36804,36805, -36806,36807,36808,36809,36810,36811,36812,36813,36814,36815,36816,36817, -36818,36819,36820,36821,36822,36823,36824,36825,36826,36827,36828,36829, -36830,36831,36832,36833,36834,36835,36836,36837,36838,36839,36840,36841, -36842,36843,36844,36845,36846,36847,36848,36849,36850,36851,36852,36853, -36854,36855,36856,36857,36858,36859,36860,36861,36862,36863,36864,36865, -36866,36867,36868,36869,36870,36871,36872,36873,36874,36875,36876,36877, -36878,36879,36880,36881,36882,36883,36884,36885,36886,36887,36888,36889, -36890,36891,36892,36893,36894,36895,36896,36897,36898,36899,36900,36901, -36902,36903,36904,36905,36906,36907,36908,36909,36910,36911,36912,36913, -36914,36915,36916,36917,36918,36919,36920,36921,36922,36923,36924,36925, -36926,36927,36928,36929,36930,36931,36932,36933,36934,36935,36936,36937, -36938,36939,36940,36941,36942,36943,36944,36945,36946,36947,36948,36949, -36950,36951,36952,36953,36954,36955,36956,36957,36958,36959,36960,36961, -36962,36963,36964,36965,36966,36967,36968,36969,36970,36971,36972,36973, -36974,36975,36976,36977,36978,36979,36980,36981,36982,36983,36984,36985, -36986,36987,36988,36989,36990,36991,36992,36993,36994,36995,36996,36997, -36998,36999,37000,37001,37002,37003,37004,37005,37006,37007,37008,37009, -37010,37011,37012,37013,37014,37015,37016,37017,37018,37019,37020,37021, -37022,37023,37024,37025,37026,37027,37028,37029,37030,37031,37032,37033, -37034,37035,37036,37037,37038,37039,37040,37041,37042,37043,37044,37045, -37046,37047,37048,37049,37050,37051,37052,37053,37054,37055,37056,37057, -37058,37059,37060,37061,37062,37063,37064,37065,37066,37067,37068,37069, -37070,37071,37072,37073,37074,37075,37076,37077,37078,37079,37080,37081, -37082,37083,37084,37085,37086,37087,37088,37089,37090,37091,37092,37093, -37094,37095,37096,37097,37098,37099,37100,37101,37102,37103,37104,37105, -37106,37107,37108,37109,37110,37111,37112,37113,37114,37115,37116,37117, -37118,37119,37120,37121,37122,37123,37124,37125,37126,37127,37128,37129, -37130,37131,37132,37133,37134,37135,37136,37137,37138,37139,37140,37141, -37142,37143,37144,37145,37146,37147,37148,37149,37150,37151,37152,37153, -37154,37155,37156,37157,37158,37159,37160,37161,37162,37163,37164,37165, -37166,37167,37168,37169,37170,37171,37172,37173,37174,37175,37176,37177, -37178,37179,37180,37181,37182,37183,37184,37185,37186,37187,37188,37189, -37190,37191,37192,37193,37194,37195,37196,37197,37198,37199,37200,37201, -37202,37203,37204,37205,37206,37207,37208,37209,37210,37211,37212,37213, -37214,37215,37216,37217,37218,37219,37220,37221,37222,37223,37224,37225, -37226,37227,37228,37229,37230,37231,37232,37233,37234,37235,37236,37237, -37238,37239,37240,37241,37242,37243,37244,37245,37246,37247,37248,37249, -37250,37251,37252,37253,37254,37255,37256,37257,37258,37259,37260,37261, -37262,37263,37264,37265,37266,37267,37268,37269,37270,37271,37272,37273, -37274,37275,37276,37277,37278,37279,37280,37281,37282,37283,37284,37285, -37286,37287,37288,37289,37290,37291,37292,37293,37294,37295,37296,37297, -37298,37299,37300,37301,37302,37303,37304,37305,37306,37307,37308,37309, -37310,37311,37312,37313,37314,37315,37316,37317,37318,37319,37320,37321, -37322,37323,37324,37325,37326,37327,37328,37329,37330,37331,37332,37333, -37334,37335,37336,37337,37338,37339,37340,37341,37342,37343,37344,37345, -37346,37347,37348,37349,37350,37351,37352,37353,37354,37355,37356,37357, -37358,37359,37360,37361,37362,37363,37364,37365,37366,37367,37368,37369, -37370,37371,37372,37373,37374,37375,37376,37377,37378,37379,37380,37381, -37382,37383,37384,37385,37386,37387,37388,37389,37390,37391,37392,37393, -37394,37395,37396,37397,37398,37399,37400,37401,37402,37403,37404,37405, -37406,37407,37408,37409,37410,37411,37412,37413,37414,37415,37416,37417, -37418,37419,37420,37421,37422,37423,37424,37425,37426,37427,37428,37429, -37430,37431,37432,37433,37434,37435,37436,37437,37438,37439,37440,37441, -37442,37443,37444,37445,37446,37447,37448,37449,37450,37451,37452,37453, -37454,37455,37456,37457,37458,37459,37460,37461,37462,37463,37464,37465, -37466,37467,37468,37469,37470,37471,37472,37473,37474,37475,37476,37477, -37478,37479,37480,37481,37482,37483,37484,37485,37486,37487,37488,37489, -37490,37491,37492,37493,37494,37495,37496,37497,37498,37499,37500,37501, -37502,37503,37504,37505,37506,37507,37508,37509,37510,37511,37512,37513, -37514,37515,37516,37517,37518,37519,37520,37521,37522,37523,37524,37525, -37526,37527,37528,37529,37530,37531,37532,37533,37534,37535,37536,37537, -37538,37539,37540,37541,37542,37543,37544,37545,37546,37547,37548,37549, -37550,37551,37552,37553,37554,37555,37556,37557,37558,37559,37560,37561, -37562,37563,37564,37565,37566,37567,37568,37569,37570,37571,37572,37573, -37574,37575,37576,37577,37578,37579,37580,37581,37582,37583,37584,37585, -37586,37587,37588,37589,37590,37591,37592,37593,37594,37595,37596,37597, -37598,37599,37600,37601,37602,37603,37604,37605,37606,37607,37608,37609, -37610,37611,37612,37613,37614,37615,37616,37617,37618,37619,37620,37621, -37622,37623,37624,37625,37626,37627,37628,37629,37630,37631,37632,37633, -37634,37635,37636,37637,37638,37639,37640,37641,37642,37643,37644,37645, -37646,37647,37648,37649,37650,37651,37652,37653,37654,37655,37656,37657, -37658,37659,37660,37661,37662,37663,37664,37665,37666,37667,37668,37669, -37670,37671,37672,37673,37674,37675,37676,37677,37678,37679,37680,37681, -37682,37683,37684,37685,37686,37687,37688,37689,37690,37691,37692,37693, -37694,37695,37696,37697,37698,37699,37700,37701,37702,37703,37704,37705, -37706,37707,37708,37709,37710,37711,37712,37713,37714,37715,37716,37717, -37718,37719,37720,37721,37722,37723,37724,37725,37726,37727,37728,37729, -37730,37731,37732,37733,37734,37735,37736,37737,37738,37739,37740,37741, -37742,37743,37744,37745,37746,37747,37748,37749,37750,37751,37752,37753, -37754,37755,37756,37757,37758,37759,37760,37761,37762,37763,37764,37765, -37766,37767,37768,37769,37770,37771,37772,37773,37774,37775,37776,37777, -37778,37779,37780,37781,37782,37783,37784,37785,37786,37787,37788,37789, -37790,37791,37792,37793,37794,37795,37796,37797,37798,37799,37800,37801, -37802,37803,37804,37805,37806,37807,37808,37809,37810,37811,37812,37813, -37814,37815,37816,37817,37818,37819,37820,37821,37822,37823,37824,37825, -37826,37827,37828,37829,37830,37831,37832,37833,37834,37835,37836,37837, -37838,37839,37840,37841,37842,37843,37844,37845,37846,37847,37848,37849, -37850,37851,37852,37853,37854,37855,37856,37857,37858,37859,37860,37861, -37862,37863,37864,37865,37866,37867,37868,37869,37870,37871,37872,37873, -37874,37875,37876,37877,37878,37879,37880,37881,37882,37883,37884,37885, -37886,37887,37888,37889,37890,37891,37892,37893,37894,37895,37896,37897, -37898,37899,37900,37901,37902,37903,37904,37905,37906,37907,37908,37909, -37910,37911,37912,37913,37914,37915,37916,37917,37918,37919,37920,37921, -37922,37923,37924,37925,37926,37927,37928,37929,37930,37931,37932,37933, -37934,37935,37936,37937,37938,37939,37940,37941,37942,37943,37944,37945, -37946,37947,37948,37949,37950,37951,37952,37953,37954,37955,37956,37957, -37958,37959,37960,37961,37962,37963,37964,37965,37966,37967,37968,37969, -37970,37971,37972,37973,37974,37975,37976,37977,37978,37979,37980,37981, -37982,37983,37984,37985,37986,37987,37988,37989,37990,37991,37992,37993, -37994,37995,37996,37997,37998,37999,38000,38001,38002,38003,38004,38005, -38006,38007,38008,38009,38010,38011,38012,38013,38014,38015,38016,38017, -38018,38019,38020,38021,38022,38023,38024,38025,38026,38027,38028,38029, -38030,38031,38032,38033,38034,38035,38036,38037,38038,38039,38040,38041, -38042,38043,38044,38045,38046,38047,38048,38049,38050,38051,38052,38053, -38054,38055,38056,38057,38058,38059,38060,38061,38062,38063,38064,38065, -38066,38067,38068,38069,38070,38071,38072,38073,38074,38075,38076,38077, -38078,38079,38080,38081,38082,38083,38084,38085,38086,38087,38088,38089, -38090,38091,38092,38093,38094,38095,38096,38097,38098,38099,38100,38101, -38102,38103,38104,38105,38106,38107,38108,38109,38110,38111,38112,38113, -38114,38115,38116,38117,38118,38119,38120,38121,38122,38123,38124,38125, -38126,38127,38128,38129,38130,38131,38132,38133,38134,38135,38136,38137, -38138,38139,38140,38141,38142,38143,38144,38145,38146,38147,38148,38149, -38150,38151,38152,38153,38154,38155,38156,38157,38158,38159,38160,38161, -38162,38163,38164,38165,38166,38167,38168,38169,38170,38171,38172,38173, -38174,38175,38176,38177,38178,38179,38180,38181,38182,38183,38184,38185, -38186,38187,38188,38189,38190,38191,38192,38193,38194,38195,38196,38197, -38198,38199,38200,38201,38202,38203,38204,38205,38206,38207,38208,38209, -38210,38211,38212,38213,38214,38215,38216,38217,38218,38219,38220,38221, -38222,38223,38224,38225,38226,38227,38228,38229,38230,38231,38232,38233, -38234,38235,38236,38237,38238,38239,38240,38241,38242,38243,38244,38245, -38246,38247,38248,38249,38250,38251,38252,38253,38254,38255,38256,38257, -38258,38259,38260,38261,38262,38263,38264,38265,38266,38267,38268,38269, -38270,38271,38272,38273,38274,38275,38276,38277,38278,38279,38280,38281, -38282,38283,38284,38285,38286,38287,38288,38289,38290,38291,38292,38293, -38294,38295,38296,38297,38298,38299,38300,38301,38302,38303,38304,38305, -38306,38307,38308,38309,38310,38311,38312,38313,38314,38315,38316,38317, -38318,38319,38320,38321,38322,38323,38324,38325,38326,38327,38328,38329, -38330,38331,38332,38333,38334,38335,38336,38337,38338,38339,38340,38341, -38342,38343,38344,38345,38346,38347,38348,38349,38350,38351,38352,38353, -38354,38355,38356,38357,38358,38359,38360,38361,38362,38363,38364,38365, -38366,38367,38368,38369,38370,38371,38372,38373,38374,38375,38376,38377, -38378,38379,38380,38381,38382,38383,38384,38385,38386,38387,38388,38389, -38390,38391,38392,38393,38394,38395,38396,38397,38398,38399,38400,38401, -38402,38403,38404,38405,38406,38407,38408,38409,38410,38411,38412,38413, -38414,38415,38416,38417,38418,38419,38420,38421,38422,38423,38424,38425, -38426,38427,38428,38429,38430,38431,38432,38433,38434,38435,38436,38437, -38438,38439,38440,38441,38442,38443,38444,38445,38446,38447,38448,38449, -38450,38451,38452,38453,38454,38455,38456,38457,38458,38459,38460,38461, -38462,38463,38464,38465,38466,38467,38468,38469,38470,38471,38472,38473, -38474,38475,38476,38477,38478,38479,38480,38481,38482,38483,38484,38485, -38486,38487,38488,38489,38490,38491,38492,38493,38494,38495,38496,38497, -38498,38499,38500,38501,38502,38503,38504,38505,38506,38507,38508,38509, -38510,38511,38512,38513,38514,38515,38516,38517,38518,38519,38520,38521, -38522,38523,38524,38525,38526,38527,38528,38529,38530,38531,38532,38533, -38534,38535,38536,38537,38538,38539,38540,38541,38542,38543,38544,38545, -38546,38547,38548,38549,38550,38551,38552,38553,38554,38555,38556,38557, -38558,38559,38560,38561,38562,38563,38564,38565,38566,38567,38568,38569, -38570,38571,38572,38573,38574,38575,38576,38577,38578,38579,38580,38581, -38582,38583,38584,38585,38586,38587,38588,38589,38590,38591,38592,38593, -38594,38595,38596,38597,38598,38599,38600,38601,38602,38603,38604,38605, -38606,38607,38608,38609,38610,38611,38612,38613,38614,38615,38616,38617, -38618,38619,38620,38621,38622,38623,38624,38625,38626,38627,38628,38629, -38630,38631,38632,38633,38634,38635,38636,38637,38638,38639,38640,38641, -38642,38643,38644,38645,38646,38647,38648,38649,38650,38651,38652,38653, -38654,38655,38656,38657,38658,38659,38660,38661,38662,38663,38664,38665, -38666,38667,38668,38669,38670,38671,38672,38673,38674,38675,38676,38677, -38678,38679,38680,38681,38682,38683,38684,38685,38686,38687,38688,38689, -38690,38691,38692,38693,38694,38695,38696,38697,38698,38699,38700,38701, -38702,38703,38704,38705,38706,38707,38708,38709,38710,38711,38712,38713, -38714,38715,38716,38717,38718,38719,38720,38721,38722,38723,38724,38725, -38726,38727,38728,38729,38730,38731,38732,38733,38734,38735,38736,38737, -38738,38739,38740,38741,38742,38743,38744,38745,38746,38747,38748,38749, -38750,38751,38752,38753,38754,38755,38756,38757,38758,38759,38760,38761, -38762,38763,38764,38765,38766,38767,38768,38769,38770,38771,38772,38773, -38774,38775,38776,38777,38778,38779,38780,38781,38782,38783,38784,38785, -38786,38787,38788,38789,38790,38791,38792,38793,38794,38795,38796,38797, -38798,38799,38800,38801,38802,38803,38804,38805,38806,38807,38808,38809, -38810,38811,38812,38813,38814,38815,38816,38817,38818,38819,38820,38821, -38822,38823,38824,38825,38826,38827,38828,38829,38830,38831,38832,38833, -38834,38835,38836,38837,38838,38839,38840,38841,38842,38843,38844,38845, -38846,38847,38848,38849,38850,38851,38852,38853,38854,38855,38856,38857, -38858,38859,38860,38861,38862,38863,38864,38865,38866,38867,38868,38869, -38870,38871,38872,38873,38874,38875,38876,38877,38878,38879,38880,38881, -38882,38883,38884,38885,38886,38887,38888,38889,38890,38891,38892,38893, -38894,38895,38896,38897,38898,38899,38900,38901,38902,38903,38904,38905, -38906,38907,38908,38909,38910,38911,38912,38913,38914,38915,38916,38917, -38918,38919,38920,38921,38922,38923,38924,38925,38926,38927,38928,38929, -38930,38931,38932,38933,38934,38935,38936,38937,38938,38939,38940,38941, -38942,38943,38944,38945,38946,38947,38948,38949,38950,38951,38952,38953, -38954,38955,38956,38957,38958,38959,38960,38961,38962,38963,38964,38965, -38966,38967,38968,38969,38970,38971,38972,38973,38974,38975,38976,38977, -38978,38979,38980,38981,38982,38983,38984,38985,38986,38987,38988,38989, -38990,38991,38992,38993,38994,38995,38996,38997,38998,38999,39000,39001, -39002,39003,39004,39005,39006,39007,39008,39009,39010,39011,39012,39013, -39014,39015,39016,39017,39018,39019,39020,39021,39022,39023,39024,39025, -39026,39027,39028,39029,39030,39031,39032,39033,39034,39035,39036,39037, -39038,39039,39040,39041,39042,39043,39044,39045,39046,39047,39048,39049, -39050,39051,39052,39053,39054,39055,39056,39057,39058,39059,39060,39061, -39062,39063,39064,39065,39066,39067,39068,39069,39070,39071,39072,39073, -39074,39075,39076,39077,39078,39079,39080,39081,39082,39083,39084,39085, -39086,39087,39088,39089,39090,39091,39092,39093,39094,39095,39096,39097, -39098,39099,39100,39101,39102,39103,39104,39105,39106,39107,39108,39109, -39110,39111,39112,39113,39114,39115,39116,39117,39118,39119,39120,39121, -39122,39123,39124,39125,39126,39127,39128,39129,39130,39131,39132,39133, -39134,39135,39136,39137,39138,39139,39140,39141,39142,39143,39144,39145, -39146,39147,39148,39149,39150,39151,39152,39153,39154,39155,39156,39157, -39158,39159,39160,39161,39162,39163,39164,39165,39166,39167,39168,39169, -39170,39171,39172,39173,39174,39175,39176,39177,39178,39179,39180,39181, -39182,39183,39184,39185,39186,39187,39188,39189,39190,39191,39192,39193, -39194,39195,39196,39197,39198,39199,39200,39201,39202,39203,39204,39205, -39206,39207,39208,39209,39210,39211,39212,39213,39214,39215,39216,39217, -39218,39219,39220,39221,39222,39223,39224,39225,39226,39227,39228,39229, -39230,39231,39232,39233,39234,39235,39236,39237,39238,39239,39240,39241, -39242,39243,39244,39245,39246,39247,39248,39249,39250,39251,39252,39253, -39254,39255,39256,39257,39258,39259,39260,39261,39262,39263,39264,39265, -39266,39267,39268,39269,39270,39271,39272,39273,39274,39275,39276,39277, -39278,39279,39280,39281,39282,39283,39284,39285,39286,39287,39288,39289, -39290,39291,39292,39293,39294,39295,39296,39297,39298,39299,39300,39301, -39302,39303,39304,39305,39306,39307,39308,39309,39310,39311,39312,39313, -39314,39315,39316,39317,39318,39319,39320,39321,39322,39323,39324,39325, -39326,39327,39328,39329,39330,39331,39332,39333,39334,39335,39336,39337, -39338,39339,39340,39341,39342,39343,39344,39345,39346,39347,39348,39349, -39350,39351,39352,39353,39354,39355,39356,39357,39358,39359,39360,39361, -39362,39363,39364,39365,39366,39367,39368,39369,39370,39371,39372,39373, -39374,39375,39376,39377,39378,39379,39380,39381,39382,39383,39384,39385, -39386,39387,39388,39389,39390,39391,39392,39393,39394,39395,39396,39397, -39398,39399,39400,39401,39402,39403,39404,39405,39406,39407,39408,39409, -39410,39411,39412,39413,39414,39415,39416,39417,39418,39419,39420,39421, -39422,39423,39424,39425,39426,39427,39428,39429,39430,39431,39432,39433, -39434,39435,39436,39437,39438,39439,39440,39441,39442,39443,39444,39445, -39446,39447,39448,39449,39450,39451,39452,39453,39454,39455,39456,39457, -39458,39459,39460,39461,39462,39463,39464,39465,39466,39467,39468,39469, -39470,39471,39472,39473,39474,39475,39476,39477,39478,39479,39480,39481, -39482,39483,39484,39485,39486,39487,39488,39489,39490,39491,39492,39493, -39494,39495,39496,39497,39498,39499,39500,39501,39502,39503,39504,39505, -39506,39507,39508,39509,39510,39511,39512,39513,39514,39515,39516,39517, -39518,39519,39520,39521,39522,39523,39524,39525,39526,39527,39528,39529, -39530,39531,39532,39533,39534,39535,39536,39537,39538,39539,39540,39541, -39542,39543,39544,39545,39546,39547,39548,39549,39550,39551,39552,39553, -39554,39555,39556,39557,39558,39559,39560,39561,39562,39563,39564,39565, -39566,39567,39568,39569,39570,39571,39572,39573,39574,39575,39576,39577, -39578,39579,39580,39581,39582,39583,39584,39585,39586,39587,39588,39589, -39590,39591,39592,39593,39594,39595,39596,39597,39598,39599,39600,39601, -39602,39603,39604,39605,39606,39607,39608,39609,39610,39611,39612,39613, -39614,39615,39616,39617,39618,39619,39620,39621,39622,39623,39624,39625, -39626,39627,39628,39629,39630,39631,39632,39633,39634,39635,39636,39637, -39638,39639,39640,39641,39642,39643,39644,39645,39646,39647,39648,39649, -39650,39651,39652,39653,39654,39655,39656,39657,39658,39659,39660,39661, -39662,39663,39664,39665,39666,39667,39668,39669,39670,39671,39672,39673, -39674,39675,39676,39677,39678,39679,39680,39681,39682,39683,39684,39685, -39686,39687,39688,39689,39690,39691,39692,39693,39694,39695,39696,39697, -39698,39699,39700,39701,39702,39703,39704,39705,39706,39707,39708,39709, -39710,39711,39712,39713,39714,39715,39716,39717,39718,39719,39720,39721, -39722,39723,39724,39725,39726,39727,39728,39729,39730,39731,39732,39733, -39734,39735,39736,39737,39738,39739,39740,39741,39742,39743,39744,39745, -39746,39747,39748,39749,39750,39751,39752,39753,39754,39755,39756,39757, -39758,39759,39760,39761,39762,39763,39764,39765,39766,39767,39768,39769, -39770,39771,39772,39773,39774,39775,39776,39777,39778,39779,39780,39781, -39782,39783,39784,39785,39786,39787,39788,39789,39790,39791,39792,39793, -39794,39795,39796,39797,39798,39799,39800,39801,39802,39803,39804,39805, -39806,39807,39808,39809,39810,39811,39812,39813,39814,39815,39816,39817, -39818,39819,39820,39821,39822,39823,39824,39825,39826,39827,39828,39829, -39830,39831,39832,39833,39834,39835,39836,39837,39838,39839,39840,39841, -39842,39843,39844,39845,39846,39847,39848,39849,39850,39851,39852,39853, -39854,39855,39856,39857,39858,39859,39860,39861,39862,39863,39864,39865, -39866,39867,39868,39869,39870,39871,39872,39873,39874,39875,39876,39877, -39878,39879,39880,39881,39882,39883,39884,39885,39886,39887,39888,39889, -39890,39891,39892,39893,39894,39895,39896,39897,39898,39899,39900,39901, -39902,39903,39904,39905,39906,39907,39908,39909,39910,39911,39912,39913, -39914,39915,39916,39917,39918,39919,39920,39921,39922,39923,39924,39925, -39926,39927,39928,39929,39930,39931,39932,39933,39934,39935,39936,39937, -39938,39939,39940,39941,39942,39943,39944,39945,39946,39947,39948,39949, -39950,39951,39952,39953,39954,39955,39956,39957,39958,39959,39960,39961, -39962,39963,39964,39965,39966,39967,39968,39969,39970,39971,39972,39973, -39974,39975,39976,39977,39978,39979,39980,39981,39982,39983,39984,39985, -39986,39987,39988,39989,39990,39991,39992,39993,39994,39995,39996,39997, -39998,39999,40000,40001,40002,40003,40004,40005,40006,40007,40008,40009, -40010,40011,40012,40013,40014,40015,40016,40017,40018,40019,40020,40021, -40022,40023,40024,40025,40026,40027,40028,40029,40030,40031,40032,40033, -40034,40035,40036,40037,40038,40039,40040,40041,40042,40043,40044,40045, -40046,40047,40048,40049,40050,40051,40052,40053,40054,40055,40056,40057, -40058,40059,40060,40061,40062,40063,40064,40065,40066,40067,40068,40069, -40070,40071,40072,40073,40074,40075,40076,40077,40078,40079,40080,40081, -40082,40083,40084,40085,40086,40087,40088,40089,40090,40091,40092,40093, -40094,40095,40096,40097,40098,40099,40100,40101,40102,40103,40104,40105, -40106,40107,40108,40109,40110,40111,40112,40113,40114,40115,40116,40117, -40118,40119,40120,40121,40122,40123,40124,40125,40126,40127,40128,40129, -40130,40131,40132,40133,40134,40135,40136,40137,40138,40139,40140,40141, -40142,40143,40144,40145,40146,40147,40148,40149,40150,40151,40152,40153, -40154,40155,40156,40157,40158,40159,40160,40161,40162,40163,40164,40165, -40166,40167,40168,40169,40170,40171,40172,40173,40174,40175,40176,40177, -40178,40179,40180,40181,40182,40183,40184,40185,40186,40187,40188,40189, -40190,40191,40192,40193,40194,40195,40196,40197,40198,40199,40200,40201, -40202,40203,40204,40205,40206,40207,40208,40209,40210,40211,40212,40213, -40214,40215,40216,40217,40218,40219,40220,40221,40222,40223,40224,40225, -40226,40227,40228,40229,40230,40231,40232,40233,40234,40235,40236,40237, -40238,40239,40240,40241,40242,40243,40244,40245,40246,40247,40248,40249, -40250,40251,40252,40253,40254,40255,40256,40257,40258,40259,40260,40261, -40262,40263,40264,40265,40266,40267,40268,40269,40270,40271,40272,40273, -40274,40275,40276,40277,40278,40279,40280,40281,40282,40283,40284,40285, -40286,40287,40288,40289,40290,40291,40292,40293,40294,40295,40296,40297, -40298,40299,40300,40301,40302,40303,40304,40305,40306,40307,40308,40309, -40310,40311,40312,40313,40314,40315,40316,40317,40318,40319,40320,40321, -40322,40323,40324,40325,40326,40327,40328,40329,40330,40331,40332,40333, -40334,40335,40336,40337,40338,40339,40340,40341,40342,40343,40344,40345, -40346,40347,40348,40349,40350,40351,40352,40353,40354,40355,40356,40357, -40358,40359,40360,40361,40362,40363,40364,40365,40366,40367,40368,40369, -40370,40371,40372,40373,40374,40375,40376,40377,40378,40379,40380,40381, -40382,40383,40384,40385,40386,40387,40388,40389,40390,40391,40392,40393, -40394,40395,40396,40397,40398,40399,40400,40401,40402,40403,40404,40405, -40406,40407,40408,40409,40410,40411,40412,40413,40414,40415,40416,40417, -40418,40419,40420,40421,40422,40423,40424,40425,40426,40427,40428,40429, -40430,40431,40432,40433,40434,40435,40436,40437,40438,40439,40440,40441, -40442,40443,40444,40445,40446,40447,40448,40449,40450,40451,40452,40453, -40454,40455,40456,40457,40458,40459,40460,40461,40462,40463,40464,40465, -40466,40467,40468,40469,40470,40471,40472,40473,40474,40475,40476,40477, -40478,40479,40480,40481,40482,40483,40484,40485,40486,40487,40488,40489, -40490,40491,40492,40493,40494,40495,40496,40497,40498,40499,40500,40501, -40502,40503,40504,40505,40506,40507,40508,40509,40510,40511,40512,40513, -40514,40515,40516,40517,40518,40519,40520,40521,40522,40523,40524,40525, -40526,40527,40528,40529,40530,40531,40532,40533,40534,40535,40536,40537, -40538,40539,40540,40541,40542,40543,40544,40545,40546,40547,40548,40549, -40550,40551,40552,40553,40554,40555,40556,40557,40558,40559,40560,40561, -40562,40563,40564,40565,40566,40567,40568,40569,40570,40571,40572,40573, -40574,40575,40576,40577,40578,40579,40580,40581,40582,40583,40584,40585, -40586,40587,40588,40589,40590,40591,40592,40593,40594,40595,40596,40597, -40598,40599,40600,40601,40602,40603,40604,40605,40606,40607,40608,40609, -40610,40611,40612,40613,40614,40615,40616,40617,40618,40619,40620,40621, -40622,40623,40624,40625,40626,40627,40628,40629,40630,40631,40632,40633, -40634,40635,40636,40637,40638,40639,40640,40641,40642,40643,40644,40645, -40646,40647,40648,40649,40650,40651,40652,40653,40654,40655,40656,40657, -40658,40659,40660,40661,40662,40663,40664,40665,40666,40667,40668,40669, -40670,40671,40672,40673,40674,40675,40676,40677,40678,40679,40680,40681, -40682,40683,40684,40685,40686,40687,40688,40689,40690,40691,40692,40693, -40694,40695,40696,40697,40698,40699,40700,40701,40702,40703,40704,40705, -40706,40707,40708,40709,40710,40711,40712,40713,40714,40715,40716,40717, -40718,40719,40720,40721,40722,40723,40724,40725,40726,40727,40728,40729, -40730,40731,40732,40733,40734,40735,40736,40737,40738,40739,40740,40741, -40742,40743,40744,40745,40746,40747,40748,40749,40750,40751,40752,40753, -40754,40755,40756,40757,40758,40759,40760,40761,40762,40763,40764,40765, -40766,40767,40768,40769,40770,40771,40772,40773,40774,40775,40776,40777, -40778,40779,40780,40781,40782,40783,40784,40785,40786,40787,40788,40789, -40790,40791,40792,40793,40794,40795,40796,40797,40798,40799,40800,40801, -40802,40803,40804,40805,40806,40807,40808,40809,40810,40811,40812,40813, -40814,40815,40816,40817,40818,40819,40820,40821,40822,40823,40824,40825, -40826,40827,40828,40829,40830,40831,40832,40833,40834,40835,40836,40837, -40838,40839,40840,40841,40842,40843,40844,40845,40846,40847,40848,40849, -40850,40851,40852,40853,40854,40855,40856,40857,40858,40859,40860,40861, -40862,40863,40864,40865,40866,40867,40868,40869,40870,40871,40872,40873, -40874,40875,40876,40877,40878,40879,40880,40881,40882,40883,40884,40885, -40886,40887,40888,40889,40890,40891,40892,40893,40894,40895,40896,40897, -40898,40899,40900,40901,40902,40903,40904,40905,40906,40907,40908,40909, -40910,40911,40912,40913,40914,40915,40916,40917,40918,40919,40920,40921, -40922,40923,40924,40925,40926,40927,40928,40929,40930,40931,40932,40933, -40934,40935,40936,40937,40938,40939,40940,40941,40942,40943,40944,40945, -40946,40947,40948,40949,40950,40951,40952,40953,40954,40955,40956,40957, -40958,40959,40960,40961,40962,40963,40964,40965,40966,40967,40968,40969, -40970,40971,40972,40973,40974,40975,40976,40977,40978,40979,40980,40981, -40982,40983,40984,40985,40986,40987,40988,40989,40990,40991,40992,40993, -40994,40995,40996,40997,40998,40999,41000,41001,41002,41003,41004,41005, -41006,41007,41008,41009,41010,41011,41012,41013,41014,41015,41016,41017, -41018,41019,41020,41021,41022,41023,41024,41025,41026,41027,41028,41029, -41030,41031,41032,41033,41034,41035,41036,41037,41038,41039,41040,41041, -41042,41043,41044,41045,41046,41047,41048,41049,41050,41051,41052,41053, -41054,41055,41056,41057,41058,41059,41060,41061,41062,41063,41064,41065, -41066,41067,41068,41069,41070,41071,41072,41073,41074,41075,41076,41077, -41078,41079,41080,41081,41082,41083,41084,41085,41086,41087,41088,41089, -41090,41091,41092,41093,41094,41095,41096,41097,41098,41099,41100,41101, -41102,41103,41104,41105,41106,41107,41108,41109,41110,41111,41112,41113, -41114,41115,41116,41117,41118,41119,41120,41121,41122,41123,41124,41125, -41126,41127,41128,41129,41130,41131,41132,41133,41134,41135,41136,41137, -41138,41139,41140,41141,41142,41143,41144,41145,41146,41147,41148,41149, -41150,41151,41152,41153,41154,41155,41156,41157,41158,41159,41160,41161, -41162,41163,41164,41165,41166,41167,41168,41169,41170,41171,41172,41173, -41174,41175,41176,41177,41178,41179,41180,41181,41182,41183,41184,41185, -41186,41187,41188,41189,41190,41191,41192,41193,41194,41195,41196,41197, -41198,41199,41200,41201,41202,41203,41204,41205,41206,41207,41208,41209, -41210,41211,41212,41213,41214,41215,41216,41217,41218,41219,41220,41221, -41222,41223,41224,41225,41226,41227,41228,41229,41230,41231,41232,41233, -41234,41235,41236,41237,41238,41239,41240,41241,41242,41243,41244,41245, -41246,41247,41248,41249,41250,41251,41252,41253,41254,41255,41256,41257, -41258,41259,41260,41261,41262,41263,41264,41265,41266,41267,41268,41269, -41270,41271,41272,41273,41274,41275,41276,41277,41278,41279,41280,41281, -41282,41283,41284,41285,41286,41287,41288,41289,41290,41291,41292,41293, -41294,41295,41296,41297,41298,41299,41300,41301,41302,41303,41304,41305, -41306,41307,41308,41309,41310,41311,41312,41313,41314,41315,41316,41317, -41318,41319,41320,41321,41322,41323,41324,41325,41326,41327,41328,41329, -41330,41331,41332,41333,41334,41335,41336,41337,41338,41339,41340,41341, -41342,41343,41344,41345,41346,41347,41348,41349,41350,41351,41352,41353, -41354,41355,41356,41357,41358,41359,41360,41361,41362,41363,41364,41365, -41366,41367,41368,41369,41370,41371,41372,41373,41374,41375,41376,41377, -41378,41379,41380,41381,41382,41383,41384,41385,41386,41387,41388,41389, -41390,41391,41392,41393,41394,41395,41396,41397,41398,41399,41400,41401, -41402,41403,41404,41405,41406,41407,41408,41409,41410,41411,41412,41413, -41414,41415,41416,41417,41418,41419,41420,41421,41422,41423,41424,41425, -41426,41427,41428,41429,41430,41431,41432,41433,41434,41435,41436,41437, -41438,41439,41440,41441,41442,41443,41444,41445,41446,41447,41448,41449, -41450,41451,41452,41453,41454,41455,41456,41457,41458,41459,41460,41461, -41462,41463,41464,41465,41466,41467,41468,41469,41470,41471,41472,41473, -41474,41475,41476,41477,41478,41479,41480,41481,41482,41483,41484,41485, -41486,41487,41488,41489,41490,41491,41492,41493,41494,41495,41496,41497, -41498,41499,41500,41501,41502,41503,41504,41505,41506,41507,41508,41509, -41510,41511,41512,41513,41514,41515,41516,41517,41518,41519,41520,41521, -41522,41523,41524,41525,41526,41527,41528,41529,41530,41531,41532,41533, -41534,41535,41536,41537,41538,41539,41540,41541,41542,41543,41544,41545, -41546,41547,41548,41549,41550,41551,41552,41553,41554,41555,41556,41557, -41558,41559,41560,41561,41562,41563,41564,41565,41566,41567,41568,41569, -41570,41571,41572,41573,41574,41575,41576,41577,41578,41579,41580,41581, -41582,41583,41584,41585,41586,41587,41588,41589,41590,41591,41592,41593, -41594,41595,41596,41597,41598,41599,41600,41601,41602,41603,41604,41605, -41606,41607,41608,41609,41610,41611,41612,41613,41614,41615,41616,41617, -41618,41619,41620,41621,41622,41623,41624,41625,41626,41627,41628,41629, -41630,41631,41632,41633,41634,41635,41636,41637,41638,41639,41640,41641, -41642,41643,41644,41645,41646,41647,41648,41649,41650,41651,41652,41653, -41654,41655,41656,41657,41658,41659,41660,41661,41662,41663,41664,41665, -41666,41667,41668,41669,41670,41671,41672,41673,41674,41675,41676,41677, -41678,41679,41680,41681,41682,41683,41684,41685,41686,41687,41688,41689, -41690,41691,41692,41693,41694,41695,41696,41697,41698,41699,41700,41701, -41702,41703,41704,41705,41706,41707,41708,41709,41710,41711,41712,41713, -41714,41715,41716,41717,41718,41719,41720,41721,41722,41723,41724,41725, -41726,41727,41728,41729,41730,41731,41732,41733,41734,41735,41736,41737, -41738,41739,41740,41741,41742,41743,41744,41745,41746,41747,41748,41749, -41750,41751,41752,41753,41754,41755,41756,41757,41758,41759,41760,41761, -41762,41763,41764,41765,41766,41767,41768,41769,41770,41771,41772,41773, -41774,41775,41776,41777,41778,41779,41780,41781,41782,41783,41784,41785, -41786,41787,41788,41789,41790,41791,41792,41793,41794,41795,41796,41797, -41798,41799,41800,41801,41802,41803,41804,41805,41806,41807,41808,41809, -41810,41811,41812,41813,41814,41815,41816,41817,41818,41819,41820,41821, -41822,41823,41824,41825,41826,41827,41828,41829,41830,41831,41832,41833, -41834,41835,41836,41837,41838,41839,41840,41841,41842,41843,41844,41845, -41846,41847,41848,41849,41850,41851,41852,41853,41854,41855,41856,41857, -41858,41859,41860,41861,41862,41863,41864,41865,41866,41867,41868,41869, -41870,41871,41872,41873,41874,41875,41876,41877,41878,41879,41880,41881, -41882,41883,41884,41885,41886,41887,41888,41889,41890,41891,41892,41893, -41894,41895,41896,41897,41898,41899,41900,41901,41902,41903,41904,41905, -41906,41907,41908,41909,41910,41911,41912,41913,41914,41915,41916,41917, -41918,41919,41920,41921,41922,41923,41924,41925,41926,41927,41928,41929, -41930,41931,41932,41933,41934,41935,41936,41937,41938,41939,41940,41941, -41942,41943,41944,41945,41946,41947,41948,41949,41950,41951,41952,41953, -41954,41955,41956,41957,41958,41959,41960,41961,41962,41963,41964,41965, -41966,41967,41968,41969,41970,41971,41972,41973,41974,41975,41976,41977, -41978,41979,41980,41981,41982,41983,41984,41985,41986,41987,41988,41989, -41990,41991,41992,41993,41994,41995,41996,41997,41998,41999,42000,42001, -42002,42003,42004,42005,42006,42007,42008,42009,42010,42011,42012,42013, -42014,42015,42016,42017,42018,42019,42020,42021,42022,42023,42024,42025, -42026,42027,42028,42029,42030,42031,42032,42033,42034,42035,42036,42037, -42038,42039,42040,42041,42042,42043,42044,42045,42046,42047,42048,42049, -42050,42051,42052,42053,42054,42055,42056,42057,42058,42059,42060,42061, -42062,42063,42064,42065,42066,42067,42068,42069,42070,42071,42072,42073, -42074,42075,42076,42077,42078,42079,42080,42081,42082,42083,42084,42085, -42086,42087,42088,42089,42090,42091,42092,42093,42094,42095,42096,42097, -42098,42099,42100,42101,42102,42103,42104,42105,42106,42107,42108,42109, -42110,42111,42112,42113,42114,42115,42116,42117,42118,42119,42120,42121, -42122,42123,42124,42125,42126,42127,42128,42129,42130,42131,42132,42133, -42134,42135,42136,42137,42138,42139,42140,42141,42142,42143,42144,42145, -42146,42147,42148,42149,42150,42151,42152,42153,42154,42155,42156,42157, -42158,42159,42160,42161,42162,42163,42164,42165,42166,42167,42168,42169, -42170,42171,42172,42173,42174,42175,42176,42177,42178,42179,42180,42181, -42182,42183,42184,42185,42186,42187,42188,42189,42190,42191,42192,42193, -42194,42195,42196,42197,42198,42199,42200,42201,42202,42203,42204,42205, -42206,42207,42208,42209,42210,42211,42212,42213,42214,42215,42216,42217, -42218,42219,42220,42221,42222,42223,42224,42225,42226,42227,42228,42229, -42230,42231,42232,42233,42234,42235,42236,42237,42238,42239,42240,42241, -42242,42243,42244,42245,42246,42247,42248,42249,42250,42251,42252,42253, -42254,42255,42256,42257,42258,42259,42260,42261,42262,42263,42264,42265, -42266,42267,42268,42269,42270,42271,42272,42273,42274,42275,42276,42277, -42278,42279,42280,42281,42282,42283,42284,42285,42286,42287,42288,42289, -42290,42291,42292,42293,42294,42295,42296,42297,42298,42299,42300,42301, -42302,42303,42304,42305,42306,42307,42308,42309,42310,42311,42312,42313, -42314,42315,42316,42317,42318,42319,42320,42321,42322,42323,42324,42325, -42326,42327,42328,42329,42330,42331,42332,42333,42334,42335,42336,42337, -42338,42339,42340,42341,42342,42343,42344,42345,42346,42347,42348,42349, -42350,42351,42352,42353,42354,42355,42356,42357,42358,42359,42360,42361, -42362,42363,42364,42365,42366,42367,42368,42369,42370,42371,42372,42373, -42374,42375,42376,42377,42378,42379,42380,42381,42382,42383,42384,42385, -42386,42387,42388,42389,42390,42391,42392,42393,42394,42395,42396,42397, -42398,42399,42400,42401,42402,42403,42404,42405,42406,42407,42408,42409, -42410,42411,42412,42413,42414,42415,42416,42417,42418,42419,42420,42421, -42422,42423,42424,42425,42426,42427,42428,42429,42430,42431,42432,42433, -42434,42435,42436,42437,42438,42439,42440,42441,42442,42443,42444,42445, -42446,42447,42448,42449,42450,42451,42452,42453,42454,42455,42456,42457, -42458,42459,42460,42461,42462,42463,42464,42465,42466,42467,42468,42469, -42470,42471,42472,42473,42474,42475,42476,42477,42478,42479,42480,42481, -42482,42483,42484,42485,42486,42487,42488,42489,42490,42491,42492,42493, -42494,42495,42496,42497,42498,42499,42500,42501,42502,42503,42504,42505, -42506,42507,42508,42509,42510,42511,42512,42513,42514,42515,42516,42517, -42518,42519,42520,42521,42522,42523,42524,42525,42526,42527,42528,42529, -42530,42531,42532,42533,42534,42535,42536,42537,42538,42539,42540,42541, -42542,42543,42544,42545,42546,42547,42548,42549,42550,42551,42552,42553, -42554,42555,42556,42557,42558,42559,42560,42560,42562,42562,42564,42564, -42566,42566,42568,42568,42570,42570,42572,42572,42574,42574,42576,42576, -42578,42578,42580,42580,42582,42582,42584,42584,42586,42586,42588,42588, -42590,42590,42592,42592,42594,42594,42596,42596,42598,42598,42600,42600, -42602,42602,42604,42604,42606,42607,42608,42609,42610,42611,42612,42613, -42614,42615,42616,42617,42618,42619,42620,42621,42622,42623,42624,42624, -42626,42626,42628,42628,42630,42630,42632,42632,42634,42634,42636,42636, -42638,42638,42640,42640,42642,42642,42644,42644,42646,42646,42648,42649, -42650,42651,42652,42653,42654,42655,42656,42657,42658,42659,42660,42661, -42662,42663,42664,42665,42666,42667,42668,42669,42670,42671,42672,42673, -42674,42675,42676,42677,42678,42679,42680,42681,42682,42683,42684,42685, -42686,42687,42688,42689,42690,42691,42692,42693,42694,42695,42696,42697, -42698,42699,42700,42701,42702,42703,42704,42705,42706,42707,42708,42709, -42710,42711,42712,42713,42714,42715,42716,42717,42718,42719,42720,42721, -42722,42723,42724,42725,42726,42727,42728,42729,42730,42731,42732,42733, -42734,42735,42736,42737,42738,42739,42740,42741,42742,42743,42744,42745, -42746,42747,42748,42749,42750,42751,42752,42753,42754,42755,42756,42757, -42758,42759,42760,42761,42762,42763,42764,42765,42766,42767,42768,42769, -42770,42771,42772,42773,42774,42775,42776,42777,42778,42779,42780,42781, -42782,42783,42784,42785,42786,42786,42788,42788,42790,42790,42792,42792, -42794,42794,42796,42796,42798,42798,42800,42801,42802,42802,42804,42804, -42806,42806,42808,42808,42810,42810,42812,42812,42814,42814,42816,42816, -42818,42818,42820,42820,42822,42822,42824,42824,42826,42826,42828,42828, -42830,42830,42832,42832,42834,42834,42836,42836,42838,42838,42840,42840, -42842,42842,42844,42844,42846,42846,42848,42848,42850,42850,42852,42852, -42854,42854,42856,42856,42858,42858,42860,42860,42862,42862,42864,42865, -42866,42867,42868,42869,42870,42871,42872,42873,42873,42875,42875,42877, -42878,42878,42880,42880,42882,42882,42884,42884,42886,42886,42888,42889, -42890,42891,42891,42893,42894,42895,42896,42896,42898,42899,42900,42901, -42902,42903,42904,42905,42906,42907,42908,42909,42910,42911,42912,42912, -42914,42914,42916,42916,42918,42918,42920,42920,42922,42923,42924,42925, -42926,42927,42928,42929,42930,42931,42932,42933,42934,42935,42936,42937, -42938,42939,42940,42941,42942,42943,42944,42945,42946,42947,42948,42949, -42950,42951,42952,42953,42954,42955,42956,42957,42958,42959,42960,42961, -42962,42963,42964,42965,42966,42967,42968,42969,42970,42971,42972,42973, -42974,42975,42976,42977,42978,42979,42980,42981,42982,42983,42984,42985, -42986,42987,42988,42989,42990,42991,42992,42993,42994,42995,42996,42997, -42998,42999,43000,43001,43002,43003,43004,43005,43006,43007,43008,43009, -43010,43011,43012,43013,43014,43015,43016,43017,43018,43019,43020,43021, -43022,43023,43024,43025,43026,43027,43028,43029,43030,43031,43032,43033, -43034,43035,43036,43037,43038,43039,43040,43041,43042,43043,43044,43045, -43046,43047,43048,43049,43050,43051,43052,43053,43054,43055,43056,43057, -43058,43059,43060,43061,43062,43063,43064,43065,43066,43067,43068,43069, -43070,43071,43072,43073,43074,43075,43076,43077,43078,43079,43080,43081, -43082,43083,43084,43085,43086,43087,43088,43089,43090,43091,43092,43093, -43094,43095,43096,43097,43098,43099,43100,43101,43102,43103,43104,43105, -43106,43107,43108,43109,43110,43111,43112,43113,43114,43115,43116,43117, -43118,43119,43120,43121,43122,43123,43124,43125,43126,43127,43128,43129, -43130,43131,43132,43133,43134,43135,43136,43137,43138,43139,43140,43141, -43142,43143,43144,43145,43146,43147,43148,43149,43150,43151,43152,43153, -43154,43155,43156,43157,43158,43159,43160,43161,43162,43163,43164,43165, -43166,43167,43168,43169,43170,43171,43172,43173,43174,43175,43176,43177, -43178,43179,43180,43181,43182,43183,43184,43185,43186,43187,43188,43189, -43190,43191,43192,43193,43194,43195,43196,43197,43198,43199,43200,43201, -43202,43203,43204,43205,43206,43207,43208,43209,43210,43211,43212,43213, -43214,43215,43216,43217,43218,43219,43220,43221,43222,43223,43224,43225, -43226,43227,43228,43229,43230,43231,43232,43233,43234,43235,43236,43237, -43238,43239,43240,43241,43242,43243,43244,43245,43246,43247,43248,43249, -43250,43251,43252,43253,43254,43255,43256,43257,43258,43259,43260,43261, -43262,43263,43264,43265,43266,43267,43268,43269,43270,43271,43272,43273, -43274,43275,43276,43277,43278,43279,43280,43281,43282,43283,43284,43285, -43286,43287,43288,43289,43290,43291,43292,43293,43294,43295,43296,43297, -43298,43299,43300,43301,43302,43303,43304,43305,43306,43307,43308,43309, -43310,43311,43312,43313,43314,43315,43316,43317,43318,43319,43320,43321, -43322,43323,43324,43325,43326,43327,43328,43329,43330,43331,43332,43333, -43334,43335,43336,43337,43338,43339,43340,43341,43342,43343,43344,43345, -43346,43347,43348,43349,43350,43351,43352,43353,43354,43355,43356,43357, -43358,43359,43360,43361,43362,43363,43364,43365,43366,43367,43368,43369, -43370,43371,43372,43373,43374,43375,43376,43377,43378,43379,43380,43381, -43382,43383,43384,43385,43386,43387,43388,43389,43390,43391,43392,43393, -43394,43395,43396,43397,43398,43399,43400,43401,43402,43403,43404,43405, -43406,43407,43408,43409,43410,43411,43412,43413,43414,43415,43416,43417, -43418,43419,43420,43421,43422,43423,43424,43425,43426,43427,43428,43429, -43430,43431,43432,43433,43434,43435,43436,43437,43438,43439,43440,43441, -43442,43443,43444,43445,43446,43447,43448,43449,43450,43451,43452,43453, -43454,43455,43456,43457,43458,43459,43460,43461,43462,43463,43464,43465, -43466,43467,43468,43469,43470,43471,43472,43473,43474,43475,43476,43477, -43478,43479,43480,43481,43482,43483,43484,43485,43486,43487,43488,43489, -43490,43491,43492,43493,43494,43495,43496,43497,43498,43499,43500,43501, -43502,43503,43504,43505,43506,43507,43508,43509,43510,43511,43512,43513, -43514,43515,43516,43517,43518,43519,43520,43521,43522,43523,43524,43525, -43526,43527,43528,43529,43530,43531,43532,43533,43534,43535,43536,43537, -43538,43539,43540,43541,43542,43543,43544,43545,43546,43547,43548,43549, -43550,43551,43552,43553,43554,43555,43556,43557,43558,43559,43560,43561, -43562,43563,43564,43565,43566,43567,43568,43569,43570,43571,43572,43573, -43574,43575,43576,43577,43578,43579,43580,43581,43582,43583,43584,43585, -43586,43587,43588,43589,43590,43591,43592,43593,43594,43595,43596,43597, -43598,43599,43600,43601,43602,43603,43604,43605,43606,43607,43608,43609, -43610,43611,43612,43613,43614,43615,43616,43617,43618,43619,43620,43621, -43622,43623,43624,43625,43626,43627,43628,43629,43630,43631,43632,43633, -43634,43635,43636,43637,43638,43639,43640,43641,43642,43643,43644,43645, -43646,43647,43648,43649,43650,43651,43652,43653,43654,43655,43656,43657, -43658,43659,43660,43661,43662,43663,43664,43665,43666,43667,43668,43669, -43670,43671,43672,43673,43674,43675,43676,43677,43678,43679,43680,43681, -43682,43683,43684,43685,43686,43687,43688,43689,43690,43691,43692,43693, -43694,43695,43696,43697,43698,43699,43700,43701,43702,43703,43704,43705, -43706,43707,43708,43709,43710,43711,43712,43713,43714,43715,43716,43717, -43718,43719,43720,43721,43722,43723,43724,43725,43726,43727,43728,43729, -43730,43731,43732,43733,43734,43735,43736,43737,43738,43739,43740,43741, -43742,43743,43744,43745,43746,43747,43748,43749,43750,43751,43752,43753, -43754,43755,43756,43757,43758,43759,43760,43761,43762,43763,43764,43765, -43766,43767,43768,43769,43770,43771,43772,43773,43774,43775,43776,43777, -43778,43779,43780,43781,43782,43783,43784,43785,43786,43787,43788,43789, -43790,43791,43792,43793,43794,43795,43796,43797,43798,43799,43800,43801, -43802,43803,43804,43805,43806,43807,43808,43809,43810,43811,43812,43813, -43814,43815,43816,43817,43818,43819,43820,43821,43822,43823,43824,43825, -43826,43827,43828,43829,43830,43831,43832,43833,43834,43835,43836,43837, -43838,43839,43840,43841,43842,43843,43844,43845,43846,43847,43848,43849, -43850,43851,43852,43853,43854,43855,43856,43857,43858,43859,43860,43861, -43862,43863,43864,43865,43866,43867,43868,43869,43870,43871,43872,43873, -43874,43875,43876,43877,43878,43879,43880,43881,43882,43883,43884,43885, -43886,43887,43888,43889,43890,43891,43892,43893,43894,43895,43896,43897, -43898,43899,43900,43901,43902,43903,43904,43905,43906,43907,43908,43909, -43910,43911,43912,43913,43914,43915,43916,43917,43918,43919,43920,43921, -43922,43923,43924,43925,43926,43927,43928,43929,43930,43931,43932,43933, -43934,43935,43936,43937,43938,43939,43940,43941,43942,43943,43944,43945, -43946,43947,43948,43949,43950,43951,43952,43953,43954,43955,43956,43957, -43958,43959,43960,43961,43962,43963,43964,43965,43966,43967,43968,43969, -43970,43971,43972,43973,43974,43975,43976,43977,43978,43979,43980,43981, -43982,43983,43984,43985,43986,43987,43988,43989,43990,43991,43992,43993, -43994,43995,43996,43997,43998,43999,44000,44001,44002,44003,44004,44005, -44006,44007,44008,44009,44010,44011,44012,44013,44014,44015,44016,44017, -44018,44019,44020,44021,44022,44023,44024,44025,44026,44027,44028,44029, -44030,44031,44032,44033,44034,44035,44036,44037,44038,44039,44040,44041, -44042,44043,44044,44045,44046,44047,44048,44049,44050,44051,44052,44053, -44054,44055,44056,44057,44058,44059,44060,44061,44062,44063,44064,44065, -44066,44067,44068,44069,44070,44071,44072,44073,44074,44075,44076,44077, -44078,44079,44080,44081,44082,44083,44084,44085,44086,44087,44088,44089, -44090,44091,44092,44093,44094,44095,44096,44097,44098,44099,44100,44101, -44102,44103,44104,44105,44106,44107,44108,44109,44110,44111,44112,44113, -44114,44115,44116,44117,44118,44119,44120,44121,44122,44123,44124,44125, -44126,44127,44128,44129,44130,44131,44132,44133,44134,44135,44136,44137, -44138,44139,44140,44141,44142,44143,44144,44145,44146,44147,44148,44149, -44150,44151,44152,44153,44154,44155,44156,44157,44158,44159,44160,44161, -44162,44163,44164,44165,44166,44167,44168,44169,44170,44171,44172,44173, -44174,44175,44176,44177,44178,44179,44180,44181,44182,44183,44184,44185, -44186,44187,44188,44189,44190,44191,44192,44193,44194,44195,44196,44197, -44198,44199,44200,44201,44202,44203,44204,44205,44206,44207,44208,44209, -44210,44211,44212,44213,44214,44215,44216,44217,44218,44219,44220,44221, -44222,44223,44224,44225,44226,44227,44228,44229,44230,44231,44232,44233, -44234,44235,44236,44237,44238,44239,44240,44241,44242,44243,44244,44245, -44246,44247,44248,44249,44250,44251,44252,44253,44254,44255,44256,44257, -44258,44259,44260,44261,44262,44263,44264,44265,44266,44267,44268,44269, -44270,44271,44272,44273,44274,44275,44276,44277,44278,44279,44280,44281, -44282,44283,44284,44285,44286,44287,44288,44289,44290,44291,44292,44293, -44294,44295,44296,44297,44298,44299,44300,44301,44302,44303,44304,44305, -44306,44307,44308,44309,44310,44311,44312,44313,44314,44315,44316,44317, -44318,44319,44320,44321,44322,44323,44324,44325,44326,44327,44328,44329, -44330,44331,44332,44333,44334,44335,44336,44337,44338,44339,44340,44341, -44342,44343,44344,44345,44346,44347,44348,44349,44350,44351,44352,44353, -44354,44355,44356,44357,44358,44359,44360,44361,44362,44363,44364,44365, -44366,44367,44368,44369,44370,44371,44372,44373,44374,44375,44376,44377, -44378,44379,44380,44381,44382,44383,44384,44385,44386,44387,44388,44389, -44390,44391,44392,44393,44394,44395,44396,44397,44398,44399,44400,44401, -44402,44403,44404,44405,44406,44407,44408,44409,44410,44411,44412,44413, -44414,44415,44416,44417,44418,44419,44420,44421,44422,44423,44424,44425, -44426,44427,44428,44429,44430,44431,44432,44433,44434,44435,44436,44437, -44438,44439,44440,44441,44442,44443,44444,44445,44446,44447,44448,44449, -44450,44451,44452,44453,44454,44455,44456,44457,44458,44459,44460,44461, -44462,44463,44464,44465,44466,44467,44468,44469,44470,44471,44472,44473, -44474,44475,44476,44477,44478,44479,44480,44481,44482,44483,44484,44485, -44486,44487,44488,44489,44490,44491,44492,44493,44494,44495,44496,44497, -44498,44499,44500,44501,44502,44503,44504,44505,44506,44507,44508,44509, -44510,44511,44512,44513,44514,44515,44516,44517,44518,44519,44520,44521, -44522,44523,44524,44525,44526,44527,44528,44529,44530,44531,44532,44533, -44534,44535,44536,44537,44538,44539,44540,44541,44542,44543,44544,44545, -44546,44547,44548,44549,44550,44551,44552,44553,44554,44555,44556,44557, -44558,44559,44560,44561,44562,44563,44564,44565,44566,44567,44568,44569, -44570,44571,44572,44573,44574,44575,44576,44577,44578,44579,44580,44581, -44582,44583,44584,44585,44586,44587,44588,44589,44590,44591,44592,44593, -44594,44595,44596,44597,44598,44599,44600,44601,44602,44603,44604,44605, -44606,44607,44608,44609,44610,44611,44612,44613,44614,44615,44616,44617, -44618,44619,44620,44621,44622,44623,44624,44625,44626,44627,44628,44629, -44630,44631,44632,44633,44634,44635,44636,44637,44638,44639,44640,44641, -44642,44643,44644,44645,44646,44647,44648,44649,44650,44651,44652,44653, -44654,44655,44656,44657,44658,44659,44660,44661,44662,44663,44664,44665, -44666,44667,44668,44669,44670,44671,44672,44673,44674,44675,44676,44677, -44678,44679,44680,44681,44682,44683,44684,44685,44686,44687,44688,44689, -44690,44691,44692,44693,44694,44695,44696,44697,44698,44699,44700,44701, -44702,44703,44704,44705,44706,44707,44708,44709,44710,44711,44712,44713, -44714,44715,44716,44717,44718,44719,44720,44721,44722,44723,44724,44725, -44726,44727,44728,44729,44730,44731,44732,44733,44734,44735,44736,44737, -44738,44739,44740,44741,44742,44743,44744,44745,44746,44747,44748,44749, -44750,44751,44752,44753,44754,44755,44756,44757,44758,44759,44760,44761, -44762,44763,44764,44765,44766,44767,44768,44769,44770,44771,44772,44773, -44774,44775,44776,44777,44778,44779,44780,44781,44782,44783,44784,44785, -44786,44787,44788,44789,44790,44791,44792,44793,44794,44795,44796,44797, -44798,44799,44800,44801,44802,44803,44804,44805,44806,44807,44808,44809, -44810,44811,44812,44813,44814,44815,44816,44817,44818,44819,44820,44821, -44822,44823,44824,44825,44826,44827,44828,44829,44830,44831,44832,44833, -44834,44835,44836,44837,44838,44839,44840,44841,44842,44843,44844,44845, -44846,44847,44848,44849,44850,44851,44852,44853,44854,44855,44856,44857, -44858,44859,44860,44861,44862,44863,44864,44865,44866,44867,44868,44869, -44870,44871,44872,44873,44874,44875,44876,44877,44878,44879,44880,44881, -44882,44883,44884,44885,44886,44887,44888,44889,44890,44891,44892,44893, -44894,44895,44896,44897,44898,44899,44900,44901,44902,44903,44904,44905, -44906,44907,44908,44909,44910,44911,44912,44913,44914,44915,44916,44917, -44918,44919,44920,44921,44922,44923,44924,44925,44926,44927,44928,44929, -44930,44931,44932,44933,44934,44935,44936,44937,44938,44939,44940,44941, -44942,44943,44944,44945,44946,44947,44948,44949,44950,44951,44952,44953, -44954,44955,44956,44957,44958,44959,44960,44961,44962,44963,44964,44965, -44966,44967,44968,44969,44970,44971,44972,44973,44974,44975,44976,44977, -44978,44979,44980,44981,44982,44983,44984,44985,44986,44987,44988,44989, -44990,44991,44992,44993,44994,44995,44996,44997,44998,44999,45000,45001, -45002,45003,45004,45005,45006,45007,45008,45009,45010,45011,45012,45013, -45014,45015,45016,45017,45018,45019,45020,45021,45022,45023,45024,45025, -45026,45027,45028,45029,45030,45031,45032,45033,45034,45035,45036,45037, -45038,45039,45040,45041,45042,45043,45044,45045,45046,45047,45048,45049, -45050,45051,45052,45053,45054,45055,45056,45057,45058,45059,45060,45061, -45062,45063,45064,45065,45066,45067,45068,45069,45070,45071,45072,45073, -45074,45075,45076,45077,45078,45079,45080,45081,45082,45083,45084,45085, -45086,45087,45088,45089,45090,45091,45092,45093,45094,45095,45096,45097, -45098,45099,45100,45101,45102,45103,45104,45105,45106,45107,45108,45109, -45110,45111,45112,45113,45114,45115,45116,45117,45118,45119,45120,45121, -45122,45123,45124,45125,45126,45127,45128,45129,45130,45131,45132,45133, -45134,45135,45136,45137,45138,45139,45140,45141,45142,45143,45144,45145, -45146,45147,45148,45149,45150,45151,45152,45153,45154,45155,45156,45157, -45158,45159,45160,45161,45162,45163,45164,45165,45166,45167,45168,45169, -45170,45171,45172,45173,45174,45175,45176,45177,45178,45179,45180,45181, -45182,45183,45184,45185,45186,45187,45188,45189,45190,45191,45192,45193, -45194,45195,45196,45197,45198,45199,45200,45201,45202,45203,45204,45205, -45206,45207,45208,45209,45210,45211,45212,45213,45214,45215,45216,45217, -45218,45219,45220,45221,45222,45223,45224,45225,45226,45227,45228,45229, -45230,45231,45232,45233,45234,45235,45236,45237,45238,45239,45240,45241, -45242,45243,45244,45245,45246,45247,45248,45249,45250,45251,45252,45253, -45254,45255,45256,45257,45258,45259,45260,45261,45262,45263,45264,45265, -45266,45267,45268,45269,45270,45271,45272,45273,45274,45275,45276,45277, -45278,45279,45280,45281,45282,45283,45284,45285,45286,45287,45288,45289, -45290,45291,45292,45293,45294,45295,45296,45297,45298,45299,45300,45301, -45302,45303,45304,45305,45306,45307,45308,45309,45310,45311,45312,45313, -45314,45315,45316,45317,45318,45319,45320,45321,45322,45323,45324,45325, -45326,45327,45328,45329,45330,45331,45332,45333,45334,45335,45336,45337, -45338,45339,45340,45341,45342,45343,45344,45345,45346,45347,45348,45349, -45350,45351,45352,45353,45354,45355,45356,45357,45358,45359,45360,45361, -45362,45363,45364,45365,45366,45367,45368,45369,45370,45371,45372,45373, -45374,45375,45376,45377,45378,45379,45380,45381,45382,45383,45384,45385, -45386,45387,45388,45389,45390,45391,45392,45393,45394,45395,45396,45397, -45398,45399,45400,45401,45402,45403,45404,45405,45406,45407,45408,45409, -45410,45411,45412,45413,45414,45415,45416,45417,45418,45419,45420,45421, -45422,45423,45424,45425,45426,45427,45428,45429,45430,45431,45432,45433, -45434,45435,45436,45437,45438,45439,45440,45441,45442,45443,45444,45445, -45446,45447,45448,45449,45450,45451,45452,45453,45454,45455,45456,45457, -45458,45459,45460,45461,45462,45463,45464,45465,45466,45467,45468,45469, -45470,45471,45472,45473,45474,45475,45476,45477,45478,45479,45480,45481, -45482,45483,45484,45485,45486,45487,45488,45489,45490,45491,45492,45493, -45494,45495,45496,45497,45498,45499,45500,45501,45502,45503,45504,45505, -45506,45507,45508,45509,45510,45511,45512,45513,45514,45515,45516,45517, -45518,45519,45520,45521,45522,45523,45524,45525,45526,45527,45528,45529, -45530,45531,45532,45533,45534,45535,45536,45537,45538,45539,45540,45541, -45542,45543,45544,45545,45546,45547,45548,45549,45550,45551,45552,45553, -45554,45555,45556,45557,45558,45559,45560,45561,45562,45563,45564,45565, -45566,45567,45568,45569,45570,45571,45572,45573,45574,45575,45576,45577, -45578,45579,45580,45581,45582,45583,45584,45585,45586,45587,45588,45589, -45590,45591,45592,45593,45594,45595,45596,45597,45598,45599,45600,45601, -45602,45603,45604,45605,45606,45607,45608,45609,45610,45611,45612,45613, -45614,45615,45616,45617,45618,45619,45620,45621,45622,45623,45624,45625, -45626,45627,45628,45629,45630,45631,45632,45633,45634,45635,45636,45637, -45638,45639,45640,45641,45642,45643,45644,45645,45646,45647,45648,45649, -45650,45651,45652,45653,45654,45655,45656,45657,45658,45659,45660,45661, -45662,45663,45664,45665,45666,45667,45668,45669,45670,45671,45672,45673, -45674,45675,45676,45677,45678,45679,45680,45681,45682,45683,45684,45685, -45686,45687,45688,45689,45690,45691,45692,45693,45694,45695,45696,45697, -45698,45699,45700,45701,45702,45703,45704,45705,45706,45707,45708,45709, -45710,45711,45712,45713,45714,45715,45716,45717,45718,45719,45720,45721, -45722,45723,45724,45725,45726,45727,45728,45729,45730,45731,45732,45733, -45734,45735,45736,45737,45738,45739,45740,45741,45742,45743,45744,45745, -45746,45747,45748,45749,45750,45751,45752,45753,45754,45755,45756,45757, -45758,45759,45760,45761,45762,45763,45764,45765,45766,45767,45768,45769, -45770,45771,45772,45773,45774,45775,45776,45777,45778,45779,45780,45781, -45782,45783,45784,45785,45786,45787,45788,45789,45790,45791,45792,45793, -45794,45795,45796,45797,45798,45799,45800,45801,45802,45803,45804,45805, -45806,45807,45808,45809,45810,45811,45812,45813,45814,45815,45816,45817, -45818,45819,45820,45821,45822,45823,45824,45825,45826,45827,45828,45829, -45830,45831,45832,45833,45834,45835,45836,45837,45838,45839,45840,45841, -45842,45843,45844,45845,45846,45847,45848,45849,45850,45851,45852,45853, -45854,45855,45856,45857,45858,45859,45860,45861,45862,45863,45864,45865, -45866,45867,45868,45869,45870,45871,45872,45873,45874,45875,45876,45877, -45878,45879,45880,45881,45882,45883,45884,45885,45886,45887,45888,45889, -45890,45891,45892,45893,45894,45895,45896,45897,45898,45899,45900,45901, -45902,45903,45904,45905,45906,45907,45908,45909,45910,45911,45912,45913, -45914,45915,45916,45917,45918,45919,45920,45921,45922,45923,45924,45925, -45926,45927,45928,45929,45930,45931,45932,45933,45934,45935,45936,45937, -45938,45939,45940,45941,45942,45943,45944,45945,45946,45947,45948,45949, -45950,45951,45952,45953,45954,45955,45956,45957,45958,45959,45960,45961, -45962,45963,45964,45965,45966,45967,45968,45969,45970,45971,45972,45973, -45974,45975,45976,45977,45978,45979,45980,45981,45982,45983,45984,45985, -45986,45987,45988,45989,45990,45991,45992,45993,45994,45995,45996,45997, -45998,45999,46000,46001,46002,46003,46004,46005,46006,46007,46008,46009, -46010,46011,46012,46013,46014,46015,46016,46017,46018,46019,46020,46021, -46022,46023,46024,46025,46026,46027,46028,46029,46030,46031,46032,46033, -46034,46035,46036,46037,46038,46039,46040,46041,46042,46043,46044,46045, -46046,46047,46048,46049,46050,46051,46052,46053,46054,46055,46056,46057, -46058,46059,46060,46061,46062,46063,46064,46065,46066,46067,46068,46069, -46070,46071,46072,46073,46074,46075,46076,46077,46078,46079,46080,46081, -46082,46083,46084,46085,46086,46087,46088,46089,46090,46091,46092,46093, -46094,46095,46096,46097,46098,46099,46100,46101,46102,46103,46104,46105, -46106,46107,46108,46109,46110,46111,46112,46113,46114,46115,46116,46117, -46118,46119,46120,46121,46122,46123,46124,46125,46126,46127,46128,46129, -46130,46131,46132,46133,46134,46135,46136,46137,46138,46139,46140,46141, -46142,46143,46144,46145,46146,46147,46148,46149,46150,46151,46152,46153, -46154,46155,46156,46157,46158,46159,46160,46161,46162,46163,46164,46165, -46166,46167,46168,46169,46170,46171,46172,46173,46174,46175,46176,46177, -46178,46179,46180,46181,46182,46183,46184,46185,46186,46187,46188,46189, -46190,46191,46192,46193,46194,46195,46196,46197,46198,46199,46200,46201, -46202,46203,46204,46205,46206,46207,46208,46209,46210,46211,46212,46213, -46214,46215,46216,46217,46218,46219,46220,46221,46222,46223,46224,46225, -46226,46227,46228,46229,46230,46231,46232,46233,46234,46235,46236,46237, -46238,46239,46240,46241,46242,46243,46244,46245,46246,46247,46248,46249, -46250,46251,46252,46253,46254,46255,46256,46257,46258,46259,46260,46261, -46262,46263,46264,46265,46266,46267,46268,46269,46270,46271,46272,46273, -46274,46275,46276,46277,46278,46279,46280,46281,46282,46283,46284,46285, -46286,46287,46288,46289,46290,46291,46292,46293,46294,46295,46296,46297, -46298,46299,46300,46301,46302,46303,46304,46305,46306,46307,46308,46309, -46310,46311,46312,46313,46314,46315,46316,46317,46318,46319,46320,46321, -46322,46323,46324,46325,46326,46327,46328,46329,46330,46331,46332,46333, -46334,46335,46336,46337,46338,46339,46340,46341,46342,46343,46344,46345, -46346,46347,46348,46349,46350,46351,46352,46353,46354,46355,46356,46357, -46358,46359,46360,46361,46362,46363,46364,46365,46366,46367,46368,46369, -46370,46371,46372,46373,46374,46375,46376,46377,46378,46379,46380,46381, -46382,46383,46384,46385,46386,46387,46388,46389,46390,46391,46392,46393, -46394,46395,46396,46397,46398,46399,46400,46401,46402,46403,46404,46405, -46406,46407,46408,46409,46410,46411,46412,46413,46414,46415,46416,46417, -46418,46419,46420,46421,46422,46423,46424,46425,46426,46427,46428,46429, -46430,46431,46432,46433,46434,46435,46436,46437,46438,46439,46440,46441, -46442,46443,46444,46445,46446,46447,46448,46449,46450,46451,46452,46453, -46454,46455,46456,46457,46458,46459,46460,46461,46462,46463,46464,46465, -46466,46467,46468,46469,46470,46471,46472,46473,46474,46475,46476,46477, -46478,46479,46480,46481,46482,46483,46484,46485,46486,46487,46488,46489, -46490,46491,46492,46493,46494,46495,46496,46497,46498,46499,46500,46501, -46502,46503,46504,46505,46506,46507,46508,46509,46510,46511,46512,46513, -46514,46515,46516,46517,46518,46519,46520,46521,46522,46523,46524,46525, -46526,46527,46528,46529,46530,46531,46532,46533,46534,46535,46536,46537, -46538,46539,46540,46541,46542,46543,46544,46545,46546,46547,46548,46549, -46550,46551,46552,46553,46554,46555,46556,46557,46558,46559,46560,46561, -46562,46563,46564,46565,46566,46567,46568,46569,46570,46571,46572,46573, -46574,46575,46576,46577,46578,46579,46580,46581,46582,46583,46584,46585, -46586,46587,46588,46589,46590,46591,46592,46593,46594,46595,46596,46597, -46598,46599,46600,46601,46602,46603,46604,46605,46606,46607,46608,46609, -46610,46611,46612,46613,46614,46615,46616,46617,46618,46619,46620,46621, -46622,46623,46624,46625,46626,46627,46628,46629,46630,46631,46632,46633, -46634,46635,46636,46637,46638,46639,46640,46641,46642,46643,46644,46645, -46646,46647,46648,46649,46650,46651,46652,46653,46654,46655,46656,46657, -46658,46659,46660,46661,46662,46663,46664,46665,46666,46667,46668,46669, -46670,46671,46672,46673,46674,46675,46676,46677,46678,46679,46680,46681, -46682,46683,46684,46685,46686,46687,46688,46689,46690,46691,46692,46693, -46694,46695,46696,46697,46698,46699,46700,46701,46702,46703,46704,46705, -46706,46707,46708,46709,46710,46711,46712,46713,46714,46715,46716,46717, -46718,46719,46720,46721,46722,46723,46724,46725,46726,46727,46728,46729, -46730,46731,46732,46733,46734,46735,46736,46737,46738,46739,46740,46741, -46742,46743,46744,46745,46746,46747,46748,46749,46750,46751,46752,46753, -46754,46755,46756,46757,46758,46759,46760,46761,46762,46763,46764,46765, -46766,46767,46768,46769,46770,46771,46772,46773,46774,46775,46776,46777, -46778,46779,46780,46781,46782,46783,46784,46785,46786,46787,46788,46789, -46790,46791,46792,46793,46794,46795,46796,46797,46798,46799,46800,46801, -46802,46803,46804,46805,46806,46807,46808,46809,46810,46811,46812,46813, -46814,46815,46816,46817,46818,46819,46820,46821,46822,46823,46824,46825, -46826,46827,46828,46829,46830,46831,46832,46833,46834,46835,46836,46837, -46838,46839,46840,46841,46842,46843,46844,46845,46846,46847,46848,46849, -46850,46851,46852,46853,46854,46855,46856,46857,46858,46859,46860,46861, -46862,46863,46864,46865,46866,46867,46868,46869,46870,46871,46872,46873, -46874,46875,46876,46877,46878,46879,46880,46881,46882,46883,46884,46885, -46886,46887,46888,46889,46890,46891,46892,46893,46894,46895,46896,46897, -46898,46899,46900,46901,46902,46903,46904,46905,46906,46907,46908,46909, -46910,46911,46912,46913,46914,46915,46916,46917,46918,46919,46920,46921, -46922,46923,46924,46925,46926,46927,46928,46929,46930,46931,46932,46933, -46934,46935,46936,46937,46938,46939,46940,46941,46942,46943,46944,46945, -46946,46947,46948,46949,46950,46951,46952,46953,46954,46955,46956,46957, -46958,46959,46960,46961,46962,46963,46964,46965,46966,46967,46968,46969, -46970,46971,46972,46973,46974,46975,46976,46977,46978,46979,46980,46981, -46982,46983,46984,46985,46986,46987,46988,46989,46990,46991,46992,46993, -46994,46995,46996,46997,46998,46999,47000,47001,47002,47003,47004,47005, -47006,47007,47008,47009,47010,47011,47012,47013,47014,47015,47016,47017, -47018,47019,47020,47021,47022,47023,47024,47025,47026,47027,47028,47029, -47030,47031,47032,47033,47034,47035,47036,47037,47038,47039,47040,47041, -47042,47043,47044,47045,47046,47047,47048,47049,47050,47051,47052,47053, -47054,47055,47056,47057,47058,47059,47060,47061,47062,47063,47064,47065, -47066,47067,47068,47069,47070,47071,47072,47073,47074,47075,47076,47077, -47078,47079,47080,47081,47082,47083,47084,47085,47086,47087,47088,47089, -47090,47091,47092,47093,47094,47095,47096,47097,47098,47099,47100,47101, -47102,47103,47104,47105,47106,47107,47108,47109,47110,47111,47112,47113, -47114,47115,47116,47117,47118,47119,47120,47121,47122,47123,47124,47125, -47126,47127,47128,47129,47130,47131,47132,47133,47134,47135,47136,47137, -47138,47139,47140,47141,47142,47143,47144,47145,47146,47147,47148,47149, -47150,47151,47152,47153,47154,47155,47156,47157,47158,47159,47160,47161, -47162,47163,47164,47165,47166,47167,47168,47169,47170,47171,47172,47173, -47174,47175,47176,47177,47178,47179,47180,47181,47182,47183,47184,47185, -47186,47187,47188,47189,47190,47191,47192,47193,47194,47195,47196,47197, -47198,47199,47200,47201,47202,47203,47204,47205,47206,47207,47208,47209, -47210,47211,47212,47213,47214,47215,47216,47217,47218,47219,47220,47221, -47222,47223,47224,47225,47226,47227,47228,47229,47230,47231,47232,47233, -47234,47235,47236,47237,47238,47239,47240,47241,47242,47243,47244,47245, -47246,47247,47248,47249,47250,47251,47252,47253,47254,47255,47256,47257, -47258,47259,47260,47261,47262,47263,47264,47265,47266,47267,47268,47269, -47270,47271,47272,47273,47274,47275,47276,47277,47278,47279,47280,47281, -47282,47283,47284,47285,47286,47287,47288,47289,47290,47291,47292,47293, -47294,47295,47296,47297,47298,47299,47300,47301,47302,47303,47304,47305, -47306,47307,47308,47309,47310,47311,47312,47313,47314,47315,47316,47317, -47318,47319,47320,47321,47322,47323,47324,47325,47326,47327,47328,47329, -47330,47331,47332,47333,47334,47335,47336,47337,47338,47339,47340,47341, -47342,47343,47344,47345,47346,47347,47348,47349,47350,47351,47352,47353, -47354,47355,47356,47357,47358,47359,47360,47361,47362,47363,47364,47365, -47366,47367,47368,47369,47370,47371,47372,47373,47374,47375,47376,47377, -47378,47379,47380,47381,47382,47383,47384,47385,47386,47387,47388,47389, -47390,47391,47392,47393,47394,47395,47396,47397,47398,47399,47400,47401, -47402,47403,47404,47405,47406,47407,47408,47409,47410,47411,47412,47413, -47414,47415,47416,47417,47418,47419,47420,47421,47422,47423,47424,47425, -47426,47427,47428,47429,47430,47431,47432,47433,47434,47435,47436,47437, -47438,47439,47440,47441,47442,47443,47444,47445,47446,47447,47448,47449, -47450,47451,47452,47453,47454,47455,47456,47457,47458,47459,47460,47461, -47462,47463,47464,47465,47466,47467,47468,47469,47470,47471,47472,47473, -47474,47475,47476,47477,47478,47479,47480,47481,47482,47483,47484,47485, -47486,47487,47488,47489,47490,47491,47492,47493,47494,47495,47496,47497, -47498,47499,47500,47501,47502,47503,47504,47505,47506,47507,47508,47509, -47510,47511,47512,47513,47514,47515,47516,47517,47518,47519,47520,47521, -47522,47523,47524,47525,47526,47527,47528,47529,47530,47531,47532,47533, -47534,47535,47536,47537,47538,47539,47540,47541,47542,47543,47544,47545, -47546,47547,47548,47549,47550,47551,47552,47553,47554,47555,47556,47557, -47558,47559,47560,47561,47562,47563,47564,47565,47566,47567,47568,47569, -47570,47571,47572,47573,47574,47575,47576,47577,47578,47579,47580,47581, -47582,47583,47584,47585,47586,47587,47588,47589,47590,47591,47592,47593, -47594,47595,47596,47597,47598,47599,47600,47601,47602,47603,47604,47605, -47606,47607,47608,47609,47610,47611,47612,47613,47614,47615,47616,47617, -47618,47619,47620,47621,47622,47623,47624,47625,47626,47627,47628,47629, -47630,47631,47632,47633,47634,47635,47636,47637,47638,47639,47640,47641, -47642,47643,47644,47645,47646,47647,47648,47649,47650,47651,47652,47653, -47654,47655,47656,47657,47658,47659,47660,47661,47662,47663,47664,47665, -47666,47667,47668,47669,47670,47671,47672,47673,47674,47675,47676,47677, -47678,47679,47680,47681,47682,47683,47684,47685,47686,47687,47688,47689, -47690,47691,47692,47693,47694,47695,47696,47697,47698,47699,47700,47701, -47702,47703,47704,47705,47706,47707,47708,47709,47710,47711,47712,47713, -47714,47715,47716,47717,47718,47719,47720,47721,47722,47723,47724,47725, -47726,47727,47728,47729,47730,47731,47732,47733,47734,47735,47736,47737, -47738,47739,47740,47741,47742,47743,47744,47745,47746,47747,47748,47749, -47750,47751,47752,47753,47754,47755,47756,47757,47758,47759,47760,47761, -47762,47763,47764,47765,47766,47767,47768,47769,47770,47771,47772,47773, -47774,47775,47776,47777,47778,47779,47780,47781,47782,47783,47784,47785, -47786,47787,47788,47789,47790,47791,47792,47793,47794,47795,47796,47797, -47798,47799,47800,47801,47802,47803,47804,47805,47806,47807,47808,47809, -47810,47811,47812,47813,47814,47815,47816,47817,47818,47819,47820,47821, -47822,47823,47824,47825,47826,47827,47828,47829,47830,47831,47832,47833, -47834,47835,47836,47837,47838,47839,47840,47841,47842,47843,47844,47845, -47846,47847,47848,47849,47850,47851,47852,47853,47854,47855,47856,47857, -47858,47859,47860,47861,47862,47863,47864,47865,47866,47867,47868,47869, -47870,47871,47872,47873,47874,47875,47876,47877,47878,47879,47880,47881, -47882,47883,47884,47885,47886,47887,47888,47889,47890,47891,47892,47893, -47894,47895,47896,47897,47898,47899,47900,47901,47902,47903,47904,47905, -47906,47907,47908,47909,47910,47911,47912,47913,47914,47915,47916,47917, -47918,47919,47920,47921,47922,47923,47924,47925,47926,47927,47928,47929, -47930,47931,47932,47933,47934,47935,47936,47937,47938,47939,47940,47941, -47942,47943,47944,47945,47946,47947,47948,47949,47950,47951,47952,47953, -47954,47955,47956,47957,47958,47959,47960,47961,47962,47963,47964,47965, -47966,47967,47968,47969,47970,47971,47972,47973,47974,47975,47976,47977, -47978,47979,47980,47981,47982,47983,47984,47985,47986,47987,47988,47989, -47990,47991,47992,47993,47994,47995,47996,47997,47998,47999,48000,48001, -48002,48003,48004,48005,48006,48007,48008,48009,48010,48011,48012,48013, -48014,48015,48016,48017,48018,48019,48020,48021,48022,48023,48024,48025, -48026,48027,48028,48029,48030,48031,48032,48033,48034,48035,48036,48037, -48038,48039,48040,48041,48042,48043,48044,48045,48046,48047,48048,48049, -48050,48051,48052,48053,48054,48055,48056,48057,48058,48059,48060,48061, -48062,48063,48064,48065,48066,48067,48068,48069,48070,48071,48072,48073, -48074,48075,48076,48077,48078,48079,48080,48081,48082,48083,48084,48085, -48086,48087,48088,48089,48090,48091,48092,48093,48094,48095,48096,48097, -48098,48099,48100,48101,48102,48103,48104,48105,48106,48107,48108,48109, -48110,48111,48112,48113,48114,48115,48116,48117,48118,48119,48120,48121, -48122,48123,48124,48125,48126,48127,48128,48129,48130,48131,48132,48133, -48134,48135,48136,48137,48138,48139,48140,48141,48142,48143,48144,48145, -48146,48147,48148,48149,48150,48151,48152,48153,48154,48155,48156,48157, -48158,48159,48160,48161,48162,48163,48164,48165,48166,48167,48168,48169, -48170,48171,48172,48173,48174,48175,48176,48177,48178,48179,48180,48181, -48182,48183,48184,48185,48186,48187,48188,48189,48190,48191,48192,48193, -48194,48195,48196,48197,48198,48199,48200,48201,48202,48203,48204,48205, -48206,48207,48208,48209,48210,48211,48212,48213,48214,48215,48216,48217, -48218,48219,48220,48221,48222,48223,48224,48225,48226,48227,48228,48229, -48230,48231,48232,48233,48234,48235,48236,48237,48238,48239,48240,48241, -48242,48243,48244,48245,48246,48247,48248,48249,48250,48251,48252,48253, -48254,48255,48256,48257,48258,48259,48260,48261,48262,48263,48264,48265, -48266,48267,48268,48269,48270,48271,48272,48273,48274,48275,48276,48277, -48278,48279,48280,48281,48282,48283,48284,48285,48286,48287,48288,48289, -48290,48291,48292,48293,48294,48295,48296,48297,48298,48299,48300,48301, -48302,48303,48304,48305,48306,48307,48308,48309,48310,48311,48312,48313, -48314,48315,48316,48317,48318,48319,48320,48321,48322,48323,48324,48325, -48326,48327,48328,48329,48330,48331,48332,48333,48334,48335,48336,48337, -48338,48339,48340,48341,48342,48343,48344,48345,48346,48347,48348,48349, -48350,48351,48352,48353,48354,48355,48356,48357,48358,48359,48360,48361, -48362,48363,48364,48365,48366,48367,48368,48369,48370,48371,48372,48373, -48374,48375,48376,48377,48378,48379,48380,48381,48382,48383,48384,48385, -48386,48387,48388,48389,48390,48391,48392,48393,48394,48395,48396,48397, -48398,48399,48400,48401,48402,48403,48404,48405,48406,48407,48408,48409, -48410,48411,48412,48413,48414,48415,48416,48417,48418,48419,48420,48421, -48422,48423,48424,48425,48426,48427,48428,48429,48430,48431,48432,48433, -48434,48435,48436,48437,48438,48439,48440,48441,48442,48443,48444,48445, -48446,48447,48448,48449,48450,48451,48452,48453,48454,48455,48456,48457, -48458,48459,48460,48461,48462,48463,48464,48465,48466,48467,48468,48469, -48470,48471,48472,48473,48474,48475,48476,48477,48478,48479,48480,48481, -48482,48483,48484,48485,48486,48487,48488,48489,48490,48491,48492,48493, -48494,48495,48496,48497,48498,48499,48500,48501,48502,48503,48504,48505, -48506,48507,48508,48509,48510,48511,48512,48513,48514,48515,48516,48517, -48518,48519,48520,48521,48522,48523,48524,48525,48526,48527,48528,48529, -48530,48531,48532,48533,48534,48535,48536,48537,48538,48539,48540,48541, -48542,48543,48544,48545,48546,48547,48548,48549,48550,48551,48552,48553, -48554,48555,48556,48557,48558,48559,48560,48561,48562,48563,48564,48565, -48566,48567,48568,48569,48570,48571,48572,48573,48574,48575,48576,48577, -48578,48579,48580,48581,48582,48583,48584,48585,48586,48587,48588,48589, -48590,48591,48592,48593,48594,48595,48596,48597,48598,48599,48600,48601, -48602,48603,48604,48605,48606,48607,48608,48609,48610,48611,48612,48613, -48614,48615,48616,48617,48618,48619,48620,48621,48622,48623,48624,48625, -48626,48627,48628,48629,48630,48631,48632,48633,48634,48635,48636,48637, -48638,48639,48640,48641,48642,48643,48644,48645,48646,48647,48648,48649, -48650,48651,48652,48653,48654,48655,48656,48657,48658,48659,48660,48661, -48662,48663,48664,48665,48666,48667,48668,48669,48670,48671,48672,48673, -48674,48675,48676,48677,48678,48679,48680,48681,48682,48683,48684,48685, -48686,48687,48688,48689,48690,48691,48692,48693,48694,48695,48696,48697, -48698,48699,48700,48701,48702,48703,48704,48705,48706,48707,48708,48709, -48710,48711,48712,48713,48714,48715,48716,48717,48718,48719,48720,48721, -48722,48723,48724,48725,48726,48727,48728,48729,48730,48731,48732,48733, -48734,48735,48736,48737,48738,48739,48740,48741,48742,48743,48744,48745, -48746,48747,48748,48749,48750,48751,48752,48753,48754,48755,48756,48757, -48758,48759,48760,48761,48762,48763,48764,48765,48766,48767,48768,48769, -48770,48771,48772,48773,48774,48775,48776,48777,48778,48779,48780,48781, -48782,48783,48784,48785,48786,48787,48788,48789,48790,48791,48792,48793, -48794,48795,48796,48797,48798,48799,48800,48801,48802,48803,48804,48805, -48806,48807,48808,48809,48810,48811,48812,48813,48814,48815,48816,48817, -48818,48819,48820,48821,48822,48823,48824,48825,48826,48827,48828,48829, -48830,48831,48832,48833,48834,48835,48836,48837,48838,48839,48840,48841, -48842,48843,48844,48845,48846,48847,48848,48849,48850,48851,48852,48853, -48854,48855,48856,48857,48858,48859,48860,48861,48862,48863,48864,48865, -48866,48867,48868,48869,48870,48871,48872,48873,48874,48875,48876,48877, -48878,48879,48880,48881,48882,48883,48884,48885,48886,48887,48888,48889, -48890,48891,48892,48893,48894,48895,48896,48897,48898,48899,48900,48901, -48902,48903,48904,48905,48906,48907,48908,48909,48910,48911,48912,48913, -48914,48915,48916,48917,48918,48919,48920,48921,48922,48923,48924,48925, -48926,48927,48928,48929,48930,48931,48932,48933,48934,48935,48936,48937, -48938,48939,48940,48941,48942,48943,48944,48945,48946,48947,48948,48949, -48950,48951,48952,48953,48954,48955,48956,48957,48958,48959,48960,48961, -48962,48963,48964,48965,48966,48967,48968,48969,48970,48971,48972,48973, -48974,48975,48976,48977,48978,48979,48980,48981,48982,48983,48984,48985, -48986,48987,48988,48989,48990,48991,48992,48993,48994,48995,48996,48997, -48998,48999,49000,49001,49002,49003,49004,49005,49006,49007,49008,49009, -49010,49011,49012,49013,49014,49015,49016,49017,49018,49019,49020,49021, -49022,49023,49024,49025,49026,49027,49028,49029,49030,49031,49032,49033, -49034,49035,49036,49037,49038,49039,49040,49041,49042,49043,49044,49045, -49046,49047,49048,49049,49050,49051,49052,49053,49054,49055,49056,49057, -49058,49059,49060,49061,49062,49063,49064,49065,49066,49067,49068,49069, -49070,49071,49072,49073,49074,49075,49076,49077,49078,49079,49080,49081, -49082,49083,49084,49085,49086,49087,49088,49089,49090,49091,49092,49093, -49094,49095,49096,49097,49098,49099,49100,49101,49102,49103,49104,49105, -49106,49107,49108,49109,49110,49111,49112,49113,49114,49115,49116,49117, -49118,49119,49120,49121,49122,49123,49124,49125,49126,49127,49128,49129, -49130,49131,49132,49133,49134,49135,49136,49137,49138,49139,49140,49141, -49142,49143,49144,49145,49146,49147,49148,49149,49150,49151,49152,49153, -49154,49155,49156,49157,49158,49159,49160,49161,49162,49163,49164,49165, -49166,49167,49168,49169,49170,49171,49172,49173,49174,49175,49176,49177, -49178,49179,49180,49181,49182,49183,49184,49185,49186,49187,49188,49189, -49190,49191,49192,49193,49194,49195,49196,49197,49198,49199,49200,49201, -49202,49203,49204,49205,49206,49207,49208,49209,49210,49211,49212,49213, -49214,49215,49216,49217,49218,49219,49220,49221,49222,49223,49224,49225, -49226,49227,49228,49229,49230,49231,49232,49233,49234,49235,49236,49237, -49238,49239,49240,49241,49242,49243,49244,49245,49246,49247,49248,49249, -49250,49251,49252,49253,49254,49255,49256,49257,49258,49259,49260,49261, -49262,49263,49264,49265,49266,49267,49268,49269,49270,49271,49272,49273, -49274,49275,49276,49277,49278,49279,49280,49281,49282,49283,49284,49285, -49286,49287,49288,49289,49290,49291,49292,49293,49294,49295,49296,49297, -49298,49299,49300,49301,49302,49303,49304,49305,49306,49307,49308,49309, -49310,49311,49312,49313,49314,49315,49316,49317,49318,49319,49320,49321, -49322,49323,49324,49325,49326,49327,49328,49329,49330,49331,49332,49333, -49334,49335,49336,49337,49338,49339,49340,49341,49342,49343,49344,49345, -49346,49347,49348,49349,49350,49351,49352,49353,49354,49355,49356,49357, -49358,49359,49360,49361,49362,49363,49364,49365,49366,49367,49368,49369, -49370,49371,49372,49373,49374,49375,49376,49377,49378,49379,49380,49381, -49382,49383,49384,49385,49386,49387,49388,49389,49390,49391,49392,49393, -49394,49395,49396,49397,49398,49399,49400,49401,49402,49403,49404,49405, -49406,49407,49408,49409,49410,49411,49412,49413,49414,49415,49416,49417, -49418,49419,49420,49421,49422,49423,49424,49425,49426,49427,49428,49429, -49430,49431,49432,49433,49434,49435,49436,49437,49438,49439,49440,49441, -49442,49443,49444,49445,49446,49447,49448,49449,49450,49451,49452,49453, -49454,49455,49456,49457,49458,49459,49460,49461,49462,49463,49464,49465, -49466,49467,49468,49469,49470,49471,49472,49473,49474,49475,49476,49477, -49478,49479,49480,49481,49482,49483,49484,49485,49486,49487,49488,49489, -49490,49491,49492,49493,49494,49495,49496,49497,49498,49499,49500,49501, -49502,49503,49504,49505,49506,49507,49508,49509,49510,49511,49512,49513, -49514,49515,49516,49517,49518,49519,49520,49521,49522,49523,49524,49525, -49526,49527,49528,49529,49530,49531,49532,49533,49534,49535,49536,49537, -49538,49539,49540,49541,49542,49543,49544,49545,49546,49547,49548,49549, -49550,49551,49552,49553,49554,49555,49556,49557,49558,49559,49560,49561, -49562,49563,49564,49565,49566,49567,49568,49569,49570,49571,49572,49573, -49574,49575,49576,49577,49578,49579,49580,49581,49582,49583,49584,49585, -49586,49587,49588,49589,49590,49591,49592,49593,49594,49595,49596,49597, -49598,49599,49600,49601,49602,49603,49604,49605,49606,49607,49608,49609, -49610,49611,49612,49613,49614,49615,49616,49617,49618,49619,49620,49621, -49622,49623,49624,49625,49626,49627,49628,49629,49630,49631,49632,49633, -49634,49635,49636,49637,49638,49639,49640,49641,49642,49643,49644,49645, -49646,49647,49648,49649,49650,49651,49652,49653,49654,49655,49656,49657, -49658,49659,49660,49661,49662,49663,49664,49665,49666,49667,49668,49669, -49670,49671,49672,49673,49674,49675,49676,49677,49678,49679,49680,49681, -49682,49683,49684,49685,49686,49687,49688,49689,49690,49691,49692,49693, -49694,49695,49696,49697,49698,49699,49700,49701,49702,49703,49704,49705, -49706,49707,49708,49709,49710,49711,49712,49713,49714,49715,49716,49717, -49718,49719,49720,49721,49722,49723,49724,49725,49726,49727,49728,49729, -49730,49731,49732,49733,49734,49735,49736,49737,49738,49739,49740,49741, -49742,49743,49744,49745,49746,49747,49748,49749,49750,49751,49752,49753, -49754,49755,49756,49757,49758,49759,49760,49761,49762,49763,49764,49765, -49766,49767,49768,49769,49770,49771,49772,49773,49774,49775,49776,49777, -49778,49779,49780,49781,49782,49783,49784,49785,49786,49787,49788,49789, -49790,49791,49792,49793,49794,49795,49796,49797,49798,49799,49800,49801, -49802,49803,49804,49805,49806,49807,49808,49809,49810,49811,49812,49813, -49814,49815,49816,49817,49818,49819,49820,49821,49822,49823,49824,49825, -49826,49827,49828,49829,49830,49831,49832,49833,49834,49835,49836,49837, -49838,49839,49840,49841,49842,49843,49844,49845,49846,49847,49848,49849, -49850,49851,49852,49853,49854,49855,49856,49857,49858,49859,49860,49861, -49862,49863,49864,49865,49866,49867,49868,49869,49870,49871,49872,49873, -49874,49875,49876,49877,49878,49879,49880,49881,49882,49883,49884,49885, -49886,49887,49888,49889,49890,49891,49892,49893,49894,49895,49896,49897, -49898,49899,49900,49901,49902,49903,49904,49905,49906,49907,49908,49909, -49910,49911,49912,49913,49914,49915,49916,49917,49918,49919,49920,49921, -49922,49923,49924,49925,49926,49927,49928,49929,49930,49931,49932,49933, -49934,49935,49936,49937,49938,49939,49940,49941,49942,49943,49944,49945, -49946,49947,49948,49949,49950,49951,49952,49953,49954,49955,49956,49957, -49958,49959,49960,49961,49962,49963,49964,49965,49966,49967,49968,49969, -49970,49971,49972,49973,49974,49975,49976,49977,49978,49979,49980,49981, -49982,49983,49984,49985,49986,49987,49988,49989,49990,49991,49992,49993, -49994,49995,49996,49997,49998,49999,50000,50001,50002,50003,50004,50005, -50006,50007,50008,50009,50010,50011,50012,50013,50014,50015,50016,50017, -50018,50019,50020,50021,50022,50023,50024,50025,50026,50027,50028,50029, -50030,50031,50032,50033,50034,50035,50036,50037,50038,50039,50040,50041, -50042,50043,50044,50045,50046,50047,50048,50049,50050,50051,50052,50053, -50054,50055,50056,50057,50058,50059,50060,50061,50062,50063,50064,50065, -50066,50067,50068,50069,50070,50071,50072,50073,50074,50075,50076,50077, -50078,50079,50080,50081,50082,50083,50084,50085,50086,50087,50088,50089, -50090,50091,50092,50093,50094,50095,50096,50097,50098,50099,50100,50101, -50102,50103,50104,50105,50106,50107,50108,50109,50110,50111,50112,50113, -50114,50115,50116,50117,50118,50119,50120,50121,50122,50123,50124,50125, -50126,50127,50128,50129,50130,50131,50132,50133,50134,50135,50136,50137, -50138,50139,50140,50141,50142,50143,50144,50145,50146,50147,50148,50149, -50150,50151,50152,50153,50154,50155,50156,50157,50158,50159,50160,50161, -50162,50163,50164,50165,50166,50167,50168,50169,50170,50171,50172,50173, -50174,50175,50176,50177,50178,50179,50180,50181,50182,50183,50184,50185, -50186,50187,50188,50189,50190,50191,50192,50193,50194,50195,50196,50197, -50198,50199,50200,50201,50202,50203,50204,50205,50206,50207,50208,50209, -50210,50211,50212,50213,50214,50215,50216,50217,50218,50219,50220,50221, -50222,50223,50224,50225,50226,50227,50228,50229,50230,50231,50232,50233, -50234,50235,50236,50237,50238,50239,50240,50241,50242,50243,50244,50245, -50246,50247,50248,50249,50250,50251,50252,50253,50254,50255,50256,50257, -50258,50259,50260,50261,50262,50263,50264,50265,50266,50267,50268,50269, -50270,50271,50272,50273,50274,50275,50276,50277,50278,50279,50280,50281, -50282,50283,50284,50285,50286,50287,50288,50289,50290,50291,50292,50293, -50294,50295,50296,50297,50298,50299,50300,50301,50302,50303,50304,50305, -50306,50307,50308,50309,50310,50311,50312,50313,50314,50315,50316,50317, -50318,50319,50320,50321,50322,50323,50324,50325,50326,50327,50328,50329, -50330,50331,50332,50333,50334,50335,50336,50337,50338,50339,50340,50341, -50342,50343,50344,50345,50346,50347,50348,50349,50350,50351,50352,50353, -50354,50355,50356,50357,50358,50359,50360,50361,50362,50363,50364,50365, -50366,50367,50368,50369,50370,50371,50372,50373,50374,50375,50376,50377, -50378,50379,50380,50381,50382,50383,50384,50385,50386,50387,50388,50389, -50390,50391,50392,50393,50394,50395,50396,50397,50398,50399,50400,50401, -50402,50403,50404,50405,50406,50407,50408,50409,50410,50411,50412,50413, -50414,50415,50416,50417,50418,50419,50420,50421,50422,50423,50424,50425, -50426,50427,50428,50429,50430,50431,50432,50433,50434,50435,50436,50437, -50438,50439,50440,50441,50442,50443,50444,50445,50446,50447,50448,50449, -50450,50451,50452,50453,50454,50455,50456,50457,50458,50459,50460,50461, -50462,50463,50464,50465,50466,50467,50468,50469,50470,50471,50472,50473, -50474,50475,50476,50477,50478,50479,50480,50481,50482,50483,50484,50485, -50486,50487,50488,50489,50490,50491,50492,50493,50494,50495,50496,50497, -50498,50499,50500,50501,50502,50503,50504,50505,50506,50507,50508,50509, -50510,50511,50512,50513,50514,50515,50516,50517,50518,50519,50520,50521, -50522,50523,50524,50525,50526,50527,50528,50529,50530,50531,50532,50533, -50534,50535,50536,50537,50538,50539,50540,50541,50542,50543,50544,50545, -50546,50547,50548,50549,50550,50551,50552,50553,50554,50555,50556,50557, -50558,50559,50560,50561,50562,50563,50564,50565,50566,50567,50568,50569, -50570,50571,50572,50573,50574,50575,50576,50577,50578,50579,50580,50581, -50582,50583,50584,50585,50586,50587,50588,50589,50590,50591,50592,50593, -50594,50595,50596,50597,50598,50599,50600,50601,50602,50603,50604,50605, -50606,50607,50608,50609,50610,50611,50612,50613,50614,50615,50616,50617, -50618,50619,50620,50621,50622,50623,50624,50625,50626,50627,50628,50629, -50630,50631,50632,50633,50634,50635,50636,50637,50638,50639,50640,50641, -50642,50643,50644,50645,50646,50647,50648,50649,50650,50651,50652,50653, -50654,50655,50656,50657,50658,50659,50660,50661,50662,50663,50664,50665, -50666,50667,50668,50669,50670,50671,50672,50673,50674,50675,50676,50677, -50678,50679,50680,50681,50682,50683,50684,50685,50686,50687,50688,50689, -50690,50691,50692,50693,50694,50695,50696,50697,50698,50699,50700,50701, -50702,50703,50704,50705,50706,50707,50708,50709,50710,50711,50712,50713, -50714,50715,50716,50717,50718,50719,50720,50721,50722,50723,50724,50725, -50726,50727,50728,50729,50730,50731,50732,50733,50734,50735,50736,50737, -50738,50739,50740,50741,50742,50743,50744,50745,50746,50747,50748,50749, -50750,50751,50752,50753,50754,50755,50756,50757,50758,50759,50760,50761, -50762,50763,50764,50765,50766,50767,50768,50769,50770,50771,50772,50773, -50774,50775,50776,50777,50778,50779,50780,50781,50782,50783,50784,50785, -50786,50787,50788,50789,50790,50791,50792,50793,50794,50795,50796,50797, -50798,50799,50800,50801,50802,50803,50804,50805,50806,50807,50808,50809, -50810,50811,50812,50813,50814,50815,50816,50817,50818,50819,50820,50821, -50822,50823,50824,50825,50826,50827,50828,50829,50830,50831,50832,50833, -50834,50835,50836,50837,50838,50839,50840,50841,50842,50843,50844,50845, -50846,50847,50848,50849,50850,50851,50852,50853,50854,50855,50856,50857, -50858,50859,50860,50861,50862,50863,50864,50865,50866,50867,50868,50869, -50870,50871,50872,50873,50874,50875,50876,50877,50878,50879,50880,50881, -50882,50883,50884,50885,50886,50887,50888,50889,50890,50891,50892,50893, -50894,50895,50896,50897,50898,50899,50900,50901,50902,50903,50904,50905, -50906,50907,50908,50909,50910,50911,50912,50913,50914,50915,50916,50917, -50918,50919,50920,50921,50922,50923,50924,50925,50926,50927,50928,50929, -50930,50931,50932,50933,50934,50935,50936,50937,50938,50939,50940,50941, -50942,50943,50944,50945,50946,50947,50948,50949,50950,50951,50952,50953, -50954,50955,50956,50957,50958,50959,50960,50961,50962,50963,50964,50965, -50966,50967,50968,50969,50970,50971,50972,50973,50974,50975,50976,50977, -50978,50979,50980,50981,50982,50983,50984,50985,50986,50987,50988,50989, -50990,50991,50992,50993,50994,50995,50996,50997,50998,50999,51000,51001, -51002,51003,51004,51005,51006,51007,51008,51009,51010,51011,51012,51013, -51014,51015,51016,51017,51018,51019,51020,51021,51022,51023,51024,51025, -51026,51027,51028,51029,51030,51031,51032,51033,51034,51035,51036,51037, -51038,51039,51040,51041,51042,51043,51044,51045,51046,51047,51048,51049, -51050,51051,51052,51053,51054,51055,51056,51057,51058,51059,51060,51061, -51062,51063,51064,51065,51066,51067,51068,51069,51070,51071,51072,51073, -51074,51075,51076,51077,51078,51079,51080,51081,51082,51083,51084,51085, -51086,51087,51088,51089,51090,51091,51092,51093,51094,51095,51096,51097, -51098,51099,51100,51101,51102,51103,51104,51105,51106,51107,51108,51109, -51110,51111,51112,51113,51114,51115,51116,51117,51118,51119,51120,51121, -51122,51123,51124,51125,51126,51127,51128,51129,51130,51131,51132,51133, -51134,51135,51136,51137,51138,51139,51140,51141,51142,51143,51144,51145, -51146,51147,51148,51149,51150,51151,51152,51153,51154,51155,51156,51157, -51158,51159,51160,51161,51162,51163,51164,51165,51166,51167,51168,51169, -51170,51171,51172,51173,51174,51175,51176,51177,51178,51179,51180,51181, -51182,51183,51184,51185,51186,51187,51188,51189,51190,51191,51192,51193, -51194,51195,51196,51197,51198,51199,51200,51201,51202,51203,51204,51205, -51206,51207,51208,51209,51210,51211,51212,51213,51214,51215,51216,51217, -51218,51219,51220,51221,51222,51223,51224,51225,51226,51227,51228,51229, -51230,51231,51232,51233,51234,51235,51236,51237,51238,51239,51240,51241, -51242,51243,51244,51245,51246,51247,51248,51249,51250,51251,51252,51253, -51254,51255,51256,51257,51258,51259,51260,51261,51262,51263,51264,51265, -51266,51267,51268,51269,51270,51271,51272,51273,51274,51275,51276,51277, -51278,51279,51280,51281,51282,51283,51284,51285,51286,51287,51288,51289, -51290,51291,51292,51293,51294,51295,51296,51297,51298,51299,51300,51301, -51302,51303,51304,51305,51306,51307,51308,51309,51310,51311,51312,51313, -51314,51315,51316,51317,51318,51319,51320,51321,51322,51323,51324,51325, -51326,51327,51328,51329,51330,51331,51332,51333,51334,51335,51336,51337, -51338,51339,51340,51341,51342,51343,51344,51345,51346,51347,51348,51349, -51350,51351,51352,51353,51354,51355,51356,51357,51358,51359,51360,51361, -51362,51363,51364,51365,51366,51367,51368,51369,51370,51371,51372,51373, -51374,51375,51376,51377,51378,51379,51380,51381,51382,51383,51384,51385, -51386,51387,51388,51389,51390,51391,51392,51393,51394,51395,51396,51397, -51398,51399,51400,51401,51402,51403,51404,51405,51406,51407,51408,51409, -51410,51411,51412,51413,51414,51415,51416,51417,51418,51419,51420,51421, -51422,51423,51424,51425,51426,51427,51428,51429,51430,51431,51432,51433, -51434,51435,51436,51437,51438,51439,51440,51441,51442,51443,51444,51445, -51446,51447,51448,51449,51450,51451,51452,51453,51454,51455,51456,51457, -51458,51459,51460,51461,51462,51463,51464,51465,51466,51467,51468,51469, -51470,51471,51472,51473,51474,51475,51476,51477,51478,51479,51480,51481, -51482,51483,51484,51485,51486,51487,51488,51489,51490,51491,51492,51493, -51494,51495,51496,51497,51498,51499,51500,51501,51502,51503,51504,51505, -51506,51507,51508,51509,51510,51511,51512,51513,51514,51515,51516,51517, -51518,51519,51520,51521,51522,51523,51524,51525,51526,51527,51528,51529, -51530,51531,51532,51533,51534,51535,51536,51537,51538,51539,51540,51541, -51542,51543,51544,51545,51546,51547,51548,51549,51550,51551,51552,51553, -51554,51555,51556,51557,51558,51559,51560,51561,51562,51563,51564,51565, -51566,51567,51568,51569,51570,51571,51572,51573,51574,51575,51576,51577, -51578,51579,51580,51581,51582,51583,51584,51585,51586,51587,51588,51589, -51590,51591,51592,51593,51594,51595,51596,51597,51598,51599,51600,51601, -51602,51603,51604,51605,51606,51607,51608,51609,51610,51611,51612,51613, -51614,51615,51616,51617,51618,51619,51620,51621,51622,51623,51624,51625, -51626,51627,51628,51629,51630,51631,51632,51633,51634,51635,51636,51637, -51638,51639,51640,51641,51642,51643,51644,51645,51646,51647,51648,51649, -51650,51651,51652,51653,51654,51655,51656,51657,51658,51659,51660,51661, -51662,51663,51664,51665,51666,51667,51668,51669,51670,51671,51672,51673, -51674,51675,51676,51677,51678,51679,51680,51681,51682,51683,51684,51685, -51686,51687,51688,51689,51690,51691,51692,51693,51694,51695,51696,51697, -51698,51699,51700,51701,51702,51703,51704,51705,51706,51707,51708,51709, -51710,51711,51712,51713,51714,51715,51716,51717,51718,51719,51720,51721, -51722,51723,51724,51725,51726,51727,51728,51729,51730,51731,51732,51733, -51734,51735,51736,51737,51738,51739,51740,51741,51742,51743,51744,51745, -51746,51747,51748,51749,51750,51751,51752,51753,51754,51755,51756,51757, -51758,51759,51760,51761,51762,51763,51764,51765,51766,51767,51768,51769, -51770,51771,51772,51773,51774,51775,51776,51777,51778,51779,51780,51781, -51782,51783,51784,51785,51786,51787,51788,51789,51790,51791,51792,51793, -51794,51795,51796,51797,51798,51799,51800,51801,51802,51803,51804,51805, -51806,51807,51808,51809,51810,51811,51812,51813,51814,51815,51816,51817, -51818,51819,51820,51821,51822,51823,51824,51825,51826,51827,51828,51829, -51830,51831,51832,51833,51834,51835,51836,51837,51838,51839,51840,51841, -51842,51843,51844,51845,51846,51847,51848,51849,51850,51851,51852,51853, -51854,51855,51856,51857,51858,51859,51860,51861,51862,51863,51864,51865, -51866,51867,51868,51869,51870,51871,51872,51873,51874,51875,51876,51877, -51878,51879,51880,51881,51882,51883,51884,51885,51886,51887,51888,51889, -51890,51891,51892,51893,51894,51895,51896,51897,51898,51899,51900,51901, -51902,51903,51904,51905,51906,51907,51908,51909,51910,51911,51912,51913, -51914,51915,51916,51917,51918,51919,51920,51921,51922,51923,51924,51925, -51926,51927,51928,51929,51930,51931,51932,51933,51934,51935,51936,51937, -51938,51939,51940,51941,51942,51943,51944,51945,51946,51947,51948,51949, -51950,51951,51952,51953,51954,51955,51956,51957,51958,51959,51960,51961, -51962,51963,51964,51965,51966,51967,51968,51969,51970,51971,51972,51973, -51974,51975,51976,51977,51978,51979,51980,51981,51982,51983,51984,51985, -51986,51987,51988,51989,51990,51991,51992,51993,51994,51995,51996,51997, -51998,51999,52000,52001,52002,52003,52004,52005,52006,52007,52008,52009, -52010,52011,52012,52013,52014,52015,52016,52017,52018,52019,52020,52021, -52022,52023,52024,52025,52026,52027,52028,52029,52030,52031,52032,52033, -52034,52035,52036,52037,52038,52039,52040,52041,52042,52043,52044,52045, -52046,52047,52048,52049,52050,52051,52052,52053,52054,52055,52056,52057, -52058,52059,52060,52061,52062,52063,52064,52065,52066,52067,52068,52069, -52070,52071,52072,52073,52074,52075,52076,52077,52078,52079,52080,52081, -52082,52083,52084,52085,52086,52087,52088,52089,52090,52091,52092,52093, -52094,52095,52096,52097,52098,52099,52100,52101,52102,52103,52104,52105, -52106,52107,52108,52109,52110,52111,52112,52113,52114,52115,52116,52117, -52118,52119,52120,52121,52122,52123,52124,52125,52126,52127,52128,52129, -52130,52131,52132,52133,52134,52135,52136,52137,52138,52139,52140,52141, -52142,52143,52144,52145,52146,52147,52148,52149,52150,52151,52152,52153, -52154,52155,52156,52157,52158,52159,52160,52161,52162,52163,52164,52165, -52166,52167,52168,52169,52170,52171,52172,52173,52174,52175,52176,52177, -52178,52179,52180,52181,52182,52183,52184,52185,52186,52187,52188,52189, -52190,52191,52192,52193,52194,52195,52196,52197,52198,52199,52200,52201, -52202,52203,52204,52205,52206,52207,52208,52209,52210,52211,52212,52213, -52214,52215,52216,52217,52218,52219,52220,52221,52222,52223,52224,52225, -52226,52227,52228,52229,52230,52231,52232,52233,52234,52235,52236,52237, -52238,52239,52240,52241,52242,52243,52244,52245,52246,52247,52248,52249, -52250,52251,52252,52253,52254,52255,52256,52257,52258,52259,52260,52261, -52262,52263,52264,52265,52266,52267,52268,52269,52270,52271,52272,52273, -52274,52275,52276,52277,52278,52279,52280,52281,52282,52283,52284,52285, -52286,52287,52288,52289,52290,52291,52292,52293,52294,52295,52296,52297, -52298,52299,52300,52301,52302,52303,52304,52305,52306,52307,52308,52309, -52310,52311,52312,52313,52314,52315,52316,52317,52318,52319,52320,52321, -52322,52323,52324,52325,52326,52327,52328,52329,52330,52331,52332,52333, -52334,52335,52336,52337,52338,52339,52340,52341,52342,52343,52344,52345, -52346,52347,52348,52349,52350,52351,52352,52353,52354,52355,52356,52357, -52358,52359,52360,52361,52362,52363,52364,52365,52366,52367,52368,52369, -52370,52371,52372,52373,52374,52375,52376,52377,52378,52379,52380,52381, -52382,52383,52384,52385,52386,52387,52388,52389,52390,52391,52392,52393, -52394,52395,52396,52397,52398,52399,52400,52401,52402,52403,52404,52405, -52406,52407,52408,52409,52410,52411,52412,52413,52414,52415,52416,52417, -52418,52419,52420,52421,52422,52423,52424,52425,52426,52427,52428,52429, -52430,52431,52432,52433,52434,52435,52436,52437,52438,52439,52440,52441, -52442,52443,52444,52445,52446,52447,52448,52449,52450,52451,52452,52453, -52454,52455,52456,52457,52458,52459,52460,52461,52462,52463,52464,52465, -52466,52467,52468,52469,52470,52471,52472,52473,52474,52475,52476,52477, -52478,52479,52480,52481,52482,52483,52484,52485,52486,52487,52488,52489, -52490,52491,52492,52493,52494,52495,52496,52497,52498,52499,52500,52501, -52502,52503,52504,52505,52506,52507,52508,52509,52510,52511,52512,52513, -52514,52515,52516,52517,52518,52519,52520,52521,52522,52523,52524,52525, -52526,52527,52528,52529,52530,52531,52532,52533,52534,52535,52536,52537, -52538,52539,52540,52541,52542,52543,52544,52545,52546,52547,52548,52549, -52550,52551,52552,52553,52554,52555,52556,52557,52558,52559,52560,52561, -52562,52563,52564,52565,52566,52567,52568,52569,52570,52571,52572,52573, -52574,52575,52576,52577,52578,52579,52580,52581,52582,52583,52584,52585, -52586,52587,52588,52589,52590,52591,52592,52593,52594,52595,52596,52597, -52598,52599,52600,52601,52602,52603,52604,52605,52606,52607,52608,52609, -52610,52611,52612,52613,52614,52615,52616,52617,52618,52619,52620,52621, -52622,52623,52624,52625,52626,52627,52628,52629,52630,52631,52632,52633, -52634,52635,52636,52637,52638,52639,52640,52641,52642,52643,52644,52645, -52646,52647,52648,52649,52650,52651,52652,52653,52654,52655,52656,52657, -52658,52659,52660,52661,52662,52663,52664,52665,52666,52667,52668,52669, -52670,52671,52672,52673,52674,52675,52676,52677,52678,52679,52680,52681, -52682,52683,52684,52685,52686,52687,52688,52689,52690,52691,52692,52693, -52694,52695,52696,52697,52698,52699,52700,52701,52702,52703,52704,52705, -52706,52707,52708,52709,52710,52711,52712,52713,52714,52715,52716,52717, -52718,52719,52720,52721,52722,52723,52724,52725,52726,52727,52728,52729, -52730,52731,52732,52733,52734,52735,52736,52737,52738,52739,52740,52741, -52742,52743,52744,52745,52746,52747,52748,52749,52750,52751,52752,52753, -52754,52755,52756,52757,52758,52759,52760,52761,52762,52763,52764,52765, -52766,52767,52768,52769,52770,52771,52772,52773,52774,52775,52776,52777, -52778,52779,52780,52781,52782,52783,52784,52785,52786,52787,52788,52789, -52790,52791,52792,52793,52794,52795,52796,52797,52798,52799,52800,52801, -52802,52803,52804,52805,52806,52807,52808,52809,52810,52811,52812,52813, -52814,52815,52816,52817,52818,52819,52820,52821,52822,52823,52824,52825, -52826,52827,52828,52829,52830,52831,52832,52833,52834,52835,52836,52837, -52838,52839,52840,52841,52842,52843,52844,52845,52846,52847,52848,52849, -52850,52851,52852,52853,52854,52855,52856,52857,52858,52859,52860,52861, -52862,52863,52864,52865,52866,52867,52868,52869,52870,52871,52872,52873, -52874,52875,52876,52877,52878,52879,52880,52881,52882,52883,52884,52885, -52886,52887,52888,52889,52890,52891,52892,52893,52894,52895,52896,52897, -52898,52899,52900,52901,52902,52903,52904,52905,52906,52907,52908,52909, -52910,52911,52912,52913,52914,52915,52916,52917,52918,52919,52920,52921, -52922,52923,52924,52925,52926,52927,52928,52929,52930,52931,52932,52933, -52934,52935,52936,52937,52938,52939,52940,52941,52942,52943,52944,52945, -52946,52947,52948,52949,52950,52951,52952,52953,52954,52955,52956,52957, -52958,52959,52960,52961,52962,52963,52964,52965,52966,52967,52968,52969, -52970,52971,52972,52973,52974,52975,52976,52977,52978,52979,52980,52981, -52982,52983,52984,52985,52986,52987,52988,52989,52990,52991,52992,52993, -52994,52995,52996,52997,52998,52999,53000,53001,53002,53003,53004,53005, -53006,53007,53008,53009,53010,53011,53012,53013,53014,53015,53016,53017, -53018,53019,53020,53021,53022,53023,53024,53025,53026,53027,53028,53029, -53030,53031,53032,53033,53034,53035,53036,53037,53038,53039,53040,53041, -53042,53043,53044,53045,53046,53047,53048,53049,53050,53051,53052,53053, -53054,53055,53056,53057,53058,53059,53060,53061,53062,53063,53064,53065, -53066,53067,53068,53069,53070,53071,53072,53073,53074,53075,53076,53077, -53078,53079,53080,53081,53082,53083,53084,53085,53086,53087,53088,53089, -53090,53091,53092,53093,53094,53095,53096,53097,53098,53099,53100,53101, -53102,53103,53104,53105,53106,53107,53108,53109,53110,53111,53112,53113, -53114,53115,53116,53117,53118,53119,53120,53121,53122,53123,53124,53125, -53126,53127,53128,53129,53130,53131,53132,53133,53134,53135,53136,53137, -53138,53139,53140,53141,53142,53143,53144,53145,53146,53147,53148,53149, -53150,53151,53152,53153,53154,53155,53156,53157,53158,53159,53160,53161, -53162,53163,53164,53165,53166,53167,53168,53169,53170,53171,53172,53173, -53174,53175,53176,53177,53178,53179,53180,53181,53182,53183,53184,53185, -53186,53187,53188,53189,53190,53191,53192,53193,53194,53195,53196,53197, -53198,53199,53200,53201,53202,53203,53204,53205,53206,53207,53208,53209, -53210,53211,53212,53213,53214,53215,53216,53217,53218,53219,53220,53221, -53222,53223,53224,53225,53226,53227,53228,53229,53230,53231,53232,53233, -53234,53235,53236,53237,53238,53239,53240,53241,53242,53243,53244,53245, -53246,53247,53248,53249,53250,53251,53252,53253,53254,53255,53256,53257, -53258,53259,53260,53261,53262,53263,53264,53265,53266,53267,53268,53269, -53270,53271,53272,53273,53274,53275,53276,53277,53278,53279,53280,53281, -53282,53283,53284,53285,53286,53287,53288,53289,53290,53291,53292,53293, -53294,53295,53296,53297,53298,53299,53300,53301,53302,53303,53304,53305, -53306,53307,53308,53309,53310,53311,53312,53313,53314,53315,53316,53317, -53318,53319,53320,53321,53322,53323,53324,53325,53326,53327,53328,53329, -53330,53331,53332,53333,53334,53335,53336,53337,53338,53339,53340,53341, -53342,53343,53344,53345,53346,53347,53348,53349,53350,53351,53352,53353, -53354,53355,53356,53357,53358,53359,53360,53361,53362,53363,53364,53365, -53366,53367,53368,53369,53370,53371,53372,53373,53374,53375,53376,53377, -53378,53379,53380,53381,53382,53383,53384,53385,53386,53387,53388,53389, -53390,53391,53392,53393,53394,53395,53396,53397,53398,53399,53400,53401, -53402,53403,53404,53405,53406,53407,53408,53409,53410,53411,53412,53413, -53414,53415,53416,53417,53418,53419,53420,53421,53422,53423,53424,53425, -53426,53427,53428,53429,53430,53431,53432,53433,53434,53435,53436,53437, -53438,53439,53440,53441,53442,53443,53444,53445,53446,53447,53448,53449, -53450,53451,53452,53453,53454,53455,53456,53457,53458,53459,53460,53461, -53462,53463,53464,53465,53466,53467,53468,53469,53470,53471,53472,53473, -53474,53475,53476,53477,53478,53479,53480,53481,53482,53483,53484,53485, -53486,53487,53488,53489,53490,53491,53492,53493,53494,53495,53496,53497, -53498,53499,53500,53501,53502,53503,53504,53505,53506,53507,53508,53509, -53510,53511,53512,53513,53514,53515,53516,53517,53518,53519,53520,53521, -53522,53523,53524,53525,53526,53527,53528,53529,53530,53531,53532,53533, -53534,53535,53536,53537,53538,53539,53540,53541,53542,53543,53544,53545, -53546,53547,53548,53549,53550,53551,53552,53553,53554,53555,53556,53557, -53558,53559,53560,53561,53562,53563,53564,53565,53566,53567,53568,53569, -53570,53571,53572,53573,53574,53575,53576,53577,53578,53579,53580,53581, -53582,53583,53584,53585,53586,53587,53588,53589,53590,53591,53592,53593, -53594,53595,53596,53597,53598,53599,53600,53601,53602,53603,53604,53605, -53606,53607,53608,53609,53610,53611,53612,53613,53614,53615,53616,53617, -53618,53619,53620,53621,53622,53623,53624,53625,53626,53627,53628,53629, -53630,53631,53632,53633,53634,53635,53636,53637,53638,53639,53640,53641, -53642,53643,53644,53645,53646,53647,53648,53649,53650,53651,53652,53653, -53654,53655,53656,53657,53658,53659,53660,53661,53662,53663,53664,53665, -53666,53667,53668,53669,53670,53671,53672,53673,53674,53675,53676,53677, -53678,53679,53680,53681,53682,53683,53684,53685,53686,53687,53688,53689, -53690,53691,53692,53693,53694,53695,53696,53697,53698,53699,53700,53701, -53702,53703,53704,53705,53706,53707,53708,53709,53710,53711,53712,53713, -53714,53715,53716,53717,53718,53719,53720,53721,53722,53723,53724,53725, -53726,53727,53728,53729,53730,53731,53732,53733,53734,53735,53736,53737, -53738,53739,53740,53741,53742,53743,53744,53745,53746,53747,53748,53749, -53750,53751,53752,53753,53754,53755,53756,53757,53758,53759,53760,53761, -53762,53763,53764,53765,53766,53767,53768,53769,53770,53771,53772,53773, -53774,53775,53776,53777,53778,53779,53780,53781,53782,53783,53784,53785, -53786,53787,53788,53789,53790,53791,53792,53793,53794,53795,53796,53797, -53798,53799,53800,53801,53802,53803,53804,53805,53806,53807,53808,53809, -53810,53811,53812,53813,53814,53815,53816,53817,53818,53819,53820,53821, -53822,53823,53824,53825,53826,53827,53828,53829,53830,53831,53832,53833, -53834,53835,53836,53837,53838,53839,53840,53841,53842,53843,53844,53845, -53846,53847,53848,53849,53850,53851,53852,53853,53854,53855,53856,53857, -53858,53859,53860,53861,53862,53863,53864,53865,53866,53867,53868,53869, -53870,53871,53872,53873,53874,53875,53876,53877,53878,53879,53880,53881, -53882,53883,53884,53885,53886,53887,53888,53889,53890,53891,53892,53893, -53894,53895,53896,53897,53898,53899,53900,53901,53902,53903,53904,53905, -53906,53907,53908,53909,53910,53911,53912,53913,53914,53915,53916,53917, -53918,53919,53920,53921,53922,53923,53924,53925,53926,53927,53928,53929, -53930,53931,53932,53933,53934,53935,53936,53937,53938,53939,53940,53941, -53942,53943,53944,53945,53946,53947,53948,53949,53950,53951,53952,53953, -53954,53955,53956,53957,53958,53959,53960,53961,53962,53963,53964,53965, -53966,53967,53968,53969,53970,53971,53972,53973,53974,53975,53976,53977, -53978,53979,53980,53981,53982,53983,53984,53985,53986,53987,53988,53989, -53990,53991,53992,53993,53994,53995,53996,53997,53998,53999,54000,54001, -54002,54003,54004,54005,54006,54007,54008,54009,54010,54011,54012,54013, -54014,54015,54016,54017,54018,54019,54020,54021,54022,54023,54024,54025, -54026,54027,54028,54029,54030,54031,54032,54033,54034,54035,54036,54037, -54038,54039,54040,54041,54042,54043,54044,54045,54046,54047,54048,54049, -54050,54051,54052,54053,54054,54055,54056,54057,54058,54059,54060,54061, -54062,54063,54064,54065,54066,54067,54068,54069,54070,54071,54072,54073, -54074,54075,54076,54077,54078,54079,54080,54081,54082,54083,54084,54085, -54086,54087,54088,54089,54090,54091,54092,54093,54094,54095,54096,54097, -54098,54099,54100,54101,54102,54103,54104,54105,54106,54107,54108,54109, -54110,54111,54112,54113,54114,54115,54116,54117,54118,54119,54120,54121, -54122,54123,54124,54125,54126,54127,54128,54129,54130,54131,54132,54133, -54134,54135,54136,54137,54138,54139,54140,54141,54142,54143,54144,54145, -54146,54147,54148,54149,54150,54151,54152,54153,54154,54155,54156,54157, -54158,54159,54160,54161,54162,54163,54164,54165,54166,54167,54168,54169, -54170,54171,54172,54173,54174,54175,54176,54177,54178,54179,54180,54181, -54182,54183,54184,54185,54186,54187,54188,54189,54190,54191,54192,54193, -54194,54195,54196,54197,54198,54199,54200,54201,54202,54203,54204,54205, -54206,54207,54208,54209,54210,54211,54212,54213,54214,54215,54216,54217, -54218,54219,54220,54221,54222,54223,54224,54225,54226,54227,54228,54229, -54230,54231,54232,54233,54234,54235,54236,54237,54238,54239,54240,54241, -54242,54243,54244,54245,54246,54247,54248,54249,54250,54251,54252,54253, -54254,54255,54256,54257,54258,54259,54260,54261,54262,54263,54264,54265, -54266,54267,54268,54269,54270,54271,54272,54273,54274,54275,54276,54277, -54278,54279,54280,54281,54282,54283,54284,54285,54286,54287,54288,54289, -54290,54291,54292,54293,54294,54295,54296,54297,54298,54299,54300,54301, -54302,54303,54304,54305,54306,54307,54308,54309,54310,54311,54312,54313, -54314,54315,54316,54317,54318,54319,54320,54321,54322,54323,54324,54325, -54326,54327,54328,54329,54330,54331,54332,54333,54334,54335,54336,54337, -54338,54339,54340,54341,54342,54343,54344,54345,54346,54347,54348,54349, -54350,54351,54352,54353,54354,54355,54356,54357,54358,54359,54360,54361, -54362,54363,54364,54365,54366,54367,54368,54369,54370,54371,54372,54373, -54374,54375,54376,54377,54378,54379,54380,54381,54382,54383,54384,54385, -54386,54387,54388,54389,54390,54391,54392,54393,54394,54395,54396,54397, -54398,54399,54400,54401,54402,54403,54404,54405,54406,54407,54408,54409, -54410,54411,54412,54413,54414,54415,54416,54417,54418,54419,54420,54421, -54422,54423,54424,54425,54426,54427,54428,54429,54430,54431,54432,54433, -54434,54435,54436,54437,54438,54439,54440,54441,54442,54443,54444,54445, -54446,54447,54448,54449,54450,54451,54452,54453,54454,54455,54456,54457, -54458,54459,54460,54461,54462,54463,54464,54465,54466,54467,54468,54469, -54470,54471,54472,54473,54474,54475,54476,54477,54478,54479,54480,54481, -54482,54483,54484,54485,54486,54487,54488,54489,54490,54491,54492,54493, -54494,54495,54496,54497,54498,54499,54500,54501,54502,54503,54504,54505, -54506,54507,54508,54509,54510,54511,54512,54513,54514,54515,54516,54517, -54518,54519,54520,54521,54522,54523,54524,54525,54526,54527,54528,54529, -54530,54531,54532,54533,54534,54535,54536,54537,54538,54539,54540,54541, -54542,54543,54544,54545,54546,54547,54548,54549,54550,54551,54552,54553, -54554,54555,54556,54557,54558,54559,54560,54561,54562,54563,54564,54565, -54566,54567,54568,54569,54570,54571,54572,54573,54574,54575,54576,54577, -54578,54579,54580,54581,54582,54583,54584,54585,54586,54587,54588,54589, -54590,54591,54592,54593,54594,54595,54596,54597,54598,54599,54600,54601, -54602,54603,54604,54605,54606,54607,54608,54609,54610,54611,54612,54613, -54614,54615,54616,54617,54618,54619,54620,54621,54622,54623,54624,54625, -54626,54627,54628,54629,54630,54631,54632,54633,54634,54635,54636,54637, -54638,54639,54640,54641,54642,54643,54644,54645,54646,54647,54648,54649, -54650,54651,54652,54653,54654,54655,54656,54657,54658,54659,54660,54661, -54662,54663,54664,54665,54666,54667,54668,54669,54670,54671,54672,54673, -54674,54675,54676,54677,54678,54679,54680,54681,54682,54683,54684,54685, -54686,54687,54688,54689,54690,54691,54692,54693,54694,54695,54696,54697, -54698,54699,54700,54701,54702,54703,54704,54705,54706,54707,54708,54709, -54710,54711,54712,54713,54714,54715,54716,54717,54718,54719,54720,54721, -54722,54723,54724,54725,54726,54727,54728,54729,54730,54731,54732,54733, -54734,54735,54736,54737,54738,54739,54740,54741,54742,54743,54744,54745, -54746,54747,54748,54749,54750,54751,54752,54753,54754,54755,54756,54757, -54758,54759,54760,54761,54762,54763,54764,54765,54766,54767,54768,54769, -54770,54771,54772,54773,54774,54775,54776,54777,54778,54779,54780,54781, -54782,54783,54784,54785,54786,54787,54788,54789,54790,54791,54792,54793, -54794,54795,54796,54797,54798,54799,54800,54801,54802,54803,54804,54805, -54806,54807,54808,54809,54810,54811,54812,54813,54814,54815,54816,54817, -54818,54819,54820,54821,54822,54823,54824,54825,54826,54827,54828,54829, -54830,54831,54832,54833,54834,54835,54836,54837,54838,54839,54840,54841, -54842,54843,54844,54845,54846,54847,54848,54849,54850,54851,54852,54853, -54854,54855,54856,54857,54858,54859,54860,54861,54862,54863,54864,54865, -54866,54867,54868,54869,54870,54871,54872,54873,54874,54875,54876,54877, -54878,54879,54880,54881,54882,54883,54884,54885,54886,54887,54888,54889, -54890,54891,54892,54893,54894,54895,54896,54897,54898,54899,54900,54901, -54902,54903,54904,54905,54906,54907,54908,54909,54910,54911,54912,54913, -54914,54915,54916,54917,54918,54919,54920,54921,54922,54923,54924,54925, -54926,54927,54928,54929,54930,54931,54932,54933,54934,54935,54936,54937, -54938,54939,54940,54941,54942,54943,54944,54945,54946,54947,54948,54949, -54950,54951,54952,54953,54954,54955,54956,54957,54958,54959,54960,54961, -54962,54963,54964,54965,54966,54967,54968,54969,54970,54971,54972,54973, -54974,54975,54976,54977,54978,54979,54980,54981,54982,54983,54984,54985, -54986,54987,54988,54989,54990,54991,54992,54993,54994,54995,54996,54997, -54998,54999,55000,55001,55002,55003,55004,55005,55006,55007,55008,55009, -55010,55011,55012,55013,55014,55015,55016,55017,55018,55019,55020,55021, -55022,55023,55024,55025,55026,55027,55028,55029,55030,55031,55032,55033, -55034,55035,55036,55037,55038,55039,55040,55041,55042,55043,55044,55045, -55046,55047,55048,55049,55050,55051,55052,55053,55054,55055,55056,55057, -55058,55059,55060,55061,55062,55063,55064,55065,55066,55067,55068,55069, -55070,55071,55072,55073,55074,55075,55076,55077,55078,55079,55080,55081, -55082,55083,55084,55085,55086,55087,55088,55089,55090,55091,55092,55093, -55094,55095,55096,55097,55098,55099,55100,55101,55102,55103,55104,55105, -55106,55107,55108,55109,55110,55111,55112,55113,55114,55115,55116,55117, -55118,55119,55120,55121,55122,55123,55124,55125,55126,55127,55128,55129, -55130,55131,55132,55133,55134,55135,55136,55137,55138,55139,55140,55141, -55142,55143,55144,55145,55146,55147,55148,55149,55150,55151,55152,55153, -55154,55155,55156,55157,55158,55159,55160,55161,55162,55163,55164,55165, -55166,55167,55168,55169,55170,55171,55172,55173,55174,55175,55176,55177, -55178,55179,55180,55181,55182,55183,55184,55185,55186,55187,55188,55189, -55190,55191,55192,55193,55194,55195,55196,55197,55198,55199,55200,55201, -55202,55203,55204,55205,55206,55207,55208,55209,55210,55211,55212,55213, -55214,55215,55216,55217,55218,55219,55220,55221,55222,55223,55224,55225, -55226,55227,55228,55229,55230,55231,55232,55233,55234,55235,55236,55237, -55238,55239,55240,55241,55242,55243,55244,55245,55246,55247,55248,55249, -55250,55251,55252,55253,55254,55255,55256,55257,55258,55259,55260,55261, -55262,55263,55264,55265,55266,55267,55268,55269,55270,55271,55272,55273, -55274,55275,55276,55277,55278,55279,55280,55281,55282,55283,55284,55285, -55286,55287,55288,55289,55290,55291,55292,55293,55294,55295,55296,55297, -55298,55299,55300,55301,55302,55303,55304,55305,55306,55307,55308,55309, -55310,55311,55312,55313,55314,55315,55316,55317,55318,55319,55320,55321, -55322,55323,55324,55325,55326,55327,55328,55329,55330,55331,55332,55333, -55334,55335,55336,55337,55338,55339,55340,55341,55342,55343,55344,55345, -55346,55347,55348,55349,55350,55351,55352,55353,55354,55355,55356,55357, -55358,55359,55360,55361,55362,55363,55364,55365,55366,55367,55368,55369, -55370,55371,55372,55373,55374,55375,55376,55377,55378,55379,55380,55381, -55382,55383,55384,55385,55386,55387,55388,55389,55390,55391,55392,55393, -55394,55395,55396,55397,55398,55399,55400,55401,55402,55403,55404,55405, -55406,55407,55408,55409,55410,55411,55412,55413,55414,55415,55416,55417, -55418,55419,55420,55421,55422,55423,55424,55425,55426,55427,55428,55429, -55430,55431,55432,55433,55434,55435,55436,55437,55438,55439,55440,55441, -55442,55443,55444,55445,55446,55447,55448,55449,55450,55451,55452,55453, -55454,55455,55456,55457,55458,55459,55460,55461,55462,55463,55464,55465, -55466,55467,55468,55469,55470,55471,55472,55473,55474,55475,55476,55477, -55478,55479,55480,55481,55482,55483,55484,55485,55486,55487,55488,55489, -55490,55491,55492,55493,55494,55495,55496,55497,55498,55499,55500,55501, -55502,55503,55504,55505,55506,55507,55508,55509,55510,55511,55512,55513, -55514,55515,55516,55517,55518,55519,55520,55521,55522,55523,55524,55525, -55526,55527,55528,55529,55530,55531,55532,55533,55534,55535,55536,55537, -55538,55539,55540,55541,55542,55543,55544,55545,55546,55547,55548,55549, -55550,55551,55552,55553,55554,55555,55556,55557,55558,55559,55560,55561, -55562,55563,55564,55565,55566,55567,55568,55569,55570,55571,55572,55573, -55574,55575,55576,55577,55578,55579,55580,55581,55582,55583,55584,55585, -55586,55587,55588,55589,55590,55591,55592,55593,55594,55595,55596,55597, -55598,55599,55600,55601,55602,55603,55604,55605,55606,55607,55608,55609, -55610,55611,55612,55613,55614,55615,55616,55617,55618,55619,55620,55621, -55622,55623,55624,55625,55626,55627,55628,55629,55630,55631,55632,55633, -55634,55635,55636,55637,55638,55639,55640,55641,55642,55643,55644,55645, -55646,55647,55648,55649,55650,55651,55652,55653,55654,55655,55656,55657, -55658,55659,55660,55661,55662,55663,55664,55665,55666,55667,55668,55669, -55670,55671,55672,55673,55674,55675,55676,55677,55678,55679,55680,55681, -55682,55683,55684,55685,55686,55687,55688,55689,55690,55691,55692,55693, -55694,55695,55696,55697,55698,55699,55700,55701,55702,55703,55704,55705, -55706,55707,55708,55709,55710,55711,55712,55713,55714,55715,55716,55717, -55718,55719,55720,55721,55722,55723,55724,55725,55726,55727,55728,55729, -55730,55731,55732,55733,55734,55735,55736,55737,55738,55739,55740,55741, -55742,55743,55744,55745,55746,55747,55748,55749,55750,55751,55752,55753, -55754,55755,55756,55757,55758,55759,55760,55761,55762,55763,55764,55765, -55766,55767,55768,55769,55770,55771,55772,55773,55774,55775,55776,55777, -55778,55779,55780,55781,55782,55783,55784,55785,55786,55787,55788,55789, -55790,55791,55792,55793,55794,55795,55796,55797,55798,55799,55800,55801, -55802,55803,55804,55805,55806,55807,55808,55809,55810,55811,55812,55813, -55814,55815,55816,55817,55818,55819,55820,55821,55822,55823,55824,55825, -55826,55827,55828,55829,55830,55831,55832,55833,55834,55835,55836,55837, -55838,55839,55840,55841,55842,55843,55844,55845,55846,55847,55848,55849, -55850,55851,55852,55853,55854,55855,55856,55857,55858,55859,55860,55861, -55862,55863,55864,55865,55866,55867,55868,55869,55870,55871,55872,55873, -55874,55875,55876,55877,55878,55879,55880,55881,55882,55883,55884,55885, -55886,55887,55888,55889,55890,55891,55892,55893,55894,55895,55896,55897, -55898,55899,55900,55901,55902,55903,55904,55905,55906,55907,55908,55909, -55910,55911,55912,55913,55914,55915,55916,55917,55918,55919,55920,55921, -55922,55923,55924,55925,55926,55927,55928,55929,55930,55931,55932,55933, -55934,55935,55936,55937,55938,55939,55940,55941,55942,55943,55944,55945, -55946,55947,55948,55949,55950,55951,55952,55953,55954,55955,55956,55957, -55958,55959,55960,55961,55962,55963,55964,55965,55966,55967,55968,55969, -55970,55971,55972,55973,55974,55975,55976,55977,55978,55979,55980,55981, -55982,55983,55984,55985,55986,55987,55988,55989,55990,55991,55992,55993, -55994,55995,55996,55997,55998,55999,56000,56001,56002,56003,56004,56005, -56006,56007,56008,56009,56010,56011,56012,56013,56014,56015,56016,56017, -56018,56019,56020,56021,56022,56023,56024,56025,56026,56027,56028,56029, -56030,56031,56032,56033,56034,56035,56036,56037,56038,56039,56040,56041, -56042,56043,56044,56045,56046,56047,56048,56049,56050,56051,56052,56053, -56054,56055,56056,56057,56058,56059,56060,56061,56062,56063,56064,56065, -56066,56067,56068,56069,56070,56071,56072,56073,56074,56075,56076,56077, -56078,56079,56080,56081,56082,56083,56084,56085,56086,56087,56088,56089, -56090,56091,56092,56093,56094,56095,56096,56097,56098,56099,56100,56101, -56102,56103,56104,56105,56106,56107,56108,56109,56110,56111,56112,56113, -56114,56115,56116,56117,56118,56119,56120,56121,56122,56123,56124,56125, -56126,56127,56128,56129,56130,56131,56132,56133,56134,56135,56136,56137, -56138,56139,56140,56141,56142,56143,56144,56145,56146,56147,56148,56149, -56150,56151,56152,56153,56154,56155,56156,56157,56158,56159,56160,56161, -56162,56163,56164,56165,56166,56167,56168,56169,56170,56171,56172,56173, -56174,56175,56176,56177,56178,56179,56180,56181,56182,56183,56184,56185, -56186,56187,56188,56189,56190,56191,56192,56193,56194,56195,56196,56197, -56198,56199,56200,56201,56202,56203,56204,56205,56206,56207,56208,56209, -56210,56211,56212,56213,56214,56215,56216,56217,56218,56219,56220,56221, -56222,56223,56224,56225,56226,56227,56228,56229,56230,56231,56232,56233, -56234,56235,56236,56237,56238,56239,56240,56241,56242,56243,56244,56245, -56246,56247,56248,56249,56250,56251,56252,56253,56254,56255,56256,56257, -56258,56259,56260,56261,56262,56263,56264,56265,56266,56267,56268,56269, -56270,56271,56272,56273,56274,56275,56276,56277,56278,56279,56280,56281, -56282,56283,56284,56285,56286,56287,56288,56289,56290,56291,56292,56293, -56294,56295,56296,56297,56298,56299,56300,56301,56302,56303,56304,56305, -56306,56307,56308,56309,56310,56311,56312,56313,56314,56315,56316,56317, -56318,56319,56320,56321,56322,56323,56324,56325,56326,56327,56328,56329, -56330,56331,56332,56333,56334,56335,56336,56337,56338,56339,56340,56341, -56342,56343,56344,56345,56346,56347,56348,56349,56350,56351,56352,56353, -56354,56355,56356,56357,56358,56359,56360,56361,56362,56363,56364,56365, -56366,56367,56368,56369,56370,56371,56372,56373,56374,56375,56376,56377, -56378,56379,56380,56381,56382,56383,56384,56385,56386,56387,56388,56389, -56390,56391,56392,56393,56394,56395,56396,56397,56398,56399,56400,56401, -56402,56403,56404,56405,56406,56407,56408,56409,56410,56411,56412,56413, -56414,56415,56416,56417,56418,56419,56420,56421,56422,56423,56424,56425, -56426,56427,56428,56429,56430,56431,56432,56433,56434,56435,56436,56437, -56438,56439,56440,56441,56442,56443,56444,56445,56446,56447,56448,56449, -56450,56451,56452,56453,56454,56455,56456,56457,56458,56459,56460,56461, -56462,56463,56464,56465,56466,56467,56468,56469,56470,56471,56472,56473, -56474,56475,56476,56477,56478,56479,56480,56481,56482,56483,56484,56485, -56486,56487,56488,56489,56490,56491,56492,56493,56494,56495,56496,56497, -56498,56499,56500,56501,56502,56503,56504,56505,56506,56507,56508,56509, -56510,56511,56512,56513,56514,56515,56516,56517,56518,56519,56520,56521, -56522,56523,56524,56525,56526,56527,56528,56529,56530,56531,56532,56533, -56534,56535,56536,56537,56538,56539,56540,56541,56542,56543,56544,56545, -56546,56547,56548,56549,56550,56551,56552,56553,56554,56555,56556,56557, -56558,56559,56560,56561,56562,56563,56564,56565,56566,56567,56568,56569, -56570,56571,56572,56573,56574,56575,56576,56577,56578,56579,56580,56581, -56582,56583,56584,56585,56586,56587,56588,56589,56590,56591,56592,56593, -56594,56595,56596,56597,56598,56599,56600,56601,56602,56603,56604,56605, -56606,56607,56608,56609,56610,56611,56612,56613,56614,56615,56616,56617, -56618,56619,56620,56621,56622,56623,56624,56625,56626,56627,56628,56629, -56630,56631,56632,56633,56634,56635,56636,56637,56638,56639,56640,56641, -56642,56643,56644,56645,56646,56647,56648,56649,56650,56651,56652,56653, -56654,56655,56656,56657,56658,56659,56660,56661,56662,56663,56664,56665, -56666,56667,56668,56669,56670,56671,56672,56673,56674,56675,56676,56677, -56678,56679,56680,56681,56682,56683,56684,56685,56686,56687,56688,56689, -56690,56691,56692,56693,56694,56695,56696,56697,56698,56699,56700,56701, -56702,56703,56704,56705,56706,56707,56708,56709,56710,56711,56712,56713, -56714,56715,56716,56717,56718,56719,56720,56721,56722,56723,56724,56725, -56726,56727,56728,56729,56730,56731,56732,56733,56734,56735,56736,56737, -56738,56739,56740,56741,56742,56743,56744,56745,56746,56747,56748,56749, -56750,56751,56752,56753,56754,56755,56756,56757,56758,56759,56760,56761, -56762,56763,56764,56765,56766,56767,56768,56769,56770,56771,56772,56773, -56774,56775,56776,56777,56778,56779,56780,56781,56782,56783,56784,56785, -56786,56787,56788,56789,56790,56791,56792,56793,56794,56795,56796,56797, -56798,56799,56800,56801,56802,56803,56804,56805,56806,56807,56808,56809, -56810,56811,56812,56813,56814,56815,56816,56817,56818,56819,56820,56821, -56822,56823,56824,56825,56826,56827,56828,56829,56830,56831,56832,56833, -56834,56835,56836,56837,56838,56839,56840,56841,56842,56843,56844,56845, -56846,56847,56848,56849,56850,56851,56852,56853,56854,56855,56856,56857, -56858,56859,56860,56861,56862,56863,56864,56865,56866,56867,56868,56869, -56870,56871,56872,56873,56874,56875,56876,56877,56878,56879,56880,56881, -56882,56883,56884,56885,56886,56887,56888,56889,56890,56891,56892,56893, -56894,56895,56896,56897,56898,56899,56900,56901,56902,56903,56904,56905, -56906,56907,56908,56909,56910,56911,56912,56913,56914,56915,56916,56917, -56918,56919,56920,56921,56922,56923,56924,56925,56926,56927,56928,56929, -56930,56931,56932,56933,56934,56935,56936,56937,56938,56939,56940,56941, -56942,56943,56944,56945,56946,56947,56948,56949,56950,56951,56952,56953, -56954,56955,56956,56957,56958,56959,56960,56961,56962,56963,56964,56965, -56966,56967,56968,56969,56970,56971,56972,56973,56974,56975,56976,56977, -56978,56979,56980,56981,56982,56983,56984,56985,56986,56987,56988,56989, -56990,56991,56992,56993,56994,56995,56996,56997,56998,56999,57000,57001, -57002,57003,57004,57005,57006,57007,57008,57009,57010,57011,57012,57013, -57014,57015,57016,57017,57018,57019,57020,57021,57022,57023,57024,57025, -57026,57027,57028,57029,57030,57031,57032,57033,57034,57035,57036,57037, -57038,57039,57040,57041,57042,57043,57044,57045,57046,57047,57048,57049, -57050,57051,57052,57053,57054,57055,57056,57057,57058,57059,57060,57061, -57062,57063,57064,57065,57066,57067,57068,57069,57070,57071,57072,57073, -57074,57075,57076,57077,57078,57079,57080,57081,57082,57083,57084,57085, -57086,57087,57088,57089,57090,57091,57092,57093,57094,57095,57096,57097, -57098,57099,57100,57101,57102,57103,57104,57105,57106,57107,57108,57109, -57110,57111,57112,57113,57114,57115,57116,57117,57118,57119,57120,57121, -57122,57123,57124,57125,57126,57127,57128,57129,57130,57131,57132,57133, -57134,57135,57136,57137,57138,57139,57140,57141,57142,57143,57144,57145, -57146,57147,57148,57149,57150,57151,57152,57153,57154,57155,57156,57157, -57158,57159,57160,57161,57162,57163,57164,57165,57166,57167,57168,57169, -57170,57171,57172,57173,57174,57175,57176,57177,57178,57179,57180,57181, -57182,57183,57184,57185,57186,57187,57188,57189,57190,57191,57192,57193, -57194,57195,57196,57197,57198,57199,57200,57201,57202,57203,57204,57205, -57206,57207,57208,57209,57210,57211,57212,57213,57214,57215,57216,57217, -57218,57219,57220,57221,57222,57223,57224,57225,57226,57227,57228,57229, -57230,57231,57232,57233,57234,57235,57236,57237,57238,57239,57240,57241, -57242,57243,57244,57245,57246,57247,57248,57249,57250,57251,57252,57253, -57254,57255,57256,57257,57258,57259,57260,57261,57262,57263,57264,57265, -57266,57267,57268,57269,57270,57271,57272,57273,57274,57275,57276,57277, -57278,57279,57280,57281,57282,57283,57284,57285,57286,57287,57288,57289, -57290,57291,57292,57293,57294,57295,57296,57297,57298,57299,57300,57301, -57302,57303,57304,57305,57306,57307,57308,57309,57310,57311,57312,57313, -57314,57315,57316,57317,57318,57319,57320,57321,57322,57323,57324,57325, -57326,57327,57328,57329,57330,57331,57332,57333,57334,57335,57336,57337, -57338,57339,57340,57341,57342,57343,57344,57345,57346,57347,57348,57349, -57350,57351,57352,57353,57354,57355,57356,57357,57358,57359,57360,57361, -57362,57363,57364,57365,57366,57367,57368,57369,57370,57371,57372,57373, -57374,57375,57376,57377,57378,57379,57380,57381,57382,57383,57384,57385, -57386,57387,57388,57389,57390,57391,57392,57393,57394,57395,57396,57397, -57398,57399,57400,57401,57402,57403,57404,57405,57406,57407,57408,57409, -57410,57411,57412,57413,57414,57415,57416,57417,57418,57419,57420,57421, -57422,57423,57424,57425,57426,57427,57428,57429,57430,57431,57432,57433, -57434,57435,57436,57437,57438,57439,57440,57441,57442,57443,57444,57445, -57446,57447,57448,57449,57450,57451,57452,57453,57454,57455,57456,57457, -57458,57459,57460,57461,57462,57463,57464,57465,57466,57467,57468,57469, -57470,57471,57472,57473,57474,57475,57476,57477,57478,57479,57480,57481, -57482,57483,57484,57485,57486,57487,57488,57489,57490,57491,57492,57493, -57494,57495,57496,57497,57498,57499,57500,57501,57502,57503,57504,57505, -57506,57507,57508,57509,57510,57511,57512,57513,57514,57515,57516,57517, -57518,57519,57520,57521,57522,57523,57524,57525,57526,57527,57528,57529, -57530,57531,57532,57533,57534,57535,57536,57537,57538,57539,57540,57541, -57542,57543,57544,57545,57546,57547,57548,57549,57550,57551,57552,57553, -57554,57555,57556,57557,57558,57559,57560,57561,57562,57563,57564,57565, -57566,57567,57568,57569,57570,57571,57572,57573,57574,57575,57576,57577, -57578,57579,57580,57581,57582,57583,57584,57585,57586,57587,57588,57589, -57590,57591,57592,57593,57594,57595,57596,57597,57598,57599,57600,57601, -57602,57603,57604,57605,57606,57607,57608,57609,57610,57611,57612,57613, -57614,57615,57616,57617,57618,57619,57620,57621,57622,57623,57624,57625, -57626,57627,57628,57629,57630,57631,57632,57633,57634,57635,57636,57637, -57638,57639,57640,57641,57642,57643,57644,57645,57646,57647,57648,57649, -57650,57651,57652,57653,57654,57655,57656,57657,57658,57659,57660,57661, -57662,57663,57664,57665,57666,57667,57668,57669,57670,57671,57672,57673, -57674,57675,57676,57677,57678,57679,57680,57681,57682,57683,57684,57685, -57686,57687,57688,57689,57690,57691,57692,57693,57694,57695,57696,57697, -57698,57699,57700,57701,57702,57703,57704,57705,57706,57707,57708,57709, -57710,57711,57712,57713,57714,57715,57716,57717,57718,57719,57720,57721, -57722,57723,57724,57725,57726,57727,57728,57729,57730,57731,57732,57733, -57734,57735,57736,57737,57738,57739,57740,57741,57742,57743,57744,57745, -57746,57747,57748,57749,57750,57751,57752,57753,57754,57755,57756,57757, -57758,57759,57760,57761,57762,57763,57764,57765,57766,57767,57768,57769, -57770,57771,57772,57773,57774,57775,57776,57777,57778,57779,57780,57781, -57782,57783,57784,57785,57786,57787,57788,57789,57790,57791,57792,57793, -57794,57795,57796,57797,57798,57799,57800,57801,57802,57803,57804,57805, -57806,57807,57808,57809,57810,57811,57812,57813,57814,57815,57816,57817, -57818,57819,57820,57821,57822,57823,57824,57825,57826,57827,57828,57829, -57830,57831,57832,57833,57834,57835,57836,57837,57838,57839,57840,57841, -57842,57843,57844,57845,57846,57847,57848,57849,57850,57851,57852,57853, -57854,57855,57856,57857,57858,57859,57860,57861,57862,57863,57864,57865, -57866,57867,57868,57869,57870,57871,57872,57873,57874,57875,57876,57877, -57878,57879,57880,57881,57882,57883,57884,57885,57886,57887,57888,57889, -57890,57891,57892,57893,57894,57895,57896,57897,57898,57899,57900,57901, -57902,57903,57904,57905,57906,57907,57908,57909,57910,57911,57912,57913, -57914,57915,57916,57917,57918,57919,57920,57921,57922,57923,57924,57925, -57926,57927,57928,57929,57930,57931,57932,57933,57934,57935,57936,57937, -57938,57939,57940,57941,57942,57943,57944,57945,57946,57947,57948,57949, -57950,57951,57952,57953,57954,57955,57956,57957,57958,57959,57960,57961, -57962,57963,57964,57965,57966,57967,57968,57969,57970,57971,57972,57973, -57974,57975,57976,57977,57978,57979,57980,57981,57982,57983,57984,57985, -57986,57987,57988,57989,57990,57991,57992,57993,57994,57995,57996,57997, -57998,57999,58000,58001,58002,58003,58004,58005,58006,58007,58008,58009, -58010,58011,58012,58013,58014,58015,58016,58017,58018,58019,58020,58021, -58022,58023,58024,58025,58026,58027,58028,58029,58030,58031,58032,58033, -58034,58035,58036,58037,58038,58039,58040,58041,58042,58043,58044,58045, -58046,58047,58048,58049,58050,58051,58052,58053,58054,58055,58056,58057, -58058,58059,58060,58061,58062,58063,58064,58065,58066,58067,58068,58069, -58070,58071,58072,58073,58074,58075,58076,58077,58078,58079,58080,58081, -58082,58083,58084,58085,58086,58087,58088,58089,58090,58091,58092,58093, -58094,58095,58096,58097,58098,58099,58100,58101,58102,58103,58104,58105, -58106,58107,58108,58109,58110,58111,58112,58113,58114,58115,58116,58117, -58118,58119,58120,58121,58122,58123,58124,58125,58126,58127,58128,58129, -58130,58131,58132,58133,58134,58135,58136,58137,58138,58139,58140,58141, -58142,58143,58144,58145,58146,58147,58148,58149,58150,58151,58152,58153, -58154,58155,58156,58157,58158,58159,58160,58161,58162,58163,58164,58165, -58166,58167,58168,58169,58170,58171,58172,58173,58174,58175,58176,58177, -58178,58179,58180,58181,58182,58183,58184,58185,58186,58187,58188,58189, -58190,58191,58192,58193,58194,58195,58196,58197,58198,58199,58200,58201, -58202,58203,58204,58205,58206,58207,58208,58209,58210,58211,58212,58213, -58214,58215,58216,58217,58218,58219,58220,58221,58222,58223,58224,58225, -58226,58227,58228,58229,58230,58231,58232,58233,58234,58235,58236,58237, -58238,58239,58240,58241,58242,58243,58244,58245,58246,58247,58248,58249, -58250,58251,58252,58253,58254,58255,58256,58257,58258,58259,58260,58261, -58262,58263,58264,58265,58266,58267,58268,58269,58270,58271,58272,58273, -58274,58275,58276,58277,58278,58279,58280,58281,58282,58283,58284,58285, -58286,58287,58288,58289,58290,58291,58292,58293,58294,58295,58296,58297, -58298,58299,58300,58301,58302,58303,58304,58305,58306,58307,58308,58309, -58310,58311,58312,58313,58314,58315,58316,58317,58318,58319,58320,58321, -58322,58323,58324,58325,58326,58327,58328,58329,58330,58331,58332,58333, -58334,58335,58336,58337,58338,58339,58340,58341,58342,58343,58344,58345, -58346,58347,58348,58349,58350,58351,58352,58353,58354,58355,58356,58357, -58358,58359,58360,58361,58362,58363,58364,58365,58366,58367,58368,58369, -58370,58371,58372,58373,58374,58375,58376,58377,58378,58379,58380,58381, -58382,58383,58384,58385,58386,58387,58388,58389,58390,58391,58392,58393, -58394,58395,58396,58397,58398,58399,58400,58401,58402,58403,58404,58405, -58406,58407,58408,58409,58410,58411,58412,58413,58414,58415,58416,58417, -58418,58419,58420,58421,58422,58423,58424,58425,58426,58427,58428,58429, -58430,58431,58432,58433,58434,58435,58436,58437,58438,58439,58440,58441, -58442,58443,58444,58445,58446,58447,58448,58449,58450,58451,58452,58453, -58454,58455,58456,58457,58458,58459,58460,58461,58462,58463,58464,58465, -58466,58467,58468,58469,58470,58471,58472,58473,58474,58475,58476,58477, -58478,58479,58480,58481,58482,58483,58484,58485,58486,58487,58488,58489, -58490,58491,58492,58493,58494,58495,58496,58497,58498,58499,58500,58501, -58502,58503,58504,58505,58506,58507,58508,58509,58510,58511,58512,58513, -58514,58515,58516,58517,58518,58519,58520,58521,58522,58523,58524,58525, -58526,58527,58528,58529,58530,58531,58532,58533,58534,58535,58536,58537, -58538,58539,58540,58541,58542,58543,58544,58545,58546,58547,58548,58549, -58550,58551,58552,58553,58554,58555,58556,58557,58558,58559,58560,58561, -58562,58563,58564,58565,58566,58567,58568,58569,58570,58571,58572,58573, -58574,58575,58576,58577,58578,58579,58580,58581,58582,58583,58584,58585, -58586,58587,58588,58589,58590,58591,58592,58593,58594,58595,58596,58597, -58598,58599,58600,58601,58602,58603,58604,58605,58606,58607,58608,58609, -58610,58611,58612,58613,58614,58615,58616,58617,58618,58619,58620,58621, -58622,58623,58624,58625,58626,58627,58628,58629,58630,58631,58632,58633, -58634,58635,58636,58637,58638,58639,58640,58641,58642,58643,58644,58645, -58646,58647,58648,58649,58650,58651,58652,58653,58654,58655,58656,58657, -58658,58659,58660,58661,58662,58663,58664,58665,58666,58667,58668,58669, -58670,58671,58672,58673,58674,58675,58676,58677,58678,58679,58680,58681, -58682,58683,58684,58685,58686,58687,58688,58689,58690,58691,58692,58693, -58694,58695,58696,58697,58698,58699,58700,58701,58702,58703,58704,58705, -58706,58707,58708,58709,58710,58711,58712,58713,58714,58715,58716,58717, -58718,58719,58720,58721,58722,58723,58724,58725,58726,58727,58728,58729, -58730,58731,58732,58733,58734,58735,58736,58737,58738,58739,58740,58741, -58742,58743,58744,58745,58746,58747,58748,58749,58750,58751,58752,58753, -58754,58755,58756,58757,58758,58759,58760,58761,58762,58763,58764,58765, -58766,58767,58768,58769,58770,58771,58772,58773,58774,58775,58776,58777, -58778,58779,58780,58781,58782,58783,58784,58785,58786,58787,58788,58789, -58790,58791,58792,58793,58794,58795,58796,58797,58798,58799,58800,58801, -58802,58803,58804,58805,58806,58807,58808,58809,58810,58811,58812,58813, -58814,58815,58816,58817,58818,58819,58820,58821,58822,58823,58824,58825, -58826,58827,58828,58829,58830,58831,58832,58833,58834,58835,58836,58837, -58838,58839,58840,58841,58842,58843,58844,58845,58846,58847,58848,58849, -58850,58851,58852,58853,58854,58855,58856,58857,58858,58859,58860,58861, -58862,58863,58864,58865,58866,58867,58868,58869,58870,58871,58872,58873, -58874,58875,58876,58877,58878,58879,58880,58881,58882,58883,58884,58885, -58886,58887,58888,58889,58890,58891,58892,58893,58894,58895,58896,58897, -58898,58899,58900,58901,58902,58903,58904,58905,58906,58907,58908,58909, -58910,58911,58912,58913,58914,58915,58916,58917,58918,58919,58920,58921, -58922,58923,58924,58925,58926,58927,58928,58929,58930,58931,58932,58933, -58934,58935,58936,58937,58938,58939,58940,58941,58942,58943,58944,58945, -58946,58947,58948,58949,58950,58951,58952,58953,58954,58955,58956,58957, -58958,58959,58960,58961,58962,58963,58964,58965,58966,58967,58968,58969, -58970,58971,58972,58973,58974,58975,58976,58977,58978,58979,58980,58981, -58982,58983,58984,58985,58986,58987,58988,58989,58990,58991,58992,58993, -58994,58995,58996,58997,58998,58999,59000,59001,59002,59003,59004,59005, -59006,59007,59008,59009,59010,59011,59012,59013,59014,59015,59016,59017, -59018,59019,59020,59021,59022,59023,59024,59025,59026,59027,59028,59029, -59030,59031,59032,59033,59034,59035,59036,59037,59038,59039,59040,59041, -59042,59043,59044,59045,59046,59047,59048,59049,59050,59051,59052,59053, -59054,59055,59056,59057,59058,59059,59060,59061,59062,59063,59064,59065, -59066,59067,59068,59069,59070,59071,59072,59073,59074,59075,59076,59077, -59078,59079,59080,59081,59082,59083,59084,59085,59086,59087,59088,59089, -59090,59091,59092,59093,59094,59095,59096,59097,59098,59099,59100,59101, -59102,59103,59104,59105,59106,59107,59108,59109,59110,59111,59112,59113, -59114,59115,59116,59117,59118,59119,59120,59121,59122,59123,59124,59125, -59126,59127,59128,59129,59130,59131,59132,59133,59134,59135,59136,59137, -59138,59139,59140,59141,59142,59143,59144,59145,59146,59147,59148,59149, -59150,59151,59152,59153,59154,59155,59156,59157,59158,59159,59160,59161, -59162,59163,59164,59165,59166,59167,59168,59169,59170,59171,59172,59173, -59174,59175,59176,59177,59178,59179,59180,59181,59182,59183,59184,59185, -59186,59187,59188,59189,59190,59191,59192,59193,59194,59195,59196,59197, -59198,59199,59200,59201,59202,59203,59204,59205,59206,59207,59208,59209, -59210,59211,59212,59213,59214,59215,59216,59217,59218,59219,59220,59221, -59222,59223,59224,59225,59226,59227,59228,59229,59230,59231,59232,59233, -59234,59235,59236,59237,59238,59239,59240,59241,59242,59243,59244,59245, -59246,59247,59248,59249,59250,59251,59252,59253,59254,59255,59256,59257, -59258,59259,59260,59261,59262,59263,59264,59265,59266,59267,59268,59269, -59270,59271,59272,59273,59274,59275,59276,59277,59278,59279,59280,59281, -59282,59283,59284,59285,59286,59287,59288,59289,59290,59291,59292,59293, -59294,59295,59296,59297,59298,59299,59300,59301,59302,59303,59304,59305, -59306,59307,59308,59309,59310,59311,59312,59313,59314,59315,59316,59317, -59318,59319,59320,59321,59322,59323,59324,59325,59326,59327,59328,59329, -59330,59331,59332,59333,59334,59335,59336,59337,59338,59339,59340,59341, -59342,59343,59344,59345,59346,59347,59348,59349,59350,59351,59352,59353, -59354,59355,59356,59357,59358,59359,59360,59361,59362,59363,59364,59365, -59366,59367,59368,59369,59370,59371,59372,59373,59374,59375,59376,59377, -59378,59379,59380,59381,59382,59383,59384,59385,59386,59387,59388,59389, -59390,59391,59392,59393,59394,59395,59396,59397,59398,59399,59400,59401, -59402,59403,59404,59405,59406,59407,59408,59409,59410,59411,59412,59413, -59414,59415,59416,59417,59418,59419,59420,59421,59422,59423,59424,59425, -59426,59427,59428,59429,59430,59431,59432,59433,59434,59435,59436,59437, -59438,59439,59440,59441,59442,59443,59444,59445,59446,59447,59448,59449, -59450,59451,59452,59453,59454,59455,59456,59457,59458,59459,59460,59461, -59462,59463,59464,59465,59466,59467,59468,59469,59470,59471,59472,59473, -59474,59475,59476,59477,59478,59479,59480,59481,59482,59483,59484,59485, -59486,59487,59488,59489,59490,59491,59492,59493,59494,59495,59496,59497, -59498,59499,59500,59501,59502,59503,59504,59505,59506,59507,59508,59509, -59510,59511,59512,59513,59514,59515,59516,59517,59518,59519,59520,59521, -59522,59523,59524,59525,59526,59527,59528,59529,59530,59531,59532,59533, -59534,59535,59536,59537,59538,59539,59540,59541,59542,59543,59544,59545, -59546,59547,59548,59549,59550,59551,59552,59553,59554,59555,59556,59557, -59558,59559,59560,59561,59562,59563,59564,59565,59566,59567,59568,59569, -59570,59571,59572,59573,59574,59575,59576,59577,59578,59579,59580,59581, -59582,59583,59584,59585,59586,59587,59588,59589,59590,59591,59592,59593, -59594,59595,59596,59597,59598,59599,59600,59601,59602,59603,59604,59605, -59606,59607,59608,59609,59610,59611,59612,59613,59614,59615,59616,59617, -59618,59619,59620,59621,59622,59623,59624,59625,59626,59627,59628,59629, -59630,59631,59632,59633,59634,59635,59636,59637,59638,59639,59640,59641, -59642,59643,59644,59645,59646,59647,59648,59649,59650,59651,59652,59653, -59654,59655,59656,59657,59658,59659,59660,59661,59662,59663,59664,59665, -59666,59667,59668,59669,59670,59671,59672,59673,59674,59675,59676,59677, -59678,59679,59680,59681,59682,59683,59684,59685,59686,59687,59688,59689, -59690,59691,59692,59693,59694,59695,59696,59697,59698,59699,59700,59701, -59702,59703,59704,59705,59706,59707,59708,59709,59710,59711,59712,59713, -59714,59715,59716,59717,59718,59719,59720,59721,59722,59723,59724,59725, -59726,59727,59728,59729,59730,59731,59732,59733,59734,59735,59736,59737, -59738,59739,59740,59741,59742,59743,59744,59745,59746,59747,59748,59749, -59750,59751,59752,59753,59754,59755,59756,59757,59758,59759,59760,59761, -59762,59763,59764,59765,59766,59767,59768,59769,59770,59771,59772,59773, -59774,59775,59776,59777,59778,59779,59780,59781,59782,59783,59784,59785, -59786,59787,59788,59789,59790,59791,59792,59793,59794,59795,59796,59797, -59798,59799,59800,59801,59802,59803,59804,59805,59806,59807,59808,59809, -59810,59811,59812,59813,59814,59815,59816,59817,59818,59819,59820,59821, -59822,59823,59824,59825,59826,59827,59828,59829,59830,59831,59832,59833, -59834,59835,59836,59837,59838,59839,59840,59841,59842,59843,59844,59845, -59846,59847,59848,59849,59850,59851,59852,59853,59854,59855,59856,59857, -59858,59859,59860,59861,59862,59863,59864,59865,59866,59867,59868,59869, -59870,59871,59872,59873,59874,59875,59876,59877,59878,59879,59880,59881, -59882,59883,59884,59885,59886,59887,59888,59889,59890,59891,59892,59893, -59894,59895,59896,59897,59898,59899,59900,59901,59902,59903,59904,59905, -59906,59907,59908,59909,59910,59911,59912,59913,59914,59915,59916,59917, -59918,59919,59920,59921,59922,59923,59924,59925,59926,59927,59928,59929, -59930,59931,59932,59933,59934,59935,59936,59937,59938,59939,59940,59941, -59942,59943,59944,59945,59946,59947,59948,59949,59950,59951,59952,59953, -59954,59955,59956,59957,59958,59959,59960,59961,59962,59963,59964,59965, -59966,59967,59968,59969,59970,59971,59972,59973,59974,59975,59976,59977, -59978,59979,59980,59981,59982,59983,59984,59985,59986,59987,59988,59989, -59990,59991,59992,59993,59994,59995,59996,59997,59998,59999,60000,60001, -60002,60003,60004,60005,60006,60007,60008,60009,60010,60011,60012,60013, -60014,60015,60016,60017,60018,60019,60020,60021,60022,60023,60024,60025, -60026,60027,60028,60029,60030,60031,60032,60033,60034,60035,60036,60037, -60038,60039,60040,60041,60042,60043,60044,60045,60046,60047,60048,60049, -60050,60051,60052,60053,60054,60055,60056,60057,60058,60059,60060,60061, -60062,60063,60064,60065,60066,60067,60068,60069,60070,60071,60072,60073, -60074,60075,60076,60077,60078,60079,60080,60081,60082,60083,60084,60085, -60086,60087,60088,60089,60090,60091,60092,60093,60094,60095,60096,60097, -60098,60099,60100,60101,60102,60103,60104,60105,60106,60107,60108,60109, -60110,60111,60112,60113,60114,60115,60116,60117,60118,60119,60120,60121, -60122,60123,60124,60125,60126,60127,60128,60129,60130,60131,60132,60133, -60134,60135,60136,60137,60138,60139,60140,60141,60142,60143,60144,60145, -60146,60147,60148,60149,60150,60151,60152,60153,60154,60155,60156,60157, -60158,60159,60160,60161,60162,60163,60164,60165,60166,60167,60168,60169, -60170,60171,60172,60173,60174,60175,60176,60177,60178,60179,60180,60181, -60182,60183,60184,60185,60186,60187,60188,60189,60190,60191,60192,60193, -60194,60195,60196,60197,60198,60199,60200,60201,60202,60203,60204,60205, -60206,60207,60208,60209,60210,60211,60212,60213,60214,60215,60216,60217, -60218,60219,60220,60221,60222,60223,60224,60225,60226,60227,60228,60229, -60230,60231,60232,60233,60234,60235,60236,60237,60238,60239,60240,60241, -60242,60243,60244,60245,60246,60247,60248,60249,60250,60251,60252,60253, -60254,60255,60256,60257,60258,60259,60260,60261,60262,60263,60264,60265, -60266,60267,60268,60269,60270,60271,60272,60273,60274,60275,60276,60277, -60278,60279,60280,60281,60282,60283,60284,60285,60286,60287,60288,60289, -60290,60291,60292,60293,60294,60295,60296,60297,60298,60299,60300,60301, -60302,60303,60304,60305,60306,60307,60308,60309,60310,60311,60312,60313, -60314,60315,60316,60317,60318,60319,60320,60321,60322,60323,60324,60325, -60326,60327,60328,60329,60330,60331,60332,60333,60334,60335,60336,60337, -60338,60339,60340,60341,60342,60343,60344,60345,60346,60347,60348,60349, -60350,60351,60352,60353,60354,60355,60356,60357,60358,60359,60360,60361, -60362,60363,60364,60365,60366,60367,60368,60369,60370,60371,60372,60373, -60374,60375,60376,60377,60378,60379,60380,60381,60382,60383,60384,60385, -60386,60387,60388,60389,60390,60391,60392,60393,60394,60395,60396,60397, -60398,60399,60400,60401,60402,60403,60404,60405,60406,60407,60408,60409, -60410,60411,60412,60413,60414,60415,60416,60417,60418,60419,60420,60421, -60422,60423,60424,60425,60426,60427,60428,60429,60430,60431,60432,60433, -60434,60435,60436,60437,60438,60439,60440,60441,60442,60443,60444,60445, -60446,60447,60448,60449,60450,60451,60452,60453,60454,60455,60456,60457, -60458,60459,60460,60461,60462,60463,60464,60465,60466,60467,60468,60469, -60470,60471,60472,60473,60474,60475,60476,60477,60478,60479,60480,60481, -60482,60483,60484,60485,60486,60487,60488,60489,60490,60491,60492,60493, -60494,60495,60496,60497,60498,60499,60500,60501,60502,60503,60504,60505, -60506,60507,60508,60509,60510,60511,60512,60513,60514,60515,60516,60517, -60518,60519,60520,60521,60522,60523,60524,60525,60526,60527,60528,60529, -60530,60531,60532,60533,60534,60535,60536,60537,60538,60539,60540,60541, -60542,60543,60544,60545,60546,60547,60548,60549,60550,60551,60552,60553, -60554,60555,60556,60557,60558,60559,60560,60561,60562,60563,60564,60565, -60566,60567,60568,60569,60570,60571,60572,60573,60574,60575,60576,60577, -60578,60579,60580,60581,60582,60583,60584,60585,60586,60587,60588,60589, -60590,60591,60592,60593,60594,60595,60596,60597,60598,60599,60600,60601, -60602,60603,60604,60605,60606,60607,60608,60609,60610,60611,60612,60613, -60614,60615,60616,60617,60618,60619,60620,60621,60622,60623,60624,60625, -60626,60627,60628,60629,60630,60631,60632,60633,60634,60635,60636,60637, -60638,60639,60640,60641,60642,60643,60644,60645,60646,60647,60648,60649, -60650,60651,60652,60653,60654,60655,60656,60657,60658,60659,60660,60661, -60662,60663,60664,60665,60666,60667,60668,60669,60670,60671,60672,60673, -60674,60675,60676,60677,60678,60679,60680,60681,60682,60683,60684,60685, -60686,60687,60688,60689,60690,60691,60692,60693,60694,60695,60696,60697, -60698,60699,60700,60701,60702,60703,60704,60705,60706,60707,60708,60709, -60710,60711,60712,60713,60714,60715,60716,60717,60718,60719,60720,60721, -60722,60723,60724,60725,60726,60727,60728,60729,60730,60731,60732,60733, -60734,60735,60736,60737,60738,60739,60740,60741,60742,60743,60744,60745, -60746,60747,60748,60749,60750,60751,60752,60753,60754,60755,60756,60757, -60758,60759,60760,60761,60762,60763,60764,60765,60766,60767,60768,60769, -60770,60771,60772,60773,60774,60775,60776,60777,60778,60779,60780,60781, -60782,60783,60784,60785,60786,60787,60788,60789,60790,60791,60792,60793, -60794,60795,60796,60797,60798,60799,60800,60801,60802,60803,60804,60805, -60806,60807,60808,60809,60810,60811,60812,60813,60814,60815,60816,60817, -60818,60819,60820,60821,60822,60823,60824,60825,60826,60827,60828,60829, -60830,60831,60832,60833,60834,60835,60836,60837,60838,60839,60840,60841, -60842,60843,60844,60845,60846,60847,60848,60849,60850,60851,60852,60853, -60854,60855,60856,60857,60858,60859,60860,60861,60862,60863,60864,60865, -60866,60867,60868,60869,60870,60871,60872,60873,60874,60875,60876,60877, -60878,60879,60880,60881,60882,60883,60884,60885,60886,60887,60888,60889, -60890,60891,60892,60893,60894,60895,60896,60897,60898,60899,60900,60901, -60902,60903,60904,60905,60906,60907,60908,60909,60910,60911,60912,60913, -60914,60915,60916,60917,60918,60919,60920,60921,60922,60923,60924,60925, -60926,60927,60928,60929,60930,60931,60932,60933,60934,60935,60936,60937, -60938,60939,60940,60941,60942,60943,60944,60945,60946,60947,60948,60949, -60950,60951,60952,60953,60954,60955,60956,60957,60958,60959,60960,60961, -60962,60963,60964,60965,60966,60967,60968,60969,60970,60971,60972,60973, -60974,60975,60976,60977,60978,60979,60980,60981,60982,60983,60984,60985, -60986,60987,60988,60989,60990,60991,60992,60993,60994,60995,60996,60997, -60998,60999,61000,61001,61002,61003,61004,61005,61006,61007,61008,61009, -61010,61011,61012,61013,61014,61015,61016,61017,61018,61019,61020,61021, -61022,61023,61024,61025,61026,61027,61028,61029,61030,61031,61032,61033, -61034,61035,61036,61037,61038,61039,61040,61041,61042,61043,61044,61045, -61046,61047,61048,61049,61050,61051,61052,61053,61054,61055,61056,61057, -61058,61059,61060,61061,61062,61063,61064,61065,61066,61067,61068,61069, -61070,61071,61072,61073,61074,61075,61076,61077,61078,61079,61080,61081, -61082,61083,61084,61085,61086,61087,61088,61089,61090,61091,61092,61093, -61094,61095,61096,61097,61098,61099,61100,61101,61102,61103,61104,61105, -61106,61107,61108,61109,61110,61111,61112,61113,61114,61115,61116,61117, -61118,61119,61120,61121,61122,61123,61124,61125,61126,61127,61128,61129, -61130,61131,61132,61133,61134,61135,61136,61137,61138,61139,61140,61141, -61142,61143,61144,61145,61146,61147,61148,61149,61150,61151,61152,61153, -61154,61155,61156,61157,61158,61159,61160,61161,61162,61163,61164,61165, -61166,61167,61168,61169,61170,61171,61172,61173,61174,61175,61176,61177, -61178,61179,61180,61181,61182,61183,61184,61185,61186,61187,61188,61189, -61190,61191,61192,61193,61194,61195,61196,61197,61198,61199,61200,61201, -61202,61203,61204,61205,61206,61207,61208,61209,61210,61211,61212,61213, -61214,61215,61216,61217,61218,61219,61220,61221,61222,61223,61224,61225, -61226,61227,61228,61229,61230,61231,61232,61233,61234,61235,61236,61237, -61238,61239,61240,61241,61242,61243,61244,61245,61246,61247,61248,61249, -61250,61251,61252,61253,61254,61255,61256,61257,61258,61259,61260,61261, -61262,61263,61264,61265,61266,61267,61268,61269,61270,61271,61272,61273, -61274,61275,61276,61277,61278,61279,61280,61281,61282,61283,61284,61285, -61286,61287,61288,61289,61290,61291,61292,61293,61294,61295,61296,61297, -61298,61299,61300,61301,61302,61303,61304,61305,61306,61307,61308,61309, -61310,61311,61312,61313,61314,61315,61316,61317,61318,61319,61320,61321, -61322,61323,61324,61325,61326,61327,61328,61329,61330,61331,61332,61333, -61334,61335,61336,61337,61338,61339,61340,61341,61342,61343,61344,61345, -61346,61347,61348,61349,61350,61351,61352,61353,61354,61355,61356,61357, -61358,61359,61360,61361,61362,61363,61364,61365,61366,61367,61368,61369, -61370,61371,61372,61373,61374,61375,61376,61377,61378,61379,61380,61381, -61382,61383,61384,61385,61386,61387,61388,61389,61390,61391,61392,61393, -61394,61395,61396,61397,61398,61399,61400,61401,61402,61403,61404,61405, -61406,61407,61408,61409,61410,61411,61412,61413,61414,61415,61416,61417, -61418,61419,61420,61421,61422,61423,61424,61425,61426,61427,61428,61429, -61430,61431,61432,61433,61434,61435,61436,61437,61438,61439,61440,61441, -61442,61443,61444,61445,61446,61447,61448,61449,61450,61451,61452,61453, -61454,61455,61456,61457,61458,61459,61460,61461,61462,61463,61464,61465, -61466,61467,61468,61469,61470,61471,61472,61473,61474,61475,61476,61477, -61478,61479,61480,61481,61482,61483,61484,61485,61486,61487,61488,61489, -61490,61491,61492,61493,61494,61495,61496,61497,61498,61499,61500,61501, -61502,61503,61504,61505,61506,61507,61508,61509,61510,61511,61512,61513, -61514,61515,61516,61517,61518,61519,61520,61521,61522,61523,61524,61525, -61526,61527,61528,61529,61530,61531,61532,61533,61534,61535,61536,61537, -61538,61539,61540,61541,61542,61543,61544,61545,61546,61547,61548,61549, -61550,61551,61552,61553,61554,61555,61556,61557,61558,61559,61560,61561, -61562,61563,61564,61565,61566,61567,61568,61569,61570,61571,61572,61573, -61574,61575,61576,61577,61578,61579,61580,61581,61582,61583,61584,61585, -61586,61587,61588,61589,61590,61591,61592,61593,61594,61595,61596,61597, -61598,61599,61600,61601,61602,61603,61604,61605,61606,61607,61608,61609, -61610,61611,61612,61613,61614,61615,61616,61617,61618,61619,61620,61621, -61622,61623,61624,61625,61626,61627,61628,61629,61630,61631,61632,61633, -61634,61635,61636,61637,61638,61639,61640,61641,61642,61643,61644,61645, -61646,61647,61648,61649,61650,61651,61652,61653,61654,61655,61656,61657, -61658,61659,61660,61661,61662,61663,61664,61665,61666,61667,61668,61669, -61670,61671,61672,61673,61674,61675,61676,61677,61678,61679,61680,61681, -61682,61683,61684,61685,61686,61687,61688,61689,61690,61691,61692,61693, -61694,61695,61696,61697,61698,61699,61700,61701,61702,61703,61704,61705, -61706,61707,61708,61709,61710,61711,61712,61713,61714,61715,61716,61717, -61718,61719,61720,61721,61722,61723,61724,61725,61726,61727,61728,61729, -61730,61731,61732,61733,61734,61735,61736,61737,61738,61739,61740,61741, -61742,61743,61744,61745,61746,61747,61748,61749,61750,61751,61752,61753, -61754,61755,61756,61757,61758,61759,61760,61761,61762,61763,61764,61765, -61766,61767,61768,61769,61770,61771,61772,61773,61774,61775,61776,61777, -61778,61779,61780,61781,61782,61783,61784,61785,61786,61787,61788,61789, -61790,61791,61792,61793,61794,61795,61796,61797,61798,61799,61800,61801, -61802,61803,61804,61805,61806,61807,61808,61809,61810,61811,61812,61813, -61814,61815,61816,61817,61818,61819,61820,61821,61822,61823,61824,61825, -61826,61827,61828,61829,61830,61831,61832,61833,61834,61835,61836,61837, -61838,61839,61840,61841,61842,61843,61844,61845,61846,61847,61848,61849, -61850,61851,61852,61853,61854,61855,61856,61857,61858,61859,61860,61861, -61862,61863,61864,61865,61866,61867,61868,61869,61870,61871,61872,61873, -61874,61875,61876,61877,61878,61879,61880,61881,61882,61883,61884,61885, -61886,61887,61888,61889,61890,61891,61892,61893,61894,61895,61896,61897, -61898,61899,61900,61901,61902,61903,61904,61905,61906,61907,61908,61909, -61910,61911,61912,61913,61914,61915,61916,61917,61918,61919,61920,61921, -61922,61923,61924,61925,61926,61927,61928,61929,61930,61931,61932,61933, -61934,61935,61936,61937,61938,61939,61940,61941,61942,61943,61944,61945, -61946,61947,61948,61949,61950,61951,61952,61953,61954,61955,61956,61957, -61958,61959,61960,61961,61962,61963,61964,61965,61966,61967,61968,61969, -61970,61971,61972,61973,61974,61975,61976,61977,61978,61979,61980,61981, -61982,61983,61984,61985,61986,61987,61988,61989,61990,61991,61992,61993, -61994,61995,61996,61997,61998,61999,62000,62001,62002,62003,62004,62005, -62006,62007,62008,62009,62010,62011,62012,62013,62014,62015,62016,62017, -62018,62019,62020,62021,62022,62023,62024,62025,62026,62027,62028,62029, -62030,62031,62032,62033,62034,62035,62036,62037,62038,62039,62040,62041, -62042,62043,62044,62045,62046,62047,62048,62049,62050,62051,62052,62053, -62054,62055,62056,62057,62058,62059,62060,62061,62062,62063,62064,62065, -62066,62067,62068,62069,62070,62071,62072,62073,62074,62075,62076,62077, -62078,62079,62080,62081,62082,62083,62084,62085,62086,62087,62088,62089, -62090,62091,62092,62093,62094,62095,62096,62097,62098,62099,62100,62101, -62102,62103,62104,62105,62106,62107,62108,62109,62110,62111,62112,62113, -62114,62115,62116,62117,62118,62119,62120,62121,62122,62123,62124,62125, -62126,62127,62128,62129,62130,62131,62132,62133,62134,62135,62136,62137, -62138,62139,62140,62141,62142,62143,62144,62145,62146,62147,62148,62149, -62150,62151,62152,62153,62154,62155,62156,62157,62158,62159,62160,62161, -62162,62163,62164,62165,62166,62167,62168,62169,62170,62171,62172,62173, -62174,62175,62176,62177,62178,62179,62180,62181,62182,62183,62184,62185, -62186,62187,62188,62189,62190,62191,62192,62193,62194,62195,62196,62197, -62198,62199,62200,62201,62202,62203,62204,62205,62206,62207,62208,62209, -62210,62211,62212,62213,62214,62215,62216,62217,62218,62219,62220,62221, -62222,62223,62224,62225,62226,62227,62228,62229,62230,62231,62232,62233, -62234,62235,62236,62237,62238,62239,62240,62241,62242,62243,62244,62245, -62246,62247,62248,62249,62250,62251,62252,62253,62254,62255,62256,62257, -62258,62259,62260,62261,62262,62263,62264,62265,62266,62267,62268,62269, -62270,62271,62272,62273,62274,62275,62276,62277,62278,62279,62280,62281, -62282,62283,62284,62285,62286,62287,62288,62289,62290,62291,62292,62293, -62294,62295,62296,62297,62298,62299,62300,62301,62302,62303,62304,62305, -62306,62307,62308,62309,62310,62311,62312,62313,62314,62315,62316,62317, -62318,62319,62320,62321,62322,62323,62324,62325,62326,62327,62328,62329, -62330,62331,62332,62333,62334,62335,62336,62337,62338,62339,62340,62341, -62342,62343,62344,62345,62346,62347,62348,62349,62350,62351,62352,62353, -62354,62355,62356,62357,62358,62359,62360,62361,62362,62363,62364,62365, -62366,62367,62368,62369,62370,62371,62372,62373,62374,62375,62376,62377, -62378,62379,62380,62381,62382,62383,62384,62385,62386,62387,62388,62389, -62390,62391,62392,62393,62394,62395,62396,62397,62398,62399,62400,62401, -62402,62403,62404,62405,62406,62407,62408,62409,62410,62411,62412,62413, -62414,62415,62416,62417,62418,62419,62420,62421,62422,62423,62424,62425, -62426,62427,62428,62429,62430,62431,62432,62433,62434,62435,62436,62437, -62438,62439,62440,62441,62442,62443,62444,62445,62446,62447,62448,62449, -62450,62451,62452,62453,62454,62455,62456,62457,62458,62459,62460,62461, -62462,62463,62464,62465,62466,62467,62468,62469,62470,62471,62472,62473, -62474,62475,62476,62477,62478,62479,62480,62481,62482,62483,62484,62485, -62486,62487,62488,62489,62490,62491,62492,62493,62494,62495,62496,62497, -62498,62499,62500,62501,62502,62503,62504,62505,62506,62507,62508,62509, -62510,62511,62512,62513,62514,62515,62516,62517,62518,62519,62520,62521, -62522,62523,62524,62525,62526,62527,62528,62529,62530,62531,62532,62533, -62534,62535,62536,62537,62538,62539,62540,62541,62542,62543,62544,62545, -62546,62547,62548,62549,62550,62551,62552,62553,62554,62555,62556,62557, -62558,62559,62560,62561,62562,62563,62564,62565,62566,62567,62568,62569, -62570,62571,62572,62573,62574,62575,62576,62577,62578,62579,62580,62581, -62582,62583,62584,62585,62586,62587,62588,62589,62590,62591,62592,62593, -62594,62595,62596,62597,62598,62599,62600,62601,62602,62603,62604,62605, -62606,62607,62608,62609,62610,62611,62612,62613,62614,62615,62616,62617, -62618,62619,62620,62621,62622,62623,62624,62625,62626,62627,62628,62629, -62630,62631,62632,62633,62634,62635,62636,62637,62638,62639,62640,62641, -62642,62643,62644,62645,62646,62647,62648,62649,62650,62651,62652,62653, -62654,62655,62656,62657,62658,62659,62660,62661,62662,62663,62664,62665, -62666,62667,62668,62669,62670,62671,62672,62673,62674,62675,62676,62677, -62678,62679,62680,62681,62682,62683,62684,62685,62686,62687,62688,62689, -62690,62691,62692,62693,62694,62695,62696,62697,62698,62699,62700,62701, -62702,62703,62704,62705,62706,62707,62708,62709,62710,62711,62712,62713, -62714,62715,62716,62717,62718,62719,62720,62721,62722,62723,62724,62725, -62726,62727,62728,62729,62730,62731,62732,62733,62734,62735,62736,62737, -62738,62739,62740,62741,62742,62743,62744,62745,62746,62747,62748,62749, -62750,62751,62752,62753,62754,62755,62756,62757,62758,62759,62760,62761, -62762,62763,62764,62765,62766,62767,62768,62769,62770,62771,62772,62773, -62774,62775,62776,62777,62778,62779,62780,62781,62782,62783,62784,62785, -62786,62787,62788,62789,62790,62791,62792,62793,62794,62795,62796,62797, -62798,62799,62800,62801,62802,62803,62804,62805,62806,62807,62808,62809, -62810,62811,62812,62813,62814,62815,62816,62817,62818,62819,62820,62821, -62822,62823,62824,62825,62826,62827,62828,62829,62830,62831,62832,62833, -62834,62835,62836,62837,62838,62839,62840,62841,62842,62843,62844,62845, -62846,62847,62848,62849,62850,62851,62852,62853,62854,62855,62856,62857, -62858,62859,62860,62861,62862,62863,62864,62865,62866,62867,62868,62869, -62870,62871,62872,62873,62874,62875,62876,62877,62878,62879,62880,62881, -62882,62883,62884,62885,62886,62887,62888,62889,62890,62891,62892,62893, -62894,62895,62896,62897,62898,62899,62900,62901,62902,62903,62904,62905, -62906,62907,62908,62909,62910,62911,62912,62913,62914,62915,62916,62917, -62918,62919,62920,62921,62922,62923,62924,62925,62926,62927,62928,62929, -62930,62931,62932,62933,62934,62935,62936,62937,62938,62939,62940,62941, -62942,62943,62944,62945,62946,62947,62948,62949,62950,62951,62952,62953, -62954,62955,62956,62957,62958,62959,62960,62961,62962,62963,62964,62965, -62966,62967,62968,62969,62970,62971,62972,62973,62974,62975,62976,62977, -62978,62979,62980,62981,62982,62983,62984,62985,62986,62987,62988,62989, -62990,62991,62992,62993,62994,62995,62996,62997,62998,62999,63000,63001, -63002,63003,63004,63005,63006,63007,63008,63009,63010,63011,63012,63013, -63014,63015,63016,63017,63018,63019,63020,63021,63022,63023,63024,63025, -63026,63027,63028,63029,63030,63031,63032,63033,63034,63035,63036,63037, -63038,63039,63040,63041,63042,63043,63044,63045,63046,63047,63048,63049, -63050,63051,63052,63053,63054,63055,63056,63057,63058,63059,63060,63061, -63062,63063,63064,63065,63066,63067,63068,63069,63070,63071,63072,63073, -63074,63075,63076,63077,63078,63079,63080,63081,63082,63083,63084,63085, -63086,63087,63088,63089,63090,63091,63092,63093,63094,63095,63096,63097, -63098,63099,63100,63101,63102,63103,63104,63105,63106,63107,63108,63109, -63110,63111,63112,63113,63114,63115,63116,63117,63118,63119,63120,63121, -63122,63123,63124,63125,63126,63127,63128,63129,63130,63131,63132,63133, -63134,63135,63136,63137,63138,63139,63140,63141,63142,63143,63144,63145, -63146,63147,63148,63149,63150,63151,63152,63153,63154,63155,63156,63157, -63158,63159,63160,63161,63162,63163,63164,63165,63166,63167,63168,63169, -63170,63171,63172,63173,63174,63175,63176,63177,63178,63179,63180,63181, -63182,63183,63184,63185,63186,63187,63188,63189,63190,63191,63192,63193, -63194,63195,63196,63197,63198,63199,63200,63201,63202,63203,63204,63205, -63206,63207,63208,63209,63210,63211,63212,63213,63214,63215,63216,63217, -63218,63219,63220,63221,63222,63223,63224,63225,63226,63227,63228,63229, -63230,63231,63232,63233,63234,63235,63236,63237,63238,63239,63240,63241, -63242,63243,63244,63245,63246,63247,63248,63249,63250,63251,63252,63253, -63254,63255,63256,63257,63258,63259,63260,63261,63262,63263,63264,63265, -63266,63267,63268,63269,63270,63271,63272,63273,63274,63275,63276,63277, -63278,63279,63280,63281,63282,63283,63284,63285,63286,63287,63288,63289, -63290,63291,63292,63293,63294,63295,63296,63297,63298,63299,63300,63301, -63302,63303,63304,63305,63306,63307,63308,63309,63310,63311,63312,63313, -63314,63315,63316,63317,63318,63319,63320,63321,63322,63323,63324,63325, -63326,63327,63328,63329,63330,63331,63332,63333,63334,63335,63336,63337, -63338,63339,63340,63341,63342,63343,63344,63345,63346,63347,63348,63349, -63350,63351,63352,63353,63354,63355,63356,63357,63358,63359,63360,63361, -63362,63363,63364,63365,63366,63367,63368,63369,63370,63371,63372,63373, -63374,63375,63376,63377,63378,63379,63380,63381,63382,63383,63384,63385, -63386,63387,63388,63389,63390,63391,63392,63393,63394,63395,63396,63397, -63398,63399,63400,63401,63402,63403,63404,63405,63406,63407,63408,63409, -63410,63411,63412,63413,63414,63415,63416,63417,63418,63419,63420,63421, -63422,63423,63424,63425,63426,63427,63428,63429,63430,63431,63432,63433, -63434,63435,63436,63437,63438,63439,63440,63441,63442,63443,63444,63445, -63446,63447,63448,63449,63450,63451,63452,63453,63454,63455,63456,63457, -63458,63459,63460,63461,63462,63463,63464,63465,63466,63467,63468,63469, -63470,63471,63472,63473,63474,63475,63476,63477,63478,63479,63480,63481, -63482,63483,63484,63485,63486,63487,63488,63489,63490,63491,63492,63493, -63494,63495,63496,63497,63498,63499,63500,63501,63502,63503,63504,63505, -63506,63507,63508,63509,63510,63511,63512,63513,63514,63515,63516,63517, -63518,63519,63520,63521,63522,63523,63524,63525,63526,63527,63528,63529, -63530,63531,63532,63533,63534,63535,63536,63537,63538,63539,63540,63541, -63542,63543,63544,63545,63546,63547,63548,63549,63550,63551,63552,63553, -63554,63555,63556,63557,63558,63559,63560,63561,63562,63563,63564,63565, -63566,63567,63568,63569,63570,63571,63572,63573,63574,63575,63576,63577, -63578,63579,63580,63581,63582,63583,63584,63585,63586,63587,63588,63589, -63590,63591,63592,63593,63594,63595,63596,63597,63598,63599,63600,63601, -63602,63603,63604,63605,63606,63607,63608,63609,63610,63611,63612,63613, -63614,63615,63616,63617,63618,63619,63620,63621,63622,63623,63624,63625, -63626,63627,63628,63629,63630,63631,63632,63633,63634,63635,63636,63637, -63638,63639,63640,63641,63642,63643,63644,63645,63646,63647,63648,63649, -63650,63651,63652,63653,63654,63655,63656,63657,63658,63659,63660,63661, -63662,63663,63664,63665,63666,63667,63668,63669,63670,63671,63672,63673, -63674,63675,63676,63677,63678,63679,63680,63681,63682,63683,63684,63685, -63686,63687,63688,63689,63690,63691,63692,63693,63694,63695,63696,63697, -63698,63699,63700,63701,63702,63703,63704,63705,63706,63707,63708,63709, -63710,63711,63712,63713,63714,63715,63716,63717,63718,63719,63720,63721, -63722,63723,63724,63725,63726,63727,63728,63729,63730,63731,63732,63733, -63734,63735,63736,63737,63738,63739,63740,63741,63742,63743,63744,63745, -63746,63747,63748,63749,63750,63751,63752,63753,63754,63755,63756,63757, -63758,63759,63760,63761,63762,63763,63764,63765,63766,63767,63768,63769, -63770,63771,63772,63773,63774,63775,63776,63777,63778,63779,63780,63781, -63782,63783,63784,63785,63786,63787,63788,63789,63790,63791,63792,63793, -63794,63795,63796,63797,63798,63799,63800,63801,63802,63803,63804,63805, -63806,63807,63808,63809,63810,63811,63812,63813,63814,63815,63816,63817, -63818,63819,63820,63821,63822,63823,63824,63825,63826,63827,63828,63829, -63830,63831,63832,63833,63834,63835,63836,63837,63838,63839,63840,63841, -63842,63843,63844,63845,63846,63847,63848,63849,63850,63851,63852,63853, -63854,63855,63856,63857,63858,63859,63860,63861,63862,63863,63864,63865, -63866,63867,63868,63869,63870,63871,63872,63873,63874,63875,63876,63877, -63878,63879,63880,63881,63882,63883,63884,63885,63886,63887,63888,63889, -63890,63891,63892,63893,63894,63895,63896,63897,63898,63899,63900,63901, -63902,63903,63904,63905,63906,63907,63908,63909,63910,63911,63912,63913, -63914,63915,63916,63917,63918,63919,63920,63921,63922,63923,63924,63925, -63926,63927,63928,63929,63930,63931,63932,63933,63934,63935,63936,63937, -63938,63939,63940,63941,63942,63943,63944,63945,63946,63947,63948,63949, -63950,63951,63952,63953,63954,63955,63956,63957,63958,63959,63960,63961, -63962,63963,63964,63965,63966,63967,63968,63969,63970,63971,63972,63973, -63974,63975,63976,63977,63978,63979,63980,63981,63982,63983,63984,63985, -63986,63987,63988,63989,63990,63991,63992,63993,63994,63995,63996,63997, -63998,63999,64000,64001,64002,64003,64004,64005,64006,64007,64008,64009, -64010,64011,64012,64013,64014,64015,64016,64017,64018,64019,64020,64021, -64022,64023,64024,64025,64026,64027,64028,64029,64030,64031,64032,64033, -64034,64035,64036,64037,64038,64039,64040,64041,64042,64043,64044,64045, -64046,64047,64048,64049,64050,64051,64052,64053,64054,64055,64056,64057, -64058,64059,64060,64061,64062,64063,64064,64065,64066,64067,64068,64069, -64070,64071,64072,64073,64074,64075,64076,64077,64078,64079,64080,64081, -64082,64083,64084,64085,64086,64087,64088,64089,64090,64091,64092,64093, -64094,64095,64096,64097,64098,64099,64100,64101,64102,64103,64104,64105, -64106,64107,64108,64109,64110,64111,64112,64113,64114,64115,64116,64117, -64118,64119,64120,64121,64122,64123,64124,64125,64126,64127,64128,64129, -64130,64131,64132,64133,64134,64135,64136,64137,64138,64139,64140,64141, -64142,64143,64144,64145,64146,64147,64148,64149,64150,64151,64152,64153, -64154,64155,64156,64157,64158,64159,64160,64161,64162,64163,64164,64165, -64166,64167,64168,64169,64170,64171,64172,64173,64174,64175,64176,64177, -64178,64179,64180,64181,64182,64183,64184,64185,64186,64187,64188,64189, -64190,64191,64192,64193,64194,64195,64196,64197,64198,64199,64200,64201, -64202,64203,64204,64205,64206,64207,64208,64209,64210,64211,64212,64213, -64214,64215,64216,64217,64218,64219,64220,64221,64222,64223,64224,64225, -64226,64227,64228,64229,64230,64231,64232,64233,64234,64235,64236,64237, -64238,64239,64240,64241,64242,64243,64244,64245,64246,64247,64248,64249, -64250,64251,64252,64253,64254,64255,64256,64257,64258,64259,64260,64261, -64262,64263,64264,64265,64266,64267,64268,64269,64270,64271,64272,64273, -64274,64275,64276,64277,64278,64279,64280,64281,64282,64283,64284,64285, -64286,64287,64288,64289,64290,64291,64292,64293,64294,64295,64296,64297, -64298,64299,64300,64301,64302,64303,64304,64305,64306,64307,64308,64309, -64310,64311,64312,64313,64314,64315,64316,64317,64318,64319,64320,64321, -64322,64323,64324,64325,64326,64327,64328,64329,64330,64331,64332,64333, -64334,64335,64336,64337,64338,64339,64340,64341,64342,64343,64344,64345, -64346,64347,64348,64349,64350,64351,64352,64353,64354,64355,64356,64357, -64358,64359,64360,64361,64362,64363,64364,64365,64366,64367,64368,64369, -64370,64371,64372,64373,64374,64375,64376,64377,64378,64379,64380,64381, -64382,64383,64384,64385,64386,64387,64388,64389,64390,64391,64392,64393, -64394,64395,64396,64397,64398,64399,64400,64401,64402,64403,64404,64405, -64406,64407,64408,64409,64410,64411,64412,64413,64414,64415,64416,64417, -64418,64419,64420,64421,64422,64423,64424,64425,64426,64427,64428,64429, -64430,64431,64432,64433,64434,64435,64436,64437,64438,64439,64440,64441, -64442,64443,64444,64445,64446,64447,64448,64449,64450,64451,64452,64453, -64454,64455,64456,64457,64458,64459,64460,64461,64462,64463,64464,64465, -64466,64467,64468,64469,64470,64471,64472,64473,64474,64475,64476,64477, -64478,64479,64480,64481,64482,64483,64484,64485,64486,64487,64488,64489, -64490,64491,64492,64493,64494,64495,64496,64497,64498,64499,64500,64501, -64502,64503,64504,64505,64506,64507,64508,64509,64510,64511,64512,64513, -64514,64515,64516,64517,64518,64519,64520,64521,64522,64523,64524,64525, -64526,64527,64528,64529,64530,64531,64532,64533,64534,64535,64536,64537, -64538,64539,64540,64541,64542,64543,64544,64545,64546,64547,64548,64549, -64550,64551,64552,64553,64554,64555,64556,64557,64558,64559,64560,64561, -64562,64563,64564,64565,64566,64567,64568,64569,64570,64571,64572,64573, -64574,64575,64576,64577,64578,64579,64580,64581,64582,64583,64584,64585, -64586,64587,64588,64589,64590,64591,64592,64593,64594,64595,64596,64597, -64598,64599,64600,64601,64602,64603,64604,64605,64606,64607,64608,64609, -64610,64611,64612,64613,64614,64615,64616,64617,64618,64619,64620,64621, -64622,64623,64624,64625,64626,64627,64628,64629,64630,64631,64632,64633, -64634,64635,64636,64637,64638,64639,64640,64641,64642,64643,64644,64645, -64646,64647,64648,64649,64650,64651,64652,64653,64654,64655,64656,64657, -64658,64659,64660,64661,64662,64663,64664,64665,64666,64667,64668,64669, -64670,64671,64672,64673,64674,64675,64676,64677,64678,64679,64680,64681, -64682,64683,64684,64685,64686,64687,64688,64689,64690,64691,64692,64693, -64694,64695,64696,64697,64698,64699,64700,64701,64702,64703,64704,64705, -64706,64707,64708,64709,64710,64711,64712,64713,64714,64715,64716,64717, -64718,64719,64720,64721,64722,64723,64724,64725,64726,64727,64728,64729, -64730,64731,64732,64733,64734,64735,64736,64737,64738,64739,64740,64741, -64742,64743,64744,64745,64746,64747,64748,64749,64750,64751,64752,64753, -64754,64755,64756,64757,64758,64759,64760,64761,64762,64763,64764,64765, -64766,64767,64768,64769,64770,64771,64772,64773,64774,64775,64776,64777, -64778,64779,64780,64781,64782,64783,64784,64785,64786,64787,64788,64789, -64790,64791,64792,64793,64794,64795,64796,64797,64798,64799,64800,64801, -64802,64803,64804,64805,64806,64807,64808,64809,64810,64811,64812,64813, -64814,64815,64816,64817,64818,64819,64820,64821,64822,64823,64824,64825, -64826,64827,64828,64829,64830,64831,64832,64833,64834,64835,64836,64837, -64838,64839,64840,64841,64842,64843,64844,64845,64846,64847,64848,64849, -64850,64851,64852,64853,64854,64855,64856,64857,64858,64859,64860,64861, -64862,64863,64864,64865,64866,64867,64868,64869,64870,64871,64872,64873, -64874,64875,64876,64877,64878,64879,64880,64881,64882,64883,64884,64885, -64886,64887,64888,64889,64890,64891,64892,64893,64894,64895,64896,64897, -64898,64899,64900,64901,64902,64903,64904,64905,64906,64907,64908,64909, -64910,64911,64912,64913,64914,64915,64916,64917,64918,64919,64920,64921, -64922,64923,64924,64925,64926,64927,64928,64929,64930,64931,64932,64933, -64934,64935,64936,64937,64938,64939,64940,64941,64942,64943,64944,64945, -64946,64947,64948,64949,64950,64951,64952,64953,64954,64955,64956,64957, -64958,64959,64960,64961,64962,64963,64964,64965,64966,64967,64968,64969, -64970,64971,64972,64973,64974,64975,64976,64977,64978,64979,64980,64981, -64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993, -64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005, -65006,65007,65008,65009,65010,65011,65012,65013,65014,65015,65016,65017, -65018,65019,65020,65021,65022,65023,65024,65025,65026,65027,65028,65029, -65030,65031,65032,65033,65034,65035,65036,65037,65038,65039,65040,65041, -65042,65043,65044,65045,65046,65047,65048,65049,65050,65051,65052,65053, -65054,65055,65056,65057,65058,65059,65060,65061,65062,65063,65064,65065, -65066,65067,65068,65069,65070,65071,65072,65073,65074,65075,65076,65077, -65078,65079,65080,65081,65082,65083,65084,65085,65086,65087,65088,65089, -65090,65091,65092,65093,65094,65095,65096,65097,65098,65099,65100,65101, -65102,65103,65104,65105,65106,65107,65108,65109,65110,65111,65112,65113, -65114,65115,65116,65117,65118,65119,65120,65121,65122,65123,65124,65125, -65126,65127,65128,65129,65130,65131,65132,65133,65134,65135,65136,65137, -65138,65139,65140,65141,65142,65143,65144,65145,65146,65147,65148,65149, -65150,65151,65152,65153,65154,65155,65156,65157,65158,65159,65160,65161, -65162,65163,65164,65165,65166,65167,65168,65169,65170,65171,65172,65173, -65174,65175,65176,65177,65178,65179,65180,65181,65182,65183,65184,65185, -65186,65187,65188,65189,65190,65191,65192,65193,65194,65195,65196,65197, -65198,65199,65200,65201,65202,65203,65204,65205,65206,65207,65208,65209, -65210,65211,65212,65213,65214,65215,65216,65217,65218,65219,65220,65221, -65222,65223,65224,65225,65226,65227,65228,65229,65230,65231,65232,65233, -65234,65235,65236,65237,65238,65239,65240,65241,65242,65243,65244,65245, -65246,65247,65248,65249,65250,65251,65252,65253,65254,65255,65256,65257, -65258,65259,65260,65261,65262,65263,65264,65265,65266,65267,65268,65269, -65270,65271,65272,65273,65274,65275,65276,65277,65278,65279,65280,65281, -65282,65283,65284,65285,65286,65287,65288,65289,65290,65291,65292,65293, -65294,65295,65296,65297,65298,65299,65300,65301,65302,65303,65304,65305, -65306,65307,65308,65309,65310,65311,65312,65313,65314,65315,65316,65317, -65318,65319,65320,65321,65322,65323,65324,65325,65326,65327,65328,65329, -65330,65331,65332,65333,65334,65335,65336,65337,65338,65339,65340,65341, -65342,65343,65344,65313,65314,65315,65316,65317,65318,65319,65320,65321, -65322,65323,65324,65325,65326,65327,65328,65329,65330,65331,65332,65333, -65334,65335,65336,65337,65338,65371,65372,65373,65374,65375,65376,65377, -65378,65379,65380,65381,65382,65383,65384,65385,65386,65387,65388,65389, -65390,65391,65392,65393,65394,65395,65396,65397,65398,65399,65400,65401, -65402,65403,65404,65405,65406,65407,65408,65409,65410,65411,65412,65413, -65414,65415,65416,65417,65418,65419,65420,65421,65422,65423,65424,65425, -65426,65427,65428,65429,65430,65431,65432,65433,65434,65435,65436,65437, -65438,65439,65440,65441,65442,65443,65444,65445,65446,65447,65448,65449, -65450,65451,65452,65453,65454,65455,65456,65457,65458,65459,65460,65461, -65462,65463,65464,65465,65466,65467,65468,65469,65470,65471,65472,65473, -65474,65475,65476,65477,65478,65479,65480,65481,65482,65483,65484,65485, -65486,65487,65488,65489,65490,65491,65492,65493,65494,65495,65496,65497, -65498,65499,65500,65501,65502,65503,65504,65505,65506,65507,65508,65509, -65510,65511,65512,65513,65514,65515,65516,65517,65518,65519,65520,65521, -65522,65523,65524,65525,65526,65527,65528,65529,65530,65531,65532,65533, -65534,65535, +32762,32763,32764,32765,32766,32767,32768L,32769L,32770L,32771L,32772L, +32773L,32774L,32775L,32776L,32777L,32778L,32779L,32780L,32781L,32782L, +32783L,32784L,32785L,32786L,32787L,32788L,32789L,32790L,32791L,32792L, +32793L,32794L,32795L,32796L,32797L,32798L,32799L,32800L,32801L,32802L, +32803L,32804L,32805L,32806L,32807L,32808L,32809L,32810L,32811L,32812L, +32813L,32814L,32815L,32816L,32817L,32818L,32819L,32820L,32821L,32822L, +32823L,32824L,32825L,32826L,32827L,32828L,32829L,32830L,32831L,32832L, +32833L,32834L,32835L,32836L,32837L,32838L,32839L,32840L,32841L,32842L, +32843L,32844L,32845L,32846L,32847L,32848L,32849L,32850L,32851L,32852L, +32853L,32854L,32855L,32856L,32857L,32858L,32859L,32860L,32861L,32862L, +32863L,32864L,32865L,32866L,32867L,32868L,32869L,32870L,32871L,32872L, +32873L,32874L,32875L,32876L,32877L,32878L,32879L,32880L,32881L,32882L, +32883L,32884L,32885L,32886L,32887L,32888L,32889L,32890L,32891L,32892L, +32893L,32894L,32895L,32896L,32897L,32898L,32899L,32900L,32901L,32902L, +32903L,32904L,32905L,32906L,32907L,32908L,32909L,32910L,32911L,32912L, +32913L,32914L,32915L,32916L,32917L,32918L,32919L,32920L,32921L,32922L, +32923L,32924L,32925L,32926L,32927L,32928L,32929L,32930L,32931L,32932L, +32933L,32934L,32935L,32936L,32937L,32938L,32939L,32940L,32941L,32942L, +32943L,32944L,32945L,32946L,32947L,32948L,32949L,32950L,32951L,32952L, +32953L,32954L,32955L,32956L,32957L,32958L,32959L,32960L,32961L,32962L, +32963L,32964L,32965L,32966L,32967L,32968L,32969L,32970L,32971L,32972L, +32973L,32974L,32975L,32976L,32977L,32978L,32979L,32980L,32981L,32982L, +32983L,32984L,32985L,32986L,32987L,32988L,32989L,32990L,32991L,32992L, +32993L,32994L,32995L,32996L,32997L,32998L,32999L,33000L,33001L,33002L, +33003L,33004L,33005L,33006L,33007L,33008L,33009L,33010L,33011L,33012L, +33013L,33014L,33015L,33016L,33017L,33018L,33019L,33020L,33021L,33022L, +33023L,33024L,33025L,33026L,33027L,33028L,33029L,33030L,33031L,33032L, +33033L,33034L,33035L,33036L,33037L,33038L,33039L,33040L,33041L,33042L, +33043L,33044L,33045L,33046L,33047L,33048L,33049L,33050L,33051L,33052L, +33053L,33054L,33055L,33056L,33057L,33058L,33059L,33060L,33061L,33062L, +33063L,33064L,33065L,33066L,33067L,33068L,33069L,33070L,33071L,33072L, +33073L,33074L,33075L,33076L,33077L,33078L,33079L,33080L,33081L,33082L, +33083L,33084L,33085L,33086L,33087L,33088L,33089L,33090L,33091L,33092L, +33093L,33094L,33095L,33096L,33097L,33098L,33099L,33100L,33101L,33102L, +33103L,33104L,33105L,33106L,33107L,33108L,33109L,33110L,33111L,33112L, +33113L,33114L,33115L,33116L,33117L,33118L,33119L,33120L,33121L,33122L, +33123L,33124L,33125L,33126L,33127L,33128L,33129L,33130L,33131L,33132L, +33133L,33134L,33135L,33136L,33137L,33138L,33139L,33140L,33141L,33142L, +33143L,33144L,33145L,33146L,33147L,33148L,33149L,33150L,33151L,33152L, +33153L,33154L,33155L,33156L,33157L,33158L,33159L,33160L,33161L,33162L, +33163L,33164L,33165L,33166L,33167L,33168L,33169L,33170L,33171L,33172L, +33173L,33174L,33175L,33176L,33177L,33178L,33179L,33180L,33181L,33182L, +33183L,33184L,33185L,33186L,33187L,33188L,33189L,33190L,33191L,33192L, +33193L,33194L,33195L,33196L,33197L,33198L,33199L,33200L,33201L,33202L, +33203L,33204L,33205L,33206L,33207L,33208L,33209L,33210L,33211L,33212L, +33213L,33214L,33215L,33216L,33217L,33218L,33219L,33220L,33221L,33222L, +33223L,33224L,33225L,33226L,33227L,33228L,33229L,33230L,33231L,33232L, +33233L,33234L,33235L,33236L,33237L,33238L,33239L,33240L,33241L,33242L, +33243L,33244L,33245L,33246L,33247L,33248L,33249L,33250L,33251L,33252L, +33253L,33254L,33255L,33256L,33257L,33258L,33259L,33260L,33261L,33262L, +33263L,33264L,33265L,33266L,33267L,33268L,33269L,33270L,33271L,33272L, +33273L,33274L,33275L,33276L,33277L,33278L,33279L,33280L,33281L,33282L, +33283L,33284L,33285L,33286L,33287L,33288L,33289L,33290L,33291L,33292L, +33293L,33294L,33295L,33296L,33297L,33298L,33299L,33300L,33301L,33302L, +33303L,33304L,33305L,33306L,33307L,33308L,33309L,33310L,33311L,33312L, +33313L,33314L,33315L,33316L,33317L,33318L,33319L,33320L,33321L,33322L, +33323L,33324L,33325L,33326L,33327L,33328L,33329L,33330L,33331L,33332L, +33333L,33334L,33335L,33336L,33337L,33338L,33339L,33340L,33341L,33342L, +33343L,33344L,33345L,33346L,33347L,33348L,33349L,33350L,33351L,33352L, +33353L,33354L,33355L,33356L,33357L,33358L,33359L,33360L,33361L,33362L, +33363L,33364L,33365L,33366L,33367L,33368L,33369L,33370L,33371L,33372L, +33373L,33374L,33375L,33376L,33377L,33378L,33379L,33380L,33381L,33382L, +33383L,33384L,33385L,33386L,33387L,33388L,33389L,33390L,33391L,33392L, +33393L,33394L,33395L,33396L,33397L,33398L,33399L,33400L,33401L,33402L, +33403L,33404L,33405L,33406L,33407L,33408L,33409L,33410L,33411L,33412L, +33413L,33414L,33415L,33416L,33417L,33418L,33419L,33420L,33421L,33422L, +33423L,33424L,33425L,33426L,33427L,33428L,33429L,33430L,33431L,33432L, +33433L,33434L,33435L,33436L,33437L,33438L,33439L,33440L,33441L,33442L, +33443L,33444L,33445L,33446L,33447L,33448L,33449L,33450L,33451L,33452L, +33453L,33454L,33455L,33456L,33457L,33458L,33459L,33460L,33461L,33462L, +33463L,33464L,33465L,33466L,33467L,33468L,33469L,33470L,33471L,33472L, +33473L,33474L,33475L,33476L,33477L,33478L,33479L,33480L,33481L,33482L, +33483L,33484L,33485L,33486L,33487L,33488L,33489L,33490L,33491L,33492L, +33493L,33494L,33495L,33496L,33497L,33498L,33499L,33500L,33501L,33502L, +33503L,33504L,33505L,33506L,33507L,33508L,33509L,33510L,33511L,33512L, +33513L,33514L,33515L,33516L,33517L,33518L,33519L,33520L,33521L,33522L, +33523L,33524L,33525L,33526L,33527L,33528L,33529L,33530L,33531L,33532L, +33533L,33534L,33535L,33536L,33537L,33538L,33539L,33540L,33541L,33542L, +33543L,33544L,33545L,33546L,33547L,33548L,33549L,33550L,33551L,33552L, +33553L,33554L,33555L,33556L,33557L,33558L,33559L,33560L,33561L,33562L, +33563L,33564L,33565L,33566L,33567L,33568L,33569L,33570L,33571L,33572L, +33573L,33574L,33575L,33576L,33577L,33578L,33579L,33580L,33581L,33582L, +33583L,33584L,33585L,33586L,33587L,33588L,33589L,33590L,33591L,33592L, +33593L,33594L,33595L,33596L,33597L,33598L,33599L,33600L,33601L,33602L, +33603L,33604L,33605L,33606L,33607L,33608L,33609L,33610L,33611L,33612L, +33613L,33614L,33615L,33616L,33617L,33618L,33619L,33620L,33621L,33622L, +33623L,33624L,33625L,33626L,33627L,33628L,33629L,33630L,33631L,33632L, +33633L,33634L,33635L,33636L,33637L,33638L,33639L,33640L,33641L,33642L, +33643L,33644L,33645L,33646L,33647L,33648L,33649L,33650L,33651L,33652L, +33653L,33654L,33655L,33656L,33657L,33658L,33659L,33660L,33661L,33662L, +33663L,33664L,33665L,33666L,33667L,33668L,33669L,33670L,33671L,33672L, +33673L,33674L,33675L,33676L,33677L,33678L,33679L,33680L,33681L,33682L, +33683L,33684L,33685L,33686L,33687L,33688L,33689L,33690L,33691L,33692L, +33693L,33694L,33695L,33696L,33697L,33698L,33699L,33700L,33701L,33702L, +33703L,33704L,33705L,33706L,33707L,33708L,33709L,33710L,33711L,33712L, +33713L,33714L,33715L,33716L,33717L,33718L,33719L,33720L,33721L,33722L, +33723L,33724L,33725L,33726L,33727L,33728L,33729L,33730L,33731L,33732L, +33733L,33734L,33735L,33736L,33737L,33738L,33739L,33740L,33741L,33742L, +33743L,33744L,33745L,33746L,33747L,33748L,33749L,33750L,33751L,33752L, +33753L,33754L,33755L,33756L,33757L,33758L,33759L,33760L,33761L,33762L, +33763L,33764L,33765L,33766L,33767L,33768L,33769L,33770L,33771L,33772L, +33773L,33774L,33775L,33776L,33777L,33778L,33779L,33780L,33781L,33782L, +33783L,33784L,33785L,33786L,33787L,33788L,33789L,33790L,33791L,33792L, +33793L,33794L,33795L,33796L,33797L,33798L,33799L,33800L,33801L,33802L, +33803L,33804L,33805L,33806L,33807L,33808L,33809L,33810L,33811L,33812L, +33813L,33814L,33815L,33816L,33817L,33818L,33819L,33820L,33821L,33822L, +33823L,33824L,33825L,33826L,33827L,33828L,33829L,33830L,33831L,33832L, +33833L,33834L,33835L,33836L,33837L,33838L,33839L,33840L,33841L,33842L, +33843L,33844L,33845L,33846L,33847L,33848L,33849L,33850L,33851L,33852L, +33853L,33854L,33855L,33856L,33857L,33858L,33859L,33860L,33861L,33862L, +33863L,33864L,33865L,33866L,33867L,33868L,33869L,33870L,33871L,33872L, +33873L,33874L,33875L,33876L,33877L,33878L,33879L,33880L,33881L,33882L, +33883L,33884L,33885L,33886L,33887L,33888L,33889L,33890L,33891L,33892L, +33893L,33894L,33895L,33896L,33897L,33898L,33899L,33900L,33901L,33902L, +33903L,33904L,33905L,33906L,33907L,33908L,33909L,33910L,33911L,33912L, +33913L,33914L,33915L,33916L,33917L,33918L,33919L,33920L,33921L,33922L, +33923L,33924L,33925L,33926L,33927L,33928L,33929L,33930L,33931L,33932L, +33933L,33934L,33935L,33936L,33937L,33938L,33939L,33940L,33941L,33942L, +33943L,33944L,33945L,33946L,33947L,33948L,33949L,33950L,33951L,33952L, +33953L,33954L,33955L,33956L,33957L,33958L,33959L,33960L,33961L,33962L, +33963L,33964L,33965L,33966L,33967L,33968L,33969L,33970L,33971L,33972L, +33973L,33974L,33975L,33976L,33977L,33978L,33979L,33980L,33981L,33982L, +33983L,33984L,33985L,33986L,33987L,33988L,33989L,33990L,33991L,33992L, +33993L,33994L,33995L,33996L,33997L,33998L,33999L,34000L,34001L,34002L, +34003L,34004L,34005L,34006L,34007L,34008L,34009L,34010L,34011L,34012L, +34013L,34014L,34015L,34016L,34017L,34018L,34019L,34020L,34021L,34022L, +34023L,34024L,34025L,34026L,34027L,34028L,34029L,34030L,34031L,34032L, +34033L,34034L,34035L,34036L,34037L,34038L,34039L,34040L,34041L,34042L, +34043L,34044L,34045L,34046L,34047L,34048L,34049L,34050L,34051L,34052L, +34053L,34054L,34055L,34056L,34057L,34058L,34059L,34060L,34061L,34062L, +34063L,34064L,34065L,34066L,34067L,34068L,34069L,34070L,34071L,34072L, +34073L,34074L,34075L,34076L,34077L,34078L,34079L,34080L,34081L,34082L, +34083L,34084L,34085L,34086L,34087L,34088L,34089L,34090L,34091L,34092L, +34093L,34094L,34095L,34096L,34097L,34098L,34099L,34100L,34101L,34102L, +34103L,34104L,34105L,34106L,34107L,34108L,34109L,34110L,34111L,34112L, +34113L,34114L,34115L,34116L,34117L,34118L,34119L,34120L,34121L,34122L, +34123L,34124L,34125L,34126L,34127L,34128L,34129L,34130L,34131L,34132L, +34133L,34134L,34135L,34136L,34137L,34138L,34139L,34140L,34141L,34142L, +34143L,34144L,34145L,34146L,34147L,34148L,34149L,34150L,34151L,34152L, +34153L,34154L,34155L,34156L,34157L,34158L,34159L,34160L,34161L,34162L, +34163L,34164L,34165L,34166L,34167L,34168L,34169L,34170L,34171L,34172L, +34173L,34174L,34175L,34176L,34177L,34178L,34179L,34180L,34181L,34182L, +34183L,34184L,34185L,34186L,34187L,34188L,34189L,34190L,34191L,34192L, +34193L,34194L,34195L,34196L,34197L,34198L,34199L,34200L,34201L,34202L, +34203L,34204L,34205L,34206L,34207L,34208L,34209L,34210L,34211L,34212L, +34213L,34214L,34215L,34216L,34217L,34218L,34219L,34220L,34221L,34222L, +34223L,34224L,34225L,34226L,34227L,34228L,34229L,34230L,34231L,34232L, +34233L,34234L,34235L,34236L,34237L,34238L,34239L,34240L,34241L,34242L, +34243L,34244L,34245L,34246L,34247L,34248L,34249L,34250L,34251L,34252L, +34253L,34254L,34255L,34256L,34257L,34258L,34259L,34260L,34261L,34262L, +34263L,34264L,34265L,34266L,34267L,34268L,34269L,34270L,34271L,34272L, +34273L,34274L,34275L,34276L,34277L,34278L,34279L,34280L,34281L,34282L, +34283L,34284L,34285L,34286L,34287L,34288L,34289L,34290L,34291L,34292L, +34293L,34294L,34295L,34296L,34297L,34298L,34299L,34300L,34301L,34302L, +34303L,34304L,34305L,34306L,34307L,34308L,34309L,34310L,34311L,34312L, +34313L,34314L,34315L,34316L,34317L,34318L,34319L,34320L,34321L,34322L, +34323L,34324L,34325L,34326L,34327L,34328L,34329L,34330L,34331L,34332L, +34333L,34334L,34335L,34336L,34337L,34338L,34339L,34340L,34341L,34342L, +34343L,34344L,34345L,34346L,34347L,34348L,34349L,34350L,34351L,34352L, +34353L,34354L,34355L,34356L,34357L,34358L,34359L,34360L,34361L,34362L, +34363L,34364L,34365L,34366L,34367L,34368L,34369L,34370L,34371L,34372L, +34373L,34374L,34375L,34376L,34377L,34378L,34379L,34380L,34381L,34382L, +34383L,34384L,34385L,34386L,34387L,34388L,34389L,34390L,34391L,34392L, +34393L,34394L,34395L,34396L,34397L,34398L,34399L,34400L,34401L,34402L, +34403L,34404L,34405L,34406L,34407L,34408L,34409L,34410L,34411L,34412L, +34413L,34414L,34415L,34416L,34417L,34418L,34419L,34420L,34421L,34422L, +34423L,34424L,34425L,34426L,34427L,34428L,34429L,34430L,34431L,34432L, +34433L,34434L,34435L,34436L,34437L,34438L,34439L,34440L,34441L,34442L, +34443L,34444L,34445L,34446L,34447L,34448L,34449L,34450L,34451L,34452L, +34453L,34454L,34455L,34456L,34457L,34458L,34459L,34460L,34461L,34462L, +34463L,34464L,34465L,34466L,34467L,34468L,34469L,34470L,34471L,34472L, +34473L,34474L,34475L,34476L,34477L,34478L,34479L,34480L,34481L,34482L, +34483L,34484L,34485L,34486L,34487L,34488L,34489L,34490L,34491L,34492L, +34493L,34494L,34495L,34496L,34497L,34498L,34499L,34500L,34501L,34502L, +34503L,34504L,34505L,34506L,34507L,34508L,34509L,34510L,34511L,34512L, +34513L,34514L,34515L,34516L,34517L,34518L,34519L,34520L,34521L,34522L, +34523L,34524L,34525L,34526L,34527L,34528L,34529L,34530L,34531L,34532L, +34533L,34534L,34535L,34536L,34537L,34538L,34539L,34540L,34541L,34542L, +34543L,34544L,34545L,34546L,34547L,34548L,34549L,34550L,34551L,34552L, +34553L,34554L,34555L,34556L,34557L,34558L,34559L,34560L,34561L,34562L, +34563L,34564L,34565L,34566L,34567L,34568L,34569L,34570L,34571L,34572L, +34573L,34574L,34575L,34576L,34577L,34578L,34579L,34580L,34581L,34582L, +34583L,34584L,34585L,34586L,34587L,34588L,34589L,34590L,34591L,34592L, +34593L,34594L,34595L,34596L,34597L,34598L,34599L,34600L,34601L,34602L, +34603L,34604L,34605L,34606L,34607L,34608L,34609L,34610L,34611L,34612L, +34613L,34614L,34615L,34616L,34617L,34618L,34619L,34620L,34621L,34622L, +34623L,34624L,34625L,34626L,34627L,34628L,34629L,34630L,34631L,34632L, +34633L,34634L,34635L,34636L,34637L,34638L,34639L,34640L,34641L,34642L, +34643L,34644L,34645L,34646L,34647L,34648L,34649L,34650L,34651L,34652L, +34653L,34654L,34655L,34656L,34657L,34658L,34659L,34660L,34661L,34662L, +34663L,34664L,34665L,34666L,34667L,34668L,34669L,34670L,34671L,34672L, +34673L,34674L,34675L,34676L,34677L,34678L,34679L,34680L,34681L,34682L, +34683L,34684L,34685L,34686L,34687L,34688L,34689L,34690L,34691L,34692L, +34693L,34694L,34695L,34696L,34697L,34698L,34699L,34700L,34701L,34702L, +34703L,34704L,34705L,34706L,34707L,34708L,34709L,34710L,34711L,34712L, +34713L,34714L,34715L,34716L,34717L,34718L,34719L,34720L,34721L,34722L, +34723L,34724L,34725L,34726L,34727L,34728L,34729L,34730L,34731L,34732L, +34733L,34734L,34735L,34736L,34737L,34738L,34739L,34740L,34741L,34742L, +34743L,34744L,34745L,34746L,34747L,34748L,34749L,34750L,34751L,34752L, +34753L,34754L,34755L,34756L,34757L,34758L,34759L,34760L,34761L,34762L, +34763L,34764L,34765L,34766L,34767L,34768L,34769L,34770L,34771L,34772L, +34773L,34774L,34775L,34776L,34777L,34778L,34779L,34780L,34781L,34782L, +34783L,34784L,34785L,34786L,34787L,34788L,34789L,34790L,34791L,34792L, +34793L,34794L,34795L,34796L,34797L,34798L,34799L,34800L,34801L,34802L, +34803L,34804L,34805L,34806L,34807L,34808L,34809L,34810L,34811L,34812L, +34813L,34814L,34815L,34816L,34817L,34818L,34819L,34820L,34821L,34822L, +34823L,34824L,34825L,34826L,34827L,34828L,34829L,34830L,34831L,34832L, +34833L,34834L,34835L,34836L,34837L,34838L,34839L,34840L,34841L,34842L, +34843L,34844L,34845L,34846L,34847L,34848L,34849L,34850L,34851L,34852L, +34853L,34854L,34855L,34856L,34857L,34858L,34859L,34860L,34861L,34862L, +34863L,34864L,34865L,34866L,34867L,34868L,34869L,34870L,34871L,34872L, +34873L,34874L,34875L,34876L,34877L,34878L,34879L,34880L,34881L,34882L, +34883L,34884L,34885L,34886L,34887L,34888L,34889L,34890L,34891L,34892L, +34893L,34894L,34895L,34896L,34897L,34898L,34899L,34900L,34901L,34902L, +34903L,34904L,34905L,34906L,34907L,34908L,34909L,34910L,34911L,34912L, +34913L,34914L,34915L,34916L,34917L,34918L,34919L,34920L,34921L,34922L, +34923L,34924L,34925L,34926L,34927L,34928L,34929L,34930L,34931L,34932L, +34933L,34934L,34935L,34936L,34937L,34938L,34939L,34940L,34941L,34942L, +34943L,34944L,34945L,34946L,34947L,34948L,34949L,34950L,34951L,34952L, +34953L,34954L,34955L,34956L,34957L,34958L,34959L,34960L,34961L,34962L, +34963L,34964L,34965L,34966L,34967L,34968L,34969L,34970L,34971L,34972L, +34973L,34974L,34975L,34976L,34977L,34978L,34979L,34980L,34981L,34982L, +34983L,34984L,34985L,34986L,34987L,34988L,34989L,34990L,34991L,34992L, +34993L,34994L,34995L,34996L,34997L,34998L,34999L,35000L,35001L,35002L, +35003L,35004L,35005L,35006L,35007L,35008L,35009L,35010L,35011L,35012L, +35013L,35014L,35015L,35016L,35017L,35018L,35019L,35020L,35021L,35022L, +35023L,35024L,35025L,35026L,35027L,35028L,35029L,35030L,35031L,35032L, +35033L,35034L,35035L,35036L,35037L,35038L,35039L,35040L,35041L,35042L, +35043L,35044L,35045L,35046L,35047L,35048L,35049L,35050L,35051L,35052L, +35053L,35054L,35055L,35056L,35057L,35058L,35059L,35060L,35061L,35062L, +35063L,35064L,35065L,35066L,35067L,35068L,35069L,35070L,35071L,35072L, +35073L,35074L,35075L,35076L,35077L,35078L,35079L,35080L,35081L,35082L, +35083L,35084L,35085L,35086L,35087L,35088L,35089L,35090L,35091L,35092L, +35093L,35094L,35095L,35096L,35097L,35098L,35099L,35100L,35101L,35102L, +35103L,35104L,35105L,35106L,35107L,35108L,35109L,35110L,35111L,35112L, +35113L,35114L,35115L,35116L,35117L,35118L,35119L,35120L,35121L,35122L, +35123L,35124L,35125L,35126L,35127L,35128L,35129L,35130L,35131L,35132L, +35133L,35134L,35135L,35136L,35137L,35138L,35139L,35140L,35141L,35142L, +35143L,35144L,35145L,35146L,35147L,35148L,35149L,35150L,35151L,35152L, +35153L,35154L,35155L,35156L,35157L,35158L,35159L,35160L,35161L,35162L, +35163L,35164L,35165L,35166L,35167L,35168L,35169L,35170L,35171L,35172L, +35173L,35174L,35175L,35176L,35177L,35178L,35179L,35180L,35181L,35182L, +35183L,35184L,35185L,35186L,35187L,35188L,35189L,35190L,35191L,35192L, +35193L,35194L,35195L,35196L,35197L,35198L,35199L,35200L,35201L,35202L, +35203L,35204L,35205L,35206L,35207L,35208L,35209L,35210L,35211L,35212L, +35213L,35214L,35215L,35216L,35217L,35218L,35219L,35220L,35221L,35222L, +35223L,35224L,35225L,35226L,35227L,35228L,35229L,35230L,35231L,35232L, +35233L,35234L,35235L,35236L,35237L,35238L,35239L,35240L,35241L,35242L, +35243L,35244L,35245L,35246L,35247L,35248L,35249L,35250L,35251L,35252L, +35253L,35254L,35255L,35256L,35257L,35258L,35259L,35260L,35261L,35262L, +35263L,35264L,35265L,35266L,35267L,35268L,35269L,35270L,35271L,35272L, +35273L,35274L,35275L,35276L,35277L,35278L,35279L,35280L,35281L,35282L, +35283L,35284L,35285L,35286L,35287L,35288L,35289L,35290L,35291L,35292L, +35293L,35294L,35295L,35296L,35297L,35298L,35299L,35300L,35301L,35302L, +35303L,35304L,35305L,35306L,35307L,35308L,35309L,35310L,35311L,35312L, +35313L,35314L,35315L,35316L,35317L,35318L,35319L,35320L,35321L,35322L, +35323L,35324L,35325L,35326L,35327L,35328L,35329L,35330L,35331L,35332L, +35333L,35334L,35335L,35336L,35337L,35338L,35339L,35340L,35341L,35342L, +35343L,35344L,35345L,35346L,35347L,35348L,35349L,35350L,35351L,35352L, +35353L,35354L,35355L,35356L,35357L,35358L,35359L,35360L,35361L,35362L, +35363L,35364L,35365L,35366L,35367L,35368L,35369L,35370L,35371L,35372L, +35373L,35374L,35375L,35376L,35377L,35378L,35379L,35380L,35381L,35382L, +35383L,35384L,35385L,35386L,35387L,35388L,35389L,35390L,35391L,35392L, +35393L,35394L,35395L,35396L,35397L,35398L,35399L,35400L,35401L,35402L, +35403L,35404L,35405L,35406L,35407L,35408L,35409L,35410L,35411L,35412L, +35413L,35414L,35415L,35416L,35417L,35418L,35419L,35420L,35421L,35422L, +35423L,35424L,35425L,35426L,35427L,35428L,35429L,35430L,35431L,35432L, +35433L,35434L,35435L,35436L,35437L,35438L,35439L,35440L,35441L,35442L, +35443L,35444L,35445L,35446L,35447L,35448L,35449L,35450L,35451L,35452L, +35453L,35454L,35455L,35456L,35457L,35458L,35459L,35460L,35461L,35462L, +35463L,35464L,35465L,35466L,35467L,35468L,35469L,35470L,35471L,35472L, +35473L,35474L,35475L,35476L,35477L,35478L,35479L,35480L,35481L,35482L, +35483L,35484L,35485L,35486L,35487L,35488L,35489L,35490L,35491L,35492L, +35493L,35494L,35495L,35496L,35497L,35498L,35499L,35500L,35501L,35502L, +35503L,35504L,35505L,35506L,35507L,35508L,35509L,35510L,35511L,35512L, +35513L,35514L,35515L,35516L,35517L,35518L,35519L,35520L,35521L,35522L, +35523L,35524L,35525L,35526L,35527L,35528L,35529L,35530L,35531L,35532L, +35533L,35534L,35535L,35536L,35537L,35538L,35539L,35540L,35541L,35542L, +35543L,35544L,35545L,35546L,35547L,35548L,35549L,35550L,35551L,35552L, +35553L,35554L,35555L,35556L,35557L,35558L,35559L,35560L,35561L,35562L, +35563L,35564L,35565L,35566L,35567L,35568L,35569L,35570L,35571L,35572L, +35573L,35574L,35575L,35576L,35577L,35578L,35579L,35580L,35581L,35582L, +35583L,35584L,35585L,35586L,35587L,35588L,35589L,35590L,35591L,35592L, +35593L,35594L,35595L,35596L,35597L,35598L,35599L,35600L,35601L,35602L, +35603L,35604L,35605L,35606L,35607L,35608L,35609L,35610L,35611L,35612L, +35613L,35614L,35615L,35616L,35617L,35618L,35619L,35620L,35621L,35622L, +35623L,35624L,35625L,35626L,35627L,35628L,35629L,35630L,35631L,35632L, +35633L,35634L,35635L,35636L,35637L,35638L,35639L,35640L,35641L,35642L, +35643L,35644L,35645L,35646L,35647L,35648L,35649L,35650L,35651L,35652L, +35653L,35654L,35655L,35656L,35657L,35658L,35659L,35660L,35661L,35662L, +35663L,35664L,35665L,35666L,35667L,35668L,35669L,35670L,35671L,35672L, +35673L,35674L,35675L,35676L,35677L,35678L,35679L,35680L,35681L,35682L, +35683L,35684L,35685L,35686L,35687L,35688L,35689L,35690L,35691L,35692L, +35693L,35694L,35695L,35696L,35697L,35698L,35699L,35700L,35701L,35702L, +35703L,35704L,35705L,35706L,35707L,35708L,35709L,35710L,35711L,35712L, +35713L,35714L,35715L,35716L,35717L,35718L,35719L,35720L,35721L,35722L, +35723L,35724L,35725L,35726L,35727L,35728L,35729L,35730L,35731L,35732L, +35733L,35734L,35735L,35736L,35737L,35738L,35739L,35740L,35741L,35742L, +35743L,35744L,35745L,35746L,35747L,35748L,35749L,35750L,35751L,35752L, +35753L,35754L,35755L,35756L,35757L,35758L,35759L,35760L,35761L,35762L, +35763L,35764L,35765L,35766L,35767L,35768L,35769L,35770L,35771L,35772L, +35773L,35774L,35775L,35776L,35777L,35778L,35779L,35780L,35781L,35782L, +35783L,35784L,35785L,35786L,35787L,35788L,35789L,35790L,35791L,35792L, +35793L,35794L,35795L,35796L,35797L,35798L,35799L,35800L,35801L,35802L, +35803L,35804L,35805L,35806L,35807L,35808L,35809L,35810L,35811L,35812L, +35813L,35814L,35815L,35816L,35817L,35818L,35819L,35820L,35821L,35822L, +35823L,35824L,35825L,35826L,35827L,35828L,35829L,35830L,35831L,35832L, +35833L,35834L,35835L,35836L,35837L,35838L,35839L,35840L,35841L,35842L, +35843L,35844L,35845L,35846L,35847L,35848L,35849L,35850L,35851L,35852L, +35853L,35854L,35855L,35856L,35857L,35858L,35859L,35860L,35861L,35862L, +35863L,35864L,35865L,35866L,35867L,35868L,35869L,35870L,35871L,35872L, +35873L,35874L,35875L,35876L,35877L,35878L,35879L,35880L,35881L,35882L, +35883L,35884L,35885L,35886L,35887L,35888L,35889L,35890L,35891L,35892L, +35893L,35894L,35895L,35896L,35897L,35898L,35899L,35900L,35901L,35902L, +35903L,35904L,35905L,35906L,35907L,35908L,35909L,35910L,35911L,35912L, +35913L,35914L,35915L,35916L,35917L,35918L,35919L,35920L,35921L,35922L, +35923L,35924L,35925L,35926L,35927L,35928L,35929L,35930L,35931L,35932L, +35933L,35934L,35935L,35936L,35937L,35938L,35939L,35940L,35941L,35942L, +35943L,35944L,35945L,35946L,35947L,35948L,35949L,35950L,35951L,35952L, +35953L,35954L,35955L,35956L,35957L,35958L,35959L,35960L,35961L,35962L, +35963L,35964L,35965L,35966L,35967L,35968L,35969L,35970L,35971L,35972L, +35973L,35974L,35975L,35976L,35977L,35978L,35979L,35980L,35981L,35982L, +35983L,35984L,35985L,35986L,35987L,35988L,35989L,35990L,35991L,35992L, +35993L,35994L,35995L,35996L,35997L,35998L,35999L,36000L,36001L,36002L, +36003L,36004L,36005L,36006L,36007L,36008L,36009L,36010L,36011L,36012L, +36013L,36014L,36015L,36016L,36017L,36018L,36019L,36020L,36021L,36022L, +36023L,36024L,36025L,36026L,36027L,36028L,36029L,36030L,36031L,36032L, +36033L,36034L,36035L,36036L,36037L,36038L,36039L,36040L,36041L,36042L, +36043L,36044L,36045L,36046L,36047L,36048L,36049L,36050L,36051L,36052L, +36053L,36054L,36055L,36056L,36057L,36058L,36059L,36060L,36061L,36062L, +36063L,36064L,36065L,36066L,36067L,36068L,36069L,36070L,36071L,36072L, +36073L,36074L,36075L,36076L,36077L,36078L,36079L,36080L,36081L,36082L, +36083L,36084L,36085L,36086L,36087L,36088L,36089L,36090L,36091L,36092L, +36093L,36094L,36095L,36096L,36097L,36098L,36099L,36100L,36101L,36102L, +36103L,36104L,36105L,36106L,36107L,36108L,36109L,36110L,36111L,36112L, +36113L,36114L,36115L,36116L,36117L,36118L,36119L,36120L,36121L,36122L, +36123L,36124L,36125L,36126L,36127L,36128L,36129L,36130L,36131L,36132L, +36133L,36134L,36135L,36136L,36137L,36138L,36139L,36140L,36141L,36142L, +36143L,36144L,36145L,36146L,36147L,36148L,36149L,36150L,36151L,36152L, +36153L,36154L,36155L,36156L,36157L,36158L,36159L,36160L,36161L,36162L, +36163L,36164L,36165L,36166L,36167L,36168L,36169L,36170L,36171L,36172L, +36173L,36174L,36175L,36176L,36177L,36178L,36179L,36180L,36181L,36182L, +36183L,36184L,36185L,36186L,36187L,36188L,36189L,36190L,36191L,36192L, +36193L,36194L,36195L,36196L,36197L,36198L,36199L,36200L,36201L,36202L, +36203L,36204L,36205L,36206L,36207L,36208L,36209L,36210L,36211L,36212L, +36213L,36214L,36215L,36216L,36217L,36218L,36219L,36220L,36221L,36222L, +36223L,36224L,36225L,36226L,36227L,36228L,36229L,36230L,36231L,36232L, +36233L,36234L,36235L,36236L,36237L,36238L,36239L,36240L,36241L,36242L, +36243L,36244L,36245L,36246L,36247L,36248L,36249L,36250L,36251L,36252L, +36253L,36254L,36255L,36256L,36257L,36258L,36259L,36260L,36261L,36262L, +36263L,36264L,36265L,36266L,36267L,36268L,36269L,36270L,36271L,36272L, +36273L,36274L,36275L,36276L,36277L,36278L,36279L,36280L,36281L,36282L, +36283L,36284L,36285L,36286L,36287L,36288L,36289L,36290L,36291L,36292L, +36293L,36294L,36295L,36296L,36297L,36298L,36299L,36300L,36301L,36302L, +36303L,36304L,36305L,36306L,36307L,36308L,36309L,36310L,36311L,36312L, +36313L,36314L,36315L,36316L,36317L,36318L,36319L,36320L,36321L,36322L, +36323L,36324L,36325L,36326L,36327L,36328L,36329L,36330L,36331L,36332L, +36333L,36334L,36335L,36336L,36337L,36338L,36339L,36340L,36341L,36342L, +36343L,36344L,36345L,36346L,36347L,36348L,36349L,36350L,36351L,36352L, +36353L,36354L,36355L,36356L,36357L,36358L,36359L,36360L,36361L,36362L, +36363L,36364L,36365L,36366L,36367L,36368L,36369L,36370L,36371L,36372L, +36373L,36374L,36375L,36376L,36377L,36378L,36379L,36380L,36381L,36382L, +36383L,36384L,36385L,36386L,36387L,36388L,36389L,36390L,36391L,36392L, +36393L,36394L,36395L,36396L,36397L,36398L,36399L,36400L,36401L,36402L, +36403L,36404L,36405L,36406L,36407L,36408L,36409L,36410L,36411L,36412L, +36413L,36414L,36415L,36416L,36417L,36418L,36419L,36420L,36421L,36422L, +36423L,36424L,36425L,36426L,36427L,36428L,36429L,36430L,36431L,36432L, +36433L,36434L,36435L,36436L,36437L,36438L,36439L,36440L,36441L,36442L, +36443L,36444L,36445L,36446L,36447L,36448L,36449L,36450L,36451L,36452L, +36453L,36454L,36455L,36456L,36457L,36458L,36459L,36460L,36461L,36462L, +36463L,36464L,36465L,36466L,36467L,36468L,36469L,36470L,36471L,36472L, +36473L,36474L,36475L,36476L,36477L,36478L,36479L,36480L,36481L,36482L, +36483L,36484L,36485L,36486L,36487L,36488L,36489L,36490L,36491L,36492L, +36493L,36494L,36495L,36496L,36497L,36498L,36499L,36500L,36501L,36502L, +36503L,36504L,36505L,36506L,36507L,36508L,36509L,36510L,36511L,36512L, +36513L,36514L,36515L,36516L,36517L,36518L,36519L,36520L,36521L,36522L, +36523L,36524L,36525L,36526L,36527L,36528L,36529L,36530L,36531L,36532L, +36533L,36534L,36535L,36536L,36537L,36538L,36539L,36540L,36541L,36542L, +36543L,36544L,36545L,36546L,36547L,36548L,36549L,36550L,36551L,36552L, +36553L,36554L,36555L,36556L,36557L,36558L,36559L,36560L,36561L,36562L, +36563L,36564L,36565L,36566L,36567L,36568L,36569L,36570L,36571L,36572L, +36573L,36574L,36575L,36576L,36577L,36578L,36579L,36580L,36581L,36582L, +36583L,36584L,36585L,36586L,36587L,36588L,36589L,36590L,36591L,36592L, +36593L,36594L,36595L,36596L,36597L,36598L,36599L,36600L,36601L,36602L, +36603L,36604L,36605L,36606L,36607L,36608L,36609L,36610L,36611L,36612L, +36613L,36614L,36615L,36616L,36617L,36618L,36619L,36620L,36621L,36622L, +36623L,36624L,36625L,36626L,36627L,36628L,36629L,36630L,36631L,36632L, +36633L,36634L,36635L,36636L,36637L,36638L,36639L,36640L,36641L,36642L, +36643L,36644L,36645L,36646L,36647L,36648L,36649L,36650L,36651L,36652L, +36653L,36654L,36655L,36656L,36657L,36658L,36659L,36660L,36661L,36662L, +36663L,36664L,36665L,36666L,36667L,36668L,36669L,36670L,36671L,36672L, +36673L,36674L,36675L,36676L,36677L,36678L,36679L,36680L,36681L,36682L, +36683L,36684L,36685L,36686L,36687L,36688L,36689L,36690L,36691L,36692L, +36693L,36694L,36695L,36696L,36697L,36698L,36699L,36700L,36701L,36702L, +36703L,36704L,36705L,36706L,36707L,36708L,36709L,36710L,36711L,36712L, +36713L,36714L,36715L,36716L,36717L,36718L,36719L,36720L,36721L,36722L, +36723L,36724L,36725L,36726L,36727L,36728L,36729L,36730L,36731L,36732L, +36733L,36734L,36735L,36736L,36737L,36738L,36739L,36740L,36741L,36742L, +36743L,36744L,36745L,36746L,36747L,36748L,36749L,36750L,36751L,36752L, +36753L,36754L,36755L,36756L,36757L,36758L,36759L,36760L,36761L,36762L, +36763L,36764L,36765L,36766L,36767L,36768L,36769L,36770L,36771L,36772L, +36773L,36774L,36775L,36776L,36777L,36778L,36779L,36780L,36781L,36782L, +36783L,36784L,36785L,36786L,36787L,36788L,36789L,36790L,36791L,36792L, +36793L,36794L,36795L,36796L,36797L,36798L,36799L,36800L,36801L,36802L, +36803L,36804L,36805L,36806L,36807L,36808L,36809L,36810L,36811L,36812L, +36813L,36814L,36815L,36816L,36817L,36818L,36819L,36820L,36821L,36822L, +36823L,36824L,36825L,36826L,36827L,36828L,36829L,36830L,36831L,36832L, +36833L,36834L,36835L,36836L,36837L,36838L,36839L,36840L,36841L,36842L, +36843L,36844L,36845L,36846L,36847L,36848L,36849L,36850L,36851L,36852L, +36853L,36854L,36855L,36856L,36857L,36858L,36859L,36860L,36861L,36862L, +36863L,36864L,36865L,36866L,36867L,36868L,36869L,36870L,36871L,36872L, +36873L,36874L,36875L,36876L,36877L,36878L,36879L,36880L,36881L,36882L, +36883L,36884L,36885L,36886L,36887L,36888L,36889L,36890L,36891L,36892L, +36893L,36894L,36895L,36896L,36897L,36898L,36899L,36900L,36901L,36902L, +36903L,36904L,36905L,36906L,36907L,36908L,36909L,36910L,36911L,36912L, +36913L,36914L,36915L,36916L,36917L,36918L,36919L,36920L,36921L,36922L, +36923L,36924L,36925L,36926L,36927L,36928L,36929L,36930L,36931L,36932L, +36933L,36934L,36935L,36936L,36937L,36938L,36939L,36940L,36941L,36942L, +36943L,36944L,36945L,36946L,36947L,36948L,36949L,36950L,36951L,36952L, +36953L,36954L,36955L,36956L,36957L,36958L,36959L,36960L,36961L,36962L, +36963L,36964L,36965L,36966L,36967L,36968L,36969L,36970L,36971L,36972L, +36973L,36974L,36975L,36976L,36977L,36978L,36979L,36980L,36981L,36982L, +36983L,36984L,36985L,36986L,36987L,36988L,36989L,36990L,36991L,36992L, +36993L,36994L,36995L,36996L,36997L,36998L,36999L,37000L,37001L,37002L, +37003L,37004L,37005L,37006L,37007L,37008L,37009L,37010L,37011L,37012L, +37013L,37014L,37015L,37016L,37017L,37018L,37019L,37020L,37021L,37022L, +37023L,37024L,37025L,37026L,37027L,37028L,37029L,37030L,37031L,37032L, +37033L,37034L,37035L,37036L,37037L,37038L,37039L,37040L,37041L,37042L, +37043L,37044L,37045L,37046L,37047L,37048L,37049L,37050L,37051L,37052L, +37053L,37054L,37055L,37056L,37057L,37058L,37059L,37060L,37061L,37062L, +37063L,37064L,37065L,37066L,37067L,37068L,37069L,37070L,37071L,37072L, +37073L,37074L,37075L,37076L,37077L,37078L,37079L,37080L,37081L,37082L, +37083L,37084L,37085L,37086L,37087L,37088L,37089L,37090L,37091L,37092L, +37093L,37094L,37095L,37096L,37097L,37098L,37099L,37100L,37101L,37102L, +37103L,37104L,37105L,37106L,37107L,37108L,37109L,37110L,37111L,37112L, +37113L,37114L,37115L,37116L,37117L,37118L,37119L,37120L,37121L,37122L, +37123L,37124L,37125L,37126L,37127L,37128L,37129L,37130L,37131L,37132L, +37133L,37134L,37135L,37136L,37137L,37138L,37139L,37140L,37141L,37142L, +37143L,37144L,37145L,37146L,37147L,37148L,37149L,37150L,37151L,37152L, +37153L,37154L,37155L,37156L,37157L,37158L,37159L,37160L,37161L,37162L, +37163L,37164L,37165L,37166L,37167L,37168L,37169L,37170L,37171L,37172L, +37173L,37174L,37175L,37176L,37177L,37178L,37179L,37180L,37181L,37182L, +37183L,37184L,37185L,37186L,37187L,37188L,37189L,37190L,37191L,37192L, +37193L,37194L,37195L,37196L,37197L,37198L,37199L,37200L,37201L,37202L, +37203L,37204L,37205L,37206L,37207L,37208L,37209L,37210L,37211L,37212L, +37213L,37214L,37215L,37216L,37217L,37218L,37219L,37220L,37221L,37222L, +37223L,37224L,37225L,37226L,37227L,37228L,37229L,37230L,37231L,37232L, +37233L,37234L,37235L,37236L,37237L,37238L,37239L,37240L,37241L,37242L, +37243L,37244L,37245L,37246L,37247L,37248L,37249L,37250L,37251L,37252L, +37253L,37254L,37255L,37256L,37257L,37258L,37259L,37260L,37261L,37262L, +37263L,37264L,37265L,37266L,37267L,37268L,37269L,37270L,37271L,37272L, +37273L,37274L,37275L,37276L,37277L,37278L,37279L,37280L,37281L,37282L, +37283L,37284L,37285L,37286L,37287L,37288L,37289L,37290L,37291L,37292L, +37293L,37294L,37295L,37296L,37297L,37298L,37299L,37300L,37301L,37302L, +37303L,37304L,37305L,37306L,37307L,37308L,37309L,37310L,37311L,37312L, +37313L,37314L,37315L,37316L,37317L,37318L,37319L,37320L,37321L,37322L, +37323L,37324L,37325L,37326L,37327L,37328L,37329L,37330L,37331L,37332L, +37333L,37334L,37335L,37336L,37337L,37338L,37339L,37340L,37341L,37342L, +37343L,37344L,37345L,37346L,37347L,37348L,37349L,37350L,37351L,37352L, +37353L,37354L,37355L,37356L,37357L,37358L,37359L,37360L,37361L,37362L, +37363L,37364L,37365L,37366L,37367L,37368L,37369L,37370L,37371L,37372L, +37373L,37374L,37375L,37376L,37377L,37378L,37379L,37380L,37381L,37382L, +37383L,37384L,37385L,37386L,37387L,37388L,37389L,37390L,37391L,37392L, +37393L,37394L,37395L,37396L,37397L,37398L,37399L,37400L,37401L,37402L, +37403L,37404L,37405L,37406L,37407L,37408L,37409L,37410L,37411L,37412L, +37413L,37414L,37415L,37416L,37417L,37418L,37419L,37420L,37421L,37422L, +37423L,37424L,37425L,37426L,37427L,37428L,37429L,37430L,37431L,37432L, +37433L,37434L,37435L,37436L,37437L,37438L,37439L,37440L,37441L,37442L, +37443L,37444L,37445L,37446L,37447L,37448L,37449L,37450L,37451L,37452L, +37453L,37454L,37455L,37456L,37457L,37458L,37459L,37460L,37461L,37462L, +37463L,37464L,37465L,37466L,37467L,37468L,37469L,37470L,37471L,37472L, +37473L,37474L,37475L,37476L,37477L,37478L,37479L,37480L,37481L,37482L, +37483L,37484L,37485L,37486L,37487L,37488L,37489L,37490L,37491L,37492L, +37493L,37494L,37495L,37496L,37497L,37498L,37499L,37500L,37501L,37502L, +37503L,37504L,37505L,37506L,37507L,37508L,37509L,37510L,37511L,37512L, +37513L,37514L,37515L,37516L,37517L,37518L,37519L,37520L,37521L,37522L, +37523L,37524L,37525L,37526L,37527L,37528L,37529L,37530L,37531L,37532L, +37533L,37534L,37535L,37536L,37537L,37538L,37539L,37540L,37541L,37542L, +37543L,37544L,37545L,37546L,37547L,37548L,37549L,37550L,37551L,37552L, +37553L,37554L,37555L,37556L,37557L,37558L,37559L,37560L,37561L,37562L, +37563L,37564L,37565L,37566L,37567L,37568L,37569L,37570L,37571L,37572L, +37573L,37574L,37575L,37576L,37577L,37578L,37579L,37580L,37581L,37582L, +37583L,37584L,37585L,37586L,37587L,37588L,37589L,37590L,37591L,37592L, +37593L,37594L,37595L,37596L,37597L,37598L,37599L,37600L,37601L,37602L, +37603L,37604L,37605L,37606L,37607L,37608L,37609L,37610L,37611L,37612L, +37613L,37614L,37615L,37616L,37617L,37618L,37619L,37620L,37621L,37622L, +37623L,37624L,37625L,37626L,37627L,37628L,37629L,37630L,37631L,37632L, +37633L,37634L,37635L,37636L,37637L,37638L,37639L,37640L,37641L,37642L, +37643L,37644L,37645L,37646L,37647L,37648L,37649L,37650L,37651L,37652L, +37653L,37654L,37655L,37656L,37657L,37658L,37659L,37660L,37661L,37662L, +37663L,37664L,37665L,37666L,37667L,37668L,37669L,37670L,37671L,37672L, +37673L,37674L,37675L,37676L,37677L,37678L,37679L,37680L,37681L,37682L, +37683L,37684L,37685L,37686L,37687L,37688L,37689L,37690L,37691L,37692L, +37693L,37694L,37695L,37696L,37697L,37698L,37699L,37700L,37701L,37702L, +37703L,37704L,37705L,37706L,37707L,37708L,37709L,37710L,37711L,37712L, +37713L,37714L,37715L,37716L,37717L,37718L,37719L,37720L,37721L,37722L, +37723L,37724L,37725L,37726L,37727L,37728L,37729L,37730L,37731L,37732L, +37733L,37734L,37735L,37736L,37737L,37738L,37739L,37740L,37741L,37742L, +37743L,37744L,37745L,37746L,37747L,37748L,37749L,37750L,37751L,37752L, +37753L,37754L,37755L,37756L,37757L,37758L,37759L,37760L,37761L,37762L, +37763L,37764L,37765L,37766L,37767L,37768L,37769L,37770L,37771L,37772L, +37773L,37774L,37775L,37776L,37777L,37778L,37779L,37780L,37781L,37782L, +37783L,37784L,37785L,37786L,37787L,37788L,37789L,37790L,37791L,37792L, +37793L,37794L,37795L,37796L,37797L,37798L,37799L,37800L,37801L,37802L, +37803L,37804L,37805L,37806L,37807L,37808L,37809L,37810L,37811L,37812L, +37813L,37814L,37815L,37816L,37817L,37818L,37819L,37820L,37821L,37822L, +37823L,37824L,37825L,37826L,37827L,37828L,37829L,37830L,37831L,37832L, +37833L,37834L,37835L,37836L,37837L,37838L,37839L,37840L,37841L,37842L, +37843L,37844L,37845L,37846L,37847L,37848L,37849L,37850L,37851L,37852L, +37853L,37854L,37855L,37856L,37857L,37858L,37859L,37860L,37861L,37862L, +37863L,37864L,37865L,37866L,37867L,37868L,37869L,37870L,37871L,37872L, +37873L,37874L,37875L,37876L,37877L,37878L,37879L,37880L,37881L,37882L, +37883L,37884L,37885L,37886L,37887L,37888L,37889L,37890L,37891L,37892L, +37893L,37894L,37895L,37896L,37897L,37898L,37899L,37900L,37901L,37902L, +37903L,37904L,37905L,37906L,37907L,37908L,37909L,37910L,37911L,37912L, +37913L,37914L,37915L,37916L,37917L,37918L,37919L,37920L,37921L,37922L, +37923L,37924L,37925L,37926L,37927L,37928L,37929L,37930L,37931L,37932L, +37933L,37934L,37935L,37936L,37937L,37938L,37939L,37940L,37941L,37942L, +37943L,37944L,37945L,37946L,37947L,37948L,37949L,37950L,37951L,37952L, +37953L,37954L,37955L,37956L,37957L,37958L,37959L,37960L,37961L,37962L, +37963L,37964L,37965L,37966L,37967L,37968L,37969L,37970L,37971L,37972L, +37973L,37974L,37975L,37976L,37977L,37978L,37979L,37980L,37981L,37982L, +37983L,37984L,37985L,37986L,37987L,37988L,37989L,37990L,37991L,37992L, +37993L,37994L,37995L,37996L,37997L,37998L,37999L,38000L,38001L,38002L, +38003L,38004L,38005L,38006L,38007L,38008L,38009L,38010L,38011L,38012L, +38013L,38014L,38015L,38016L,38017L,38018L,38019L,38020L,38021L,38022L, +38023L,38024L,38025L,38026L,38027L,38028L,38029L,38030L,38031L,38032L, +38033L,38034L,38035L,38036L,38037L,38038L,38039L,38040L,38041L,38042L, +38043L,38044L,38045L,38046L,38047L,38048L,38049L,38050L,38051L,38052L, +38053L,38054L,38055L,38056L,38057L,38058L,38059L,38060L,38061L,38062L, +38063L,38064L,38065L,38066L,38067L,38068L,38069L,38070L,38071L,38072L, +38073L,38074L,38075L,38076L,38077L,38078L,38079L,38080L,38081L,38082L, +38083L,38084L,38085L,38086L,38087L,38088L,38089L,38090L,38091L,38092L, +38093L,38094L,38095L,38096L,38097L,38098L,38099L,38100L,38101L,38102L, +38103L,38104L,38105L,38106L,38107L,38108L,38109L,38110L,38111L,38112L, +38113L,38114L,38115L,38116L,38117L,38118L,38119L,38120L,38121L,38122L, +38123L,38124L,38125L,38126L,38127L,38128L,38129L,38130L,38131L,38132L, +38133L,38134L,38135L,38136L,38137L,38138L,38139L,38140L,38141L,38142L, +38143L,38144L,38145L,38146L,38147L,38148L,38149L,38150L,38151L,38152L, +38153L,38154L,38155L,38156L,38157L,38158L,38159L,38160L,38161L,38162L, +38163L,38164L,38165L,38166L,38167L,38168L,38169L,38170L,38171L,38172L, +38173L,38174L,38175L,38176L,38177L,38178L,38179L,38180L,38181L,38182L, +38183L,38184L,38185L,38186L,38187L,38188L,38189L,38190L,38191L,38192L, +38193L,38194L,38195L,38196L,38197L,38198L,38199L,38200L,38201L,38202L, +38203L,38204L,38205L,38206L,38207L,38208L,38209L,38210L,38211L,38212L, +38213L,38214L,38215L,38216L,38217L,38218L,38219L,38220L,38221L,38222L, +38223L,38224L,38225L,38226L,38227L,38228L,38229L,38230L,38231L,38232L, +38233L,38234L,38235L,38236L,38237L,38238L,38239L,38240L,38241L,38242L, +38243L,38244L,38245L,38246L,38247L,38248L,38249L,38250L,38251L,38252L, +38253L,38254L,38255L,38256L,38257L,38258L,38259L,38260L,38261L,38262L, +38263L,38264L,38265L,38266L,38267L,38268L,38269L,38270L,38271L,38272L, +38273L,38274L,38275L,38276L,38277L,38278L,38279L,38280L,38281L,38282L, +38283L,38284L,38285L,38286L,38287L,38288L,38289L,38290L,38291L,38292L, +38293L,38294L,38295L,38296L,38297L,38298L,38299L,38300L,38301L,38302L, +38303L,38304L,38305L,38306L,38307L,38308L,38309L,38310L,38311L,38312L, +38313L,38314L,38315L,38316L,38317L,38318L,38319L,38320L,38321L,38322L, +38323L,38324L,38325L,38326L,38327L,38328L,38329L,38330L,38331L,38332L, +38333L,38334L,38335L,38336L,38337L,38338L,38339L,38340L,38341L,38342L, +38343L,38344L,38345L,38346L,38347L,38348L,38349L,38350L,38351L,38352L, +38353L,38354L,38355L,38356L,38357L,38358L,38359L,38360L,38361L,38362L, +38363L,38364L,38365L,38366L,38367L,38368L,38369L,38370L,38371L,38372L, +38373L,38374L,38375L,38376L,38377L,38378L,38379L,38380L,38381L,38382L, +38383L,38384L,38385L,38386L,38387L,38388L,38389L,38390L,38391L,38392L, +38393L,38394L,38395L,38396L,38397L,38398L,38399L,38400L,38401L,38402L, +38403L,38404L,38405L,38406L,38407L,38408L,38409L,38410L,38411L,38412L, +38413L,38414L,38415L,38416L,38417L,38418L,38419L,38420L,38421L,38422L, +38423L,38424L,38425L,38426L,38427L,38428L,38429L,38430L,38431L,38432L, +38433L,38434L,38435L,38436L,38437L,38438L,38439L,38440L,38441L,38442L, +38443L,38444L,38445L,38446L,38447L,38448L,38449L,38450L,38451L,38452L, +38453L,38454L,38455L,38456L,38457L,38458L,38459L,38460L,38461L,38462L, +38463L,38464L,38465L,38466L,38467L,38468L,38469L,38470L,38471L,38472L, +38473L,38474L,38475L,38476L,38477L,38478L,38479L,38480L,38481L,38482L, +38483L,38484L,38485L,38486L,38487L,38488L,38489L,38490L,38491L,38492L, +38493L,38494L,38495L,38496L,38497L,38498L,38499L,38500L,38501L,38502L, +38503L,38504L,38505L,38506L,38507L,38508L,38509L,38510L,38511L,38512L, +38513L,38514L,38515L,38516L,38517L,38518L,38519L,38520L,38521L,38522L, +38523L,38524L,38525L,38526L,38527L,38528L,38529L,38530L,38531L,38532L, +38533L,38534L,38535L,38536L,38537L,38538L,38539L,38540L,38541L,38542L, +38543L,38544L,38545L,38546L,38547L,38548L,38549L,38550L,38551L,38552L, +38553L,38554L,38555L,38556L,38557L,38558L,38559L,38560L,38561L,38562L, +38563L,38564L,38565L,38566L,38567L,38568L,38569L,38570L,38571L,38572L, +38573L,38574L,38575L,38576L,38577L,38578L,38579L,38580L,38581L,38582L, +38583L,38584L,38585L,38586L,38587L,38588L,38589L,38590L,38591L,38592L, +38593L,38594L,38595L,38596L,38597L,38598L,38599L,38600L,38601L,38602L, +38603L,38604L,38605L,38606L,38607L,38608L,38609L,38610L,38611L,38612L, +38613L,38614L,38615L,38616L,38617L,38618L,38619L,38620L,38621L,38622L, +38623L,38624L,38625L,38626L,38627L,38628L,38629L,38630L,38631L,38632L, +38633L,38634L,38635L,38636L,38637L,38638L,38639L,38640L,38641L,38642L, +38643L,38644L,38645L,38646L,38647L,38648L,38649L,38650L,38651L,38652L, +38653L,38654L,38655L,38656L,38657L,38658L,38659L,38660L,38661L,38662L, +38663L,38664L,38665L,38666L,38667L,38668L,38669L,38670L,38671L,38672L, +38673L,38674L,38675L,38676L,38677L,38678L,38679L,38680L,38681L,38682L, +38683L,38684L,38685L,38686L,38687L,38688L,38689L,38690L,38691L,38692L, +38693L,38694L,38695L,38696L,38697L,38698L,38699L,38700L,38701L,38702L, +38703L,38704L,38705L,38706L,38707L,38708L,38709L,38710L,38711L,38712L, +38713L,38714L,38715L,38716L,38717L,38718L,38719L,38720L,38721L,38722L, +38723L,38724L,38725L,38726L,38727L,38728L,38729L,38730L,38731L,38732L, +38733L,38734L,38735L,38736L,38737L,38738L,38739L,38740L,38741L,38742L, +38743L,38744L,38745L,38746L,38747L,38748L,38749L,38750L,38751L,38752L, +38753L,38754L,38755L,38756L,38757L,38758L,38759L,38760L,38761L,38762L, +38763L,38764L,38765L,38766L,38767L,38768L,38769L,38770L,38771L,38772L, +38773L,38774L,38775L,38776L,38777L,38778L,38779L,38780L,38781L,38782L, +38783L,38784L,38785L,38786L,38787L,38788L,38789L,38790L,38791L,38792L, +38793L,38794L,38795L,38796L,38797L,38798L,38799L,38800L,38801L,38802L, +38803L,38804L,38805L,38806L,38807L,38808L,38809L,38810L,38811L,38812L, +38813L,38814L,38815L,38816L,38817L,38818L,38819L,38820L,38821L,38822L, +38823L,38824L,38825L,38826L,38827L,38828L,38829L,38830L,38831L,38832L, +38833L,38834L,38835L,38836L,38837L,38838L,38839L,38840L,38841L,38842L, +38843L,38844L,38845L,38846L,38847L,38848L,38849L,38850L,38851L,38852L, +38853L,38854L,38855L,38856L,38857L,38858L,38859L,38860L,38861L,38862L, +38863L,38864L,38865L,38866L,38867L,38868L,38869L,38870L,38871L,38872L, +38873L,38874L,38875L,38876L,38877L,38878L,38879L,38880L,38881L,38882L, +38883L,38884L,38885L,38886L,38887L,38888L,38889L,38890L,38891L,38892L, +38893L,38894L,38895L,38896L,38897L,38898L,38899L,38900L,38901L,38902L, +38903L,38904L,38905L,38906L,38907L,38908L,38909L,38910L,38911L,38912L, +38913L,38914L,38915L,38916L,38917L,38918L,38919L,38920L,38921L,38922L, +38923L,38924L,38925L,38926L,38927L,38928L,38929L,38930L,38931L,38932L, +38933L,38934L,38935L,38936L,38937L,38938L,38939L,38940L,38941L,38942L, +38943L,38944L,38945L,38946L,38947L,38948L,38949L,38950L,38951L,38952L, +38953L,38954L,38955L,38956L,38957L,38958L,38959L,38960L,38961L,38962L, +38963L,38964L,38965L,38966L,38967L,38968L,38969L,38970L,38971L,38972L, +38973L,38974L,38975L,38976L,38977L,38978L,38979L,38980L,38981L,38982L, +38983L,38984L,38985L,38986L,38987L,38988L,38989L,38990L,38991L,38992L, +38993L,38994L,38995L,38996L,38997L,38998L,38999L,39000L,39001L,39002L, +39003L,39004L,39005L,39006L,39007L,39008L,39009L,39010L,39011L,39012L, +39013L,39014L,39015L,39016L,39017L,39018L,39019L,39020L,39021L,39022L, +39023L,39024L,39025L,39026L,39027L,39028L,39029L,39030L,39031L,39032L, +39033L,39034L,39035L,39036L,39037L,39038L,39039L,39040L,39041L,39042L, +39043L,39044L,39045L,39046L,39047L,39048L,39049L,39050L,39051L,39052L, +39053L,39054L,39055L,39056L,39057L,39058L,39059L,39060L,39061L,39062L, +39063L,39064L,39065L,39066L,39067L,39068L,39069L,39070L,39071L,39072L, +39073L,39074L,39075L,39076L,39077L,39078L,39079L,39080L,39081L,39082L, +39083L,39084L,39085L,39086L,39087L,39088L,39089L,39090L,39091L,39092L, +39093L,39094L,39095L,39096L,39097L,39098L,39099L,39100L,39101L,39102L, +39103L,39104L,39105L,39106L,39107L,39108L,39109L,39110L,39111L,39112L, +39113L,39114L,39115L,39116L,39117L,39118L,39119L,39120L,39121L,39122L, +39123L,39124L,39125L,39126L,39127L,39128L,39129L,39130L,39131L,39132L, +39133L,39134L,39135L,39136L,39137L,39138L,39139L,39140L,39141L,39142L, +39143L,39144L,39145L,39146L,39147L,39148L,39149L,39150L,39151L,39152L, +39153L,39154L,39155L,39156L,39157L,39158L,39159L,39160L,39161L,39162L, +39163L,39164L,39165L,39166L,39167L,39168L,39169L,39170L,39171L,39172L, +39173L,39174L,39175L,39176L,39177L,39178L,39179L,39180L,39181L,39182L, +39183L,39184L,39185L,39186L,39187L,39188L,39189L,39190L,39191L,39192L, +39193L,39194L,39195L,39196L,39197L,39198L,39199L,39200L,39201L,39202L, +39203L,39204L,39205L,39206L,39207L,39208L,39209L,39210L,39211L,39212L, +39213L,39214L,39215L,39216L,39217L,39218L,39219L,39220L,39221L,39222L, +39223L,39224L,39225L,39226L,39227L,39228L,39229L,39230L,39231L,39232L, +39233L,39234L,39235L,39236L,39237L,39238L,39239L,39240L,39241L,39242L, +39243L,39244L,39245L,39246L,39247L,39248L,39249L,39250L,39251L,39252L, +39253L,39254L,39255L,39256L,39257L,39258L,39259L,39260L,39261L,39262L, +39263L,39264L,39265L,39266L,39267L,39268L,39269L,39270L,39271L,39272L, +39273L,39274L,39275L,39276L,39277L,39278L,39279L,39280L,39281L,39282L, +39283L,39284L,39285L,39286L,39287L,39288L,39289L,39290L,39291L,39292L, +39293L,39294L,39295L,39296L,39297L,39298L,39299L,39300L,39301L,39302L, +39303L,39304L,39305L,39306L,39307L,39308L,39309L,39310L,39311L,39312L, +39313L,39314L,39315L,39316L,39317L,39318L,39319L,39320L,39321L,39322L, +39323L,39324L,39325L,39326L,39327L,39328L,39329L,39330L,39331L,39332L, +39333L,39334L,39335L,39336L,39337L,39338L,39339L,39340L,39341L,39342L, +39343L,39344L,39345L,39346L,39347L,39348L,39349L,39350L,39351L,39352L, +39353L,39354L,39355L,39356L,39357L,39358L,39359L,39360L,39361L,39362L, +39363L,39364L,39365L,39366L,39367L,39368L,39369L,39370L,39371L,39372L, +39373L,39374L,39375L,39376L,39377L,39378L,39379L,39380L,39381L,39382L, +39383L,39384L,39385L,39386L,39387L,39388L,39389L,39390L,39391L,39392L, +39393L,39394L,39395L,39396L,39397L,39398L,39399L,39400L,39401L,39402L, +39403L,39404L,39405L,39406L,39407L,39408L,39409L,39410L,39411L,39412L, +39413L,39414L,39415L,39416L,39417L,39418L,39419L,39420L,39421L,39422L, +39423L,39424L,39425L,39426L,39427L,39428L,39429L,39430L,39431L,39432L, +39433L,39434L,39435L,39436L,39437L,39438L,39439L,39440L,39441L,39442L, +39443L,39444L,39445L,39446L,39447L,39448L,39449L,39450L,39451L,39452L, +39453L,39454L,39455L,39456L,39457L,39458L,39459L,39460L,39461L,39462L, +39463L,39464L,39465L,39466L,39467L,39468L,39469L,39470L,39471L,39472L, +39473L,39474L,39475L,39476L,39477L,39478L,39479L,39480L,39481L,39482L, +39483L,39484L,39485L,39486L,39487L,39488L,39489L,39490L,39491L,39492L, +39493L,39494L,39495L,39496L,39497L,39498L,39499L,39500L,39501L,39502L, +39503L,39504L,39505L,39506L,39507L,39508L,39509L,39510L,39511L,39512L, +39513L,39514L,39515L,39516L,39517L,39518L,39519L,39520L,39521L,39522L, +39523L,39524L,39525L,39526L,39527L,39528L,39529L,39530L,39531L,39532L, +39533L,39534L,39535L,39536L,39537L,39538L,39539L,39540L,39541L,39542L, +39543L,39544L,39545L,39546L,39547L,39548L,39549L,39550L,39551L,39552L, +39553L,39554L,39555L,39556L,39557L,39558L,39559L,39560L,39561L,39562L, +39563L,39564L,39565L,39566L,39567L,39568L,39569L,39570L,39571L,39572L, +39573L,39574L,39575L,39576L,39577L,39578L,39579L,39580L,39581L,39582L, +39583L,39584L,39585L,39586L,39587L,39588L,39589L,39590L,39591L,39592L, +39593L,39594L,39595L,39596L,39597L,39598L,39599L,39600L,39601L,39602L, +39603L,39604L,39605L,39606L,39607L,39608L,39609L,39610L,39611L,39612L, +39613L,39614L,39615L,39616L,39617L,39618L,39619L,39620L,39621L,39622L, +39623L,39624L,39625L,39626L,39627L,39628L,39629L,39630L,39631L,39632L, +39633L,39634L,39635L,39636L,39637L,39638L,39639L,39640L,39641L,39642L, +39643L,39644L,39645L,39646L,39647L,39648L,39649L,39650L,39651L,39652L, +39653L,39654L,39655L,39656L,39657L,39658L,39659L,39660L,39661L,39662L, +39663L,39664L,39665L,39666L,39667L,39668L,39669L,39670L,39671L,39672L, +39673L,39674L,39675L,39676L,39677L,39678L,39679L,39680L,39681L,39682L, +39683L,39684L,39685L,39686L,39687L,39688L,39689L,39690L,39691L,39692L, +39693L,39694L,39695L,39696L,39697L,39698L,39699L,39700L,39701L,39702L, +39703L,39704L,39705L,39706L,39707L,39708L,39709L,39710L,39711L,39712L, +39713L,39714L,39715L,39716L,39717L,39718L,39719L,39720L,39721L,39722L, +39723L,39724L,39725L,39726L,39727L,39728L,39729L,39730L,39731L,39732L, +39733L,39734L,39735L,39736L,39737L,39738L,39739L,39740L,39741L,39742L, +39743L,39744L,39745L,39746L,39747L,39748L,39749L,39750L,39751L,39752L, +39753L,39754L,39755L,39756L,39757L,39758L,39759L,39760L,39761L,39762L, +39763L,39764L,39765L,39766L,39767L,39768L,39769L,39770L,39771L,39772L, +39773L,39774L,39775L,39776L,39777L,39778L,39779L,39780L,39781L,39782L, +39783L,39784L,39785L,39786L,39787L,39788L,39789L,39790L,39791L,39792L, +39793L,39794L,39795L,39796L,39797L,39798L,39799L,39800L,39801L,39802L, +39803L,39804L,39805L,39806L,39807L,39808L,39809L,39810L,39811L,39812L, +39813L,39814L,39815L,39816L,39817L,39818L,39819L,39820L,39821L,39822L, +39823L,39824L,39825L,39826L,39827L,39828L,39829L,39830L,39831L,39832L, +39833L,39834L,39835L,39836L,39837L,39838L,39839L,39840L,39841L,39842L, +39843L,39844L,39845L,39846L,39847L,39848L,39849L,39850L,39851L,39852L, +39853L,39854L,39855L,39856L,39857L,39858L,39859L,39860L,39861L,39862L, +39863L,39864L,39865L,39866L,39867L,39868L,39869L,39870L,39871L,39872L, +39873L,39874L,39875L,39876L,39877L,39878L,39879L,39880L,39881L,39882L, +39883L,39884L,39885L,39886L,39887L,39888L,39889L,39890L,39891L,39892L, +39893L,39894L,39895L,39896L,39897L,39898L,39899L,39900L,39901L,39902L, +39903L,39904L,39905L,39906L,39907L,39908L,39909L,39910L,39911L,39912L, +39913L,39914L,39915L,39916L,39917L,39918L,39919L,39920L,39921L,39922L, +39923L,39924L,39925L,39926L,39927L,39928L,39929L,39930L,39931L,39932L, +39933L,39934L,39935L,39936L,39937L,39938L,39939L,39940L,39941L,39942L, +39943L,39944L,39945L,39946L,39947L,39948L,39949L,39950L,39951L,39952L, +39953L,39954L,39955L,39956L,39957L,39958L,39959L,39960L,39961L,39962L, +39963L,39964L,39965L,39966L,39967L,39968L,39969L,39970L,39971L,39972L, +39973L,39974L,39975L,39976L,39977L,39978L,39979L,39980L,39981L,39982L, +39983L,39984L,39985L,39986L,39987L,39988L,39989L,39990L,39991L,39992L, +39993L,39994L,39995L,39996L,39997L,39998L,39999L,40000L,40001L,40002L, +40003L,40004L,40005L,40006L,40007L,40008L,40009L,40010L,40011L,40012L, +40013L,40014L,40015L,40016L,40017L,40018L,40019L,40020L,40021L,40022L, +40023L,40024L,40025L,40026L,40027L,40028L,40029L,40030L,40031L,40032L, +40033L,40034L,40035L,40036L,40037L,40038L,40039L,40040L,40041L,40042L, +40043L,40044L,40045L,40046L,40047L,40048L,40049L,40050L,40051L,40052L, +40053L,40054L,40055L,40056L,40057L,40058L,40059L,40060L,40061L,40062L, +40063L,40064L,40065L,40066L,40067L,40068L,40069L,40070L,40071L,40072L, +40073L,40074L,40075L,40076L,40077L,40078L,40079L,40080L,40081L,40082L, +40083L,40084L,40085L,40086L,40087L,40088L,40089L,40090L,40091L,40092L, +40093L,40094L,40095L,40096L,40097L,40098L,40099L,40100L,40101L,40102L, +40103L,40104L,40105L,40106L,40107L,40108L,40109L,40110L,40111L,40112L, +40113L,40114L,40115L,40116L,40117L,40118L,40119L,40120L,40121L,40122L, +40123L,40124L,40125L,40126L,40127L,40128L,40129L,40130L,40131L,40132L, +40133L,40134L,40135L,40136L,40137L,40138L,40139L,40140L,40141L,40142L, +40143L,40144L,40145L,40146L,40147L,40148L,40149L,40150L,40151L,40152L, +40153L,40154L,40155L,40156L,40157L,40158L,40159L,40160L,40161L,40162L, +40163L,40164L,40165L,40166L,40167L,40168L,40169L,40170L,40171L,40172L, +40173L,40174L,40175L,40176L,40177L,40178L,40179L,40180L,40181L,40182L, +40183L,40184L,40185L,40186L,40187L,40188L,40189L,40190L,40191L,40192L, +40193L,40194L,40195L,40196L,40197L,40198L,40199L,40200L,40201L,40202L, +40203L,40204L,40205L,40206L,40207L,40208L,40209L,40210L,40211L,40212L, +40213L,40214L,40215L,40216L,40217L,40218L,40219L,40220L,40221L,40222L, +40223L,40224L,40225L,40226L,40227L,40228L,40229L,40230L,40231L,40232L, +40233L,40234L,40235L,40236L,40237L,40238L,40239L,40240L,40241L,40242L, +40243L,40244L,40245L,40246L,40247L,40248L,40249L,40250L,40251L,40252L, +40253L,40254L,40255L,40256L,40257L,40258L,40259L,40260L,40261L,40262L, +40263L,40264L,40265L,40266L,40267L,40268L,40269L,40270L,40271L,40272L, +40273L,40274L,40275L,40276L,40277L,40278L,40279L,40280L,40281L,40282L, +40283L,40284L,40285L,40286L,40287L,40288L,40289L,40290L,40291L,40292L, +40293L,40294L,40295L,40296L,40297L,40298L,40299L,40300L,40301L,40302L, +40303L,40304L,40305L,40306L,40307L,40308L,40309L,40310L,40311L,40312L, +40313L,40314L,40315L,40316L,40317L,40318L,40319L,40320L,40321L,40322L, +40323L,40324L,40325L,40326L,40327L,40328L,40329L,40330L,40331L,40332L, +40333L,40334L,40335L,40336L,40337L,40338L,40339L,40340L,40341L,40342L, +40343L,40344L,40345L,40346L,40347L,40348L,40349L,40350L,40351L,40352L, +40353L,40354L,40355L,40356L,40357L,40358L,40359L,40360L,40361L,40362L, +40363L,40364L,40365L,40366L,40367L,40368L,40369L,40370L,40371L,40372L, +40373L,40374L,40375L,40376L,40377L,40378L,40379L,40380L,40381L,40382L, +40383L,40384L,40385L,40386L,40387L,40388L,40389L,40390L,40391L,40392L, +40393L,40394L,40395L,40396L,40397L,40398L,40399L,40400L,40401L,40402L, +40403L,40404L,40405L,40406L,40407L,40408L,40409L,40410L,40411L,40412L, +40413L,40414L,40415L,40416L,40417L,40418L,40419L,40420L,40421L,40422L, +40423L,40424L,40425L,40426L,40427L,40428L,40429L,40430L,40431L,40432L, +40433L,40434L,40435L,40436L,40437L,40438L,40439L,40440L,40441L,40442L, +40443L,40444L,40445L,40446L,40447L,40448L,40449L,40450L,40451L,40452L, +40453L,40454L,40455L,40456L,40457L,40458L,40459L,40460L,40461L,40462L, +40463L,40464L,40465L,40466L,40467L,40468L,40469L,40470L,40471L,40472L, +40473L,40474L,40475L,40476L,40477L,40478L,40479L,40480L,40481L,40482L, +40483L,40484L,40485L,40486L,40487L,40488L,40489L,40490L,40491L,40492L, +40493L,40494L,40495L,40496L,40497L,40498L,40499L,40500L,40501L,40502L, +40503L,40504L,40505L,40506L,40507L,40508L,40509L,40510L,40511L,40512L, +40513L,40514L,40515L,40516L,40517L,40518L,40519L,40520L,40521L,40522L, +40523L,40524L,40525L,40526L,40527L,40528L,40529L,40530L,40531L,40532L, +40533L,40534L,40535L,40536L,40537L,40538L,40539L,40540L,40541L,40542L, +40543L,40544L,40545L,40546L,40547L,40548L,40549L,40550L,40551L,40552L, +40553L,40554L,40555L,40556L,40557L,40558L,40559L,40560L,40561L,40562L, +40563L,40564L,40565L,40566L,40567L,40568L,40569L,40570L,40571L,40572L, +40573L,40574L,40575L,40576L,40577L,40578L,40579L,40580L,40581L,40582L, +40583L,40584L,40585L,40586L,40587L,40588L,40589L,40590L,40591L,40592L, +40593L,40594L,40595L,40596L,40597L,40598L,40599L,40600L,40601L,40602L, +40603L,40604L,40605L,40606L,40607L,40608L,40609L,40610L,40611L,40612L, +40613L,40614L,40615L,40616L,40617L,40618L,40619L,40620L,40621L,40622L, +40623L,40624L,40625L,40626L,40627L,40628L,40629L,40630L,40631L,40632L, +40633L,40634L,40635L,40636L,40637L,40638L,40639L,40640L,40641L,40642L, +40643L,40644L,40645L,40646L,40647L,40648L,40649L,40650L,40651L,40652L, +40653L,40654L,40655L,40656L,40657L,40658L,40659L,40660L,40661L,40662L, +40663L,40664L,40665L,40666L,40667L,40668L,40669L,40670L,40671L,40672L, +40673L,40674L,40675L,40676L,40677L,40678L,40679L,40680L,40681L,40682L, +40683L,40684L,40685L,40686L,40687L,40688L,40689L,40690L,40691L,40692L, +40693L,40694L,40695L,40696L,40697L,40698L,40699L,40700L,40701L,40702L, +40703L,40704L,40705L,40706L,40707L,40708L,40709L,40710L,40711L,40712L, +40713L,40714L,40715L,40716L,40717L,40718L,40719L,40720L,40721L,40722L, +40723L,40724L,40725L,40726L,40727L,40728L,40729L,40730L,40731L,40732L, +40733L,40734L,40735L,40736L,40737L,40738L,40739L,40740L,40741L,40742L, +40743L,40744L,40745L,40746L,40747L,40748L,40749L,40750L,40751L,40752L, +40753L,40754L,40755L,40756L,40757L,40758L,40759L,40760L,40761L,40762L, +40763L,40764L,40765L,40766L,40767L,40768L,40769L,40770L,40771L,40772L, +40773L,40774L,40775L,40776L,40777L,40778L,40779L,40780L,40781L,40782L, +40783L,40784L,40785L,40786L,40787L,40788L,40789L,40790L,40791L,40792L, +40793L,40794L,40795L,40796L,40797L,40798L,40799L,40800L,40801L,40802L, +40803L,40804L,40805L,40806L,40807L,40808L,40809L,40810L,40811L,40812L, +40813L,40814L,40815L,40816L,40817L,40818L,40819L,40820L,40821L,40822L, +40823L,40824L,40825L,40826L,40827L,40828L,40829L,40830L,40831L,40832L, +40833L,40834L,40835L,40836L,40837L,40838L,40839L,40840L,40841L,40842L, +40843L,40844L,40845L,40846L,40847L,40848L,40849L,40850L,40851L,40852L, +40853L,40854L,40855L,40856L,40857L,40858L,40859L,40860L,40861L,40862L, +40863L,40864L,40865L,40866L,40867L,40868L,40869L,40870L,40871L,40872L, +40873L,40874L,40875L,40876L,40877L,40878L,40879L,40880L,40881L,40882L, +40883L,40884L,40885L,40886L,40887L,40888L,40889L,40890L,40891L,40892L, +40893L,40894L,40895L,40896L,40897L,40898L,40899L,40900L,40901L,40902L, +40903L,40904L,40905L,40906L,40907L,40908L,40909L,40910L,40911L,40912L, +40913L,40914L,40915L,40916L,40917L,40918L,40919L,40920L,40921L,40922L, +40923L,40924L,40925L,40926L,40927L,40928L,40929L,40930L,40931L,40932L, +40933L,40934L,40935L,40936L,40937L,40938L,40939L,40940L,40941L,40942L, +40943L,40944L,40945L,40946L,40947L,40948L,40949L,40950L,40951L,40952L, +40953L,40954L,40955L,40956L,40957L,40958L,40959L,40960L,40961L,40962L, +40963L,40964L,40965L,40966L,40967L,40968L,40969L,40970L,40971L,40972L, +40973L,40974L,40975L,40976L,40977L,40978L,40979L,40980L,40981L,40982L, +40983L,40984L,40985L,40986L,40987L,40988L,40989L,40990L,40991L,40992L, +40993L,40994L,40995L,40996L,40997L,40998L,40999L,41000L,41001L,41002L, +41003L,41004L,41005L,41006L,41007L,41008L,41009L,41010L,41011L,41012L, +41013L,41014L,41015L,41016L,41017L,41018L,41019L,41020L,41021L,41022L, +41023L,41024L,41025L,41026L,41027L,41028L,41029L,41030L,41031L,41032L, +41033L,41034L,41035L,41036L,41037L,41038L,41039L,41040L,41041L,41042L, +41043L,41044L,41045L,41046L,41047L,41048L,41049L,41050L,41051L,41052L, +41053L,41054L,41055L,41056L,41057L,41058L,41059L,41060L,41061L,41062L, +41063L,41064L,41065L,41066L,41067L,41068L,41069L,41070L,41071L,41072L, +41073L,41074L,41075L,41076L,41077L,41078L,41079L,41080L,41081L,41082L, +41083L,41084L,41085L,41086L,41087L,41088L,41089L,41090L,41091L,41092L, +41093L,41094L,41095L,41096L,41097L,41098L,41099L,41100L,41101L,41102L, +41103L,41104L,41105L,41106L,41107L,41108L,41109L,41110L,41111L,41112L, +41113L,41114L,41115L,41116L,41117L,41118L,41119L,41120L,41121L,41122L, +41123L,41124L,41125L,41126L,41127L,41128L,41129L,41130L,41131L,41132L, +41133L,41134L,41135L,41136L,41137L,41138L,41139L,41140L,41141L,41142L, +41143L,41144L,41145L,41146L,41147L,41148L,41149L,41150L,41151L,41152L, +41153L,41154L,41155L,41156L,41157L,41158L,41159L,41160L,41161L,41162L, +41163L,41164L,41165L,41166L,41167L,41168L,41169L,41170L,41171L,41172L, +41173L,41174L,41175L,41176L,41177L,41178L,41179L,41180L,41181L,41182L, +41183L,41184L,41185L,41186L,41187L,41188L,41189L,41190L,41191L,41192L, +41193L,41194L,41195L,41196L,41197L,41198L,41199L,41200L,41201L,41202L, +41203L,41204L,41205L,41206L,41207L,41208L,41209L,41210L,41211L,41212L, +41213L,41214L,41215L,41216L,41217L,41218L,41219L,41220L,41221L,41222L, +41223L,41224L,41225L,41226L,41227L,41228L,41229L,41230L,41231L,41232L, +41233L,41234L,41235L,41236L,41237L,41238L,41239L,41240L,41241L,41242L, +41243L,41244L,41245L,41246L,41247L,41248L,41249L,41250L,41251L,41252L, +41253L,41254L,41255L,41256L,41257L,41258L,41259L,41260L,41261L,41262L, +41263L,41264L,41265L,41266L,41267L,41268L,41269L,41270L,41271L,41272L, +41273L,41274L,41275L,41276L,41277L,41278L,41279L,41280L,41281L,41282L, +41283L,41284L,41285L,41286L,41287L,41288L,41289L,41290L,41291L,41292L, +41293L,41294L,41295L,41296L,41297L,41298L,41299L,41300L,41301L,41302L, +41303L,41304L,41305L,41306L,41307L,41308L,41309L,41310L,41311L,41312L, +41313L,41314L,41315L,41316L,41317L,41318L,41319L,41320L,41321L,41322L, +41323L,41324L,41325L,41326L,41327L,41328L,41329L,41330L,41331L,41332L, +41333L,41334L,41335L,41336L,41337L,41338L,41339L,41340L,41341L,41342L, +41343L,41344L,41345L,41346L,41347L,41348L,41349L,41350L,41351L,41352L, +41353L,41354L,41355L,41356L,41357L,41358L,41359L,41360L,41361L,41362L, +41363L,41364L,41365L,41366L,41367L,41368L,41369L,41370L,41371L,41372L, +41373L,41374L,41375L,41376L,41377L,41378L,41379L,41380L,41381L,41382L, +41383L,41384L,41385L,41386L,41387L,41388L,41389L,41390L,41391L,41392L, +41393L,41394L,41395L,41396L,41397L,41398L,41399L,41400L,41401L,41402L, +41403L,41404L,41405L,41406L,41407L,41408L,41409L,41410L,41411L,41412L, +41413L,41414L,41415L,41416L,41417L,41418L,41419L,41420L,41421L,41422L, +41423L,41424L,41425L,41426L,41427L,41428L,41429L,41430L,41431L,41432L, +41433L,41434L,41435L,41436L,41437L,41438L,41439L,41440L,41441L,41442L, +41443L,41444L,41445L,41446L,41447L,41448L,41449L,41450L,41451L,41452L, +41453L,41454L,41455L,41456L,41457L,41458L,41459L,41460L,41461L,41462L, +41463L,41464L,41465L,41466L,41467L,41468L,41469L,41470L,41471L,41472L, +41473L,41474L,41475L,41476L,41477L,41478L,41479L,41480L,41481L,41482L, +41483L,41484L,41485L,41486L,41487L,41488L,41489L,41490L,41491L,41492L, +41493L,41494L,41495L,41496L,41497L,41498L,41499L,41500L,41501L,41502L, +41503L,41504L,41505L,41506L,41507L,41508L,41509L,41510L,41511L,41512L, +41513L,41514L,41515L,41516L,41517L,41518L,41519L,41520L,41521L,41522L, +41523L,41524L,41525L,41526L,41527L,41528L,41529L,41530L,41531L,41532L, +41533L,41534L,41535L,41536L,41537L,41538L,41539L,41540L,41541L,41542L, +41543L,41544L,41545L,41546L,41547L,41548L,41549L,41550L,41551L,41552L, +41553L,41554L,41555L,41556L,41557L,41558L,41559L,41560L,41561L,41562L, +41563L,41564L,41565L,41566L,41567L,41568L,41569L,41570L,41571L,41572L, +41573L,41574L,41575L,41576L,41577L,41578L,41579L,41580L,41581L,41582L, +41583L,41584L,41585L,41586L,41587L,41588L,41589L,41590L,41591L,41592L, +41593L,41594L,41595L,41596L,41597L,41598L,41599L,41600L,41601L,41602L, +41603L,41604L,41605L,41606L,41607L,41608L,41609L,41610L,41611L,41612L, +41613L,41614L,41615L,41616L,41617L,41618L,41619L,41620L,41621L,41622L, +41623L,41624L,41625L,41626L,41627L,41628L,41629L,41630L,41631L,41632L, +41633L,41634L,41635L,41636L,41637L,41638L,41639L,41640L,41641L,41642L, +41643L,41644L,41645L,41646L,41647L,41648L,41649L,41650L,41651L,41652L, +41653L,41654L,41655L,41656L,41657L,41658L,41659L,41660L,41661L,41662L, +41663L,41664L,41665L,41666L,41667L,41668L,41669L,41670L,41671L,41672L, +41673L,41674L,41675L,41676L,41677L,41678L,41679L,41680L,41681L,41682L, +41683L,41684L,41685L,41686L,41687L,41688L,41689L,41690L,41691L,41692L, +41693L,41694L,41695L,41696L,41697L,41698L,41699L,41700L,41701L,41702L, +41703L,41704L,41705L,41706L,41707L,41708L,41709L,41710L,41711L,41712L, +41713L,41714L,41715L,41716L,41717L,41718L,41719L,41720L,41721L,41722L, +41723L,41724L,41725L,41726L,41727L,41728L,41729L,41730L,41731L,41732L, +41733L,41734L,41735L,41736L,41737L,41738L,41739L,41740L,41741L,41742L, +41743L,41744L,41745L,41746L,41747L,41748L,41749L,41750L,41751L,41752L, +41753L,41754L,41755L,41756L,41757L,41758L,41759L,41760L,41761L,41762L, +41763L,41764L,41765L,41766L,41767L,41768L,41769L,41770L,41771L,41772L, +41773L,41774L,41775L,41776L,41777L,41778L,41779L,41780L,41781L,41782L, +41783L,41784L,41785L,41786L,41787L,41788L,41789L,41790L,41791L,41792L, +41793L,41794L,41795L,41796L,41797L,41798L,41799L,41800L,41801L,41802L, +41803L,41804L,41805L,41806L,41807L,41808L,41809L,41810L,41811L,41812L, +41813L,41814L,41815L,41816L,41817L,41818L,41819L,41820L,41821L,41822L, +41823L,41824L,41825L,41826L,41827L,41828L,41829L,41830L,41831L,41832L, +41833L,41834L,41835L,41836L,41837L,41838L,41839L,41840L,41841L,41842L, +41843L,41844L,41845L,41846L,41847L,41848L,41849L,41850L,41851L,41852L, +41853L,41854L,41855L,41856L,41857L,41858L,41859L,41860L,41861L,41862L, +41863L,41864L,41865L,41866L,41867L,41868L,41869L,41870L,41871L,41872L, +41873L,41874L,41875L,41876L,41877L,41878L,41879L,41880L,41881L,41882L, +41883L,41884L,41885L,41886L,41887L,41888L,41889L,41890L,41891L,41892L, +41893L,41894L,41895L,41896L,41897L,41898L,41899L,41900L,41901L,41902L, +41903L,41904L,41905L,41906L,41907L,41908L,41909L,41910L,41911L,41912L, +41913L,41914L,41915L,41916L,41917L,41918L,41919L,41920L,41921L,41922L, +41923L,41924L,41925L,41926L,41927L,41928L,41929L,41930L,41931L,41932L, +41933L,41934L,41935L,41936L,41937L,41938L,41939L,41940L,41941L,41942L, +41943L,41944L,41945L,41946L,41947L,41948L,41949L,41950L,41951L,41952L, +41953L,41954L,41955L,41956L,41957L,41958L,41959L,41960L,41961L,41962L, +41963L,41964L,41965L,41966L,41967L,41968L,41969L,41970L,41971L,41972L, +41973L,41974L,41975L,41976L,41977L,41978L,41979L,41980L,41981L,41982L, +41983L,41984L,41985L,41986L,41987L,41988L,41989L,41990L,41991L,41992L, +41993L,41994L,41995L,41996L,41997L,41998L,41999L,42000L,42001L,42002L, +42003L,42004L,42005L,42006L,42007L,42008L,42009L,42010L,42011L,42012L, +42013L,42014L,42015L,42016L,42017L,42018L,42019L,42020L,42021L,42022L, +42023L,42024L,42025L,42026L,42027L,42028L,42029L,42030L,42031L,42032L, +42033L,42034L,42035L,42036L,42037L,42038L,42039L,42040L,42041L,42042L, +42043L,42044L,42045L,42046L,42047L,42048L,42049L,42050L,42051L,42052L, +42053L,42054L,42055L,42056L,42057L,42058L,42059L,42060L,42061L,42062L, +42063L,42064L,42065L,42066L,42067L,42068L,42069L,42070L,42071L,42072L, +42073L,42074L,42075L,42076L,42077L,42078L,42079L,42080L,42081L,42082L, +42083L,42084L,42085L,42086L,42087L,42088L,42089L,42090L,42091L,42092L, +42093L,42094L,42095L,42096L,42097L,42098L,42099L,42100L,42101L,42102L, +42103L,42104L,42105L,42106L,42107L,42108L,42109L,42110L,42111L,42112L, +42113L,42114L,42115L,42116L,42117L,42118L,42119L,42120L,42121L,42122L, +42123L,42124L,42125L,42126L,42127L,42128L,42129L,42130L,42131L,42132L, +42133L,42134L,42135L,42136L,42137L,42138L,42139L,42140L,42141L,42142L, +42143L,42144L,42145L,42146L,42147L,42148L,42149L,42150L,42151L,42152L, +42153L,42154L,42155L,42156L,42157L,42158L,42159L,42160L,42161L,42162L, +42163L,42164L,42165L,42166L,42167L,42168L,42169L,42170L,42171L,42172L, +42173L,42174L,42175L,42176L,42177L,42178L,42179L,42180L,42181L,42182L, +42183L,42184L,42185L,42186L,42187L,42188L,42189L,42190L,42191L,42192L, +42193L,42194L,42195L,42196L,42197L,42198L,42199L,42200L,42201L,42202L, +42203L,42204L,42205L,42206L,42207L,42208L,42209L,42210L,42211L,42212L, +42213L,42214L,42215L,42216L,42217L,42218L,42219L,42220L,42221L,42222L, +42223L,42224L,42225L,42226L,42227L,42228L,42229L,42230L,42231L,42232L, +42233L,42234L,42235L,42236L,42237L,42238L,42239L,42240L,42241L,42242L, +42243L,42244L,42245L,42246L,42247L,42248L,42249L,42250L,42251L,42252L, +42253L,42254L,42255L,42256L,42257L,42258L,42259L,42260L,42261L,42262L, +42263L,42264L,42265L,42266L,42267L,42268L,42269L,42270L,42271L,42272L, +42273L,42274L,42275L,42276L,42277L,42278L,42279L,42280L,42281L,42282L, +42283L,42284L,42285L,42286L,42287L,42288L,42289L,42290L,42291L,42292L, +42293L,42294L,42295L,42296L,42297L,42298L,42299L,42300L,42301L,42302L, +42303L,42304L,42305L,42306L,42307L,42308L,42309L,42310L,42311L,42312L, +42313L,42314L,42315L,42316L,42317L,42318L,42319L,42320L,42321L,42322L, +42323L,42324L,42325L,42326L,42327L,42328L,42329L,42330L,42331L,42332L, +42333L,42334L,42335L,42336L,42337L,42338L,42339L,42340L,42341L,42342L, +42343L,42344L,42345L,42346L,42347L,42348L,42349L,42350L,42351L,42352L, +42353L,42354L,42355L,42356L,42357L,42358L,42359L,42360L,42361L,42362L, +42363L,42364L,42365L,42366L,42367L,42368L,42369L,42370L,42371L,42372L, +42373L,42374L,42375L,42376L,42377L,42378L,42379L,42380L,42381L,42382L, +42383L,42384L,42385L,42386L,42387L,42388L,42389L,42390L,42391L,42392L, +42393L,42394L,42395L,42396L,42397L,42398L,42399L,42400L,42401L,42402L, +42403L,42404L,42405L,42406L,42407L,42408L,42409L,42410L,42411L,42412L, +42413L,42414L,42415L,42416L,42417L,42418L,42419L,42420L,42421L,42422L, +42423L,42424L,42425L,42426L,42427L,42428L,42429L,42430L,42431L,42432L, +42433L,42434L,42435L,42436L,42437L,42438L,42439L,42440L,42441L,42442L, +42443L,42444L,42445L,42446L,42447L,42448L,42449L,42450L,42451L,42452L, +42453L,42454L,42455L,42456L,42457L,42458L,42459L,42460L,42461L,42462L, +42463L,42464L,42465L,42466L,42467L,42468L,42469L,42470L,42471L,42472L, +42473L,42474L,42475L,42476L,42477L,42478L,42479L,42480L,42481L,42482L, +42483L,42484L,42485L,42486L,42487L,42488L,42489L,42490L,42491L,42492L, +42493L,42494L,42495L,42496L,42497L,42498L,42499L,42500L,42501L,42502L, +42503L,42504L,42505L,42506L,42507L,42508L,42509L,42510L,42511L,42512L, +42513L,42514L,42515L,42516L,42517L,42518L,42519L,42520L,42521L,42522L, +42523L,42524L,42525L,42526L,42527L,42528L,42529L,42530L,42531L,42532L, +42533L,42534L,42535L,42536L,42537L,42538L,42539L,42540L,42541L,42542L, +42543L,42544L,42545L,42546L,42547L,42548L,42549L,42550L,42551L,42552L, +42553L,42554L,42555L,42556L,42557L,42558L,42559L,42560L,42560L,42562L, +42562L,42564L,42564L,42566L,42566L,42568L,42568L,42570L,42570L,42572L, +42572L,42574L,42574L,42576L,42576L,42578L,42578L,42580L,42580L,42582L, +42582L,42584L,42584L,42586L,42586L,42588L,42588L,42590L,42590L,42592L, +42592L,42594L,42594L,42596L,42596L,42598L,42598L,42600L,42600L,42602L, +42602L,42604L,42604L,42606L,42607L,42608L,42609L,42610L,42611L,42612L, +42613L,42614L,42615L,42616L,42617L,42618L,42619L,42620L,42621L,42622L, +42623L,42624L,42624L,42626L,42626L,42628L,42628L,42630L,42630L,42632L, +42632L,42634L,42634L,42636L,42636L,42638L,42638L,42640L,42640L,42642L, +42642L,42644L,42644L,42646L,42646L,42648L,42649L,42650L,42651L,42652L, +42653L,42654L,42655L,42656L,42657L,42658L,42659L,42660L,42661L,42662L, +42663L,42664L,42665L,42666L,42667L,42668L,42669L,42670L,42671L,42672L, +42673L,42674L,42675L,42676L,42677L,42678L,42679L,42680L,42681L,42682L, +42683L,42684L,42685L,42686L,42687L,42688L,42689L,42690L,42691L,42692L, +42693L,42694L,42695L,42696L,42697L,42698L,42699L,42700L,42701L,42702L, +42703L,42704L,42705L,42706L,42707L,42708L,42709L,42710L,42711L,42712L, +42713L,42714L,42715L,42716L,42717L,42718L,42719L,42720L,42721L,42722L, +42723L,42724L,42725L,42726L,42727L,42728L,42729L,42730L,42731L,42732L, +42733L,42734L,42735L,42736L,42737L,42738L,42739L,42740L,42741L,42742L, +42743L,42744L,42745L,42746L,42747L,42748L,42749L,42750L,42751L,42752L, +42753L,42754L,42755L,42756L,42757L,42758L,42759L,42760L,42761L,42762L, +42763L,42764L,42765L,42766L,42767L,42768L,42769L,42770L,42771L,42772L, +42773L,42774L,42775L,42776L,42777L,42778L,42779L,42780L,42781L,42782L, +42783L,42784L,42785L,42786L,42786L,42788L,42788L,42790L,42790L,42792L, +42792L,42794L,42794L,42796L,42796L,42798L,42798L,42800L,42801L,42802L, +42802L,42804L,42804L,42806L,42806L,42808L,42808L,42810L,42810L,42812L, +42812L,42814L,42814L,42816L,42816L,42818L,42818L,42820L,42820L,42822L, +42822L,42824L,42824L,42826L,42826L,42828L,42828L,42830L,42830L,42832L, +42832L,42834L,42834L,42836L,42836L,42838L,42838L,42840L,42840L,42842L, +42842L,42844L,42844L,42846L,42846L,42848L,42848L,42850L,42850L,42852L, +42852L,42854L,42854L,42856L,42856L,42858L,42858L,42860L,42860L,42862L, +42862L,42864L,42865L,42866L,42867L,42868L,42869L,42870L,42871L,42872L, +42873L,42873L,42875L,42875L,42877L,42878L,42878L,42880L,42880L,42882L, +42882L,42884L,42884L,42886L,42886L,42888L,42889L,42890L,42891L,42891L, +42893L,42894L,42895L,42896L,42896L,42898L,42899L,42900L,42901L,42902L, +42903L,42904L,42905L,42906L,42907L,42908L,42909L,42910L,42911L,42912L, +42912L,42914L,42914L,42916L,42916L,42918L,42918L,42920L,42920L,42922L, +42923L,42924L,42925L,42926L,42927L,42928L,42929L,42930L,42931L,42932L, +42933L,42934L,42935L,42936L,42937L,42938L,42939L,42940L,42941L,42942L, +42943L,42944L,42945L,42946L,42947L,42948L,42949L,42950L,42951L,42952L, +42953L,42954L,42955L,42956L,42957L,42958L,42959L,42960L,42961L,42962L, +42963L,42964L,42965L,42966L,42967L,42968L,42969L,42970L,42971L,42972L, +42973L,42974L,42975L,42976L,42977L,42978L,42979L,42980L,42981L,42982L, +42983L,42984L,42985L,42986L,42987L,42988L,42989L,42990L,42991L,42992L, +42993L,42994L,42995L,42996L,42997L,42998L,42999L,43000L,43001L,43002L, +43003L,43004L,43005L,43006L,43007L,43008L,43009L,43010L,43011L,43012L, +43013L,43014L,43015L,43016L,43017L,43018L,43019L,43020L,43021L,43022L, +43023L,43024L,43025L,43026L,43027L,43028L,43029L,43030L,43031L,43032L, +43033L,43034L,43035L,43036L,43037L,43038L,43039L,43040L,43041L,43042L, +43043L,43044L,43045L,43046L,43047L,43048L,43049L,43050L,43051L,43052L, +43053L,43054L,43055L,43056L,43057L,43058L,43059L,43060L,43061L,43062L, +43063L,43064L,43065L,43066L,43067L,43068L,43069L,43070L,43071L,43072L, +43073L,43074L,43075L,43076L,43077L,43078L,43079L,43080L,43081L,43082L, +43083L,43084L,43085L,43086L,43087L,43088L,43089L,43090L,43091L,43092L, +43093L,43094L,43095L,43096L,43097L,43098L,43099L,43100L,43101L,43102L, +43103L,43104L,43105L,43106L,43107L,43108L,43109L,43110L,43111L,43112L, +43113L,43114L,43115L,43116L,43117L,43118L,43119L,43120L,43121L,43122L, +43123L,43124L,43125L,43126L,43127L,43128L,43129L,43130L,43131L,43132L, +43133L,43134L,43135L,43136L,43137L,43138L,43139L,43140L,43141L,43142L, +43143L,43144L,43145L,43146L,43147L,43148L,43149L,43150L,43151L,43152L, +43153L,43154L,43155L,43156L,43157L,43158L,43159L,43160L,43161L,43162L, +43163L,43164L,43165L,43166L,43167L,43168L,43169L,43170L,43171L,43172L, +43173L,43174L,43175L,43176L,43177L,43178L,43179L,43180L,43181L,43182L, +43183L,43184L,43185L,43186L,43187L,43188L,43189L,43190L,43191L,43192L, +43193L,43194L,43195L,43196L,43197L,43198L,43199L,43200L,43201L,43202L, +43203L,43204L,43205L,43206L,43207L,43208L,43209L,43210L,43211L,43212L, +43213L,43214L,43215L,43216L,43217L,43218L,43219L,43220L,43221L,43222L, +43223L,43224L,43225L,43226L,43227L,43228L,43229L,43230L,43231L,43232L, +43233L,43234L,43235L,43236L,43237L,43238L,43239L,43240L,43241L,43242L, +43243L,43244L,43245L,43246L,43247L,43248L,43249L,43250L,43251L,43252L, +43253L,43254L,43255L,43256L,43257L,43258L,43259L,43260L,43261L,43262L, +43263L,43264L,43265L,43266L,43267L,43268L,43269L,43270L,43271L,43272L, +43273L,43274L,43275L,43276L,43277L,43278L,43279L,43280L,43281L,43282L, +43283L,43284L,43285L,43286L,43287L,43288L,43289L,43290L,43291L,43292L, +43293L,43294L,43295L,43296L,43297L,43298L,43299L,43300L,43301L,43302L, +43303L,43304L,43305L,43306L,43307L,43308L,43309L,43310L,43311L,43312L, +43313L,43314L,43315L,43316L,43317L,43318L,43319L,43320L,43321L,43322L, +43323L,43324L,43325L,43326L,43327L,43328L,43329L,43330L,43331L,43332L, +43333L,43334L,43335L,43336L,43337L,43338L,43339L,43340L,43341L,43342L, +43343L,43344L,43345L,43346L,43347L,43348L,43349L,43350L,43351L,43352L, +43353L,43354L,43355L,43356L,43357L,43358L,43359L,43360L,43361L,43362L, +43363L,43364L,43365L,43366L,43367L,43368L,43369L,43370L,43371L,43372L, +43373L,43374L,43375L,43376L,43377L,43378L,43379L,43380L,43381L,43382L, +43383L,43384L,43385L,43386L,43387L,43388L,43389L,43390L,43391L,43392L, +43393L,43394L,43395L,43396L,43397L,43398L,43399L,43400L,43401L,43402L, +43403L,43404L,43405L,43406L,43407L,43408L,43409L,43410L,43411L,43412L, +43413L,43414L,43415L,43416L,43417L,43418L,43419L,43420L,43421L,43422L, +43423L,43424L,43425L,43426L,43427L,43428L,43429L,43430L,43431L,43432L, +43433L,43434L,43435L,43436L,43437L,43438L,43439L,43440L,43441L,43442L, +43443L,43444L,43445L,43446L,43447L,43448L,43449L,43450L,43451L,43452L, +43453L,43454L,43455L,43456L,43457L,43458L,43459L,43460L,43461L,43462L, +43463L,43464L,43465L,43466L,43467L,43468L,43469L,43470L,43471L,43472L, +43473L,43474L,43475L,43476L,43477L,43478L,43479L,43480L,43481L,43482L, +43483L,43484L,43485L,43486L,43487L,43488L,43489L,43490L,43491L,43492L, +43493L,43494L,43495L,43496L,43497L,43498L,43499L,43500L,43501L,43502L, +43503L,43504L,43505L,43506L,43507L,43508L,43509L,43510L,43511L,43512L, +43513L,43514L,43515L,43516L,43517L,43518L,43519L,43520L,43521L,43522L, +43523L,43524L,43525L,43526L,43527L,43528L,43529L,43530L,43531L,43532L, +43533L,43534L,43535L,43536L,43537L,43538L,43539L,43540L,43541L,43542L, +43543L,43544L,43545L,43546L,43547L,43548L,43549L,43550L,43551L,43552L, +43553L,43554L,43555L,43556L,43557L,43558L,43559L,43560L,43561L,43562L, +43563L,43564L,43565L,43566L,43567L,43568L,43569L,43570L,43571L,43572L, +43573L,43574L,43575L,43576L,43577L,43578L,43579L,43580L,43581L,43582L, +43583L,43584L,43585L,43586L,43587L,43588L,43589L,43590L,43591L,43592L, +43593L,43594L,43595L,43596L,43597L,43598L,43599L,43600L,43601L,43602L, +43603L,43604L,43605L,43606L,43607L,43608L,43609L,43610L,43611L,43612L, +43613L,43614L,43615L,43616L,43617L,43618L,43619L,43620L,43621L,43622L, +43623L,43624L,43625L,43626L,43627L,43628L,43629L,43630L,43631L,43632L, +43633L,43634L,43635L,43636L,43637L,43638L,43639L,43640L,43641L,43642L, +43643L,43644L,43645L,43646L,43647L,43648L,43649L,43650L,43651L,43652L, +43653L,43654L,43655L,43656L,43657L,43658L,43659L,43660L,43661L,43662L, +43663L,43664L,43665L,43666L,43667L,43668L,43669L,43670L,43671L,43672L, +43673L,43674L,43675L,43676L,43677L,43678L,43679L,43680L,43681L,43682L, +43683L,43684L,43685L,43686L,43687L,43688L,43689L,43690L,43691L,43692L, +43693L,43694L,43695L,43696L,43697L,43698L,43699L,43700L,43701L,43702L, +43703L,43704L,43705L,43706L,43707L,43708L,43709L,43710L,43711L,43712L, +43713L,43714L,43715L,43716L,43717L,43718L,43719L,43720L,43721L,43722L, +43723L,43724L,43725L,43726L,43727L,43728L,43729L,43730L,43731L,43732L, +43733L,43734L,43735L,43736L,43737L,43738L,43739L,43740L,43741L,43742L, +43743L,43744L,43745L,43746L,43747L,43748L,43749L,43750L,43751L,43752L, +43753L,43754L,43755L,43756L,43757L,43758L,43759L,43760L,43761L,43762L, +43763L,43764L,43765L,43766L,43767L,43768L,43769L,43770L,43771L,43772L, +43773L,43774L,43775L,43776L,43777L,43778L,43779L,43780L,43781L,43782L, +43783L,43784L,43785L,43786L,43787L,43788L,43789L,43790L,43791L,43792L, +43793L,43794L,43795L,43796L,43797L,43798L,43799L,43800L,43801L,43802L, +43803L,43804L,43805L,43806L,43807L,43808L,43809L,43810L,43811L,43812L, +43813L,43814L,43815L,43816L,43817L,43818L,43819L,43820L,43821L,43822L, +43823L,43824L,43825L,43826L,43827L,43828L,43829L,43830L,43831L,43832L, +43833L,43834L,43835L,43836L,43837L,43838L,43839L,43840L,43841L,43842L, +43843L,43844L,43845L,43846L,43847L,43848L,43849L,43850L,43851L,43852L, +43853L,43854L,43855L,43856L,43857L,43858L,43859L,43860L,43861L,43862L, +43863L,43864L,43865L,43866L,43867L,43868L,43869L,43870L,43871L,43872L, +43873L,43874L,43875L,43876L,43877L,43878L,43879L,43880L,43881L,43882L, +43883L,43884L,43885L,43886L,43887L,43888L,43889L,43890L,43891L,43892L, +43893L,43894L,43895L,43896L,43897L,43898L,43899L,43900L,43901L,43902L, +43903L,43904L,43905L,43906L,43907L,43908L,43909L,43910L,43911L,43912L, +43913L,43914L,43915L,43916L,43917L,43918L,43919L,43920L,43921L,43922L, +43923L,43924L,43925L,43926L,43927L,43928L,43929L,43930L,43931L,43932L, +43933L,43934L,43935L,43936L,43937L,43938L,43939L,43940L,43941L,43942L, +43943L,43944L,43945L,43946L,43947L,43948L,43949L,43950L,43951L,43952L, +43953L,43954L,43955L,43956L,43957L,43958L,43959L,43960L,43961L,43962L, +43963L,43964L,43965L,43966L,43967L,43968L,43969L,43970L,43971L,43972L, +43973L,43974L,43975L,43976L,43977L,43978L,43979L,43980L,43981L,43982L, +43983L,43984L,43985L,43986L,43987L,43988L,43989L,43990L,43991L,43992L, +43993L,43994L,43995L,43996L,43997L,43998L,43999L,44000L,44001L,44002L, +44003L,44004L,44005L,44006L,44007L,44008L,44009L,44010L,44011L,44012L, +44013L,44014L,44015L,44016L,44017L,44018L,44019L,44020L,44021L,44022L, +44023L,44024L,44025L,44026L,44027L,44028L,44029L,44030L,44031L,44032L, +44033L,44034L,44035L,44036L,44037L,44038L,44039L,44040L,44041L,44042L, +44043L,44044L,44045L,44046L,44047L,44048L,44049L,44050L,44051L,44052L, +44053L,44054L,44055L,44056L,44057L,44058L,44059L,44060L,44061L,44062L, +44063L,44064L,44065L,44066L,44067L,44068L,44069L,44070L,44071L,44072L, +44073L,44074L,44075L,44076L,44077L,44078L,44079L,44080L,44081L,44082L, +44083L,44084L,44085L,44086L,44087L,44088L,44089L,44090L,44091L,44092L, +44093L,44094L,44095L,44096L,44097L,44098L,44099L,44100L,44101L,44102L, +44103L,44104L,44105L,44106L,44107L,44108L,44109L,44110L,44111L,44112L, +44113L,44114L,44115L,44116L,44117L,44118L,44119L,44120L,44121L,44122L, +44123L,44124L,44125L,44126L,44127L,44128L,44129L,44130L,44131L,44132L, +44133L,44134L,44135L,44136L,44137L,44138L,44139L,44140L,44141L,44142L, +44143L,44144L,44145L,44146L,44147L,44148L,44149L,44150L,44151L,44152L, +44153L,44154L,44155L,44156L,44157L,44158L,44159L,44160L,44161L,44162L, +44163L,44164L,44165L,44166L,44167L,44168L,44169L,44170L,44171L,44172L, +44173L,44174L,44175L,44176L,44177L,44178L,44179L,44180L,44181L,44182L, +44183L,44184L,44185L,44186L,44187L,44188L,44189L,44190L,44191L,44192L, +44193L,44194L,44195L,44196L,44197L,44198L,44199L,44200L,44201L,44202L, +44203L,44204L,44205L,44206L,44207L,44208L,44209L,44210L,44211L,44212L, +44213L,44214L,44215L,44216L,44217L,44218L,44219L,44220L,44221L,44222L, +44223L,44224L,44225L,44226L,44227L,44228L,44229L,44230L,44231L,44232L, +44233L,44234L,44235L,44236L,44237L,44238L,44239L,44240L,44241L,44242L, +44243L,44244L,44245L,44246L,44247L,44248L,44249L,44250L,44251L,44252L, +44253L,44254L,44255L,44256L,44257L,44258L,44259L,44260L,44261L,44262L, +44263L,44264L,44265L,44266L,44267L,44268L,44269L,44270L,44271L,44272L, +44273L,44274L,44275L,44276L,44277L,44278L,44279L,44280L,44281L,44282L, +44283L,44284L,44285L,44286L,44287L,44288L,44289L,44290L,44291L,44292L, +44293L,44294L,44295L,44296L,44297L,44298L,44299L,44300L,44301L,44302L, +44303L,44304L,44305L,44306L,44307L,44308L,44309L,44310L,44311L,44312L, +44313L,44314L,44315L,44316L,44317L,44318L,44319L,44320L,44321L,44322L, +44323L,44324L,44325L,44326L,44327L,44328L,44329L,44330L,44331L,44332L, +44333L,44334L,44335L,44336L,44337L,44338L,44339L,44340L,44341L,44342L, +44343L,44344L,44345L,44346L,44347L,44348L,44349L,44350L,44351L,44352L, +44353L,44354L,44355L,44356L,44357L,44358L,44359L,44360L,44361L,44362L, +44363L,44364L,44365L,44366L,44367L,44368L,44369L,44370L,44371L,44372L, +44373L,44374L,44375L,44376L,44377L,44378L,44379L,44380L,44381L,44382L, +44383L,44384L,44385L,44386L,44387L,44388L,44389L,44390L,44391L,44392L, +44393L,44394L,44395L,44396L,44397L,44398L,44399L,44400L,44401L,44402L, +44403L,44404L,44405L,44406L,44407L,44408L,44409L,44410L,44411L,44412L, +44413L,44414L,44415L,44416L,44417L,44418L,44419L,44420L,44421L,44422L, +44423L,44424L,44425L,44426L,44427L,44428L,44429L,44430L,44431L,44432L, +44433L,44434L,44435L,44436L,44437L,44438L,44439L,44440L,44441L,44442L, +44443L,44444L,44445L,44446L,44447L,44448L,44449L,44450L,44451L,44452L, +44453L,44454L,44455L,44456L,44457L,44458L,44459L,44460L,44461L,44462L, +44463L,44464L,44465L,44466L,44467L,44468L,44469L,44470L,44471L,44472L, +44473L,44474L,44475L,44476L,44477L,44478L,44479L,44480L,44481L,44482L, +44483L,44484L,44485L,44486L,44487L,44488L,44489L,44490L,44491L,44492L, +44493L,44494L,44495L,44496L,44497L,44498L,44499L,44500L,44501L,44502L, +44503L,44504L,44505L,44506L,44507L,44508L,44509L,44510L,44511L,44512L, +44513L,44514L,44515L,44516L,44517L,44518L,44519L,44520L,44521L,44522L, +44523L,44524L,44525L,44526L,44527L,44528L,44529L,44530L,44531L,44532L, +44533L,44534L,44535L,44536L,44537L,44538L,44539L,44540L,44541L,44542L, +44543L,44544L,44545L,44546L,44547L,44548L,44549L,44550L,44551L,44552L, +44553L,44554L,44555L,44556L,44557L,44558L,44559L,44560L,44561L,44562L, +44563L,44564L,44565L,44566L,44567L,44568L,44569L,44570L,44571L,44572L, +44573L,44574L,44575L,44576L,44577L,44578L,44579L,44580L,44581L,44582L, +44583L,44584L,44585L,44586L,44587L,44588L,44589L,44590L,44591L,44592L, +44593L,44594L,44595L,44596L,44597L,44598L,44599L,44600L,44601L,44602L, +44603L,44604L,44605L,44606L,44607L,44608L,44609L,44610L,44611L,44612L, +44613L,44614L,44615L,44616L,44617L,44618L,44619L,44620L,44621L,44622L, +44623L,44624L,44625L,44626L,44627L,44628L,44629L,44630L,44631L,44632L, +44633L,44634L,44635L,44636L,44637L,44638L,44639L,44640L,44641L,44642L, +44643L,44644L,44645L,44646L,44647L,44648L,44649L,44650L,44651L,44652L, +44653L,44654L,44655L,44656L,44657L,44658L,44659L,44660L,44661L,44662L, +44663L,44664L,44665L,44666L,44667L,44668L,44669L,44670L,44671L,44672L, +44673L,44674L,44675L,44676L,44677L,44678L,44679L,44680L,44681L,44682L, +44683L,44684L,44685L,44686L,44687L,44688L,44689L,44690L,44691L,44692L, +44693L,44694L,44695L,44696L,44697L,44698L,44699L,44700L,44701L,44702L, +44703L,44704L,44705L,44706L,44707L,44708L,44709L,44710L,44711L,44712L, +44713L,44714L,44715L,44716L,44717L,44718L,44719L,44720L,44721L,44722L, +44723L,44724L,44725L,44726L,44727L,44728L,44729L,44730L,44731L,44732L, +44733L,44734L,44735L,44736L,44737L,44738L,44739L,44740L,44741L,44742L, +44743L,44744L,44745L,44746L,44747L,44748L,44749L,44750L,44751L,44752L, +44753L,44754L,44755L,44756L,44757L,44758L,44759L,44760L,44761L,44762L, +44763L,44764L,44765L,44766L,44767L,44768L,44769L,44770L,44771L,44772L, +44773L,44774L,44775L,44776L,44777L,44778L,44779L,44780L,44781L,44782L, +44783L,44784L,44785L,44786L,44787L,44788L,44789L,44790L,44791L,44792L, +44793L,44794L,44795L,44796L,44797L,44798L,44799L,44800L,44801L,44802L, +44803L,44804L,44805L,44806L,44807L,44808L,44809L,44810L,44811L,44812L, +44813L,44814L,44815L,44816L,44817L,44818L,44819L,44820L,44821L,44822L, +44823L,44824L,44825L,44826L,44827L,44828L,44829L,44830L,44831L,44832L, +44833L,44834L,44835L,44836L,44837L,44838L,44839L,44840L,44841L,44842L, +44843L,44844L,44845L,44846L,44847L,44848L,44849L,44850L,44851L,44852L, +44853L,44854L,44855L,44856L,44857L,44858L,44859L,44860L,44861L,44862L, +44863L,44864L,44865L,44866L,44867L,44868L,44869L,44870L,44871L,44872L, +44873L,44874L,44875L,44876L,44877L,44878L,44879L,44880L,44881L,44882L, +44883L,44884L,44885L,44886L,44887L,44888L,44889L,44890L,44891L,44892L, +44893L,44894L,44895L,44896L,44897L,44898L,44899L,44900L,44901L,44902L, +44903L,44904L,44905L,44906L,44907L,44908L,44909L,44910L,44911L,44912L, +44913L,44914L,44915L,44916L,44917L,44918L,44919L,44920L,44921L,44922L, +44923L,44924L,44925L,44926L,44927L,44928L,44929L,44930L,44931L,44932L, +44933L,44934L,44935L,44936L,44937L,44938L,44939L,44940L,44941L,44942L, +44943L,44944L,44945L,44946L,44947L,44948L,44949L,44950L,44951L,44952L, +44953L,44954L,44955L,44956L,44957L,44958L,44959L,44960L,44961L,44962L, +44963L,44964L,44965L,44966L,44967L,44968L,44969L,44970L,44971L,44972L, +44973L,44974L,44975L,44976L,44977L,44978L,44979L,44980L,44981L,44982L, +44983L,44984L,44985L,44986L,44987L,44988L,44989L,44990L,44991L,44992L, +44993L,44994L,44995L,44996L,44997L,44998L,44999L,45000L,45001L,45002L, +45003L,45004L,45005L,45006L,45007L,45008L,45009L,45010L,45011L,45012L, +45013L,45014L,45015L,45016L,45017L,45018L,45019L,45020L,45021L,45022L, +45023L,45024L,45025L,45026L,45027L,45028L,45029L,45030L,45031L,45032L, +45033L,45034L,45035L,45036L,45037L,45038L,45039L,45040L,45041L,45042L, +45043L,45044L,45045L,45046L,45047L,45048L,45049L,45050L,45051L,45052L, +45053L,45054L,45055L,45056L,45057L,45058L,45059L,45060L,45061L,45062L, +45063L,45064L,45065L,45066L,45067L,45068L,45069L,45070L,45071L,45072L, +45073L,45074L,45075L,45076L,45077L,45078L,45079L,45080L,45081L,45082L, +45083L,45084L,45085L,45086L,45087L,45088L,45089L,45090L,45091L,45092L, +45093L,45094L,45095L,45096L,45097L,45098L,45099L,45100L,45101L,45102L, +45103L,45104L,45105L,45106L,45107L,45108L,45109L,45110L,45111L,45112L, +45113L,45114L,45115L,45116L,45117L,45118L,45119L,45120L,45121L,45122L, +45123L,45124L,45125L,45126L,45127L,45128L,45129L,45130L,45131L,45132L, +45133L,45134L,45135L,45136L,45137L,45138L,45139L,45140L,45141L,45142L, +45143L,45144L,45145L,45146L,45147L,45148L,45149L,45150L,45151L,45152L, +45153L,45154L,45155L,45156L,45157L,45158L,45159L,45160L,45161L,45162L, +45163L,45164L,45165L,45166L,45167L,45168L,45169L,45170L,45171L,45172L, +45173L,45174L,45175L,45176L,45177L,45178L,45179L,45180L,45181L,45182L, +45183L,45184L,45185L,45186L,45187L,45188L,45189L,45190L,45191L,45192L, +45193L,45194L,45195L,45196L,45197L,45198L,45199L,45200L,45201L,45202L, +45203L,45204L,45205L,45206L,45207L,45208L,45209L,45210L,45211L,45212L, +45213L,45214L,45215L,45216L,45217L,45218L,45219L,45220L,45221L,45222L, +45223L,45224L,45225L,45226L,45227L,45228L,45229L,45230L,45231L,45232L, +45233L,45234L,45235L,45236L,45237L,45238L,45239L,45240L,45241L,45242L, +45243L,45244L,45245L,45246L,45247L,45248L,45249L,45250L,45251L,45252L, +45253L,45254L,45255L,45256L,45257L,45258L,45259L,45260L,45261L,45262L, +45263L,45264L,45265L,45266L,45267L,45268L,45269L,45270L,45271L,45272L, +45273L,45274L,45275L,45276L,45277L,45278L,45279L,45280L,45281L,45282L, +45283L,45284L,45285L,45286L,45287L,45288L,45289L,45290L,45291L,45292L, +45293L,45294L,45295L,45296L,45297L,45298L,45299L,45300L,45301L,45302L, +45303L,45304L,45305L,45306L,45307L,45308L,45309L,45310L,45311L,45312L, +45313L,45314L,45315L,45316L,45317L,45318L,45319L,45320L,45321L,45322L, +45323L,45324L,45325L,45326L,45327L,45328L,45329L,45330L,45331L,45332L, +45333L,45334L,45335L,45336L,45337L,45338L,45339L,45340L,45341L,45342L, +45343L,45344L,45345L,45346L,45347L,45348L,45349L,45350L,45351L,45352L, +45353L,45354L,45355L,45356L,45357L,45358L,45359L,45360L,45361L,45362L, +45363L,45364L,45365L,45366L,45367L,45368L,45369L,45370L,45371L,45372L, +45373L,45374L,45375L,45376L,45377L,45378L,45379L,45380L,45381L,45382L, +45383L,45384L,45385L,45386L,45387L,45388L,45389L,45390L,45391L,45392L, +45393L,45394L,45395L,45396L,45397L,45398L,45399L,45400L,45401L,45402L, +45403L,45404L,45405L,45406L,45407L,45408L,45409L,45410L,45411L,45412L, +45413L,45414L,45415L,45416L,45417L,45418L,45419L,45420L,45421L,45422L, +45423L,45424L,45425L,45426L,45427L,45428L,45429L,45430L,45431L,45432L, +45433L,45434L,45435L,45436L,45437L,45438L,45439L,45440L,45441L,45442L, +45443L,45444L,45445L,45446L,45447L,45448L,45449L,45450L,45451L,45452L, +45453L,45454L,45455L,45456L,45457L,45458L,45459L,45460L,45461L,45462L, +45463L,45464L,45465L,45466L,45467L,45468L,45469L,45470L,45471L,45472L, +45473L,45474L,45475L,45476L,45477L,45478L,45479L,45480L,45481L,45482L, +45483L,45484L,45485L,45486L,45487L,45488L,45489L,45490L,45491L,45492L, +45493L,45494L,45495L,45496L,45497L,45498L,45499L,45500L,45501L,45502L, +45503L,45504L,45505L,45506L,45507L,45508L,45509L,45510L,45511L,45512L, +45513L,45514L,45515L,45516L,45517L,45518L,45519L,45520L,45521L,45522L, +45523L,45524L,45525L,45526L,45527L,45528L,45529L,45530L,45531L,45532L, +45533L,45534L,45535L,45536L,45537L,45538L,45539L,45540L,45541L,45542L, +45543L,45544L,45545L,45546L,45547L,45548L,45549L,45550L,45551L,45552L, +45553L,45554L,45555L,45556L,45557L,45558L,45559L,45560L,45561L,45562L, +45563L,45564L,45565L,45566L,45567L,45568L,45569L,45570L,45571L,45572L, +45573L,45574L,45575L,45576L,45577L,45578L,45579L,45580L,45581L,45582L, +45583L,45584L,45585L,45586L,45587L,45588L,45589L,45590L,45591L,45592L, +45593L,45594L,45595L,45596L,45597L,45598L,45599L,45600L,45601L,45602L, +45603L,45604L,45605L,45606L,45607L,45608L,45609L,45610L,45611L,45612L, +45613L,45614L,45615L,45616L,45617L,45618L,45619L,45620L,45621L,45622L, +45623L,45624L,45625L,45626L,45627L,45628L,45629L,45630L,45631L,45632L, +45633L,45634L,45635L,45636L,45637L,45638L,45639L,45640L,45641L,45642L, +45643L,45644L,45645L,45646L,45647L,45648L,45649L,45650L,45651L,45652L, +45653L,45654L,45655L,45656L,45657L,45658L,45659L,45660L,45661L,45662L, +45663L,45664L,45665L,45666L,45667L,45668L,45669L,45670L,45671L,45672L, +45673L,45674L,45675L,45676L,45677L,45678L,45679L,45680L,45681L,45682L, +45683L,45684L,45685L,45686L,45687L,45688L,45689L,45690L,45691L,45692L, +45693L,45694L,45695L,45696L,45697L,45698L,45699L,45700L,45701L,45702L, +45703L,45704L,45705L,45706L,45707L,45708L,45709L,45710L,45711L,45712L, +45713L,45714L,45715L,45716L,45717L,45718L,45719L,45720L,45721L,45722L, +45723L,45724L,45725L,45726L,45727L,45728L,45729L,45730L,45731L,45732L, +45733L,45734L,45735L,45736L,45737L,45738L,45739L,45740L,45741L,45742L, +45743L,45744L,45745L,45746L,45747L,45748L,45749L,45750L,45751L,45752L, +45753L,45754L,45755L,45756L,45757L,45758L,45759L,45760L,45761L,45762L, +45763L,45764L,45765L,45766L,45767L,45768L,45769L,45770L,45771L,45772L, +45773L,45774L,45775L,45776L,45777L,45778L,45779L,45780L,45781L,45782L, +45783L,45784L,45785L,45786L,45787L,45788L,45789L,45790L,45791L,45792L, +45793L,45794L,45795L,45796L,45797L,45798L,45799L,45800L,45801L,45802L, +45803L,45804L,45805L,45806L,45807L,45808L,45809L,45810L,45811L,45812L, +45813L,45814L,45815L,45816L,45817L,45818L,45819L,45820L,45821L,45822L, +45823L,45824L,45825L,45826L,45827L,45828L,45829L,45830L,45831L,45832L, +45833L,45834L,45835L,45836L,45837L,45838L,45839L,45840L,45841L,45842L, +45843L,45844L,45845L,45846L,45847L,45848L,45849L,45850L,45851L,45852L, +45853L,45854L,45855L,45856L,45857L,45858L,45859L,45860L,45861L,45862L, +45863L,45864L,45865L,45866L,45867L,45868L,45869L,45870L,45871L,45872L, +45873L,45874L,45875L,45876L,45877L,45878L,45879L,45880L,45881L,45882L, +45883L,45884L,45885L,45886L,45887L,45888L,45889L,45890L,45891L,45892L, +45893L,45894L,45895L,45896L,45897L,45898L,45899L,45900L,45901L,45902L, +45903L,45904L,45905L,45906L,45907L,45908L,45909L,45910L,45911L,45912L, +45913L,45914L,45915L,45916L,45917L,45918L,45919L,45920L,45921L,45922L, +45923L,45924L,45925L,45926L,45927L,45928L,45929L,45930L,45931L,45932L, +45933L,45934L,45935L,45936L,45937L,45938L,45939L,45940L,45941L,45942L, +45943L,45944L,45945L,45946L,45947L,45948L,45949L,45950L,45951L,45952L, +45953L,45954L,45955L,45956L,45957L,45958L,45959L,45960L,45961L,45962L, +45963L,45964L,45965L,45966L,45967L,45968L,45969L,45970L,45971L,45972L, +45973L,45974L,45975L,45976L,45977L,45978L,45979L,45980L,45981L,45982L, +45983L,45984L,45985L,45986L,45987L,45988L,45989L,45990L,45991L,45992L, +45993L,45994L,45995L,45996L,45997L,45998L,45999L,46000L,46001L,46002L, +46003L,46004L,46005L,46006L,46007L,46008L,46009L,46010L,46011L,46012L, +46013L,46014L,46015L,46016L,46017L,46018L,46019L,46020L,46021L,46022L, +46023L,46024L,46025L,46026L,46027L,46028L,46029L,46030L,46031L,46032L, +46033L,46034L,46035L,46036L,46037L,46038L,46039L,46040L,46041L,46042L, +46043L,46044L,46045L,46046L,46047L,46048L,46049L,46050L,46051L,46052L, +46053L,46054L,46055L,46056L,46057L,46058L,46059L,46060L,46061L,46062L, +46063L,46064L,46065L,46066L,46067L,46068L,46069L,46070L,46071L,46072L, +46073L,46074L,46075L,46076L,46077L,46078L,46079L,46080L,46081L,46082L, +46083L,46084L,46085L,46086L,46087L,46088L,46089L,46090L,46091L,46092L, +46093L,46094L,46095L,46096L,46097L,46098L,46099L,46100L,46101L,46102L, +46103L,46104L,46105L,46106L,46107L,46108L,46109L,46110L,46111L,46112L, +46113L,46114L,46115L,46116L,46117L,46118L,46119L,46120L,46121L,46122L, +46123L,46124L,46125L,46126L,46127L,46128L,46129L,46130L,46131L,46132L, +46133L,46134L,46135L,46136L,46137L,46138L,46139L,46140L,46141L,46142L, +46143L,46144L,46145L,46146L,46147L,46148L,46149L,46150L,46151L,46152L, +46153L,46154L,46155L,46156L,46157L,46158L,46159L,46160L,46161L,46162L, +46163L,46164L,46165L,46166L,46167L,46168L,46169L,46170L,46171L,46172L, +46173L,46174L,46175L,46176L,46177L,46178L,46179L,46180L,46181L,46182L, +46183L,46184L,46185L,46186L,46187L,46188L,46189L,46190L,46191L,46192L, +46193L,46194L,46195L,46196L,46197L,46198L,46199L,46200L,46201L,46202L, +46203L,46204L,46205L,46206L,46207L,46208L,46209L,46210L,46211L,46212L, +46213L,46214L,46215L,46216L,46217L,46218L,46219L,46220L,46221L,46222L, +46223L,46224L,46225L,46226L,46227L,46228L,46229L,46230L,46231L,46232L, +46233L,46234L,46235L,46236L,46237L,46238L,46239L,46240L,46241L,46242L, +46243L,46244L,46245L,46246L,46247L,46248L,46249L,46250L,46251L,46252L, +46253L,46254L,46255L,46256L,46257L,46258L,46259L,46260L,46261L,46262L, +46263L,46264L,46265L,46266L,46267L,46268L,46269L,46270L,46271L,46272L, +46273L,46274L,46275L,46276L,46277L,46278L,46279L,46280L,46281L,46282L, +46283L,46284L,46285L,46286L,46287L,46288L,46289L,46290L,46291L,46292L, +46293L,46294L,46295L,46296L,46297L,46298L,46299L,46300L,46301L,46302L, +46303L,46304L,46305L,46306L,46307L,46308L,46309L,46310L,46311L,46312L, +46313L,46314L,46315L,46316L,46317L,46318L,46319L,46320L,46321L,46322L, +46323L,46324L,46325L,46326L,46327L,46328L,46329L,46330L,46331L,46332L, +46333L,46334L,46335L,46336L,46337L,46338L,46339L,46340L,46341L,46342L, +46343L,46344L,46345L,46346L,46347L,46348L,46349L,46350L,46351L,46352L, +46353L,46354L,46355L,46356L,46357L,46358L,46359L,46360L,46361L,46362L, +46363L,46364L,46365L,46366L,46367L,46368L,46369L,46370L,46371L,46372L, +46373L,46374L,46375L,46376L,46377L,46378L,46379L,46380L,46381L,46382L, +46383L,46384L,46385L,46386L,46387L,46388L,46389L,46390L,46391L,46392L, +46393L,46394L,46395L,46396L,46397L,46398L,46399L,46400L,46401L,46402L, +46403L,46404L,46405L,46406L,46407L,46408L,46409L,46410L,46411L,46412L, +46413L,46414L,46415L,46416L,46417L,46418L,46419L,46420L,46421L,46422L, +46423L,46424L,46425L,46426L,46427L,46428L,46429L,46430L,46431L,46432L, +46433L,46434L,46435L,46436L,46437L,46438L,46439L,46440L,46441L,46442L, +46443L,46444L,46445L,46446L,46447L,46448L,46449L,46450L,46451L,46452L, +46453L,46454L,46455L,46456L,46457L,46458L,46459L,46460L,46461L,46462L, +46463L,46464L,46465L,46466L,46467L,46468L,46469L,46470L,46471L,46472L, +46473L,46474L,46475L,46476L,46477L,46478L,46479L,46480L,46481L,46482L, +46483L,46484L,46485L,46486L,46487L,46488L,46489L,46490L,46491L,46492L, +46493L,46494L,46495L,46496L,46497L,46498L,46499L,46500L,46501L,46502L, +46503L,46504L,46505L,46506L,46507L,46508L,46509L,46510L,46511L,46512L, +46513L,46514L,46515L,46516L,46517L,46518L,46519L,46520L,46521L,46522L, +46523L,46524L,46525L,46526L,46527L,46528L,46529L,46530L,46531L,46532L, +46533L,46534L,46535L,46536L,46537L,46538L,46539L,46540L,46541L,46542L, +46543L,46544L,46545L,46546L,46547L,46548L,46549L,46550L,46551L,46552L, +46553L,46554L,46555L,46556L,46557L,46558L,46559L,46560L,46561L,46562L, +46563L,46564L,46565L,46566L,46567L,46568L,46569L,46570L,46571L,46572L, +46573L,46574L,46575L,46576L,46577L,46578L,46579L,46580L,46581L,46582L, +46583L,46584L,46585L,46586L,46587L,46588L,46589L,46590L,46591L,46592L, +46593L,46594L,46595L,46596L,46597L,46598L,46599L,46600L,46601L,46602L, +46603L,46604L,46605L,46606L,46607L,46608L,46609L,46610L,46611L,46612L, +46613L,46614L,46615L,46616L,46617L,46618L,46619L,46620L,46621L,46622L, +46623L,46624L,46625L,46626L,46627L,46628L,46629L,46630L,46631L,46632L, +46633L,46634L,46635L,46636L,46637L,46638L,46639L,46640L,46641L,46642L, +46643L,46644L,46645L,46646L,46647L,46648L,46649L,46650L,46651L,46652L, +46653L,46654L,46655L,46656L,46657L,46658L,46659L,46660L,46661L,46662L, +46663L,46664L,46665L,46666L,46667L,46668L,46669L,46670L,46671L,46672L, +46673L,46674L,46675L,46676L,46677L,46678L,46679L,46680L,46681L,46682L, +46683L,46684L,46685L,46686L,46687L,46688L,46689L,46690L,46691L,46692L, +46693L,46694L,46695L,46696L,46697L,46698L,46699L,46700L,46701L,46702L, +46703L,46704L,46705L,46706L,46707L,46708L,46709L,46710L,46711L,46712L, +46713L,46714L,46715L,46716L,46717L,46718L,46719L,46720L,46721L,46722L, +46723L,46724L,46725L,46726L,46727L,46728L,46729L,46730L,46731L,46732L, +46733L,46734L,46735L,46736L,46737L,46738L,46739L,46740L,46741L,46742L, +46743L,46744L,46745L,46746L,46747L,46748L,46749L,46750L,46751L,46752L, +46753L,46754L,46755L,46756L,46757L,46758L,46759L,46760L,46761L,46762L, +46763L,46764L,46765L,46766L,46767L,46768L,46769L,46770L,46771L,46772L, +46773L,46774L,46775L,46776L,46777L,46778L,46779L,46780L,46781L,46782L, +46783L,46784L,46785L,46786L,46787L,46788L,46789L,46790L,46791L,46792L, +46793L,46794L,46795L,46796L,46797L,46798L,46799L,46800L,46801L,46802L, +46803L,46804L,46805L,46806L,46807L,46808L,46809L,46810L,46811L,46812L, +46813L,46814L,46815L,46816L,46817L,46818L,46819L,46820L,46821L,46822L, +46823L,46824L,46825L,46826L,46827L,46828L,46829L,46830L,46831L,46832L, +46833L,46834L,46835L,46836L,46837L,46838L,46839L,46840L,46841L,46842L, +46843L,46844L,46845L,46846L,46847L,46848L,46849L,46850L,46851L,46852L, +46853L,46854L,46855L,46856L,46857L,46858L,46859L,46860L,46861L,46862L, +46863L,46864L,46865L,46866L,46867L,46868L,46869L,46870L,46871L,46872L, +46873L,46874L,46875L,46876L,46877L,46878L,46879L,46880L,46881L,46882L, +46883L,46884L,46885L,46886L,46887L,46888L,46889L,46890L,46891L,46892L, +46893L,46894L,46895L,46896L,46897L,46898L,46899L,46900L,46901L,46902L, +46903L,46904L,46905L,46906L,46907L,46908L,46909L,46910L,46911L,46912L, +46913L,46914L,46915L,46916L,46917L,46918L,46919L,46920L,46921L,46922L, +46923L,46924L,46925L,46926L,46927L,46928L,46929L,46930L,46931L,46932L, +46933L,46934L,46935L,46936L,46937L,46938L,46939L,46940L,46941L,46942L, +46943L,46944L,46945L,46946L,46947L,46948L,46949L,46950L,46951L,46952L, +46953L,46954L,46955L,46956L,46957L,46958L,46959L,46960L,46961L,46962L, +46963L,46964L,46965L,46966L,46967L,46968L,46969L,46970L,46971L,46972L, +46973L,46974L,46975L,46976L,46977L,46978L,46979L,46980L,46981L,46982L, +46983L,46984L,46985L,46986L,46987L,46988L,46989L,46990L,46991L,46992L, +46993L,46994L,46995L,46996L,46997L,46998L,46999L,47000L,47001L,47002L, +47003L,47004L,47005L,47006L,47007L,47008L,47009L,47010L,47011L,47012L, +47013L,47014L,47015L,47016L,47017L,47018L,47019L,47020L,47021L,47022L, +47023L,47024L,47025L,47026L,47027L,47028L,47029L,47030L,47031L,47032L, +47033L,47034L,47035L,47036L,47037L,47038L,47039L,47040L,47041L,47042L, +47043L,47044L,47045L,47046L,47047L,47048L,47049L,47050L,47051L,47052L, +47053L,47054L,47055L,47056L,47057L,47058L,47059L,47060L,47061L,47062L, +47063L,47064L,47065L,47066L,47067L,47068L,47069L,47070L,47071L,47072L, +47073L,47074L,47075L,47076L,47077L,47078L,47079L,47080L,47081L,47082L, +47083L,47084L,47085L,47086L,47087L,47088L,47089L,47090L,47091L,47092L, +47093L,47094L,47095L,47096L,47097L,47098L,47099L,47100L,47101L,47102L, +47103L,47104L,47105L,47106L,47107L,47108L,47109L,47110L,47111L,47112L, +47113L,47114L,47115L,47116L,47117L,47118L,47119L,47120L,47121L,47122L, +47123L,47124L,47125L,47126L,47127L,47128L,47129L,47130L,47131L,47132L, +47133L,47134L,47135L,47136L,47137L,47138L,47139L,47140L,47141L,47142L, +47143L,47144L,47145L,47146L,47147L,47148L,47149L,47150L,47151L,47152L, +47153L,47154L,47155L,47156L,47157L,47158L,47159L,47160L,47161L,47162L, +47163L,47164L,47165L,47166L,47167L,47168L,47169L,47170L,47171L,47172L, +47173L,47174L,47175L,47176L,47177L,47178L,47179L,47180L,47181L,47182L, +47183L,47184L,47185L,47186L,47187L,47188L,47189L,47190L,47191L,47192L, +47193L,47194L,47195L,47196L,47197L,47198L,47199L,47200L,47201L,47202L, +47203L,47204L,47205L,47206L,47207L,47208L,47209L,47210L,47211L,47212L, +47213L,47214L,47215L,47216L,47217L,47218L,47219L,47220L,47221L,47222L, +47223L,47224L,47225L,47226L,47227L,47228L,47229L,47230L,47231L,47232L, +47233L,47234L,47235L,47236L,47237L,47238L,47239L,47240L,47241L,47242L, +47243L,47244L,47245L,47246L,47247L,47248L,47249L,47250L,47251L,47252L, +47253L,47254L,47255L,47256L,47257L,47258L,47259L,47260L,47261L,47262L, +47263L,47264L,47265L,47266L,47267L,47268L,47269L,47270L,47271L,47272L, +47273L,47274L,47275L,47276L,47277L,47278L,47279L,47280L,47281L,47282L, +47283L,47284L,47285L,47286L,47287L,47288L,47289L,47290L,47291L,47292L, +47293L,47294L,47295L,47296L,47297L,47298L,47299L,47300L,47301L,47302L, +47303L,47304L,47305L,47306L,47307L,47308L,47309L,47310L,47311L,47312L, +47313L,47314L,47315L,47316L,47317L,47318L,47319L,47320L,47321L,47322L, +47323L,47324L,47325L,47326L,47327L,47328L,47329L,47330L,47331L,47332L, +47333L,47334L,47335L,47336L,47337L,47338L,47339L,47340L,47341L,47342L, +47343L,47344L,47345L,47346L,47347L,47348L,47349L,47350L,47351L,47352L, +47353L,47354L,47355L,47356L,47357L,47358L,47359L,47360L,47361L,47362L, +47363L,47364L,47365L,47366L,47367L,47368L,47369L,47370L,47371L,47372L, +47373L,47374L,47375L,47376L,47377L,47378L,47379L,47380L,47381L,47382L, +47383L,47384L,47385L,47386L,47387L,47388L,47389L,47390L,47391L,47392L, +47393L,47394L,47395L,47396L,47397L,47398L,47399L,47400L,47401L,47402L, +47403L,47404L,47405L,47406L,47407L,47408L,47409L,47410L,47411L,47412L, +47413L,47414L,47415L,47416L,47417L,47418L,47419L,47420L,47421L,47422L, +47423L,47424L,47425L,47426L,47427L,47428L,47429L,47430L,47431L,47432L, +47433L,47434L,47435L,47436L,47437L,47438L,47439L,47440L,47441L,47442L, +47443L,47444L,47445L,47446L,47447L,47448L,47449L,47450L,47451L,47452L, +47453L,47454L,47455L,47456L,47457L,47458L,47459L,47460L,47461L,47462L, +47463L,47464L,47465L,47466L,47467L,47468L,47469L,47470L,47471L,47472L, +47473L,47474L,47475L,47476L,47477L,47478L,47479L,47480L,47481L,47482L, +47483L,47484L,47485L,47486L,47487L,47488L,47489L,47490L,47491L,47492L, +47493L,47494L,47495L,47496L,47497L,47498L,47499L,47500L,47501L,47502L, +47503L,47504L,47505L,47506L,47507L,47508L,47509L,47510L,47511L,47512L, +47513L,47514L,47515L,47516L,47517L,47518L,47519L,47520L,47521L,47522L, +47523L,47524L,47525L,47526L,47527L,47528L,47529L,47530L,47531L,47532L, +47533L,47534L,47535L,47536L,47537L,47538L,47539L,47540L,47541L,47542L, +47543L,47544L,47545L,47546L,47547L,47548L,47549L,47550L,47551L,47552L, +47553L,47554L,47555L,47556L,47557L,47558L,47559L,47560L,47561L,47562L, +47563L,47564L,47565L,47566L,47567L,47568L,47569L,47570L,47571L,47572L, +47573L,47574L,47575L,47576L,47577L,47578L,47579L,47580L,47581L,47582L, +47583L,47584L,47585L,47586L,47587L,47588L,47589L,47590L,47591L,47592L, +47593L,47594L,47595L,47596L,47597L,47598L,47599L,47600L,47601L,47602L, +47603L,47604L,47605L,47606L,47607L,47608L,47609L,47610L,47611L,47612L, +47613L,47614L,47615L,47616L,47617L,47618L,47619L,47620L,47621L,47622L, +47623L,47624L,47625L,47626L,47627L,47628L,47629L,47630L,47631L,47632L, +47633L,47634L,47635L,47636L,47637L,47638L,47639L,47640L,47641L,47642L, +47643L,47644L,47645L,47646L,47647L,47648L,47649L,47650L,47651L,47652L, +47653L,47654L,47655L,47656L,47657L,47658L,47659L,47660L,47661L,47662L, +47663L,47664L,47665L,47666L,47667L,47668L,47669L,47670L,47671L,47672L, +47673L,47674L,47675L,47676L,47677L,47678L,47679L,47680L,47681L,47682L, +47683L,47684L,47685L,47686L,47687L,47688L,47689L,47690L,47691L,47692L, +47693L,47694L,47695L,47696L,47697L,47698L,47699L,47700L,47701L,47702L, +47703L,47704L,47705L,47706L,47707L,47708L,47709L,47710L,47711L,47712L, +47713L,47714L,47715L,47716L,47717L,47718L,47719L,47720L,47721L,47722L, +47723L,47724L,47725L,47726L,47727L,47728L,47729L,47730L,47731L,47732L, +47733L,47734L,47735L,47736L,47737L,47738L,47739L,47740L,47741L,47742L, +47743L,47744L,47745L,47746L,47747L,47748L,47749L,47750L,47751L,47752L, +47753L,47754L,47755L,47756L,47757L,47758L,47759L,47760L,47761L,47762L, +47763L,47764L,47765L,47766L,47767L,47768L,47769L,47770L,47771L,47772L, +47773L,47774L,47775L,47776L,47777L,47778L,47779L,47780L,47781L,47782L, +47783L,47784L,47785L,47786L,47787L,47788L,47789L,47790L,47791L,47792L, +47793L,47794L,47795L,47796L,47797L,47798L,47799L,47800L,47801L,47802L, +47803L,47804L,47805L,47806L,47807L,47808L,47809L,47810L,47811L,47812L, +47813L,47814L,47815L,47816L,47817L,47818L,47819L,47820L,47821L,47822L, +47823L,47824L,47825L,47826L,47827L,47828L,47829L,47830L,47831L,47832L, +47833L,47834L,47835L,47836L,47837L,47838L,47839L,47840L,47841L,47842L, +47843L,47844L,47845L,47846L,47847L,47848L,47849L,47850L,47851L,47852L, +47853L,47854L,47855L,47856L,47857L,47858L,47859L,47860L,47861L,47862L, +47863L,47864L,47865L,47866L,47867L,47868L,47869L,47870L,47871L,47872L, +47873L,47874L,47875L,47876L,47877L,47878L,47879L,47880L,47881L,47882L, +47883L,47884L,47885L,47886L,47887L,47888L,47889L,47890L,47891L,47892L, +47893L,47894L,47895L,47896L,47897L,47898L,47899L,47900L,47901L,47902L, +47903L,47904L,47905L,47906L,47907L,47908L,47909L,47910L,47911L,47912L, +47913L,47914L,47915L,47916L,47917L,47918L,47919L,47920L,47921L,47922L, +47923L,47924L,47925L,47926L,47927L,47928L,47929L,47930L,47931L,47932L, +47933L,47934L,47935L,47936L,47937L,47938L,47939L,47940L,47941L,47942L, +47943L,47944L,47945L,47946L,47947L,47948L,47949L,47950L,47951L,47952L, +47953L,47954L,47955L,47956L,47957L,47958L,47959L,47960L,47961L,47962L, +47963L,47964L,47965L,47966L,47967L,47968L,47969L,47970L,47971L,47972L, +47973L,47974L,47975L,47976L,47977L,47978L,47979L,47980L,47981L,47982L, +47983L,47984L,47985L,47986L,47987L,47988L,47989L,47990L,47991L,47992L, +47993L,47994L,47995L,47996L,47997L,47998L,47999L,48000L,48001L,48002L, +48003L,48004L,48005L,48006L,48007L,48008L,48009L,48010L,48011L,48012L, +48013L,48014L,48015L,48016L,48017L,48018L,48019L,48020L,48021L,48022L, +48023L,48024L,48025L,48026L,48027L,48028L,48029L,48030L,48031L,48032L, +48033L,48034L,48035L,48036L,48037L,48038L,48039L,48040L,48041L,48042L, +48043L,48044L,48045L,48046L,48047L,48048L,48049L,48050L,48051L,48052L, +48053L,48054L,48055L,48056L,48057L,48058L,48059L,48060L,48061L,48062L, +48063L,48064L,48065L,48066L,48067L,48068L,48069L,48070L,48071L,48072L, +48073L,48074L,48075L,48076L,48077L,48078L,48079L,48080L,48081L,48082L, +48083L,48084L,48085L,48086L,48087L,48088L,48089L,48090L,48091L,48092L, +48093L,48094L,48095L,48096L,48097L,48098L,48099L,48100L,48101L,48102L, +48103L,48104L,48105L,48106L,48107L,48108L,48109L,48110L,48111L,48112L, +48113L,48114L,48115L,48116L,48117L,48118L,48119L,48120L,48121L,48122L, +48123L,48124L,48125L,48126L,48127L,48128L,48129L,48130L,48131L,48132L, +48133L,48134L,48135L,48136L,48137L,48138L,48139L,48140L,48141L,48142L, +48143L,48144L,48145L,48146L,48147L,48148L,48149L,48150L,48151L,48152L, +48153L,48154L,48155L,48156L,48157L,48158L,48159L,48160L,48161L,48162L, +48163L,48164L,48165L,48166L,48167L,48168L,48169L,48170L,48171L,48172L, +48173L,48174L,48175L,48176L,48177L,48178L,48179L,48180L,48181L,48182L, +48183L,48184L,48185L,48186L,48187L,48188L,48189L,48190L,48191L,48192L, +48193L,48194L,48195L,48196L,48197L,48198L,48199L,48200L,48201L,48202L, +48203L,48204L,48205L,48206L,48207L,48208L,48209L,48210L,48211L,48212L, +48213L,48214L,48215L,48216L,48217L,48218L,48219L,48220L,48221L,48222L, +48223L,48224L,48225L,48226L,48227L,48228L,48229L,48230L,48231L,48232L, +48233L,48234L,48235L,48236L,48237L,48238L,48239L,48240L,48241L,48242L, +48243L,48244L,48245L,48246L,48247L,48248L,48249L,48250L,48251L,48252L, +48253L,48254L,48255L,48256L,48257L,48258L,48259L,48260L,48261L,48262L, +48263L,48264L,48265L,48266L,48267L,48268L,48269L,48270L,48271L,48272L, +48273L,48274L,48275L,48276L,48277L,48278L,48279L,48280L,48281L,48282L, +48283L,48284L,48285L,48286L,48287L,48288L,48289L,48290L,48291L,48292L, +48293L,48294L,48295L,48296L,48297L,48298L,48299L,48300L,48301L,48302L, +48303L,48304L,48305L,48306L,48307L,48308L,48309L,48310L,48311L,48312L, +48313L,48314L,48315L,48316L,48317L,48318L,48319L,48320L,48321L,48322L, +48323L,48324L,48325L,48326L,48327L,48328L,48329L,48330L,48331L,48332L, +48333L,48334L,48335L,48336L,48337L,48338L,48339L,48340L,48341L,48342L, +48343L,48344L,48345L,48346L,48347L,48348L,48349L,48350L,48351L,48352L, +48353L,48354L,48355L,48356L,48357L,48358L,48359L,48360L,48361L,48362L, +48363L,48364L,48365L,48366L,48367L,48368L,48369L,48370L,48371L,48372L, +48373L,48374L,48375L,48376L,48377L,48378L,48379L,48380L,48381L,48382L, +48383L,48384L,48385L,48386L,48387L,48388L,48389L,48390L,48391L,48392L, +48393L,48394L,48395L,48396L,48397L,48398L,48399L,48400L,48401L,48402L, +48403L,48404L,48405L,48406L,48407L,48408L,48409L,48410L,48411L,48412L, +48413L,48414L,48415L,48416L,48417L,48418L,48419L,48420L,48421L,48422L, +48423L,48424L,48425L,48426L,48427L,48428L,48429L,48430L,48431L,48432L, +48433L,48434L,48435L,48436L,48437L,48438L,48439L,48440L,48441L,48442L, +48443L,48444L,48445L,48446L,48447L,48448L,48449L,48450L,48451L,48452L, +48453L,48454L,48455L,48456L,48457L,48458L,48459L,48460L,48461L,48462L, +48463L,48464L,48465L,48466L,48467L,48468L,48469L,48470L,48471L,48472L, +48473L,48474L,48475L,48476L,48477L,48478L,48479L,48480L,48481L,48482L, +48483L,48484L,48485L,48486L,48487L,48488L,48489L,48490L,48491L,48492L, +48493L,48494L,48495L,48496L,48497L,48498L,48499L,48500L,48501L,48502L, +48503L,48504L,48505L,48506L,48507L,48508L,48509L,48510L,48511L,48512L, +48513L,48514L,48515L,48516L,48517L,48518L,48519L,48520L,48521L,48522L, +48523L,48524L,48525L,48526L,48527L,48528L,48529L,48530L,48531L,48532L, +48533L,48534L,48535L,48536L,48537L,48538L,48539L,48540L,48541L,48542L, +48543L,48544L,48545L,48546L,48547L,48548L,48549L,48550L,48551L,48552L, +48553L,48554L,48555L,48556L,48557L,48558L,48559L,48560L,48561L,48562L, +48563L,48564L,48565L,48566L,48567L,48568L,48569L,48570L,48571L,48572L, +48573L,48574L,48575L,48576L,48577L,48578L,48579L,48580L,48581L,48582L, +48583L,48584L,48585L,48586L,48587L,48588L,48589L,48590L,48591L,48592L, +48593L,48594L,48595L,48596L,48597L,48598L,48599L,48600L,48601L,48602L, +48603L,48604L,48605L,48606L,48607L,48608L,48609L,48610L,48611L,48612L, +48613L,48614L,48615L,48616L,48617L,48618L,48619L,48620L,48621L,48622L, +48623L,48624L,48625L,48626L,48627L,48628L,48629L,48630L,48631L,48632L, +48633L,48634L,48635L,48636L,48637L,48638L,48639L,48640L,48641L,48642L, +48643L,48644L,48645L,48646L,48647L,48648L,48649L,48650L,48651L,48652L, +48653L,48654L,48655L,48656L,48657L,48658L,48659L,48660L,48661L,48662L, +48663L,48664L,48665L,48666L,48667L,48668L,48669L,48670L,48671L,48672L, +48673L,48674L,48675L,48676L,48677L,48678L,48679L,48680L,48681L,48682L, +48683L,48684L,48685L,48686L,48687L,48688L,48689L,48690L,48691L,48692L, +48693L,48694L,48695L,48696L,48697L,48698L,48699L,48700L,48701L,48702L, +48703L,48704L,48705L,48706L,48707L,48708L,48709L,48710L,48711L,48712L, +48713L,48714L,48715L,48716L,48717L,48718L,48719L,48720L,48721L,48722L, +48723L,48724L,48725L,48726L,48727L,48728L,48729L,48730L,48731L,48732L, +48733L,48734L,48735L,48736L,48737L,48738L,48739L,48740L,48741L,48742L, +48743L,48744L,48745L,48746L,48747L,48748L,48749L,48750L,48751L,48752L, +48753L,48754L,48755L,48756L,48757L,48758L,48759L,48760L,48761L,48762L, +48763L,48764L,48765L,48766L,48767L,48768L,48769L,48770L,48771L,48772L, +48773L,48774L,48775L,48776L,48777L,48778L,48779L,48780L,48781L,48782L, +48783L,48784L,48785L,48786L,48787L,48788L,48789L,48790L,48791L,48792L, +48793L,48794L,48795L,48796L,48797L,48798L,48799L,48800L,48801L,48802L, +48803L,48804L,48805L,48806L,48807L,48808L,48809L,48810L,48811L,48812L, +48813L,48814L,48815L,48816L,48817L,48818L,48819L,48820L,48821L,48822L, +48823L,48824L,48825L,48826L,48827L,48828L,48829L,48830L,48831L,48832L, +48833L,48834L,48835L,48836L,48837L,48838L,48839L,48840L,48841L,48842L, +48843L,48844L,48845L,48846L,48847L,48848L,48849L,48850L,48851L,48852L, +48853L,48854L,48855L,48856L,48857L,48858L,48859L,48860L,48861L,48862L, +48863L,48864L,48865L,48866L,48867L,48868L,48869L,48870L,48871L,48872L, +48873L,48874L,48875L,48876L,48877L,48878L,48879L,48880L,48881L,48882L, +48883L,48884L,48885L,48886L,48887L,48888L,48889L,48890L,48891L,48892L, +48893L,48894L,48895L,48896L,48897L,48898L,48899L,48900L,48901L,48902L, +48903L,48904L,48905L,48906L,48907L,48908L,48909L,48910L,48911L,48912L, +48913L,48914L,48915L,48916L,48917L,48918L,48919L,48920L,48921L,48922L, +48923L,48924L,48925L,48926L,48927L,48928L,48929L,48930L,48931L,48932L, +48933L,48934L,48935L,48936L,48937L,48938L,48939L,48940L,48941L,48942L, +48943L,48944L,48945L,48946L,48947L,48948L,48949L,48950L,48951L,48952L, +48953L,48954L,48955L,48956L,48957L,48958L,48959L,48960L,48961L,48962L, +48963L,48964L,48965L,48966L,48967L,48968L,48969L,48970L,48971L,48972L, +48973L,48974L,48975L,48976L,48977L,48978L,48979L,48980L,48981L,48982L, +48983L,48984L,48985L,48986L,48987L,48988L,48989L,48990L,48991L,48992L, +48993L,48994L,48995L,48996L,48997L,48998L,48999L,49000L,49001L,49002L, +49003L,49004L,49005L,49006L,49007L,49008L,49009L,49010L,49011L,49012L, +49013L,49014L,49015L,49016L,49017L,49018L,49019L,49020L,49021L,49022L, +49023L,49024L,49025L,49026L,49027L,49028L,49029L,49030L,49031L,49032L, +49033L,49034L,49035L,49036L,49037L,49038L,49039L,49040L,49041L,49042L, +49043L,49044L,49045L,49046L,49047L,49048L,49049L,49050L,49051L,49052L, +49053L,49054L,49055L,49056L,49057L,49058L,49059L,49060L,49061L,49062L, +49063L,49064L,49065L,49066L,49067L,49068L,49069L,49070L,49071L,49072L, +49073L,49074L,49075L,49076L,49077L,49078L,49079L,49080L,49081L,49082L, +49083L,49084L,49085L,49086L,49087L,49088L,49089L,49090L,49091L,49092L, +49093L,49094L,49095L,49096L,49097L,49098L,49099L,49100L,49101L,49102L, +49103L,49104L,49105L,49106L,49107L,49108L,49109L,49110L,49111L,49112L, +49113L,49114L,49115L,49116L,49117L,49118L,49119L,49120L,49121L,49122L, +49123L,49124L,49125L,49126L,49127L,49128L,49129L,49130L,49131L,49132L, +49133L,49134L,49135L,49136L,49137L,49138L,49139L,49140L,49141L,49142L, +49143L,49144L,49145L,49146L,49147L,49148L,49149L,49150L,49151L,49152L, +49153L,49154L,49155L,49156L,49157L,49158L,49159L,49160L,49161L,49162L, +49163L,49164L,49165L,49166L,49167L,49168L,49169L,49170L,49171L,49172L, +49173L,49174L,49175L,49176L,49177L,49178L,49179L,49180L,49181L,49182L, +49183L,49184L,49185L,49186L,49187L,49188L,49189L,49190L,49191L,49192L, +49193L,49194L,49195L,49196L,49197L,49198L,49199L,49200L,49201L,49202L, +49203L,49204L,49205L,49206L,49207L,49208L,49209L,49210L,49211L,49212L, +49213L,49214L,49215L,49216L,49217L,49218L,49219L,49220L,49221L,49222L, +49223L,49224L,49225L,49226L,49227L,49228L,49229L,49230L,49231L,49232L, +49233L,49234L,49235L,49236L,49237L,49238L,49239L,49240L,49241L,49242L, +49243L,49244L,49245L,49246L,49247L,49248L,49249L,49250L,49251L,49252L, +49253L,49254L,49255L,49256L,49257L,49258L,49259L,49260L,49261L,49262L, +49263L,49264L,49265L,49266L,49267L,49268L,49269L,49270L,49271L,49272L, +49273L,49274L,49275L,49276L,49277L,49278L,49279L,49280L,49281L,49282L, +49283L,49284L,49285L,49286L,49287L,49288L,49289L,49290L,49291L,49292L, +49293L,49294L,49295L,49296L,49297L,49298L,49299L,49300L,49301L,49302L, +49303L,49304L,49305L,49306L,49307L,49308L,49309L,49310L,49311L,49312L, +49313L,49314L,49315L,49316L,49317L,49318L,49319L,49320L,49321L,49322L, +49323L,49324L,49325L,49326L,49327L,49328L,49329L,49330L,49331L,49332L, +49333L,49334L,49335L,49336L,49337L,49338L,49339L,49340L,49341L,49342L, +49343L,49344L,49345L,49346L,49347L,49348L,49349L,49350L,49351L,49352L, +49353L,49354L,49355L,49356L,49357L,49358L,49359L,49360L,49361L,49362L, +49363L,49364L,49365L,49366L,49367L,49368L,49369L,49370L,49371L,49372L, +49373L,49374L,49375L,49376L,49377L,49378L,49379L,49380L,49381L,49382L, +49383L,49384L,49385L,49386L,49387L,49388L,49389L,49390L,49391L,49392L, +49393L,49394L,49395L,49396L,49397L,49398L,49399L,49400L,49401L,49402L, +49403L,49404L,49405L,49406L,49407L,49408L,49409L,49410L,49411L,49412L, +49413L,49414L,49415L,49416L,49417L,49418L,49419L,49420L,49421L,49422L, +49423L,49424L,49425L,49426L,49427L,49428L,49429L,49430L,49431L,49432L, +49433L,49434L,49435L,49436L,49437L,49438L,49439L,49440L,49441L,49442L, +49443L,49444L,49445L,49446L,49447L,49448L,49449L,49450L,49451L,49452L, +49453L,49454L,49455L,49456L,49457L,49458L,49459L,49460L,49461L,49462L, +49463L,49464L,49465L,49466L,49467L,49468L,49469L,49470L,49471L,49472L, +49473L,49474L,49475L,49476L,49477L,49478L,49479L,49480L,49481L,49482L, +49483L,49484L,49485L,49486L,49487L,49488L,49489L,49490L,49491L,49492L, +49493L,49494L,49495L,49496L,49497L,49498L,49499L,49500L,49501L,49502L, +49503L,49504L,49505L,49506L,49507L,49508L,49509L,49510L,49511L,49512L, +49513L,49514L,49515L,49516L,49517L,49518L,49519L,49520L,49521L,49522L, +49523L,49524L,49525L,49526L,49527L,49528L,49529L,49530L,49531L,49532L, +49533L,49534L,49535L,49536L,49537L,49538L,49539L,49540L,49541L,49542L, +49543L,49544L,49545L,49546L,49547L,49548L,49549L,49550L,49551L,49552L, +49553L,49554L,49555L,49556L,49557L,49558L,49559L,49560L,49561L,49562L, +49563L,49564L,49565L,49566L,49567L,49568L,49569L,49570L,49571L,49572L, +49573L,49574L,49575L,49576L,49577L,49578L,49579L,49580L,49581L,49582L, +49583L,49584L,49585L,49586L,49587L,49588L,49589L,49590L,49591L,49592L, +49593L,49594L,49595L,49596L,49597L,49598L,49599L,49600L,49601L,49602L, +49603L,49604L,49605L,49606L,49607L,49608L,49609L,49610L,49611L,49612L, +49613L,49614L,49615L,49616L,49617L,49618L,49619L,49620L,49621L,49622L, +49623L,49624L,49625L,49626L,49627L,49628L,49629L,49630L,49631L,49632L, +49633L,49634L,49635L,49636L,49637L,49638L,49639L,49640L,49641L,49642L, +49643L,49644L,49645L,49646L,49647L,49648L,49649L,49650L,49651L,49652L, +49653L,49654L,49655L,49656L,49657L,49658L,49659L,49660L,49661L,49662L, +49663L,49664L,49665L,49666L,49667L,49668L,49669L,49670L,49671L,49672L, +49673L,49674L,49675L,49676L,49677L,49678L,49679L,49680L,49681L,49682L, +49683L,49684L,49685L,49686L,49687L,49688L,49689L,49690L,49691L,49692L, +49693L,49694L,49695L,49696L,49697L,49698L,49699L,49700L,49701L,49702L, +49703L,49704L,49705L,49706L,49707L,49708L,49709L,49710L,49711L,49712L, +49713L,49714L,49715L,49716L,49717L,49718L,49719L,49720L,49721L,49722L, +49723L,49724L,49725L,49726L,49727L,49728L,49729L,49730L,49731L,49732L, +49733L,49734L,49735L,49736L,49737L,49738L,49739L,49740L,49741L,49742L, +49743L,49744L,49745L,49746L,49747L,49748L,49749L,49750L,49751L,49752L, +49753L,49754L,49755L,49756L,49757L,49758L,49759L,49760L,49761L,49762L, +49763L,49764L,49765L,49766L,49767L,49768L,49769L,49770L,49771L,49772L, +49773L,49774L,49775L,49776L,49777L,49778L,49779L,49780L,49781L,49782L, +49783L,49784L,49785L,49786L,49787L,49788L,49789L,49790L,49791L,49792L, +49793L,49794L,49795L,49796L,49797L,49798L,49799L,49800L,49801L,49802L, +49803L,49804L,49805L,49806L,49807L,49808L,49809L,49810L,49811L,49812L, +49813L,49814L,49815L,49816L,49817L,49818L,49819L,49820L,49821L,49822L, +49823L,49824L,49825L,49826L,49827L,49828L,49829L,49830L,49831L,49832L, +49833L,49834L,49835L,49836L,49837L,49838L,49839L,49840L,49841L,49842L, +49843L,49844L,49845L,49846L,49847L,49848L,49849L,49850L,49851L,49852L, +49853L,49854L,49855L,49856L,49857L,49858L,49859L,49860L,49861L,49862L, +49863L,49864L,49865L,49866L,49867L,49868L,49869L,49870L,49871L,49872L, +49873L,49874L,49875L,49876L,49877L,49878L,49879L,49880L,49881L,49882L, +49883L,49884L,49885L,49886L,49887L,49888L,49889L,49890L,49891L,49892L, +49893L,49894L,49895L,49896L,49897L,49898L,49899L,49900L,49901L,49902L, +49903L,49904L,49905L,49906L,49907L,49908L,49909L,49910L,49911L,49912L, +49913L,49914L,49915L,49916L,49917L,49918L,49919L,49920L,49921L,49922L, +49923L,49924L,49925L,49926L,49927L,49928L,49929L,49930L,49931L,49932L, +49933L,49934L,49935L,49936L,49937L,49938L,49939L,49940L,49941L,49942L, +49943L,49944L,49945L,49946L,49947L,49948L,49949L,49950L,49951L,49952L, +49953L,49954L,49955L,49956L,49957L,49958L,49959L,49960L,49961L,49962L, +49963L,49964L,49965L,49966L,49967L,49968L,49969L,49970L,49971L,49972L, +49973L,49974L,49975L,49976L,49977L,49978L,49979L,49980L,49981L,49982L, +49983L,49984L,49985L,49986L,49987L,49988L,49989L,49990L,49991L,49992L, +49993L,49994L,49995L,49996L,49997L,49998L,49999L,50000L,50001L,50002L, +50003L,50004L,50005L,50006L,50007L,50008L,50009L,50010L,50011L,50012L, +50013L,50014L,50015L,50016L,50017L,50018L,50019L,50020L,50021L,50022L, +50023L,50024L,50025L,50026L,50027L,50028L,50029L,50030L,50031L,50032L, +50033L,50034L,50035L,50036L,50037L,50038L,50039L,50040L,50041L,50042L, +50043L,50044L,50045L,50046L,50047L,50048L,50049L,50050L,50051L,50052L, +50053L,50054L,50055L,50056L,50057L,50058L,50059L,50060L,50061L,50062L, +50063L,50064L,50065L,50066L,50067L,50068L,50069L,50070L,50071L,50072L, +50073L,50074L,50075L,50076L,50077L,50078L,50079L,50080L,50081L,50082L, +50083L,50084L,50085L,50086L,50087L,50088L,50089L,50090L,50091L,50092L, +50093L,50094L,50095L,50096L,50097L,50098L,50099L,50100L,50101L,50102L, +50103L,50104L,50105L,50106L,50107L,50108L,50109L,50110L,50111L,50112L, +50113L,50114L,50115L,50116L,50117L,50118L,50119L,50120L,50121L,50122L, +50123L,50124L,50125L,50126L,50127L,50128L,50129L,50130L,50131L,50132L, +50133L,50134L,50135L,50136L,50137L,50138L,50139L,50140L,50141L,50142L, +50143L,50144L,50145L,50146L,50147L,50148L,50149L,50150L,50151L,50152L, +50153L,50154L,50155L,50156L,50157L,50158L,50159L,50160L,50161L,50162L, +50163L,50164L,50165L,50166L,50167L,50168L,50169L,50170L,50171L,50172L, +50173L,50174L,50175L,50176L,50177L,50178L,50179L,50180L,50181L,50182L, +50183L,50184L,50185L,50186L,50187L,50188L,50189L,50190L,50191L,50192L, +50193L,50194L,50195L,50196L,50197L,50198L,50199L,50200L,50201L,50202L, +50203L,50204L,50205L,50206L,50207L,50208L,50209L,50210L,50211L,50212L, +50213L,50214L,50215L,50216L,50217L,50218L,50219L,50220L,50221L,50222L, +50223L,50224L,50225L,50226L,50227L,50228L,50229L,50230L,50231L,50232L, +50233L,50234L,50235L,50236L,50237L,50238L,50239L,50240L,50241L,50242L, +50243L,50244L,50245L,50246L,50247L,50248L,50249L,50250L,50251L,50252L, +50253L,50254L,50255L,50256L,50257L,50258L,50259L,50260L,50261L,50262L, +50263L,50264L,50265L,50266L,50267L,50268L,50269L,50270L,50271L,50272L, +50273L,50274L,50275L,50276L,50277L,50278L,50279L,50280L,50281L,50282L, +50283L,50284L,50285L,50286L,50287L,50288L,50289L,50290L,50291L,50292L, +50293L,50294L,50295L,50296L,50297L,50298L,50299L,50300L,50301L,50302L, +50303L,50304L,50305L,50306L,50307L,50308L,50309L,50310L,50311L,50312L, +50313L,50314L,50315L,50316L,50317L,50318L,50319L,50320L,50321L,50322L, +50323L,50324L,50325L,50326L,50327L,50328L,50329L,50330L,50331L,50332L, +50333L,50334L,50335L,50336L,50337L,50338L,50339L,50340L,50341L,50342L, +50343L,50344L,50345L,50346L,50347L,50348L,50349L,50350L,50351L,50352L, +50353L,50354L,50355L,50356L,50357L,50358L,50359L,50360L,50361L,50362L, +50363L,50364L,50365L,50366L,50367L,50368L,50369L,50370L,50371L,50372L, +50373L,50374L,50375L,50376L,50377L,50378L,50379L,50380L,50381L,50382L, +50383L,50384L,50385L,50386L,50387L,50388L,50389L,50390L,50391L,50392L, +50393L,50394L,50395L,50396L,50397L,50398L,50399L,50400L,50401L,50402L, +50403L,50404L,50405L,50406L,50407L,50408L,50409L,50410L,50411L,50412L, +50413L,50414L,50415L,50416L,50417L,50418L,50419L,50420L,50421L,50422L, +50423L,50424L,50425L,50426L,50427L,50428L,50429L,50430L,50431L,50432L, +50433L,50434L,50435L,50436L,50437L,50438L,50439L,50440L,50441L,50442L, +50443L,50444L,50445L,50446L,50447L,50448L,50449L,50450L,50451L,50452L, +50453L,50454L,50455L,50456L,50457L,50458L,50459L,50460L,50461L,50462L, +50463L,50464L,50465L,50466L,50467L,50468L,50469L,50470L,50471L,50472L, +50473L,50474L,50475L,50476L,50477L,50478L,50479L,50480L,50481L,50482L, +50483L,50484L,50485L,50486L,50487L,50488L,50489L,50490L,50491L,50492L, +50493L,50494L,50495L,50496L,50497L,50498L,50499L,50500L,50501L,50502L, +50503L,50504L,50505L,50506L,50507L,50508L,50509L,50510L,50511L,50512L, +50513L,50514L,50515L,50516L,50517L,50518L,50519L,50520L,50521L,50522L, +50523L,50524L,50525L,50526L,50527L,50528L,50529L,50530L,50531L,50532L, +50533L,50534L,50535L,50536L,50537L,50538L,50539L,50540L,50541L,50542L, +50543L,50544L,50545L,50546L,50547L,50548L,50549L,50550L,50551L,50552L, +50553L,50554L,50555L,50556L,50557L,50558L,50559L,50560L,50561L,50562L, +50563L,50564L,50565L,50566L,50567L,50568L,50569L,50570L,50571L,50572L, +50573L,50574L,50575L,50576L,50577L,50578L,50579L,50580L,50581L,50582L, +50583L,50584L,50585L,50586L,50587L,50588L,50589L,50590L,50591L,50592L, +50593L,50594L,50595L,50596L,50597L,50598L,50599L,50600L,50601L,50602L, +50603L,50604L,50605L,50606L,50607L,50608L,50609L,50610L,50611L,50612L, +50613L,50614L,50615L,50616L,50617L,50618L,50619L,50620L,50621L,50622L, +50623L,50624L,50625L,50626L,50627L,50628L,50629L,50630L,50631L,50632L, +50633L,50634L,50635L,50636L,50637L,50638L,50639L,50640L,50641L,50642L, +50643L,50644L,50645L,50646L,50647L,50648L,50649L,50650L,50651L,50652L, +50653L,50654L,50655L,50656L,50657L,50658L,50659L,50660L,50661L,50662L, +50663L,50664L,50665L,50666L,50667L,50668L,50669L,50670L,50671L,50672L, +50673L,50674L,50675L,50676L,50677L,50678L,50679L,50680L,50681L,50682L, +50683L,50684L,50685L,50686L,50687L,50688L,50689L,50690L,50691L,50692L, +50693L,50694L,50695L,50696L,50697L,50698L,50699L,50700L,50701L,50702L, +50703L,50704L,50705L,50706L,50707L,50708L,50709L,50710L,50711L,50712L, +50713L,50714L,50715L,50716L,50717L,50718L,50719L,50720L,50721L,50722L, +50723L,50724L,50725L,50726L,50727L,50728L,50729L,50730L,50731L,50732L, +50733L,50734L,50735L,50736L,50737L,50738L,50739L,50740L,50741L,50742L, +50743L,50744L,50745L,50746L,50747L,50748L,50749L,50750L,50751L,50752L, +50753L,50754L,50755L,50756L,50757L,50758L,50759L,50760L,50761L,50762L, +50763L,50764L,50765L,50766L,50767L,50768L,50769L,50770L,50771L,50772L, +50773L,50774L,50775L,50776L,50777L,50778L,50779L,50780L,50781L,50782L, +50783L,50784L,50785L,50786L,50787L,50788L,50789L,50790L,50791L,50792L, +50793L,50794L,50795L,50796L,50797L,50798L,50799L,50800L,50801L,50802L, +50803L,50804L,50805L,50806L,50807L,50808L,50809L,50810L,50811L,50812L, +50813L,50814L,50815L,50816L,50817L,50818L,50819L,50820L,50821L,50822L, +50823L,50824L,50825L,50826L,50827L,50828L,50829L,50830L,50831L,50832L, +50833L,50834L,50835L,50836L,50837L,50838L,50839L,50840L,50841L,50842L, +50843L,50844L,50845L,50846L,50847L,50848L,50849L,50850L,50851L,50852L, +50853L,50854L,50855L,50856L,50857L,50858L,50859L,50860L,50861L,50862L, +50863L,50864L,50865L,50866L,50867L,50868L,50869L,50870L,50871L,50872L, +50873L,50874L,50875L,50876L,50877L,50878L,50879L,50880L,50881L,50882L, +50883L,50884L,50885L,50886L,50887L,50888L,50889L,50890L,50891L,50892L, +50893L,50894L,50895L,50896L,50897L,50898L,50899L,50900L,50901L,50902L, +50903L,50904L,50905L,50906L,50907L,50908L,50909L,50910L,50911L,50912L, +50913L,50914L,50915L,50916L,50917L,50918L,50919L,50920L,50921L,50922L, +50923L,50924L,50925L,50926L,50927L,50928L,50929L,50930L,50931L,50932L, +50933L,50934L,50935L,50936L,50937L,50938L,50939L,50940L,50941L,50942L, +50943L,50944L,50945L,50946L,50947L,50948L,50949L,50950L,50951L,50952L, +50953L,50954L,50955L,50956L,50957L,50958L,50959L,50960L,50961L,50962L, +50963L,50964L,50965L,50966L,50967L,50968L,50969L,50970L,50971L,50972L, +50973L,50974L,50975L,50976L,50977L,50978L,50979L,50980L,50981L,50982L, +50983L,50984L,50985L,50986L,50987L,50988L,50989L,50990L,50991L,50992L, +50993L,50994L,50995L,50996L,50997L,50998L,50999L,51000L,51001L,51002L, +51003L,51004L,51005L,51006L,51007L,51008L,51009L,51010L,51011L,51012L, +51013L,51014L,51015L,51016L,51017L,51018L,51019L,51020L,51021L,51022L, +51023L,51024L,51025L,51026L,51027L,51028L,51029L,51030L,51031L,51032L, +51033L,51034L,51035L,51036L,51037L,51038L,51039L,51040L,51041L,51042L, +51043L,51044L,51045L,51046L,51047L,51048L,51049L,51050L,51051L,51052L, +51053L,51054L,51055L,51056L,51057L,51058L,51059L,51060L,51061L,51062L, +51063L,51064L,51065L,51066L,51067L,51068L,51069L,51070L,51071L,51072L, +51073L,51074L,51075L,51076L,51077L,51078L,51079L,51080L,51081L,51082L, +51083L,51084L,51085L,51086L,51087L,51088L,51089L,51090L,51091L,51092L, +51093L,51094L,51095L,51096L,51097L,51098L,51099L,51100L,51101L,51102L, +51103L,51104L,51105L,51106L,51107L,51108L,51109L,51110L,51111L,51112L, +51113L,51114L,51115L,51116L,51117L,51118L,51119L,51120L,51121L,51122L, +51123L,51124L,51125L,51126L,51127L,51128L,51129L,51130L,51131L,51132L, +51133L,51134L,51135L,51136L,51137L,51138L,51139L,51140L,51141L,51142L, +51143L,51144L,51145L,51146L,51147L,51148L,51149L,51150L,51151L,51152L, +51153L,51154L,51155L,51156L,51157L,51158L,51159L,51160L,51161L,51162L, +51163L,51164L,51165L,51166L,51167L,51168L,51169L,51170L,51171L,51172L, +51173L,51174L,51175L,51176L,51177L,51178L,51179L,51180L,51181L,51182L, +51183L,51184L,51185L,51186L,51187L,51188L,51189L,51190L,51191L,51192L, +51193L,51194L,51195L,51196L,51197L,51198L,51199L,51200L,51201L,51202L, +51203L,51204L,51205L,51206L,51207L,51208L,51209L,51210L,51211L,51212L, +51213L,51214L,51215L,51216L,51217L,51218L,51219L,51220L,51221L,51222L, +51223L,51224L,51225L,51226L,51227L,51228L,51229L,51230L,51231L,51232L, +51233L,51234L,51235L,51236L,51237L,51238L,51239L,51240L,51241L,51242L, +51243L,51244L,51245L,51246L,51247L,51248L,51249L,51250L,51251L,51252L, +51253L,51254L,51255L,51256L,51257L,51258L,51259L,51260L,51261L,51262L, +51263L,51264L,51265L,51266L,51267L,51268L,51269L,51270L,51271L,51272L, +51273L,51274L,51275L,51276L,51277L,51278L,51279L,51280L,51281L,51282L, +51283L,51284L,51285L,51286L,51287L,51288L,51289L,51290L,51291L,51292L, +51293L,51294L,51295L,51296L,51297L,51298L,51299L,51300L,51301L,51302L, +51303L,51304L,51305L,51306L,51307L,51308L,51309L,51310L,51311L,51312L, +51313L,51314L,51315L,51316L,51317L,51318L,51319L,51320L,51321L,51322L, +51323L,51324L,51325L,51326L,51327L,51328L,51329L,51330L,51331L,51332L, +51333L,51334L,51335L,51336L,51337L,51338L,51339L,51340L,51341L,51342L, +51343L,51344L,51345L,51346L,51347L,51348L,51349L,51350L,51351L,51352L, +51353L,51354L,51355L,51356L,51357L,51358L,51359L,51360L,51361L,51362L, +51363L,51364L,51365L,51366L,51367L,51368L,51369L,51370L,51371L,51372L, +51373L,51374L,51375L,51376L,51377L,51378L,51379L,51380L,51381L,51382L, +51383L,51384L,51385L,51386L,51387L,51388L,51389L,51390L,51391L,51392L, +51393L,51394L,51395L,51396L,51397L,51398L,51399L,51400L,51401L,51402L, +51403L,51404L,51405L,51406L,51407L,51408L,51409L,51410L,51411L,51412L, +51413L,51414L,51415L,51416L,51417L,51418L,51419L,51420L,51421L,51422L, +51423L,51424L,51425L,51426L,51427L,51428L,51429L,51430L,51431L,51432L, +51433L,51434L,51435L,51436L,51437L,51438L,51439L,51440L,51441L,51442L, +51443L,51444L,51445L,51446L,51447L,51448L,51449L,51450L,51451L,51452L, +51453L,51454L,51455L,51456L,51457L,51458L,51459L,51460L,51461L,51462L, +51463L,51464L,51465L,51466L,51467L,51468L,51469L,51470L,51471L,51472L, +51473L,51474L,51475L,51476L,51477L,51478L,51479L,51480L,51481L,51482L, +51483L,51484L,51485L,51486L,51487L,51488L,51489L,51490L,51491L,51492L, +51493L,51494L,51495L,51496L,51497L,51498L,51499L,51500L,51501L,51502L, +51503L,51504L,51505L,51506L,51507L,51508L,51509L,51510L,51511L,51512L, +51513L,51514L,51515L,51516L,51517L,51518L,51519L,51520L,51521L,51522L, +51523L,51524L,51525L,51526L,51527L,51528L,51529L,51530L,51531L,51532L, +51533L,51534L,51535L,51536L,51537L,51538L,51539L,51540L,51541L,51542L, +51543L,51544L,51545L,51546L,51547L,51548L,51549L,51550L,51551L,51552L, +51553L,51554L,51555L,51556L,51557L,51558L,51559L,51560L,51561L,51562L, +51563L,51564L,51565L,51566L,51567L,51568L,51569L,51570L,51571L,51572L, +51573L,51574L,51575L,51576L,51577L,51578L,51579L,51580L,51581L,51582L, +51583L,51584L,51585L,51586L,51587L,51588L,51589L,51590L,51591L,51592L, +51593L,51594L,51595L,51596L,51597L,51598L,51599L,51600L,51601L,51602L, +51603L,51604L,51605L,51606L,51607L,51608L,51609L,51610L,51611L,51612L, +51613L,51614L,51615L,51616L,51617L,51618L,51619L,51620L,51621L,51622L, +51623L,51624L,51625L,51626L,51627L,51628L,51629L,51630L,51631L,51632L, +51633L,51634L,51635L,51636L,51637L,51638L,51639L,51640L,51641L,51642L, +51643L,51644L,51645L,51646L,51647L,51648L,51649L,51650L,51651L,51652L, +51653L,51654L,51655L,51656L,51657L,51658L,51659L,51660L,51661L,51662L, +51663L,51664L,51665L,51666L,51667L,51668L,51669L,51670L,51671L,51672L, +51673L,51674L,51675L,51676L,51677L,51678L,51679L,51680L,51681L,51682L, +51683L,51684L,51685L,51686L,51687L,51688L,51689L,51690L,51691L,51692L, +51693L,51694L,51695L,51696L,51697L,51698L,51699L,51700L,51701L,51702L, +51703L,51704L,51705L,51706L,51707L,51708L,51709L,51710L,51711L,51712L, +51713L,51714L,51715L,51716L,51717L,51718L,51719L,51720L,51721L,51722L, +51723L,51724L,51725L,51726L,51727L,51728L,51729L,51730L,51731L,51732L, +51733L,51734L,51735L,51736L,51737L,51738L,51739L,51740L,51741L,51742L, +51743L,51744L,51745L,51746L,51747L,51748L,51749L,51750L,51751L,51752L, +51753L,51754L,51755L,51756L,51757L,51758L,51759L,51760L,51761L,51762L, +51763L,51764L,51765L,51766L,51767L,51768L,51769L,51770L,51771L,51772L, +51773L,51774L,51775L,51776L,51777L,51778L,51779L,51780L,51781L,51782L, +51783L,51784L,51785L,51786L,51787L,51788L,51789L,51790L,51791L,51792L, +51793L,51794L,51795L,51796L,51797L,51798L,51799L,51800L,51801L,51802L, +51803L,51804L,51805L,51806L,51807L,51808L,51809L,51810L,51811L,51812L, +51813L,51814L,51815L,51816L,51817L,51818L,51819L,51820L,51821L,51822L, +51823L,51824L,51825L,51826L,51827L,51828L,51829L,51830L,51831L,51832L, +51833L,51834L,51835L,51836L,51837L,51838L,51839L,51840L,51841L,51842L, +51843L,51844L,51845L,51846L,51847L,51848L,51849L,51850L,51851L,51852L, +51853L,51854L,51855L,51856L,51857L,51858L,51859L,51860L,51861L,51862L, +51863L,51864L,51865L,51866L,51867L,51868L,51869L,51870L,51871L,51872L, +51873L,51874L,51875L,51876L,51877L,51878L,51879L,51880L,51881L,51882L, +51883L,51884L,51885L,51886L,51887L,51888L,51889L,51890L,51891L,51892L, +51893L,51894L,51895L,51896L,51897L,51898L,51899L,51900L,51901L,51902L, +51903L,51904L,51905L,51906L,51907L,51908L,51909L,51910L,51911L,51912L, +51913L,51914L,51915L,51916L,51917L,51918L,51919L,51920L,51921L,51922L, +51923L,51924L,51925L,51926L,51927L,51928L,51929L,51930L,51931L,51932L, +51933L,51934L,51935L,51936L,51937L,51938L,51939L,51940L,51941L,51942L, +51943L,51944L,51945L,51946L,51947L,51948L,51949L,51950L,51951L,51952L, +51953L,51954L,51955L,51956L,51957L,51958L,51959L,51960L,51961L,51962L, +51963L,51964L,51965L,51966L,51967L,51968L,51969L,51970L,51971L,51972L, +51973L,51974L,51975L,51976L,51977L,51978L,51979L,51980L,51981L,51982L, +51983L,51984L,51985L,51986L,51987L,51988L,51989L,51990L,51991L,51992L, +51993L,51994L,51995L,51996L,51997L,51998L,51999L,52000L,52001L,52002L, +52003L,52004L,52005L,52006L,52007L,52008L,52009L,52010L,52011L,52012L, +52013L,52014L,52015L,52016L,52017L,52018L,52019L,52020L,52021L,52022L, +52023L,52024L,52025L,52026L,52027L,52028L,52029L,52030L,52031L,52032L, +52033L,52034L,52035L,52036L,52037L,52038L,52039L,52040L,52041L,52042L, +52043L,52044L,52045L,52046L,52047L,52048L,52049L,52050L,52051L,52052L, +52053L,52054L,52055L,52056L,52057L,52058L,52059L,52060L,52061L,52062L, +52063L,52064L,52065L,52066L,52067L,52068L,52069L,52070L,52071L,52072L, +52073L,52074L,52075L,52076L,52077L,52078L,52079L,52080L,52081L,52082L, +52083L,52084L,52085L,52086L,52087L,52088L,52089L,52090L,52091L,52092L, +52093L,52094L,52095L,52096L,52097L,52098L,52099L,52100L,52101L,52102L, +52103L,52104L,52105L,52106L,52107L,52108L,52109L,52110L,52111L,52112L, +52113L,52114L,52115L,52116L,52117L,52118L,52119L,52120L,52121L,52122L, +52123L,52124L,52125L,52126L,52127L,52128L,52129L,52130L,52131L,52132L, +52133L,52134L,52135L,52136L,52137L,52138L,52139L,52140L,52141L,52142L, +52143L,52144L,52145L,52146L,52147L,52148L,52149L,52150L,52151L,52152L, +52153L,52154L,52155L,52156L,52157L,52158L,52159L,52160L,52161L,52162L, +52163L,52164L,52165L,52166L,52167L,52168L,52169L,52170L,52171L,52172L, +52173L,52174L,52175L,52176L,52177L,52178L,52179L,52180L,52181L,52182L, +52183L,52184L,52185L,52186L,52187L,52188L,52189L,52190L,52191L,52192L, +52193L,52194L,52195L,52196L,52197L,52198L,52199L,52200L,52201L,52202L, +52203L,52204L,52205L,52206L,52207L,52208L,52209L,52210L,52211L,52212L, +52213L,52214L,52215L,52216L,52217L,52218L,52219L,52220L,52221L,52222L, +52223L,52224L,52225L,52226L,52227L,52228L,52229L,52230L,52231L,52232L, +52233L,52234L,52235L,52236L,52237L,52238L,52239L,52240L,52241L,52242L, +52243L,52244L,52245L,52246L,52247L,52248L,52249L,52250L,52251L,52252L, +52253L,52254L,52255L,52256L,52257L,52258L,52259L,52260L,52261L,52262L, +52263L,52264L,52265L,52266L,52267L,52268L,52269L,52270L,52271L,52272L, +52273L,52274L,52275L,52276L,52277L,52278L,52279L,52280L,52281L,52282L, +52283L,52284L,52285L,52286L,52287L,52288L,52289L,52290L,52291L,52292L, +52293L,52294L,52295L,52296L,52297L,52298L,52299L,52300L,52301L,52302L, +52303L,52304L,52305L,52306L,52307L,52308L,52309L,52310L,52311L,52312L, +52313L,52314L,52315L,52316L,52317L,52318L,52319L,52320L,52321L,52322L, +52323L,52324L,52325L,52326L,52327L,52328L,52329L,52330L,52331L,52332L, +52333L,52334L,52335L,52336L,52337L,52338L,52339L,52340L,52341L,52342L, +52343L,52344L,52345L,52346L,52347L,52348L,52349L,52350L,52351L,52352L, +52353L,52354L,52355L,52356L,52357L,52358L,52359L,52360L,52361L,52362L, +52363L,52364L,52365L,52366L,52367L,52368L,52369L,52370L,52371L,52372L, +52373L,52374L,52375L,52376L,52377L,52378L,52379L,52380L,52381L,52382L, +52383L,52384L,52385L,52386L,52387L,52388L,52389L,52390L,52391L,52392L, +52393L,52394L,52395L,52396L,52397L,52398L,52399L,52400L,52401L,52402L, +52403L,52404L,52405L,52406L,52407L,52408L,52409L,52410L,52411L,52412L, +52413L,52414L,52415L,52416L,52417L,52418L,52419L,52420L,52421L,52422L, +52423L,52424L,52425L,52426L,52427L,52428L,52429L,52430L,52431L,52432L, +52433L,52434L,52435L,52436L,52437L,52438L,52439L,52440L,52441L,52442L, +52443L,52444L,52445L,52446L,52447L,52448L,52449L,52450L,52451L,52452L, +52453L,52454L,52455L,52456L,52457L,52458L,52459L,52460L,52461L,52462L, +52463L,52464L,52465L,52466L,52467L,52468L,52469L,52470L,52471L,52472L, +52473L,52474L,52475L,52476L,52477L,52478L,52479L,52480L,52481L,52482L, +52483L,52484L,52485L,52486L,52487L,52488L,52489L,52490L,52491L,52492L, +52493L,52494L,52495L,52496L,52497L,52498L,52499L,52500L,52501L,52502L, +52503L,52504L,52505L,52506L,52507L,52508L,52509L,52510L,52511L,52512L, +52513L,52514L,52515L,52516L,52517L,52518L,52519L,52520L,52521L,52522L, +52523L,52524L,52525L,52526L,52527L,52528L,52529L,52530L,52531L,52532L, +52533L,52534L,52535L,52536L,52537L,52538L,52539L,52540L,52541L,52542L, +52543L,52544L,52545L,52546L,52547L,52548L,52549L,52550L,52551L,52552L, +52553L,52554L,52555L,52556L,52557L,52558L,52559L,52560L,52561L,52562L, +52563L,52564L,52565L,52566L,52567L,52568L,52569L,52570L,52571L,52572L, +52573L,52574L,52575L,52576L,52577L,52578L,52579L,52580L,52581L,52582L, +52583L,52584L,52585L,52586L,52587L,52588L,52589L,52590L,52591L,52592L, +52593L,52594L,52595L,52596L,52597L,52598L,52599L,52600L,52601L,52602L, +52603L,52604L,52605L,52606L,52607L,52608L,52609L,52610L,52611L,52612L, +52613L,52614L,52615L,52616L,52617L,52618L,52619L,52620L,52621L,52622L, +52623L,52624L,52625L,52626L,52627L,52628L,52629L,52630L,52631L,52632L, +52633L,52634L,52635L,52636L,52637L,52638L,52639L,52640L,52641L,52642L, +52643L,52644L,52645L,52646L,52647L,52648L,52649L,52650L,52651L,52652L, +52653L,52654L,52655L,52656L,52657L,52658L,52659L,52660L,52661L,52662L, +52663L,52664L,52665L,52666L,52667L,52668L,52669L,52670L,52671L,52672L, +52673L,52674L,52675L,52676L,52677L,52678L,52679L,52680L,52681L,52682L, +52683L,52684L,52685L,52686L,52687L,52688L,52689L,52690L,52691L,52692L, +52693L,52694L,52695L,52696L,52697L,52698L,52699L,52700L,52701L,52702L, +52703L,52704L,52705L,52706L,52707L,52708L,52709L,52710L,52711L,52712L, +52713L,52714L,52715L,52716L,52717L,52718L,52719L,52720L,52721L,52722L, +52723L,52724L,52725L,52726L,52727L,52728L,52729L,52730L,52731L,52732L, +52733L,52734L,52735L,52736L,52737L,52738L,52739L,52740L,52741L,52742L, +52743L,52744L,52745L,52746L,52747L,52748L,52749L,52750L,52751L,52752L, +52753L,52754L,52755L,52756L,52757L,52758L,52759L,52760L,52761L,52762L, +52763L,52764L,52765L,52766L,52767L,52768L,52769L,52770L,52771L,52772L, +52773L,52774L,52775L,52776L,52777L,52778L,52779L,52780L,52781L,52782L, +52783L,52784L,52785L,52786L,52787L,52788L,52789L,52790L,52791L,52792L, +52793L,52794L,52795L,52796L,52797L,52798L,52799L,52800L,52801L,52802L, +52803L,52804L,52805L,52806L,52807L,52808L,52809L,52810L,52811L,52812L, +52813L,52814L,52815L,52816L,52817L,52818L,52819L,52820L,52821L,52822L, +52823L,52824L,52825L,52826L,52827L,52828L,52829L,52830L,52831L,52832L, +52833L,52834L,52835L,52836L,52837L,52838L,52839L,52840L,52841L,52842L, +52843L,52844L,52845L,52846L,52847L,52848L,52849L,52850L,52851L,52852L, +52853L,52854L,52855L,52856L,52857L,52858L,52859L,52860L,52861L,52862L, +52863L,52864L,52865L,52866L,52867L,52868L,52869L,52870L,52871L,52872L, +52873L,52874L,52875L,52876L,52877L,52878L,52879L,52880L,52881L,52882L, +52883L,52884L,52885L,52886L,52887L,52888L,52889L,52890L,52891L,52892L, +52893L,52894L,52895L,52896L,52897L,52898L,52899L,52900L,52901L,52902L, +52903L,52904L,52905L,52906L,52907L,52908L,52909L,52910L,52911L,52912L, +52913L,52914L,52915L,52916L,52917L,52918L,52919L,52920L,52921L,52922L, +52923L,52924L,52925L,52926L,52927L,52928L,52929L,52930L,52931L,52932L, +52933L,52934L,52935L,52936L,52937L,52938L,52939L,52940L,52941L,52942L, +52943L,52944L,52945L,52946L,52947L,52948L,52949L,52950L,52951L,52952L, +52953L,52954L,52955L,52956L,52957L,52958L,52959L,52960L,52961L,52962L, +52963L,52964L,52965L,52966L,52967L,52968L,52969L,52970L,52971L,52972L, +52973L,52974L,52975L,52976L,52977L,52978L,52979L,52980L,52981L,52982L, +52983L,52984L,52985L,52986L,52987L,52988L,52989L,52990L,52991L,52992L, +52993L,52994L,52995L,52996L,52997L,52998L,52999L,53000L,53001L,53002L, +53003L,53004L,53005L,53006L,53007L,53008L,53009L,53010L,53011L,53012L, +53013L,53014L,53015L,53016L,53017L,53018L,53019L,53020L,53021L,53022L, +53023L,53024L,53025L,53026L,53027L,53028L,53029L,53030L,53031L,53032L, +53033L,53034L,53035L,53036L,53037L,53038L,53039L,53040L,53041L,53042L, +53043L,53044L,53045L,53046L,53047L,53048L,53049L,53050L,53051L,53052L, +53053L,53054L,53055L,53056L,53057L,53058L,53059L,53060L,53061L,53062L, +53063L,53064L,53065L,53066L,53067L,53068L,53069L,53070L,53071L,53072L, +53073L,53074L,53075L,53076L,53077L,53078L,53079L,53080L,53081L,53082L, +53083L,53084L,53085L,53086L,53087L,53088L,53089L,53090L,53091L,53092L, +53093L,53094L,53095L,53096L,53097L,53098L,53099L,53100L,53101L,53102L, +53103L,53104L,53105L,53106L,53107L,53108L,53109L,53110L,53111L,53112L, +53113L,53114L,53115L,53116L,53117L,53118L,53119L,53120L,53121L,53122L, +53123L,53124L,53125L,53126L,53127L,53128L,53129L,53130L,53131L,53132L, +53133L,53134L,53135L,53136L,53137L,53138L,53139L,53140L,53141L,53142L, +53143L,53144L,53145L,53146L,53147L,53148L,53149L,53150L,53151L,53152L, +53153L,53154L,53155L,53156L,53157L,53158L,53159L,53160L,53161L,53162L, +53163L,53164L,53165L,53166L,53167L,53168L,53169L,53170L,53171L,53172L, +53173L,53174L,53175L,53176L,53177L,53178L,53179L,53180L,53181L,53182L, +53183L,53184L,53185L,53186L,53187L,53188L,53189L,53190L,53191L,53192L, +53193L,53194L,53195L,53196L,53197L,53198L,53199L,53200L,53201L,53202L, +53203L,53204L,53205L,53206L,53207L,53208L,53209L,53210L,53211L,53212L, +53213L,53214L,53215L,53216L,53217L,53218L,53219L,53220L,53221L,53222L, +53223L,53224L,53225L,53226L,53227L,53228L,53229L,53230L,53231L,53232L, +53233L,53234L,53235L,53236L,53237L,53238L,53239L,53240L,53241L,53242L, +53243L,53244L,53245L,53246L,53247L,53248L,53249L,53250L,53251L,53252L, +53253L,53254L,53255L,53256L,53257L,53258L,53259L,53260L,53261L,53262L, +53263L,53264L,53265L,53266L,53267L,53268L,53269L,53270L,53271L,53272L, +53273L,53274L,53275L,53276L,53277L,53278L,53279L,53280L,53281L,53282L, +53283L,53284L,53285L,53286L,53287L,53288L,53289L,53290L,53291L,53292L, +53293L,53294L,53295L,53296L,53297L,53298L,53299L,53300L,53301L,53302L, +53303L,53304L,53305L,53306L,53307L,53308L,53309L,53310L,53311L,53312L, +53313L,53314L,53315L,53316L,53317L,53318L,53319L,53320L,53321L,53322L, +53323L,53324L,53325L,53326L,53327L,53328L,53329L,53330L,53331L,53332L, +53333L,53334L,53335L,53336L,53337L,53338L,53339L,53340L,53341L,53342L, +53343L,53344L,53345L,53346L,53347L,53348L,53349L,53350L,53351L,53352L, +53353L,53354L,53355L,53356L,53357L,53358L,53359L,53360L,53361L,53362L, +53363L,53364L,53365L,53366L,53367L,53368L,53369L,53370L,53371L,53372L, +53373L,53374L,53375L,53376L,53377L,53378L,53379L,53380L,53381L,53382L, +53383L,53384L,53385L,53386L,53387L,53388L,53389L,53390L,53391L,53392L, +53393L,53394L,53395L,53396L,53397L,53398L,53399L,53400L,53401L,53402L, +53403L,53404L,53405L,53406L,53407L,53408L,53409L,53410L,53411L,53412L, +53413L,53414L,53415L,53416L,53417L,53418L,53419L,53420L,53421L,53422L, +53423L,53424L,53425L,53426L,53427L,53428L,53429L,53430L,53431L,53432L, +53433L,53434L,53435L,53436L,53437L,53438L,53439L,53440L,53441L,53442L, +53443L,53444L,53445L,53446L,53447L,53448L,53449L,53450L,53451L,53452L, +53453L,53454L,53455L,53456L,53457L,53458L,53459L,53460L,53461L,53462L, +53463L,53464L,53465L,53466L,53467L,53468L,53469L,53470L,53471L,53472L, +53473L,53474L,53475L,53476L,53477L,53478L,53479L,53480L,53481L,53482L, +53483L,53484L,53485L,53486L,53487L,53488L,53489L,53490L,53491L,53492L, +53493L,53494L,53495L,53496L,53497L,53498L,53499L,53500L,53501L,53502L, +53503L,53504L,53505L,53506L,53507L,53508L,53509L,53510L,53511L,53512L, +53513L,53514L,53515L,53516L,53517L,53518L,53519L,53520L,53521L,53522L, +53523L,53524L,53525L,53526L,53527L,53528L,53529L,53530L,53531L,53532L, +53533L,53534L,53535L,53536L,53537L,53538L,53539L,53540L,53541L,53542L, +53543L,53544L,53545L,53546L,53547L,53548L,53549L,53550L,53551L,53552L, +53553L,53554L,53555L,53556L,53557L,53558L,53559L,53560L,53561L,53562L, +53563L,53564L,53565L,53566L,53567L,53568L,53569L,53570L,53571L,53572L, +53573L,53574L,53575L,53576L,53577L,53578L,53579L,53580L,53581L,53582L, +53583L,53584L,53585L,53586L,53587L,53588L,53589L,53590L,53591L,53592L, +53593L,53594L,53595L,53596L,53597L,53598L,53599L,53600L,53601L,53602L, +53603L,53604L,53605L,53606L,53607L,53608L,53609L,53610L,53611L,53612L, +53613L,53614L,53615L,53616L,53617L,53618L,53619L,53620L,53621L,53622L, +53623L,53624L,53625L,53626L,53627L,53628L,53629L,53630L,53631L,53632L, +53633L,53634L,53635L,53636L,53637L,53638L,53639L,53640L,53641L,53642L, +53643L,53644L,53645L,53646L,53647L,53648L,53649L,53650L,53651L,53652L, +53653L,53654L,53655L,53656L,53657L,53658L,53659L,53660L,53661L,53662L, +53663L,53664L,53665L,53666L,53667L,53668L,53669L,53670L,53671L,53672L, +53673L,53674L,53675L,53676L,53677L,53678L,53679L,53680L,53681L,53682L, +53683L,53684L,53685L,53686L,53687L,53688L,53689L,53690L,53691L,53692L, +53693L,53694L,53695L,53696L,53697L,53698L,53699L,53700L,53701L,53702L, +53703L,53704L,53705L,53706L,53707L,53708L,53709L,53710L,53711L,53712L, +53713L,53714L,53715L,53716L,53717L,53718L,53719L,53720L,53721L,53722L, +53723L,53724L,53725L,53726L,53727L,53728L,53729L,53730L,53731L,53732L, +53733L,53734L,53735L,53736L,53737L,53738L,53739L,53740L,53741L,53742L, +53743L,53744L,53745L,53746L,53747L,53748L,53749L,53750L,53751L,53752L, +53753L,53754L,53755L,53756L,53757L,53758L,53759L,53760L,53761L,53762L, +53763L,53764L,53765L,53766L,53767L,53768L,53769L,53770L,53771L,53772L, +53773L,53774L,53775L,53776L,53777L,53778L,53779L,53780L,53781L,53782L, +53783L,53784L,53785L,53786L,53787L,53788L,53789L,53790L,53791L,53792L, +53793L,53794L,53795L,53796L,53797L,53798L,53799L,53800L,53801L,53802L, +53803L,53804L,53805L,53806L,53807L,53808L,53809L,53810L,53811L,53812L, +53813L,53814L,53815L,53816L,53817L,53818L,53819L,53820L,53821L,53822L, +53823L,53824L,53825L,53826L,53827L,53828L,53829L,53830L,53831L,53832L, +53833L,53834L,53835L,53836L,53837L,53838L,53839L,53840L,53841L,53842L, +53843L,53844L,53845L,53846L,53847L,53848L,53849L,53850L,53851L,53852L, +53853L,53854L,53855L,53856L,53857L,53858L,53859L,53860L,53861L,53862L, +53863L,53864L,53865L,53866L,53867L,53868L,53869L,53870L,53871L,53872L, +53873L,53874L,53875L,53876L,53877L,53878L,53879L,53880L,53881L,53882L, +53883L,53884L,53885L,53886L,53887L,53888L,53889L,53890L,53891L,53892L, +53893L,53894L,53895L,53896L,53897L,53898L,53899L,53900L,53901L,53902L, +53903L,53904L,53905L,53906L,53907L,53908L,53909L,53910L,53911L,53912L, +53913L,53914L,53915L,53916L,53917L,53918L,53919L,53920L,53921L,53922L, +53923L,53924L,53925L,53926L,53927L,53928L,53929L,53930L,53931L,53932L, +53933L,53934L,53935L,53936L,53937L,53938L,53939L,53940L,53941L,53942L, +53943L,53944L,53945L,53946L,53947L,53948L,53949L,53950L,53951L,53952L, +53953L,53954L,53955L,53956L,53957L,53958L,53959L,53960L,53961L,53962L, +53963L,53964L,53965L,53966L,53967L,53968L,53969L,53970L,53971L,53972L, +53973L,53974L,53975L,53976L,53977L,53978L,53979L,53980L,53981L,53982L, +53983L,53984L,53985L,53986L,53987L,53988L,53989L,53990L,53991L,53992L, +53993L,53994L,53995L,53996L,53997L,53998L,53999L,54000L,54001L,54002L, +54003L,54004L,54005L,54006L,54007L,54008L,54009L,54010L,54011L,54012L, +54013L,54014L,54015L,54016L,54017L,54018L,54019L,54020L,54021L,54022L, +54023L,54024L,54025L,54026L,54027L,54028L,54029L,54030L,54031L,54032L, +54033L,54034L,54035L,54036L,54037L,54038L,54039L,54040L,54041L,54042L, +54043L,54044L,54045L,54046L,54047L,54048L,54049L,54050L,54051L,54052L, +54053L,54054L,54055L,54056L,54057L,54058L,54059L,54060L,54061L,54062L, +54063L,54064L,54065L,54066L,54067L,54068L,54069L,54070L,54071L,54072L, +54073L,54074L,54075L,54076L,54077L,54078L,54079L,54080L,54081L,54082L, +54083L,54084L,54085L,54086L,54087L,54088L,54089L,54090L,54091L,54092L, +54093L,54094L,54095L,54096L,54097L,54098L,54099L,54100L,54101L,54102L, +54103L,54104L,54105L,54106L,54107L,54108L,54109L,54110L,54111L,54112L, +54113L,54114L,54115L,54116L,54117L,54118L,54119L,54120L,54121L,54122L, +54123L,54124L,54125L,54126L,54127L,54128L,54129L,54130L,54131L,54132L, +54133L,54134L,54135L,54136L,54137L,54138L,54139L,54140L,54141L,54142L, +54143L,54144L,54145L,54146L,54147L,54148L,54149L,54150L,54151L,54152L, +54153L,54154L,54155L,54156L,54157L,54158L,54159L,54160L,54161L,54162L, +54163L,54164L,54165L,54166L,54167L,54168L,54169L,54170L,54171L,54172L, +54173L,54174L,54175L,54176L,54177L,54178L,54179L,54180L,54181L,54182L, +54183L,54184L,54185L,54186L,54187L,54188L,54189L,54190L,54191L,54192L, +54193L,54194L,54195L,54196L,54197L,54198L,54199L,54200L,54201L,54202L, +54203L,54204L,54205L,54206L,54207L,54208L,54209L,54210L,54211L,54212L, +54213L,54214L,54215L,54216L,54217L,54218L,54219L,54220L,54221L,54222L, +54223L,54224L,54225L,54226L,54227L,54228L,54229L,54230L,54231L,54232L, +54233L,54234L,54235L,54236L,54237L,54238L,54239L,54240L,54241L,54242L, +54243L,54244L,54245L,54246L,54247L,54248L,54249L,54250L,54251L,54252L, +54253L,54254L,54255L,54256L,54257L,54258L,54259L,54260L,54261L,54262L, +54263L,54264L,54265L,54266L,54267L,54268L,54269L,54270L,54271L,54272L, +54273L,54274L,54275L,54276L,54277L,54278L,54279L,54280L,54281L,54282L, +54283L,54284L,54285L,54286L,54287L,54288L,54289L,54290L,54291L,54292L, +54293L,54294L,54295L,54296L,54297L,54298L,54299L,54300L,54301L,54302L, +54303L,54304L,54305L,54306L,54307L,54308L,54309L,54310L,54311L,54312L, +54313L,54314L,54315L,54316L,54317L,54318L,54319L,54320L,54321L,54322L, +54323L,54324L,54325L,54326L,54327L,54328L,54329L,54330L,54331L,54332L, +54333L,54334L,54335L,54336L,54337L,54338L,54339L,54340L,54341L,54342L, +54343L,54344L,54345L,54346L,54347L,54348L,54349L,54350L,54351L,54352L, +54353L,54354L,54355L,54356L,54357L,54358L,54359L,54360L,54361L,54362L, +54363L,54364L,54365L,54366L,54367L,54368L,54369L,54370L,54371L,54372L, +54373L,54374L,54375L,54376L,54377L,54378L,54379L,54380L,54381L,54382L, +54383L,54384L,54385L,54386L,54387L,54388L,54389L,54390L,54391L,54392L, +54393L,54394L,54395L,54396L,54397L,54398L,54399L,54400L,54401L,54402L, +54403L,54404L,54405L,54406L,54407L,54408L,54409L,54410L,54411L,54412L, +54413L,54414L,54415L,54416L,54417L,54418L,54419L,54420L,54421L,54422L, +54423L,54424L,54425L,54426L,54427L,54428L,54429L,54430L,54431L,54432L, +54433L,54434L,54435L,54436L,54437L,54438L,54439L,54440L,54441L,54442L, +54443L,54444L,54445L,54446L,54447L,54448L,54449L,54450L,54451L,54452L, +54453L,54454L,54455L,54456L,54457L,54458L,54459L,54460L,54461L,54462L, +54463L,54464L,54465L,54466L,54467L,54468L,54469L,54470L,54471L,54472L, +54473L,54474L,54475L,54476L,54477L,54478L,54479L,54480L,54481L,54482L, +54483L,54484L,54485L,54486L,54487L,54488L,54489L,54490L,54491L,54492L, +54493L,54494L,54495L,54496L,54497L,54498L,54499L,54500L,54501L,54502L, +54503L,54504L,54505L,54506L,54507L,54508L,54509L,54510L,54511L,54512L, +54513L,54514L,54515L,54516L,54517L,54518L,54519L,54520L,54521L,54522L, +54523L,54524L,54525L,54526L,54527L,54528L,54529L,54530L,54531L,54532L, +54533L,54534L,54535L,54536L,54537L,54538L,54539L,54540L,54541L,54542L, +54543L,54544L,54545L,54546L,54547L,54548L,54549L,54550L,54551L,54552L, +54553L,54554L,54555L,54556L,54557L,54558L,54559L,54560L,54561L,54562L, +54563L,54564L,54565L,54566L,54567L,54568L,54569L,54570L,54571L,54572L, +54573L,54574L,54575L,54576L,54577L,54578L,54579L,54580L,54581L,54582L, +54583L,54584L,54585L,54586L,54587L,54588L,54589L,54590L,54591L,54592L, +54593L,54594L,54595L,54596L,54597L,54598L,54599L,54600L,54601L,54602L, +54603L,54604L,54605L,54606L,54607L,54608L,54609L,54610L,54611L,54612L, +54613L,54614L,54615L,54616L,54617L,54618L,54619L,54620L,54621L,54622L, +54623L,54624L,54625L,54626L,54627L,54628L,54629L,54630L,54631L,54632L, +54633L,54634L,54635L,54636L,54637L,54638L,54639L,54640L,54641L,54642L, +54643L,54644L,54645L,54646L,54647L,54648L,54649L,54650L,54651L,54652L, +54653L,54654L,54655L,54656L,54657L,54658L,54659L,54660L,54661L,54662L, +54663L,54664L,54665L,54666L,54667L,54668L,54669L,54670L,54671L,54672L, +54673L,54674L,54675L,54676L,54677L,54678L,54679L,54680L,54681L,54682L, +54683L,54684L,54685L,54686L,54687L,54688L,54689L,54690L,54691L,54692L, +54693L,54694L,54695L,54696L,54697L,54698L,54699L,54700L,54701L,54702L, +54703L,54704L,54705L,54706L,54707L,54708L,54709L,54710L,54711L,54712L, +54713L,54714L,54715L,54716L,54717L,54718L,54719L,54720L,54721L,54722L, +54723L,54724L,54725L,54726L,54727L,54728L,54729L,54730L,54731L,54732L, +54733L,54734L,54735L,54736L,54737L,54738L,54739L,54740L,54741L,54742L, +54743L,54744L,54745L,54746L,54747L,54748L,54749L,54750L,54751L,54752L, +54753L,54754L,54755L,54756L,54757L,54758L,54759L,54760L,54761L,54762L, +54763L,54764L,54765L,54766L,54767L,54768L,54769L,54770L,54771L,54772L, +54773L,54774L,54775L,54776L,54777L,54778L,54779L,54780L,54781L,54782L, +54783L,54784L,54785L,54786L,54787L,54788L,54789L,54790L,54791L,54792L, +54793L,54794L,54795L,54796L,54797L,54798L,54799L,54800L,54801L,54802L, +54803L,54804L,54805L,54806L,54807L,54808L,54809L,54810L,54811L,54812L, +54813L,54814L,54815L,54816L,54817L,54818L,54819L,54820L,54821L,54822L, +54823L,54824L,54825L,54826L,54827L,54828L,54829L,54830L,54831L,54832L, +54833L,54834L,54835L,54836L,54837L,54838L,54839L,54840L,54841L,54842L, +54843L,54844L,54845L,54846L,54847L,54848L,54849L,54850L,54851L,54852L, +54853L,54854L,54855L,54856L,54857L,54858L,54859L,54860L,54861L,54862L, +54863L,54864L,54865L,54866L,54867L,54868L,54869L,54870L,54871L,54872L, +54873L,54874L,54875L,54876L,54877L,54878L,54879L,54880L,54881L,54882L, +54883L,54884L,54885L,54886L,54887L,54888L,54889L,54890L,54891L,54892L, +54893L,54894L,54895L,54896L,54897L,54898L,54899L,54900L,54901L,54902L, +54903L,54904L,54905L,54906L,54907L,54908L,54909L,54910L,54911L,54912L, +54913L,54914L,54915L,54916L,54917L,54918L,54919L,54920L,54921L,54922L, +54923L,54924L,54925L,54926L,54927L,54928L,54929L,54930L,54931L,54932L, +54933L,54934L,54935L,54936L,54937L,54938L,54939L,54940L,54941L,54942L, +54943L,54944L,54945L,54946L,54947L,54948L,54949L,54950L,54951L,54952L, +54953L,54954L,54955L,54956L,54957L,54958L,54959L,54960L,54961L,54962L, +54963L,54964L,54965L,54966L,54967L,54968L,54969L,54970L,54971L,54972L, +54973L,54974L,54975L,54976L,54977L,54978L,54979L,54980L,54981L,54982L, +54983L,54984L,54985L,54986L,54987L,54988L,54989L,54990L,54991L,54992L, +54993L,54994L,54995L,54996L,54997L,54998L,54999L,55000L,55001L,55002L, +55003L,55004L,55005L,55006L,55007L,55008L,55009L,55010L,55011L,55012L, +55013L,55014L,55015L,55016L,55017L,55018L,55019L,55020L,55021L,55022L, +55023L,55024L,55025L,55026L,55027L,55028L,55029L,55030L,55031L,55032L, +55033L,55034L,55035L,55036L,55037L,55038L,55039L,55040L,55041L,55042L, +55043L,55044L,55045L,55046L,55047L,55048L,55049L,55050L,55051L,55052L, +55053L,55054L,55055L,55056L,55057L,55058L,55059L,55060L,55061L,55062L, +55063L,55064L,55065L,55066L,55067L,55068L,55069L,55070L,55071L,55072L, +55073L,55074L,55075L,55076L,55077L,55078L,55079L,55080L,55081L,55082L, +55083L,55084L,55085L,55086L,55087L,55088L,55089L,55090L,55091L,55092L, +55093L,55094L,55095L,55096L,55097L,55098L,55099L,55100L,55101L,55102L, +55103L,55104L,55105L,55106L,55107L,55108L,55109L,55110L,55111L,55112L, +55113L,55114L,55115L,55116L,55117L,55118L,55119L,55120L,55121L,55122L, +55123L,55124L,55125L,55126L,55127L,55128L,55129L,55130L,55131L,55132L, +55133L,55134L,55135L,55136L,55137L,55138L,55139L,55140L,55141L,55142L, +55143L,55144L,55145L,55146L,55147L,55148L,55149L,55150L,55151L,55152L, +55153L,55154L,55155L,55156L,55157L,55158L,55159L,55160L,55161L,55162L, +55163L,55164L,55165L,55166L,55167L,55168L,55169L,55170L,55171L,55172L, +55173L,55174L,55175L,55176L,55177L,55178L,55179L,55180L,55181L,55182L, +55183L,55184L,55185L,55186L,55187L,55188L,55189L,55190L,55191L,55192L, +55193L,55194L,55195L,55196L,55197L,55198L,55199L,55200L,55201L,55202L, +55203L,55204L,55205L,55206L,55207L,55208L,55209L,55210L,55211L,55212L, +55213L,55214L,55215L,55216L,55217L,55218L,55219L,55220L,55221L,55222L, +55223L,55224L,55225L,55226L,55227L,55228L,55229L,55230L,55231L,55232L, +55233L,55234L,55235L,55236L,55237L,55238L,55239L,55240L,55241L,55242L, +55243L,55244L,55245L,55246L,55247L,55248L,55249L,55250L,55251L,55252L, +55253L,55254L,55255L,55256L,55257L,55258L,55259L,55260L,55261L,55262L, +55263L,55264L,55265L,55266L,55267L,55268L,55269L,55270L,55271L,55272L, +55273L,55274L,55275L,55276L,55277L,55278L,55279L,55280L,55281L,55282L, +55283L,55284L,55285L,55286L,55287L,55288L,55289L,55290L,55291L,55292L, +55293L,55294L,55295L,55296L,55297L,55298L,55299L,55300L,55301L,55302L, +55303L,55304L,55305L,55306L,55307L,55308L,55309L,55310L,55311L,55312L, +55313L,55314L,55315L,55316L,55317L,55318L,55319L,55320L,55321L,55322L, +55323L,55324L,55325L,55326L,55327L,55328L,55329L,55330L,55331L,55332L, +55333L,55334L,55335L,55336L,55337L,55338L,55339L,55340L,55341L,55342L, +55343L,55344L,55345L,55346L,55347L,55348L,55349L,55350L,55351L,55352L, +55353L,55354L,55355L,55356L,55357L,55358L,55359L,55360L,55361L,55362L, +55363L,55364L,55365L,55366L,55367L,55368L,55369L,55370L,55371L,55372L, +55373L,55374L,55375L,55376L,55377L,55378L,55379L,55380L,55381L,55382L, +55383L,55384L,55385L,55386L,55387L,55388L,55389L,55390L,55391L,55392L, +55393L,55394L,55395L,55396L,55397L,55398L,55399L,55400L,55401L,55402L, +55403L,55404L,55405L,55406L,55407L,55408L,55409L,55410L,55411L,55412L, +55413L,55414L,55415L,55416L,55417L,55418L,55419L,55420L,55421L,55422L, +55423L,55424L,55425L,55426L,55427L,55428L,55429L,55430L,55431L,55432L, +55433L,55434L,55435L,55436L,55437L,55438L,55439L,55440L,55441L,55442L, +55443L,55444L,55445L,55446L,55447L,55448L,55449L,55450L,55451L,55452L, +55453L,55454L,55455L,55456L,55457L,55458L,55459L,55460L,55461L,55462L, +55463L,55464L,55465L,55466L,55467L,55468L,55469L,55470L,55471L,55472L, +55473L,55474L,55475L,55476L,55477L,55478L,55479L,55480L,55481L,55482L, +55483L,55484L,55485L,55486L,55487L,55488L,55489L,55490L,55491L,55492L, +55493L,55494L,55495L,55496L,55497L,55498L,55499L,55500L,55501L,55502L, +55503L,55504L,55505L,55506L,55507L,55508L,55509L,55510L,55511L,55512L, +55513L,55514L,55515L,55516L,55517L,55518L,55519L,55520L,55521L,55522L, +55523L,55524L,55525L,55526L,55527L,55528L,55529L,55530L,55531L,55532L, +55533L,55534L,55535L,55536L,55537L,55538L,55539L,55540L,55541L,55542L, +55543L,55544L,55545L,55546L,55547L,55548L,55549L,55550L,55551L,55552L, +55553L,55554L,55555L,55556L,55557L,55558L,55559L,55560L,55561L,55562L, +55563L,55564L,55565L,55566L,55567L,55568L,55569L,55570L,55571L,55572L, +55573L,55574L,55575L,55576L,55577L,55578L,55579L,55580L,55581L,55582L, +55583L,55584L,55585L,55586L,55587L,55588L,55589L,55590L,55591L,55592L, +55593L,55594L,55595L,55596L,55597L,55598L,55599L,55600L,55601L,55602L, +55603L,55604L,55605L,55606L,55607L,55608L,55609L,55610L,55611L,55612L, +55613L,55614L,55615L,55616L,55617L,55618L,55619L,55620L,55621L,55622L, +55623L,55624L,55625L,55626L,55627L,55628L,55629L,55630L,55631L,55632L, +55633L,55634L,55635L,55636L,55637L,55638L,55639L,55640L,55641L,55642L, +55643L,55644L,55645L,55646L,55647L,55648L,55649L,55650L,55651L,55652L, +55653L,55654L,55655L,55656L,55657L,55658L,55659L,55660L,55661L,55662L, +55663L,55664L,55665L,55666L,55667L,55668L,55669L,55670L,55671L,55672L, +55673L,55674L,55675L,55676L,55677L,55678L,55679L,55680L,55681L,55682L, +55683L,55684L,55685L,55686L,55687L,55688L,55689L,55690L,55691L,55692L, +55693L,55694L,55695L,55696L,55697L,55698L,55699L,55700L,55701L,55702L, +55703L,55704L,55705L,55706L,55707L,55708L,55709L,55710L,55711L,55712L, +55713L,55714L,55715L,55716L,55717L,55718L,55719L,55720L,55721L,55722L, +55723L,55724L,55725L,55726L,55727L,55728L,55729L,55730L,55731L,55732L, +55733L,55734L,55735L,55736L,55737L,55738L,55739L,55740L,55741L,55742L, +55743L,55744L,55745L,55746L,55747L,55748L,55749L,55750L,55751L,55752L, +55753L,55754L,55755L,55756L,55757L,55758L,55759L,55760L,55761L,55762L, +55763L,55764L,55765L,55766L,55767L,55768L,55769L,55770L,55771L,55772L, +55773L,55774L,55775L,55776L,55777L,55778L,55779L,55780L,55781L,55782L, +55783L,55784L,55785L,55786L,55787L,55788L,55789L,55790L,55791L,55792L, +55793L,55794L,55795L,55796L,55797L,55798L,55799L,55800L,55801L,55802L, +55803L,55804L,55805L,55806L,55807L,55808L,55809L,55810L,55811L,55812L, +55813L,55814L,55815L,55816L,55817L,55818L,55819L,55820L,55821L,55822L, +55823L,55824L,55825L,55826L,55827L,55828L,55829L,55830L,55831L,55832L, +55833L,55834L,55835L,55836L,55837L,55838L,55839L,55840L,55841L,55842L, +55843L,55844L,55845L,55846L,55847L,55848L,55849L,55850L,55851L,55852L, +55853L,55854L,55855L,55856L,55857L,55858L,55859L,55860L,55861L,55862L, +55863L,55864L,55865L,55866L,55867L,55868L,55869L,55870L,55871L,55872L, +55873L,55874L,55875L,55876L,55877L,55878L,55879L,55880L,55881L,55882L, +55883L,55884L,55885L,55886L,55887L,55888L,55889L,55890L,55891L,55892L, +55893L,55894L,55895L,55896L,55897L,55898L,55899L,55900L,55901L,55902L, +55903L,55904L,55905L,55906L,55907L,55908L,55909L,55910L,55911L,55912L, +55913L,55914L,55915L,55916L,55917L,55918L,55919L,55920L,55921L,55922L, +55923L,55924L,55925L,55926L,55927L,55928L,55929L,55930L,55931L,55932L, +55933L,55934L,55935L,55936L,55937L,55938L,55939L,55940L,55941L,55942L, +55943L,55944L,55945L,55946L,55947L,55948L,55949L,55950L,55951L,55952L, +55953L,55954L,55955L,55956L,55957L,55958L,55959L,55960L,55961L,55962L, +55963L,55964L,55965L,55966L,55967L,55968L,55969L,55970L,55971L,55972L, +55973L,55974L,55975L,55976L,55977L,55978L,55979L,55980L,55981L,55982L, +55983L,55984L,55985L,55986L,55987L,55988L,55989L,55990L,55991L,55992L, +55993L,55994L,55995L,55996L,55997L,55998L,55999L,56000L,56001L,56002L, +56003L,56004L,56005L,56006L,56007L,56008L,56009L,56010L,56011L,56012L, +56013L,56014L,56015L,56016L,56017L,56018L,56019L,56020L,56021L,56022L, +56023L,56024L,56025L,56026L,56027L,56028L,56029L,56030L,56031L,56032L, +56033L,56034L,56035L,56036L,56037L,56038L,56039L,56040L,56041L,56042L, +56043L,56044L,56045L,56046L,56047L,56048L,56049L,56050L,56051L,56052L, +56053L,56054L,56055L,56056L,56057L,56058L,56059L,56060L,56061L,56062L, +56063L,56064L,56065L,56066L,56067L,56068L,56069L,56070L,56071L,56072L, +56073L,56074L,56075L,56076L,56077L,56078L,56079L,56080L,56081L,56082L, +56083L,56084L,56085L,56086L,56087L,56088L,56089L,56090L,56091L,56092L, +56093L,56094L,56095L,56096L,56097L,56098L,56099L,56100L,56101L,56102L, +56103L,56104L,56105L,56106L,56107L,56108L,56109L,56110L,56111L,56112L, +56113L,56114L,56115L,56116L,56117L,56118L,56119L,56120L,56121L,56122L, +56123L,56124L,56125L,56126L,56127L,56128L,56129L,56130L,56131L,56132L, +56133L,56134L,56135L,56136L,56137L,56138L,56139L,56140L,56141L,56142L, +56143L,56144L,56145L,56146L,56147L,56148L,56149L,56150L,56151L,56152L, +56153L,56154L,56155L,56156L,56157L,56158L,56159L,56160L,56161L,56162L, +56163L,56164L,56165L,56166L,56167L,56168L,56169L,56170L,56171L,56172L, +56173L,56174L,56175L,56176L,56177L,56178L,56179L,56180L,56181L,56182L, +56183L,56184L,56185L,56186L,56187L,56188L,56189L,56190L,56191L,56192L, +56193L,56194L,56195L,56196L,56197L,56198L,56199L,56200L,56201L,56202L, +56203L,56204L,56205L,56206L,56207L,56208L,56209L,56210L,56211L,56212L, +56213L,56214L,56215L,56216L,56217L,56218L,56219L,56220L,56221L,56222L, +56223L,56224L,56225L,56226L,56227L,56228L,56229L,56230L,56231L,56232L, +56233L,56234L,56235L,56236L,56237L,56238L,56239L,56240L,56241L,56242L, +56243L,56244L,56245L,56246L,56247L,56248L,56249L,56250L,56251L,56252L, +56253L,56254L,56255L,56256L,56257L,56258L,56259L,56260L,56261L,56262L, +56263L,56264L,56265L,56266L,56267L,56268L,56269L,56270L,56271L,56272L, +56273L,56274L,56275L,56276L,56277L,56278L,56279L,56280L,56281L,56282L, +56283L,56284L,56285L,56286L,56287L,56288L,56289L,56290L,56291L,56292L, +56293L,56294L,56295L,56296L,56297L,56298L,56299L,56300L,56301L,56302L, +56303L,56304L,56305L,56306L,56307L,56308L,56309L,56310L,56311L,56312L, +56313L,56314L,56315L,56316L,56317L,56318L,56319L,56320L,56321L,56322L, +56323L,56324L,56325L,56326L,56327L,56328L,56329L,56330L,56331L,56332L, +56333L,56334L,56335L,56336L,56337L,56338L,56339L,56340L,56341L,56342L, +56343L,56344L,56345L,56346L,56347L,56348L,56349L,56350L,56351L,56352L, +56353L,56354L,56355L,56356L,56357L,56358L,56359L,56360L,56361L,56362L, +56363L,56364L,56365L,56366L,56367L,56368L,56369L,56370L,56371L,56372L, +56373L,56374L,56375L,56376L,56377L,56378L,56379L,56380L,56381L,56382L, +56383L,56384L,56385L,56386L,56387L,56388L,56389L,56390L,56391L,56392L, +56393L,56394L,56395L,56396L,56397L,56398L,56399L,56400L,56401L,56402L, +56403L,56404L,56405L,56406L,56407L,56408L,56409L,56410L,56411L,56412L, +56413L,56414L,56415L,56416L,56417L,56418L,56419L,56420L,56421L,56422L, +56423L,56424L,56425L,56426L,56427L,56428L,56429L,56430L,56431L,56432L, +56433L,56434L,56435L,56436L,56437L,56438L,56439L,56440L,56441L,56442L, +56443L,56444L,56445L,56446L,56447L,56448L,56449L,56450L,56451L,56452L, +56453L,56454L,56455L,56456L,56457L,56458L,56459L,56460L,56461L,56462L, +56463L,56464L,56465L,56466L,56467L,56468L,56469L,56470L,56471L,56472L, +56473L,56474L,56475L,56476L,56477L,56478L,56479L,56480L,56481L,56482L, +56483L,56484L,56485L,56486L,56487L,56488L,56489L,56490L,56491L,56492L, +56493L,56494L,56495L,56496L,56497L,56498L,56499L,56500L,56501L,56502L, +56503L,56504L,56505L,56506L,56507L,56508L,56509L,56510L,56511L,56512L, +56513L,56514L,56515L,56516L,56517L,56518L,56519L,56520L,56521L,56522L, +56523L,56524L,56525L,56526L,56527L,56528L,56529L,56530L,56531L,56532L, +56533L,56534L,56535L,56536L,56537L,56538L,56539L,56540L,56541L,56542L, +56543L,56544L,56545L,56546L,56547L,56548L,56549L,56550L,56551L,56552L, +56553L,56554L,56555L,56556L,56557L,56558L,56559L,56560L,56561L,56562L, +56563L,56564L,56565L,56566L,56567L,56568L,56569L,56570L,56571L,56572L, +56573L,56574L,56575L,56576L,56577L,56578L,56579L,56580L,56581L,56582L, +56583L,56584L,56585L,56586L,56587L,56588L,56589L,56590L,56591L,56592L, +56593L,56594L,56595L,56596L,56597L,56598L,56599L,56600L,56601L,56602L, +56603L,56604L,56605L,56606L,56607L,56608L,56609L,56610L,56611L,56612L, +56613L,56614L,56615L,56616L,56617L,56618L,56619L,56620L,56621L,56622L, +56623L,56624L,56625L,56626L,56627L,56628L,56629L,56630L,56631L,56632L, +56633L,56634L,56635L,56636L,56637L,56638L,56639L,56640L,56641L,56642L, +56643L,56644L,56645L,56646L,56647L,56648L,56649L,56650L,56651L,56652L, +56653L,56654L,56655L,56656L,56657L,56658L,56659L,56660L,56661L,56662L, +56663L,56664L,56665L,56666L,56667L,56668L,56669L,56670L,56671L,56672L, +56673L,56674L,56675L,56676L,56677L,56678L,56679L,56680L,56681L,56682L, +56683L,56684L,56685L,56686L,56687L,56688L,56689L,56690L,56691L,56692L, +56693L,56694L,56695L,56696L,56697L,56698L,56699L,56700L,56701L,56702L, +56703L,56704L,56705L,56706L,56707L,56708L,56709L,56710L,56711L,56712L, +56713L,56714L,56715L,56716L,56717L,56718L,56719L,56720L,56721L,56722L, +56723L,56724L,56725L,56726L,56727L,56728L,56729L,56730L,56731L,56732L, +56733L,56734L,56735L,56736L,56737L,56738L,56739L,56740L,56741L,56742L, +56743L,56744L,56745L,56746L,56747L,56748L,56749L,56750L,56751L,56752L, +56753L,56754L,56755L,56756L,56757L,56758L,56759L,56760L,56761L,56762L, +56763L,56764L,56765L,56766L,56767L,56768L,56769L,56770L,56771L,56772L, +56773L,56774L,56775L,56776L,56777L,56778L,56779L,56780L,56781L,56782L, +56783L,56784L,56785L,56786L,56787L,56788L,56789L,56790L,56791L,56792L, +56793L,56794L,56795L,56796L,56797L,56798L,56799L,56800L,56801L,56802L, +56803L,56804L,56805L,56806L,56807L,56808L,56809L,56810L,56811L,56812L, +56813L,56814L,56815L,56816L,56817L,56818L,56819L,56820L,56821L,56822L, +56823L,56824L,56825L,56826L,56827L,56828L,56829L,56830L,56831L,56832L, +56833L,56834L,56835L,56836L,56837L,56838L,56839L,56840L,56841L,56842L, +56843L,56844L,56845L,56846L,56847L,56848L,56849L,56850L,56851L,56852L, +56853L,56854L,56855L,56856L,56857L,56858L,56859L,56860L,56861L,56862L, +56863L,56864L,56865L,56866L,56867L,56868L,56869L,56870L,56871L,56872L, +56873L,56874L,56875L,56876L,56877L,56878L,56879L,56880L,56881L,56882L, +56883L,56884L,56885L,56886L,56887L,56888L,56889L,56890L,56891L,56892L, +56893L,56894L,56895L,56896L,56897L,56898L,56899L,56900L,56901L,56902L, +56903L,56904L,56905L,56906L,56907L,56908L,56909L,56910L,56911L,56912L, +56913L,56914L,56915L,56916L,56917L,56918L,56919L,56920L,56921L,56922L, +56923L,56924L,56925L,56926L,56927L,56928L,56929L,56930L,56931L,56932L, +56933L,56934L,56935L,56936L,56937L,56938L,56939L,56940L,56941L,56942L, +56943L,56944L,56945L,56946L,56947L,56948L,56949L,56950L,56951L,56952L, +56953L,56954L,56955L,56956L,56957L,56958L,56959L,56960L,56961L,56962L, +56963L,56964L,56965L,56966L,56967L,56968L,56969L,56970L,56971L,56972L, +56973L,56974L,56975L,56976L,56977L,56978L,56979L,56980L,56981L,56982L, +56983L,56984L,56985L,56986L,56987L,56988L,56989L,56990L,56991L,56992L, +56993L,56994L,56995L,56996L,56997L,56998L,56999L,57000L,57001L,57002L, +57003L,57004L,57005L,57006L,57007L,57008L,57009L,57010L,57011L,57012L, +57013L,57014L,57015L,57016L,57017L,57018L,57019L,57020L,57021L,57022L, +57023L,57024L,57025L,57026L,57027L,57028L,57029L,57030L,57031L,57032L, +57033L,57034L,57035L,57036L,57037L,57038L,57039L,57040L,57041L,57042L, +57043L,57044L,57045L,57046L,57047L,57048L,57049L,57050L,57051L,57052L, +57053L,57054L,57055L,57056L,57057L,57058L,57059L,57060L,57061L,57062L, +57063L,57064L,57065L,57066L,57067L,57068L,57069L,57070L,57071L,57072L, +57073L,57074L,57075L,57076L,57077L,57078L,57079L,57080L,57081L,57082L, +57083L,57084L,57085L,57086L,57087L,57088L,57089L,57090L,57091L,57092L, +57093L,57094L,57095L,57096L,57097L,57098L,57099L,57100L,57101L,57102L, +57103L,57104L,57105L,57106L,57107L,57108L,57109L,57110L,57111L,57112L, +57113L,57114L,57115L,57116L,57117L,57118L,57119L,57120L,57121L,57122L, +57123L,57124L,57125L,57126L,57127L,57128L,57129L,57130L,57131L,57132L, +57133L,57134L,57135L,57136L,57137L,57138L,57139L,57140L,57141L,57142L, +57143L,57144L,57145L,57146L,57147L,57148L,57149L,57150L,57151L,57152L, +57153L,57154L,57155L,57156L,57157L,57158L,57159L,57160L,57161L,57162L, +57163L,57164L,57165L,57166L,57167L,57168L,57169L,57170L,57171L,57172L, +57173L,57174L,57175L,57176L,57177L,57178L,57179L,57180L,57181L,57182L, +57183L,57184L,57185L,57186L,57187L,57188L,57189L,57190L,57191L,57192L, +57193L,57194L,57195L,57196L,57197L,57198L,57199L,57200L,57201L,57202L, +57203L,57204L,57205L,57206L,57207L,57208L,57209L,57210L,57211L,57212L, +57213L,57214L,57215L,57216L,57217L,57218L,57219L,57220L,57221L,57222L, +57223L,57224L,57225L,57226L,57227L,57228L,57229L,57230L,57231L,57232L, +57233L,57234L,57235L,57236L,57237L,57238L,57239L,57240L,57241L,57242L, +57243L,57244L,57245L,57246L,57247L,57248L,57249L,57250L,57251L,57252L, +57253L,57254L,57255L,57256L,57257L,57258L,57259L,57260L,57261L,57262L, +57263L,57264L,57265L,57266L,57267L,57268L,57269L,57270L,57271L,57272L, +57273L,57274L,57275L,57276L,57277L,57278L,57279L,57280L,57281L,57282L, +57283L,57284L,57285L,57286L,57287L,57288L,57289L,57290L,57291L,57292L, +57293L,57294L,57295L,57296L,57297L,57298L,57299L,57300L,57301L,57302L, +57303L,57304L,57305L,57306L,57307L,57308L,57309L,57310L,57311L,57312L, +57313L,57314L,57315L,57316L,57317L,57318L,57319L,57320L,57321L,57322L, +57323L,57324L,57325L,57326L,57327L,57328L,57329L,57330L,57331L,57332L, +57333L,57334L,57335L,57336L,57337L,57338L,57339L,57340L,57341L,57342L, +57343L,57344L,57345L,57346L,57347L,57348L,57349L,57350L,57351L,57352L, +57353L,57354L,57355L,57356L,57357L,57358L,57359L,57360L,57361L,57362L, +57363L,57364L,57365L,57366L,57367L,57368L,57369L,57370L,57371L,57372L, +57373L,57374L,57375L,57376L,57377L,57378L,57379L,57380L,57381L,57382L, +57383L,57384L,57385L,57386L,57387L,57388L,57389L,57390L,57391L,57392L, +57393L,57394L,57395L,57396L,57397L,57398L,57399L,57400L,57401L,57402L, +57403L,57404L,57405L,57406L,57407L,57408L,57409L,57410L,57411L,57412L, +57413L,57414L,57415L,57416L,57417L,57418L,57419L,57420L,57421L,57422L, +57423L,57424L,57425L,57426L,57427L,57428L,57429L,57430L,57431L,57432L, +57433L,57434L,57435L,57436L,57437L,57438L,57439L,57440L,57441L,57442L, +57443L,57444L,57445L,57446L,57447L,57448L,57449L,57450L,57451L,57452L, +57453L,57454L,57455L,57456L,57457L,57458L,57459L,57460L,57461L,57462L, +57463L,57464L,57465L,57466L,57467L,57468L,57469L,57470L,57471L,57472L, +57473L,57474L,57475L,57476L,57477L,57478L,57479L,57480L,57481L,57482L, +57483L,57484L,57485L,57486L,57487L,57488L,57489L,57490L,57491L,57492L, +57493L,57494L,57495L,57496L,57497L,57498L,57499L,57500L,57501L,57502L, +57503L,57504L,57505L,57506L,57507L,57508L,57509L,57510L,57511L,57512L, +57513L,57514L,57515L,57516L,57517L,57518L,57519L,57520L,57521L,57522L, +57523L,57524L,57525L,57526L,57527L,57528L,57529L,57530L,57531L,57532L, +57533L,57534L,57535L,57536L,57537L,57538L,57539L,57540L,57541L,57542L, +57543L,57544L,57545L,57546L,57547L,57548L,57549L,57550L,57551L,57552L, +57553L,57554L,57555L,57556L,57557L,57558L,57559L,57560L,57561L,57562L, +57563L,57564L,57565L,57566L,57567L,57568L,57569L,57570L,57571L,57572L, +57573L,57574L,57575L,57576L,57577L,57578L,57579L,57580L,57581L,57582L, +57583L,57584L,57585L,57586L,57587L,57588L,57589L,57590L,57591L,57592L, +57593L,57594L,57595L,57596L,57597L,57598L,57599L,57600L,57601L,57602L, +57603L,57604L,57605L,57606L,57607L,57608L,57609L,57610L,57611L,57612L, +57613L,57614L,57615L,57616L,57617L,57618L,57619L,57620L,57621L,57622L, +57623L,57624L,57625L,57626L,57627L,57628L,57629L,57630L,57631L,57632L, +57633L,57634L,57635L,57636L,57637L,57638L,57639L,57640L,57641L,57642L, +57643L,57644L,57645L,57646L,57647L,57648L,57649L,57650L,57651L,57652L, +57653L,57654L,57655L,57656L,57657L,57658L,57659L,57660L,57661L,57662L, +57663L,57664L,57665L,57666L,57667L,57668L,57669L,57670L,57671L,57672L, +57673L,57674L,57675L,57676L,57677L,57678L,57679L,57680L,57681L,57682L, +57683L,57684L,57685L,57686L,57687L,57688L,57689L,57690L,57691L,57692L, +57693L,57694L,57695L,57696L,57697L,57698L,57699L,57700L,57701L,57702L, +57703L,57704L,57705L,57706L,57707L,57708L,57709L,57710L,57711L,57712L, +57713L,57714L,57715L,57716L,57717L,57718L,57719L,57720L,57721L,57722L, +57723L,57724L,57725L,57726L,57727L,57728L,57729L,57730L,57731L,57732L, +57733L,57734L,57735L,57736L,57737L,57738L,57739L,57740L,57741L,57742L, +57743L,57744L,57745L,57746L,57747L,57748L,57749L,57750L,57751L,57752L, +57753L,57754L,57755L,57756L,57757L,57758L,57759L,57760L,57761L,57762L, +57763L,57764L,57765L,57766L,57767L,57768L,57769L,57770L,57771L,57772L, +57773L,57774L,57775L,57776L,57777L,57778L,57779L,57780L,57781L,57782L, +57783L,57784L,57785L,57786L,57787L,57788L,57789L,57790L,57791L,57792L, +57793L,57794L,57795L,57796L,57797L,57798L,57799L,57800L,57801L,57802L, +57803L,57804L,57805L,57806L,57807L,57808L,57809L,57810L,57811L,57812L, +57813L,57814L,57815L,57816L,57817L,57818L,57819L,57820L,57821L,57822L, +57823L,57824L,57825L,57826L,57827L,57828L,57829L,57830L,57831L,57832L, +57833L,57834L,57835L,57836L,57837L,57838L,57839L,57840L,57841L,57842L, +57843L,57844L,57845L,57846L,57847L,57848L,57849L,57850L,57851L,57852L, +57853L,57854L,57855L,57856L,57857L,57858L,57859L,57860L,57861L,57862L, +57863L,57864L,57865L,57866L,57867L,57868L,57869L,57870L,57871L,57872L, +57873L,57874L,57875L,57876L,57877L,57878L,57879L,57880L,57881L,57882L, +57883L,57884L,57885L,57886L,57887L,57888L,57889L,57890L,57891L,57892L, +57893L,57894L,57895L,57896L,57897L,57898L,57899L,57900L,57901L,57902L, +57903L,57904L,57905L,57906L,57907L,57908L,57909L,57910L,57911L,57912L, +57913L,57914L,57915L,57916L,57917L,57918L,57919L,57920L,57921L,57922L, +57923L,57924L,57925L,57926L,57927L,57928L,57929L,57930L,57931L,57932L, +57933L,57934L,57935L,57936L,57937L,57938L,57939L,57940L,57941L,57942L, +57943L,57944L,57945L,57946L,57947L,57948L,57949L,57950L,57951L,57952L, +57953L,57954L,57955L,57956L,57957L,57958L,57959L,57960L,57961L,57962L, +57963L,57964L,57965L,57966L,57967L,57968L,57969L,57970L,57971L,57972L, +57973L,57974L,57975L,57976L,57977L,57978L,57979L,57980L,57981L,57982L, +57983L,57984L,57985L,57986L,57987L,57988L,57989L,57990L,57991L,57992L, +57993L,57994L,57995L,57996L,57997L,57998L,57999L,58000L,58001L,58002L, +58003L,58004L,58005L,58006L,58007L,58008L,58009L,58010L,58011L,58012L, +58013L,58014L,58015L,58016L,58017L,58018L,58019L,58020L,58021L,58022L, +58023L,58024L,58025L,58026L,58027L,58028L,58029L,58030L,58031L,58032L, +58033L,58034L,58035L,58036L,58037L,58038L,58039L,58040L,58041L,58042L, +58043L,58044L,58045L,58046L,58047L,58048L,58049L,58050L,58051L,58052L, +58053L,58054L,58055L,58056L,58057L,58058L,58059L,58060L,58061L,58062L, +58063L,58064L,58065L,58066L,58067L,58068L,58069L,58070L,58071L,58072L, +58073L,58074L,58075L,58076L,58077L,58078L,58079L,58080L,58081L,58082L, +58083L,58084L,58085L,58086L,58087L,58088L,58089L,58090L,58091L,58092L, +58093L,58094L,58095L,58096L,58097L,58098L,58099L,58100L,58101L,58102L, +58103L,58104L,58105L,58106L,58107L,58108L,58109L,58110L,58111L,58112L, +58113L,58114L,58115L,58116L,58117L,58118L,58119L,58120L,58121L,58122L, +58123L,58124L,58125L,58126L,58127L,58128L,58129L,58130L,58131L,58132L, +58133L,58134L,58135L,58136L,58137L,58138L,58139L,58140L,58141L,58142L, +58143L,58144L,58145L,58146L,58147L,58148L,58149L,58150L,58151L,58152L, +58153L,58154L,58155L,58156L,58157L,58158L,58159L,58160L,58161L,58162L, +58163L,58164L,58165L,58166L,58167L,58168L,58169L,58170L,58171L,58172L, +58173L,58174L,58175L,58176L,58177L,58178L,58179L,58180L,58181L,58182L, +58183L,58184L,58185L,58186L,58187L,58188L,58189L,58190L,58191L,58192L, +58193L,58194L,58195L,58196L,58197L,58198L,58199L,58200L,58201L,58202L, +58203L,58204L,58205L,58206L,58207L,58208L,58209L,58210L,58211L,58212L, +58213L,58214L,58215L,58216L,58217L,58218L,58219L,58220L,58221L,58222L, +58223L,58224L,58225L,58226L,58227L,58228L,58229L,58230L,58231L,58232L, +58233L,58234L,58235L,58236L,58237L,58238L,58239L,58240L,58241L,58242L, +58243L,58244L,58245L,58246L,58247L,58248L,58249L,58250L,58251L,58252L, +58253L,58254L,58255L,58256L,58257L,58258L,58259L,58260L,58261L,58262L, +58263L,58264L,58265L,58266L,58267L,58268L,58269L,58270L,58271L,58272L, +58273L,58274L,58275L,58276L,58277L,58278L,58279L,58280L,58281L,58282L, +58283L,58284L,58285L,58286L,58287L,58288L,58289L,58290L,58291L,58292L, +58293L,58294L,58295L,58296L,58297L,58298L,58299L,58300L,58301L,58302L, +58303L,58304L,58305L,58306L,58307L,58308L,58309L,58310L,58311L,58312L, +58313L,58314L,58315L,58316L,58317L,58318L,58319L,58320L,58321L,58322L, +58323L,58324L,58325L,58326L,58327L,58328L,58329L,58330L,58331L,58332L, +58333L,58334L,58335L,58336L,58337L,58338L,58339L,58340L,58341L,58342L, +58343L,58344L,58345L,58346L,58347L,58348L,58349L,58350L,58351L,58352L, +58353L,58354L,58355L,58356L,58357L,58358L,58359L,58360L,58361L,58362L, +58363L,58364L,58365L,58366L,58367L,58368L,58369L,58370L,58371L,58372L, +58373L,58374L,58375L,58376L,58377L,58378L,58379L,58380L,58381L,58382L, +58383L,58384L,58385L,58386L,58387L,58388L,58389L,58390L,58391L,58392L, +58393L,58394L,58395L,58396L,58397L,58398L,58399L,58400L,58401L,58402L, +58403L,58404L,58405L,58406L,58407L,58408L,58409L,58410L,58411L,58412L, +58413L,58414L,58415L,58416L,58417L,58418L,58419L,58420L,58421L,58422L, +58423L,58424L,58425L,58426L,58427L,58428L,58429L,58430L,58431L,58432L, +58433L,58434L,58435L,58436L,58437L,58438L,58439L,58440L,58441L,58442L, +58443L,58444L,58445L,58446L,58447L,58448L,58449L,58450L,58451L,58452L, +58453L,58454L,58455L,58456L,58457L,58458L,58459L,58460L,58461L,58462L, +58463L,58464L,58465L,58466L,58467L,58468L,58469L,58470L,58471L,58472L, +58473L,58474L,58475L,58476L,58477L,58478L,58479L,58480L,58481L,58482L, +58483L,58484L,58485L,58486L,58487L,58488L,58489L,58490L,58491L,58492L, +58493L,58494L,58495L,58496L,58497L,58498L,58499L,58500L,58501L,58502L, +58503L,58504L,58505L,58506L,58507L,58508L,58509L,58510L,58511L,58512L, +58513L,58514L,58515L,58516L,58517L,58518L,58519L,58520L,58521L,58522L, +58523L,58524L,58525L,58526L,58527L,58528L,58529L,58530L,58531L,58532L, +58533L,58534L,58535L,58536L,58537L,58538L,58539L,58540L,58541L,58542L, +58543L,58544L,58545L,58546L,58547L,58548L,58549L,58550L,58551L,58552L, +58553L,58554L,58555L,58556L,58557L,58558L,58559L,58560L,58561L,58562L, +58563L,58564L,58565L,58566L,58567L,58568L,58569L,58570L,58571L,58572L, +58573L,58574L,58575L,58576L,58577L,58578L,58579L,58580L,58581L,58582L, +58583L,58584L,58585L,58586L,58587L,58588L,58589L,58590L,58591L,58592L, +58593L,58594L,58595L,58596L,58597L,58598L,58599L,58600L,58601L,58602L, +58603L,58604L,58605L,58606L,58607L,58608L,58609L,58610L,58611L,58612L, +58613L,58614L,58615L,58616L,58617L,58618L,58619L,58620L,58621L,58622L, +58623L,58624L,58625L,58626L,58627L,58628L,58629L,58630L,58631L,58632L, +58633L,58634L,58635L,58636L,58637L,58638L,58639L,58640L,58641L,58642L, +58643L,58644L,58645L,58646L,58647L,58648L,58649L,58650L,58651L,58652L, +58653L,58654L,58655L,58656L,58657L,58658L,58659L,58660L,58661L,58662L, +58663L,58664L,58665L,58666L,58667L,58668L,58669L,58670L,58671L,58672L, +58673L,58674L,58675L,58676L,58677L,58678L,58679L,58680L,58681L,58682L, +58683L,58684L,58685L,58686L,58687L,58688L,58689L,58690L,58691L,58692L, +58693L,58694L,58695L,58696L,58697L,58698L,58699L,58700L,58701L,58702L, +58703L,58704L,58705L,58706L,58707L,58708L,58709L,58710L,58711L,58712L, +58713L,58714L,58715L,58716L,58717L,58718L,58719L,58720L,58721L,58722L, +58723L,58724L,58725L,58726L,58727L,58728L,58729L,58730L,58731L,58732L, +58733L,58734L,58735L,58736L,58737L,58738L,58739L,58740L,58741L,58742L, +58743L,58744L,58745L,58746L,58747L,58748L,58749L,58750L,58751L,58752L, +58753L,58754L,58755L,58756L,58757L,58758L,58759L,58760L,58761L,58762L, +58763L,58764L,58765L,58766L,58767L,58768L,58769L,58770L,58771L,58772L, +58773L,58774L,58775L,58776L,58777L,58778L,58779L,58780L,58781L,58782L, +58783L,58784L,58785L,58786L,58787L,58788L,58789L,58790L,58791L,58792L, +58793L,58794L,58795L,58796L,58797L,58798L,58799L,58800L,58801L,58802L, +58803L,58804L,58805L,58806L,58807L,58808L,58809L,58810L,58811L,58812L, +58813L,58814L,58815L,58816L,58817L,58818L,58819L,58820L,58821L,58822L, +58823L,58824L,58825L,58826L,58827L,58828L,58829L,58830L,58831L,58832L, +58833L,58834L,58835L,58836L,58837L,58838L,58839L,58840L,58841L,58842L, +58843L,58844L,58845L,58846L,58847L,58848L,58849L,58850L,58851L,58852L, +58853L,58854L,58855L,58856L,58857L,58858L,58859L,58860L,58861L,58862L, +58863L,58864L,58865L,58866L,58867L,58868L,58869L,58870L,58871L,58872L, +58873L,58874L,58875L,58876L,58877L,58878L,58879L,58880L,58881L,58882L, +58883L,58884L,58885L,58886L,58887L,58888L,58889L,58890L,58891L,58892L, +58893L,58894L,58895L,58896L,58897L,58898L,58899L,58900L,58901L,58902L, +58903L,58904L,58905L,58906L,58907L,58908L,58909L,58910L,58911L,58912L, +58913L,58914L,58915L,58916L,58917L,58918L,58919L,58920L,58921L,58922L, +58923L,58924L,58925L,58926L,58927L,58928L,58929L,58930L,58931L,58932L, +58933L,58934L,58935L,58936L,58937L,58938L,58939L,58940L,58941L,58942L, +58943L,58944L,58945L,58946L,58947L,58948L,58949L,58950L,58951L,58952L, +58953L,58954L,58955L,58956L,58957L,58958L,58959L,58960L,58961L,58962L, +58963L,58964L,58965L,58966L,58967L,58968L,58969L,58970L,58971L,58972L, +58973L,58974L,58975L,58976L,58977L,58978L,58979L,58980L,58981L,58982L, +58983L,58984L,58985L,58986L,58987L,58988L,58989L,58990L,58991L,58992L, +58993L,58994L,58995L,58996L,58997L,58998L,58999L,59000L,59001L,59002L, +59003L,59004L,59005L,59006L,59007L,59008L,59009L,59010L,59011L,59012L, +59013L,59014L,59015L,59016L,59017L,59018L,59019L,59020L,59021L,59022L, +59023L,59024L,59025L,59026L,59027L,59028L,59029L,59030L,59031L,59032L, +59033L,59034L,59035L,59036L,59037L,59038L,59039L,59040L,59041L,59042L, +59043L,59044L,59045L,59046L,59047L,59048L,59049L,59050L,59051L,59052L, +59053L,59054L,59055L,59056L,59057L,59058L,59059L,59060L,59061L,59062L, +59063L,59064L,59065L,59066L,59067L,59068L,59069L,59070L,59071L,59072L, +59073L,59074L,59075L,59076L,59077L,59078L,59079L,59080L,59081L,59082L, +59083L,59084L,59085L,59086L,59087L,59088L,59089L,59090L,59091L,59092L, +59093L,59094L,59095L,59096L,59097L,59098L,59099L,59100L,59101L,59102L, +59103L,59104L,59105L,59106L,59107L,59108L,59109L,59110L,59111L,59112L, +59113L,59114L,59115L,59116L,59117L,59118L,59119L,59120L,59121L,59122L, +59123L,59124L,59125L,59126L,59127L,59128L,59129L,59130L,59131L,59132L, +59133L,59134L,59135L,59136L,59137L,59138L,59139L,59140L,59141L,59142L, +59143L,59144L,59145L,59146L,59147L,59148L,59149L,59150L,59151L,59152L, +59153L,59154L,59155L,59156L,59157L,59158L,59159L,59160L,59161L,59162L, +59163L,59164L,59165L,59166L,59167L,59168L,59169L,59170L,59171L,59172L, +59173L,59174L,59175L,59176L,59177L,59178L,59179L,59180L,59181L,59182L, +59183L,59184L,59185L,59186L,59187L,59188L,59189L,59190L,59191L,59192L, +59193L,59194L,59195L,59196L,59197L,59198L,59199L,59200L,59201L,59202L, +59203L,59204L,59205L,59206L,59207L,59208L,59209L,59210L,59211L,59212L, +59213L,59214L,59215L,59216L,59217L,59218L,59219L,59220L,59221L,59222L, +59223L,59224L,59225L,59226L,59227L,59228L,59229L,59230L,59231L,59232L, +59233L,59234L,59235L,59236L,59237L,59238L,59239L,59240L,59241L,59242L, +59243L,59244L,59245L,59246L,59247L,59248L,59249L,59250L,59251L,59252L, +59253L,59254L,59255L,59256L,59257L,59258L,59259L,59260L,59261L,59262L, +59263L,59264L,59265L,59266L,59267L,59268L,59269L,59270L,59271L,59272L, +59273L,59274L,59275L,59276L,59277L,59278L,59279L,59280L,59281L,59282L, +59283L,59284L,59285L,59286L,59287L,59288L,59289L,59290L,59291L,59292L, +59293L,59294L,59295L,59296L,59297L,59298L,59299L,59300L,59301L,59302L, +59303L,59304L,59305L,59306L,59307L,59308L,59309L,59310L,59311L,59312L, +59313L,59314L,59315L,59316L,59317L,59318L,59319L,59320L,59321L,59322L, +59323L,59324L,59325L,59326L,59327L,59328L,59329L,59330L,59331L,59332L, +59333L,59334L,59335L,59336L,59337L,59338L,59339L,59340L,59341L,59342L, +59343L,59344L,59345L,59346L,59347L,59348L,59349L,59350L,59351L,59352L, +59353L,59354L,59355L,59356L,59357L,59358L,59359L,59360L,59361L,59362L, +59363L,59364L,59365L,59366L,59367L,59368L,59369L,59370L,59371L,59372L, +59373L,59374L,59375L,59376L,59377L,59378L,59379L,59380L,59381L,59382L, +59383L,59384L,59385L,59386L,59387L,59388L,59389L,59390L,59391L,59392L, +59393L,59394L,59395L,59396L,59397L,59398L,59399L,59400L,59401L,59402L, +59403L,59404L,59405L,59406L,59407L,59408L,59409L,59410L,59411L,59412L, +59413L,59414L,59415L,59416L,59417L,59418L,59419L,59420L,59421L,59422L, +59423L,59424L,59425L,59426L,59427L,59428L,59429L,59430L,59431L,59432L, +59433L,59434L,59435L,59436L,59437L,59438L,59439L,59440L,59441L,59442L, +59443L,59444L,59445L,59446L,59447L,59448L,59449L,59450L,59451L,59452L, +59453L,59454L,59455L,59456L,59457L,59458L,59459L,59460L,59461L,59462L, +59463L,59464L,59465L,59466L,59467L,59468L,59469L,59470L,59471L,59472L, +59473L,59474L,59475L,59476L,59477L,59478L,59479L,59480L,59481L,59482L, +59483L,59484L,59485L,59486L,59487L,59488L,59489L,59490L,59491L,59492L, +59493L,59494L,59495L,59496L,59497L,59498L,59499L,59500L,59501L,59502L, +59503L,59504L,59505L,59506L,59507L,59508L,59509L,59510L,59511L,59512L, +59513L,59514L,59515L,59516L,59517L,59518L,59519L,59520L,59521L,59522L, +59523L,59524L,59525L,59526L,59527L,59528L,59529L,59530L,59531L,59532L, +59533L,59534L,59535L,59536L,59537L,59538L,59539L,59540L,59541L,59542L, +59543L,59544L,59545L,59546L,59547L,59548L,59549L,59550L,59551L,59552L, +59553L,59554L,59555L,59556L,59557L,59558L,59559L,59560L,59561L,59562L, +59563L,59564L,59565L,59566L,59567L,59568L,59569L,59570L,59571L,59572L, +59573L,59574L,59575L,59576L,59577L,59578L,59579L,59580L,59581L,59582L, +59583L,59584L,59585L,59586L,59587L,59588L,59589L,59590L,59591L,59592L, +59593L,59594L,59595L,59596L,59597L,59598L,59599L,59600L,59601L,59602L, +59603L,59604L,59605L,59606L,59607L,59608L,59609L,59610L,59611L,59612L, +59613L,59614L,59615L,59616L,59617L,59618L,59619L,59620L,59621L,59622L, +59623L,59624L,59625L,59626L,59627L,59628L,59629L,59630L,59631L,59632L, +59633L,59634L,59635L,59636L,59637L,59638L,59639L,59640L,59641L,59642L, +59643L,59644L,59645L,59646L,59647L,59648L,59649L,59650L,59651L,59652L, +59653L,59654L,59655L,59656L,59657L,59658L,59659L,59660L,59661L,59662L, +59663L,59664L,59665L,59666L,59667L,59668L,59669L,59670L,59671L,59672L, +59673L,59674L,59675L,59676L,59677L,59678L,59679L,59680L,59681L,59682L, +59683L,59684L,59685L,59686L,59687L,59688L,59689L,59690L,59691L,59692L, +59693L,59694L,59695L,59696L,59697L,59698L,59699L,59700L,59701L,59702L, +59703L,59704L,59705L,59706L,59707L,59708L,59709L,59710L,59711L,59712L, +59713L,59714L,59715L,59716L,59717L,59718L,59719L,59720L,59721L,59722L, +59723L,59724L,59725L,59726L,59727L,59728L,59729L,59730L,59731L,59732L, +59733L,59734L,59735L,59736L,59737L,59738L,59739L,59740L,59741L,59742L, +59743L,59744L,59745L,59746L,59747L,59748L,59749L,59750L,59751L,59752L, +59753L,59754L,59755L,59756L,59757L,59758L,59759L,59760L,59761L,59762L, +59763L,59764L,59765L,59766L,59767L,59768L,59769L,59770L,59771L,59772L, +59773L,59774L,59775L,59776L,59777L,59778L,59779L,59780L,59781L,59782L, +59783L,59784L,59785L,59786L,59787L,59788L,59789L,59790L,59791L,59792L, +59793L,59794L,59795L,59796L,59797L,59798L,59799L,59800L,59801L,59802L, +59803L,59804L,59805L,59806L,59807L,59808L,59809L,59810L,59811L,59812L, +59813L,59814L,59815L,59816L,59817L,59818L,59819L,59820L,59821L,59822L, +59823L,59824L,59825L,59826L,59827L,59828L,59829L,59830L,59831L,59832L, +59833L,59834L,59835L,59836L,59837L,59838L,59839L,59840L,59841L,59842L, +59843L,59844L,59845L,59846L,59847L,59848L,59849L,59850L,59851L,59852L, +59853L,59854L,59855L,59856L,59857L,59858L,59859L,59860L,59861L,59862L, +59863L,59864L,59865L,59866L,59867L,59868L,59869L,59870L,59871L,59872L, +59873L,59874L,59875L,59876L,59877L,59878L,59879L,59880L,59881L,59882L, +59883L,59884L,59885L,59886L,59887L,59888L,59889L,59890L,59891L,59892L, +59893L,59894L,59895L,59896L,59897L,59898L,59899L,59900L,59901L,59902L, +59903L,59904L,59905L,59906L,59907L,59908L,59909L,59910L,59911L,59912L, +59913L,59914L,59915L,59916L,59917L,59918L,59919L,59920L,59921L,59922L, +59923L,59924L,59925L,59926L,59927L,59928L,59929L,59930L,59931L,59932L, +59933L,59934L,59935L,59936L,59937L,59938L,59939L,59940L,59941L,59942L, +59943L,59944L,59945L,59946L,59947L,59948L,59949L,59950L,59951L,59952L, +59953L,59954L,59955L,59956L,59957L,59958L,59959L,59960L,59961L,59962L, +59963L,59964L,59965L,59966L,59967L,59968L,59969L,59970L,59971L,59972L, +59973L,59974L,59975L,59976L,59977L,59978L,59979L,59980L,59981L,59982L, +59983L,59984L,59985L,59986L,59987L,59988L,59989L,59990L,59991L,59992L, +59993L,59994L,59995L,59996L,59997L,59998L,59999L,60000L,60001L,60002L, +60003L,60004L,60005L,60006L,60007L,60008L,60009L,60010L,60011L,60012L, +60013L,60014L,60015L,60016L,60017L,60018L,60019L,60020L,60021L,60022L, +60023L,60024L,60025L,60026L,60027L,60028L,60029L,60030L,60031L,60032L, +60033L,60034L,60035L,60036L,60037L,60038L,60039L,60040L,60041L,60042L, +60043L,60044L,60045L,60046L,60047L,60048L,60049L,60050L,60051L,60052L, +60053L,60054L,60055L,60056L,60057L,60058L,60059L,60060L,60061L,60062L, +60063L,60064L,60065L,60066L,60067L,60068L,60069L,60070L,60071L,60072L, +60073L,60074L,60075L,60076L,60077L,60078L,60079L,60080L,60081L,60082L, +60083L,60084L,60085L,60086L,60087L,60088L,60089L,60090L,60091L,60092L, +60093L,60094L,60095L,60096L,60097L,60098L,60099L,60100L,60101L,60102L, +60103L,60104L,60105L,60106L,60107L,60108L,60109L,60110L,60111L,60112L, +60113L,60114L,60115L,60116L,60117L,60118L,60119L,60120L,60121L,60122L, +60123L,60124L,60125L,60126L,60127L,60128L,60129L,60130L,60131L,60132L, +60133L,60134L,60135L,60136L,60137L,60138L,60139L,60140L,60141L,60142L, +60143L,60144L,60145L,60146L,60147L,60148L,60149L,60150L,60151L,60152L, +60153L,60154L,60155L,60156L,60157L,60158L,60159L,60160L,60161L,60162L, +60163L,60164L,60165L,60166L,60167L,60168L,60169L,60170L,60171L,60172L, +60173L,60174L,60175L,60176L,60177L,60178L,60179L,60180L,60181L,60182L, +60183L,60184L,60185L,60186L,60187L,60188L,60189L,60190L,60191L,60192L, +60193L,60194L,60195L,60196L,60197L,60198L,60199L,60200L,60201L,60202L, +60203L,60204L,60205L,60206L,60207L,60208L,60209L,60210L,60211L,60212L, +60213L,60214L,60215L,60216L,60217L,60218L,60219L,60220L,60221L,60222L, +60223L,60224L,60225L,60226L,60227L,60228L,60229L,60230L,60231L,60232L, +60233L,60234L,60235L,60236L,60237L,60238L,60239L,60240L,60241L,60242L, +60243L,60244L,60245L,60246L,60247L,60248L,60249L,60250L,60251L,60252L, +60253L,60254L,60255L,60256L,60257L,60258L,60259L,60260L,60261L,60262L, +60263L,60264L,60265L,60266L,60267L,60268L,60269L,60270L,60271L,60272L, +60273L,60274L,60275L,60276L,60277L,60278L,60279L,60280L,60281L,60282L, +60283L,60284L,60285L,60286L,60287L,60288L,60289L,60290L,60291L,60292L, +60293L,60294L,60295L,60296L,60297L,60298L,60299L,60300L,60301L,60302L, +60303L,60304L,60305L,60306L,60307L,60308L,60309L,60310L,60311L,60312L, +60313L,60314L,60315L,60316L,60317L,60318L,60319L,60320L,60321L,60322L, +60323L,60324L,60325L,60326L,60327L,60328L,60329L,60330L,60331L,60332L, +60333L,60334L,60335L,60336L,60337L,60338L,60339L,60340L,60341L,60342L, +60343L,60344L,60345L,60346L,60347L,60348L,60349L,60350L,60351L,60352L, +60353L,60354L,60355L,60356L,60357L,60358L,60359L,60360L,60361L,60362L, +60363L,60364L,60365L,60366L,60367L,60368L,60369L,60370L,60371L,60372L, +60373L,60374L,60375L,60376L,60377L,60378L,60379L,60380L,60381L,60382L, +60383L,60384L,60385L,60386L,60387L,60388L,60389L,60390L,60391L,60392L, +60393L,60394L,60395L,60396L,60397L,60398L,60399L,60400L,60401L,60402L, +60403L,60404L,60405L,60406L,60407L,60408L,60409L,60410L,60411L,60412L, +60413L,60414L,60415L,60416L,60417L,60418L,60419L,60420L,60421L,60422L, +60423L,60424L,60425L,60426L,60427L,60428L,60429L,60430L,60431L,60432L, +60433L,60434L,60435L,60436L,60437L,60438L,60439L,60440L,60441L,60442L, +60443L,60444L,60445L,60446L,60447L,60448L,60449L,60450L,60451L,60452L, +60453L,60454L,60455L,60456L,60457L,60458L,60459L,60460L,60461L,60462L, +60463L,60464L,60465L,60466L,60467L,60468L,60469L,60470L,60471L,60472L, +60473L,60474L,60475L,60476L,60477L,60478L,60479L,60480L,60481L,60482L, +60483L,60484L,60485L,60486L,60487L,60488L,60489L,60490L,60491L,60492L, +60493L,60494L,60495L,60496L,60497L,60498L,60499L,60500L,60501L,60502L, +60503L,60504L,60505L,60506L,60507L,60508L,60509L,60510L,60511L,60512L, +60513L,60514L,60515L,60516L,60517L,60518L,60519L,60520L,60521L,60522L, +60523L,60524L,60525L,60526L,60527L,60528L,60529L,60530L,60531L,60532L, +60533L,60534L,60535L,60536L,60537L,60538L,60539L,60540L,60541L,60542L, +60543L,60544L,60545L,60546L,60547L,60548L,60549L,60550L,60551L,60552L, +60553L,60554L,60555L,60556L,60557L,60558L,60559L,60560L,60561L,60562L, +60563L,60564L,60565L,60566L,60567L,60568L,60569L,60570L,60571L,60572L, +60573L,60574L,60575L,60576L,60577L,60578L,60579L,60580L,60581L,60582L, +60583L,60584L,60585L,60586L,60587L,60588L,60589L,60590L,60591L,60592L, +60593L,60594L,60595L,60596L,60597L,60598L,60599L,60600L,60601L,60602L, +60603L,60604L,60605L,60606L,60607L,60608L,60609L,60610L,60611L,60612L, +60613L,60614L,60615L,60616L,60617L,60618L,60619L,60620L,60621L,60622L, +60623L,60624L,60625L,60626L,60627L,60628L,60629L,60630L,60631L,60632L, +60633L,60634L,60635L,60636L,60637L,60638L,60639L,60640L,60641L,60642L, +60643L,60644L,60645L,60646L,60647L,60648L,60649L,60650L,60651L,60652L, +60653L,60654L,60655L,60656L,60657L,60658L,60659L,60660L,60661L,60662L, +60663L,60664L,60665L,60666L,60667L,60668L,60669L,60670L,60671L,60672L, +60673L,60674L,60675L,60676L,60677L,60678L,60679L,60680L,60681L,60682L, +60683L,60684L,60685L,60686L,60687L,60688L,60689L,60690L,60691L,60692L, +60693L,60694L,60695L,60696L,60697L,60698L,60699L,60700L,60701L,60702L, +60703L,60704L,60705L,60706L,60707L,60708L,60709L,60710L,60711L,60712L, +60713L,60714L,60715L,60716L,60717L,60718L,60719L,60720L,60721L,60722L, +60723L,60724L,60725L,60726L,60727L,60728L,60729L,60730L,60731L,60732L, +60733L,60734L,60735L,60736L,60737L,60738L,60739L,60740L,60741L,60742L, +60743L,60744L,60745L,60746L,60747L,60748L,60749L,60750L,60751L,60752L, +60753L,60754L,60755L,60756L,60757L,60758L,60759L,60760L,60761L,60762L, +60763L,60764L,60765L,60766L,60767L,60768L,60769L,60770L,60771L,60772L, +60773L,60774L,60775L,60776L,60777L,60778L,60779L,60780L,60781L,60782L, +60783L,60784L,60785L,60786L,60787L,60788L,60789L,60790L,60791L,60792L, +60793L,60794L,60795L,60796L,60797L,60798L,60799L,60800L,60801L,60802L, +60803L,60804L,60805L,60806L,60807L,60808L,60809L,60810L,60811L,60812L, +60813L,60814L,60815L,60816L,60817L,60818L,60819L,60820L,60821L,60822L, +60823L,60824L,60825L,60826L,60827L,60828L,60829L,60830L,60831L,60832L, +60833L,60834L,60835L,60836L,60837L,60838L,60839L,60840L,60841L,60842L, +60843L,60844L,60845L,60846L,60847L,60848L,60849L,60850L,60851L,60852L, +60853L,60854L,60855L,60856L,60857L,60858L,60859L,60860L,60861L,60862L, +60863L,60864L,60865L,60866L,60867L,60868L,60869L,60870L,60871L,60872L, +60873L,60874L,60875L,60876L,60877L,60878L,60879L,60880L,60881L,60882L, +60883L,60884L,60885L,60886L,60887L,60888L,60889L,60890L,60891L,60892L, +60893L,60894L,60895L,60896L,60897L,60898L,60899L,60900L,60901L,60902L, +60903L,60904L,60905L,60906L,60907L,60908L,60909L,60910L,60911L,60912L, +60913L,60914L,60915L,60916L,60917L,60918L,60919L,60920L,60921L,60922L, +60923L,60924L,60925L,60926L,60927L,60928L,60929L,60930L,60931L,60932L, +60933L,60934L,60935L,60936L,60937L,60938L,60939L,60940L,60941L,60942L, +60943L,60944L,60945L,60946L,60947L,60948L,60949L,60950L,60951L,60952L, +60953L,60954L,60955L,60956L,60957L,60958L,60959L,60960L,60961L,60962L, +60963L,60964L,60965L,60966L,60967L,60968L,60969L,60970L,60971L,60972L, +60973L,60974L,60975L,60976L,60977L,60978L,60979L,60980L,60981L,60982L, +60983L,60984L,60985L,60986L,60987L,60988L,60989L,60990L,60991L,60992L, +60993L,60994L,60995L,60996L,60997L,60998L,60999L,61000L,61001L,61002L, +61003L,61004L,61005L,61006L,61007L,61008L,61009L,61010L,61011L,61012L, +61013L,61014L,61015L,61016L,61017L,61018L,61019L,61020L,61021L,61022L, +61023L,61024L,61025L,61026L,61027L,61028L,61029L,61030L,61031L,61032L, +61033L,61034L,61035L,61036L,61037L,61038L,61039L,61040L,61041L,61042L, +61043L,61044L,61045L,61046L,61047L,61048L,61049L,61050L,61051L,61052L, +61053L,61054L,61055L,61056L,61057L,61058L,61059L,61060L,61061L,61062L, +61063L,61064L,61065L,61066L,61067L,61068L,61069L,61070L,61071L,61072L, +61073L,61074L,61075L,61076L,61077L,61078L,61079L,61080L,61081L,61082L, +61083L,61084L,61085L,61086L,61087L,61088L,61089L,61090L,61091L,61092L, +61093L,61094L,61095L,61096L,61097L,61098L,61099L,61100L,61101L,61102L, +61103L,61104L,61105L,61106L,61107L,61108L,61109L,61110L,61111L,61112L, +61113L,61114L,61115L,61116L,61117L,61118L,61119L,61120L,61121L,61122L, +61123L,61124L,61125L,61126L,61127L,61128L,61129L,61130L,61131L,61132L, +61133L,61134L,61135L,61136L,61137L,61138L,61139L,61140L,61141L,61142L, +61143L,61144L,61145L,61146L,61147L,61148L,61149L,61150L,61151L,61152L, +61153L,61154L,61155L,61156L,61157L,61158L,61159L,61160L,61161L,61162L, +61163L,61164L,61165L,61166L,61167L,61168L,61169L,61170L,61171L,61172L, +61173L,61174L,61175L,61176L,61177L,61178L,61179L,61180L,61181L,61182L, +61183L,61184L,61185L,61186L,61187L,61188L,61189L,61190L,61191L,61192L, +61193L,61194L,61195L,61196L,61197L,61198L,61199L,61200L,61201L,61202L, +61203L,61204L,61205L,61206L,61207L,61208L,61209L,61210L,61211L,61212L, +61213L,61214L,61215L,61216L,61217L,61218L,61219L,61220L,61221L,61222L, +61223L,61224L,61225L,61226L,61227L,61228L,61229L,61230L,61231L,61232L, +61233L,61234L,61235L,61236L,61237L,61238L,61239L,61240L,61241L,61242L, +61243L,61244L,61245L,61246L,61247L,61248L,61249L,61250L,61251L,61252L, +61253L,61254L,61255L,61256L,61257L,61258L,61259L,61260L,61261L,61262L, +61263L,61264L,61265L,61266L,61267L,61268L,61269L,61270L,61271L,61272L, +61273L,61274L,61275L,61276L,61277L,61278L,61279L,61280L,61281L,61282L, +61283L,61284L,61285L,61286L,61287L,61288L,61289L,61290L,61291L,61292L, +61293L,61294L,61295L,61296L,61297L,61298L,61299L,61300L,61301L,61302L, +61303L,61304L,61305L,61306L,61307L,61308L,61309L,61310L,61311L,61312L, +61313L,61314L,61315L,61316L,61317L,61318L,61319L,61320L,61321L,61322L, +61323L,61324L,61325L,61326L,61327L,61328L,61329L,61330L,61331L,61332L, +61333L,61334L,61335L,61336L,61337L,61338L,61339L,61340L,61341L,61342L, +61343L,61344L,61345L,61346L,61347L,61348L,61349L,61350L,61351L,61352L, +61353L,61354L,61355L,61356L,61357L,61358L,61359L,61360L,61361L,61362L, +61363L,61364L,61365L,61366L,61367L,61368L,61369L,61370L,61371L,61372L, +61373L,61374L,61375L,61376L,61377L,61378L,61379L,61380L,61381L,61382L, +61383L,61384L,61385L,61386L,61387L,61388L,61389L,61390L,61391L,61392L, +61393L,61394L,61395L,61396L,61397L,61398L,61399L,61400L,61401L,61402L, +61403L,61404L,61405L,61406L,61407L,61408L,61409L,61410L,61411L,61412L, +61413L,61414L,61415L,61416L,61417L,61418L,61419L,61420L,61421L,61422L, +61423L,61424L,61425L,61426L,61427L,61428L,61429L,61430L,61431L,61432L, +61433L,61434L,61435L,61436L,61437L,61438L,61439L,61440L,61441L,61442L, +61443L,61444L,61445L,61446L,61447L,61448L,61449L,61450L,61451L,61452L, +61453L,61454L,61455L,61456L,61457L,61458L,61459L,61460L,61461L,61462L, +61463L,61464L,61465L,61466L,61467L,61468L,61469L,61470L,61471L,61472L, +61473L,61474L,61475L,61476L,61477L,61478L,61479L,61480L,61481L,61482L, +61483L,61484L,61485L,61486L,61487L,61488L,61489L,61490L,61491L,61492L, +61493L,61494L,61495L,61496L,61497L,61498L,61499L,61500L,61501L,61502L, +61503L,61504L,61505L,61506L,61507L,61508L,61509L,61510L,61511L,61512L, +61513L,61514L,61515L,61516L,61517L,61518L,61519L,61520L,61521L,61522L, +61523L,61524L,61525L,61526L,61527L,61528L,61529L,61530L,61531L,61532L, +61533L,61534L,61535L,61536L,61537L,61538L,61539L,61540L,61541L,61542L, +61543L,61544L,61545L,61546L,61547L,61548L,61549L,61550L,61551L,61552L, +61553L,61554L,61555L,61556L,61557L,61558L,61559L,61560L,61561L,61562L, +61563L,61564L,61565L,61566L,61567L,61568L,61569L,61570L,61571L,61572L, +61573L,61574L,61575L,61576L,61577L,61578L,61579L,61580L,61581L,61582L, +61583L,61584L,61585L,61586L,61587L,61588L,61589L,61590L,61591L,61592L, +61593L,61594L,61595L,61596L,61597L,61598L,61599L,61600L,61601L,61602L, +61603L,61604L,61605L,61606L,61607L,61608L,61609L,61610L,61611L,61612L, +61613L,61614L,61615L,61616L,61617L,61618L,61619L,61620L,61621L,61622L, +61623L,61624L,61625L,61626L,61627L,61628L,61629L,61630L,61631L,61632L, +61633L,61634L,61635L,61636L,61637L,61638L,61639L,61640L,61641L,61642L, +61643L,61644L,61645L,61646L,61647L,61648L,61649L,61650L,61651L,61652L, +61653L,61654L,61655L,61656L,61657L,61658L,61659L,61660L,61661L,61662L, +61663L,61664L,61665L,61666L,61667L,61668L,61669L,61670L,61671L,61672L, +61673L,61674L,61675L,61676L,61677L,61678L,61679L,61680L,61681L,61682L, +61683L,61684L,61685L,61686L,61687L,61688L,61689L,61690L,61691L,61692L, +61693L,61694L,61695L,61696L,61697L,61698L,61699L,61700L,61701L,61702L, +61703L,61704L,61705L,61706L,61707L,61708L,61709L,61710L,61711L,61712L, +61713L,61714L,61715L,61716L,61717L,61718L,61719L,61720L,61721L,61722L, +61723L,61724L,61725L,61726L,61727L,61728L,61729L,61730L,61731L,61732L, +61733L,61734L,61735L,61736L,61737L,61738L,61739L,61740L,61741L,61742L, +61743L,61744L,61745L,61746L,61747L,61748L,61749L,61750L,61751L,61752L, +61753L,61754L,61755L,61756L,61757L,61758L,61759L,61760L,61761L,61762L, +61763L,61764L,61765L,61766L,61767L,61768L,61769L,61770L,61771L,61772L, +61773L,61774L,61775L,61776L,61777L,61778L,61779L,61780L,61781L,61782L, +61783L,61784L,61785L,61786L,61787L,61788L,61789L,61790L,61791L,61792L, +61793L,61794L,61795L,61796L,61797L,61798L,61799L,61800L,61801L,61802L, +61803L,61804L,61805L,61806L,61807L,61808L,61809L,61810L,61811L,61812L, +61813L,61814L,61815L,61816L,61817L,61818L,61819L,61820L,61821L,61822L, +61823L,61824L,61825L,61826L,61827L,61828L,61829L,61830L,61831L,61832L, +61833L,61834L,61835L,61836L,61837L,61838L,61839L,61840L,61841L,61842L, +61843L,61844L,61845L,61846L,61847L,61848L,61849L,61850L,61851L,61852L, +61853L,61854L,61855L,61856L,61857L,61858L,61859L,61860L,61861L,61862L, +61863L,61864L,61865L,61866L,61867L,61868L,61869L,61870L,61871L,61872L, +61873L,61874L,61875L,61876L,61877L,61878L,61879L,61880L,61881L,61882L, +61883L,61884L,61885L,61886L,61887L,61888L,61889L,61890L,61891L,61892L, +61893L,61894L,61895L,61896L,61897L,61898L,61899L,61900L,61901L,61902L, +61903L,61904L,61905L,61906L,61907L,61908L,61909L,61910L,61911L,61912L, +61913L,61914L,61915L,61916L,61917L,61918L,61919L,61920L,61921L,61922L, +61923L,61924L,61925L,61926L,61927L,61928L,61929L,61930L,61931L,61932L, +61933L,61934L,61935L,61936L,61937L,61938L,61939L,61940L,61941L,61942L, +61943L,61944L,61945L,61946L,61947L,61948L,61949L,61950L,61951L,61952L, +61953L,61954L,61955L,61956L,61957L,61958L,61959L,61960L,61961L,61962L, +61963L,61964L,61965L,61966L,61967L,61968L,61969L,61970L,61971L,61972L, +61973L,61974L,61975L,61976L,61977L,61978L,61979L,61980L,61981L,61982L, +61983L,61984L,61985L,61986L,61987L,61988L,61989L,61990L,61991L,61992L, +61993L,61994L,61995L,61996L,61997L,61998L,61999L,62000L,62001L,62002L, +62003L,62004L,62005L,62006L,62007L,62008L,62009L,62010L,62011L,62012L, +62013L,62014L,62015L,62016L,62017L,62018L,62019L,62020L,62021L,62022L, +62023L,62024L,62025L,62026L,62027L,62028L,62029L,62030L,62031L,62032L, +62033L,62034L,62035L,62036L,62037L,62038L,62039L,62040L,62041L,62042L, +62043L,62044L,62045L,62046L,62047L,62048L,62049L,62050L,62051L,62052L, +62053L,62054L,62055L,62056L,62057L,62058L,62059L,62060L,62061L,62062L, +62063L,62064L,62065L,62066L,62067L,62068L,62069L,62070L,62071L,62072L, +62073L,62074L,62075L,62076L,62077L,62078L,62079L,62080L,62081L,62082L, +62083L,62084L,62085L,62086L,62087L,62088L,62089L,62090L,62091L,62092L, +62093L,62094L,62095L,62096L,62097L,62098L,62099L,62100L,62101L,62102L, +62103L,62104L,62105L,62106L,62107L,62108L,62109L,62110L,62111L,62112L, +62113L,62114L,62115L,62116L,62117L,62118L,62119L,62120L,62121L,62122L, +62123L,62124L,62125L,62126L,62127L,62128L,62129L,62130L,62131L,62132L, +62133L,62134L,62135L,62136L,62137L,62138L,62139L,62140L,62141L,62142L, +62143L,62144L,62145L,62146L,62147L,62148L,62149L,62150L,62151L,62152L, +62153L,62154L,62155L,62156L,62157L,62158L,62159L,62160L,62161L,62162L, +62163L,62164L,62165L,62166L,62167L,62168L,62169L,62170L,62171L,62172L, +62173L,62174L,62175L,62176L,62177L,62178L,62179L,62180L,62181L,62182L, +62183L,62184L,62185L,62186L,62187L,62188L,62189L,62190L,62191L,62192L, +62193L,62194L,62195L,62196L,62197L,62198L,62199L,62200L,62201L,62202L, +62203L,62204L,62205L,62206L,62207L,62208L,62209L,62210L,62211L,62212L, +62213L,62214L,62215L,62216L,62217L,62218L,62219L,62220L,62221L,62222L, +62223L,62224L,62225L,62226L,62227L,62228L,62229L,62230L,62231L,62232L, +62233L,62234L,62235L,62236L,62237L,62238L,62239L,62240L,62241L,62242L, +62243L,62244L,62245L,62246L,62247L,62248L,62249L,62250L,62251L,62252L, +62253L,62254L,62255L,62256L,62257L,62258L,62259L,62260L,62261L,62262L, +62263L,62264L,62265L,62266L,62267L,62268L,62269L,62270L,62271L,62272L, +62273L,62274L,62275L,62276L,62277L,62278L,62279L,62280L,62281L,62282L, +62283L,62284L,62285L,62286L,62287L,62288L,62289L,62290L,62291L,62292L, +62293L,62294L,62295L,62296L,62297L,62298L,62299L,62300L,62301L,62302L, +62303L,62304L,62305L,62306L,62307L,62308L,62309L,62310L,62311L,62312L, +62313L,62314L,62315L,62316L,62317L,62318L,62319L,62320L,62321L,62322L, +62323L,62324L,62325L,62326L,62327L,62328L,62329L,62330L,62331L,62332L, +62333L,62334L,62335L,62336L,62337L,62338L,62339L,62340L,62341L,62342L, +62343L,62344L,62345L,62346L,62347L,62348L,62349L,62350L,62351L,62352L, +62353L,62354L,62355L,62356L,62357L,62358L,62359L,62360L,62361L,62362L, +62363L,62364L,62365L,62366L,62367L,62368L,62369L,62370L,62371L,62372L, +62373L,62374L,62375L,62376L,62377L,62378L,62379L,62380L,62381L,62382L, +62383L,62384L,62385L,62386L,62387L,62388L,62389L,62390L,62391L,62392L, +62393L,62394L,62395L,62396L,62397L,62398L,62399L,62400L,62401L,62402L, +62403L,62404L,62405L,62406L,62407L,62408L,62409L,62410L,62411L,62412L, +62413L,62414L,62415L,62416L,62417L,62418L,62419L,62420L,62421L,62422L, +62423L,62424L,62425L,62426L,62427L,62428L,62429L,62430L,62431L,62432L, +62433L,62434L,62435L,62436L,62437L,62438L,62439L,62440L,62441L,62442L, +62443L,62444L,62445L,62446L,62447L,62448L,62449L,62450L,62451L,62452L, +62453L,62454L,62455L,62456L,62457L,62458L,62459L,62460L,62461L,62462L, +62463L,62464L,62465L,62466L,62467L,62468L,62469L,62470L,62471L,62472L, +62473L,62474L,62475L,62476L,62477L,62478L,62479L,62480L,62481L,62482L, +62483L,62484L,62485L,62486L,62487L,62488L,62489L,62490L,62491L,62492L, +62493L,62494L,62495L,62496L,62497L,62498L,62499L,62500L,62501L,62502L, +62503L,62504L,62505L,62506L,62507L,62508L,62509L,62510L,62511L,62512L, +62513L,62514L,62515L,62516L,62517L,62518L,62519L,62520L,62521L,62522L, +62523L,62524L,62525L,62526L,62527L,62528L,62529L,62530L,62531L,62532L, +62533L,62534L,62535L,62536L,62537L,62538L,62539L,62540L,62541L,62542L, +62543L,62544L,62545L,62546L,62547L,62548L,62549L,62550L,62551L,62552L, +62553L,62554L,62555L,62556L,62557L,62558L,62559L,62560L,62561L,62562L, +62563L,62564L,62565L,62566L,62567L,62568L,62569L,62570L,62571L,62572L, +62573L,62574L,62575L,62576L,62577L,62578L,62579L,62580L,62581L,62582L, +62583L,62584L,62585L,62586L,62587L,62588L,62589L,62590L,62591L,62592L, +62593L,62594L,62595L,62596L,62597L,62598L,62599L,62600L,62601L,62602L, +62603L,62604L,62605L,62606L,62607L,62608L,62609L,62610L,62611L,62612L, +62613L,62614L,62615L,62616L,62617L,62618L,62619L,62620L,62621L,62622L, +62623L,62624L,62625L,62626L,62627L,62628L,62629L,62630L,62631L,62632L, +62633L,62634L,62635L,62636L,62637L,62638L,62639L,62640L,62641L,62642L, +62643L,62644L,62645L,62646L,62647L,62648L,62649L,62650L,62651L,62652L, +62653L,62654L,62655L,62656L,62657L,62658L,62659L,62660L,62661L,62662L, +62663L,62664L,62665L,62666L,62667L,62668L,62669L,62670L,62671L,62672L, +62673L,62674L,62675L,62676L,62677L,62678L,62679L,62680L,62681L,62682L, +62683L,62684L,62685L,62686L,62687L,62688L,62689L,62690L,62691L,62692L, +62693L,62694L,62695L,62696L,62697L,62698L,62699L,62700L,62701L,62702L, +62703L,62704L,62705L,62706L,62707L,62708L,62709L,62710L,62711L,62712L, +62713L,62714L,62715L,62716L,62717L,62718L,62719L,62720L,62721L,62722L, +62723L,62724L,62725L,62726L,62727L,62728L,62729L,62730L,62731L,62732L, +62733L,62734L,62735L,62736L,62737L,62738L,62739L,62740L,62741L,62742L, +62743L,62744L,62745L,62746L,62747L,62748L,62749L,62750L,62751L,62752L, +62753L,62754L,62755L,62756L,62757L,62758L,62759L,62760L,62761L,62762L, +62763L,62764L,62765L,62766L,62767L,62768L,62769L,62770L,62771L,62772L, +62773L,62774L,62775L,62776L,62777L,62778L,62779L,62780L,62781L,62782L, +62783L,62784L,62785L,62786L,62787L,62788L,62789L,62790L,62791L,62792L, +62793L,62794L,62795L,62796L,62797L,62798L,62799L,62800L,62801L,62802L, +62803L,62804L,62805L,62806L,62807L,62808L,62809L,62810L,62811L,62812L, +62813L,62814L,62815L,62816L,62817L,62818L,62819L,62820L,62821L,62822L, +62823L,62824L,62825L,62826L,62827L,62828L,62829L,62830L,62831L,62832L, +62833L,62834L,62835L,62836L,62837L,62838L,62839L,62840L,62841L,62842L, +62843L,62844L,62845L,62846L,62847L,62848L,62849L,62850L,62851L,62852L, +62853L,62854L,62855L,62856L,62857L,62858L,62859L,62860L,62861L,62862L, +62863L,62864L,62865L,62866L,62867L,62868L,62869L,62870L,62871L,62872L, +62873L,62874L,62875L,62876L,62877L,62878L,62879L,62880L,62881L,62882L, +62883L,62884L,62885L,62886L,62887L,62888L,62889L,62890L,62891L,62892L, +62893L,62894L,62895L,62896L,62897L,62898L,62899L,62900L,62901L,62902L, +62903L,62904L,62905L,62906L,62907L,62908L,62909L,62910L,62911L,62912L, +62913L,62914L,62915L,62916L,62917L,62918L,62919L,62920L,62921L,62922L, +62923L,62924L,62925L,62926L,62927L,62928L,62929L,62930L,62931L,62932L, +62933L,62934L,62935L,62936L,62937L,62938L,62939L,62940L,62941L,62942L, +62943L,62944L,62945L,62946L,62947L,62948L,62949L,62950L,62951L,62952L, +62953L,62954L,62955L,62956L,62957L,62958L,62959L,62960L,62961L,62962L, +62963L,62964L,62965L,62966L,62967L,62968L,62969L,62970L,62971L,62972L, +62973L,62974L,62975L,62976L,62977L,62978L,62979L,62980L,62981L,62982L, +62983L,62984L,62985L,62986L,62987L,62988L,62989L,62990L,62991L,62992L, +62993L,62994L,62995L,62996L,62997L,62998L,62999L,63000L,63001L,63002L, +63003L,63004L,63005L,63006L,63007L,63008L,63009L,63010L,63011L,63012L, +63013L,63014L,63015L,63016L,63017L,63018L,63019L,63020L,63021L,63022L, +63023L,63024L,63025L,63026L,63027L,63028L,63029L,63030L,63031L,63032L, +63033L,63034L,63035L,63036L,63037L,63038L,63039L,63040L,63041L,63042L, +63043L,63044L,63045L,63046L,63047L,63048L,63049L,63050L,63051L,63052L, +63053L,63054L,63055L,63056L,63057L,63058L,63059L,63060L,63061L,63062L, +63063L,63064L,63065L,63066L,63067L,63068L,63069L,63070L,63071L,63072L, +63073L,63074L,63075L,63076L,63077L,63078L,63079L,63080L,63081L,63082L, +63083L,63084L,63085L,63086L,63087L,63088L,63089L,63090L,63091L,63092L, +63093L,63094L,63095L,63096L,63097L,63098L,63099L,63100L,63101L,63102L, +63103L,63104L,63105L,63106L,63107L,63108L,63109L,63110L,63111L,63112L, +63113L,63114L,63115L,63116L,63117L,63118L,63119L,63120L,63121L,63122L, +63123L,63124L,63125L,63126L,63127L,63128L,63129L,63130L,63131L,63132L, +63133L,63134L,63135L,63136L,63137L,63138L,63139L,63140L,63141L,63142L, +63143L,63144L,63145L,63146L,63147L,63148L,63149L,63150L,63151L,63152L, +63153L,63154L,63155L,63156L,63157L,63158L,63159L,63160L,63161L,63162L, +63163L,63164L,63165L,63166L,63167L,63168L,63169L,63170L,63171L,63172L, +63173L,63174L,63175L,63176L,63177L,63178L,63179L,63180L,63181L,63182L, +63183L,63184L,63185L,63186L,63187L,63188L,63189L,63190L,63191L,63192L, +63193L,63194L,63195L,63196L,63197L,63198L,63199L,63200L,63201L,63202L, +63203L,63204L,63205L,63206L,63207L,63208L,63209L,63210L,63211L,63212L, +63213L,63214L,63215L,63216L,63217L,63218L,63219L,63220L,63221L,63222L, +63223L,63224L,63225L,63226L,63227L,63228L,63229L,63230L,63231L,63232L, +63233L,63234L,63235L,63236L,63237L,63238L,63239L,63240L,63241L,63242L, +63243L,63244L,63245L,63246L,63247L,63248L,63249L,63250L,63251L,63252L, +63253L,63254L,63255L,63256L,63257L,63258L,63259L,63260L,63261L,63262L, +63263L,63264L,63265L,63266L,63267L,63268L,63269L,63270L,63271L,63272L, +63273L,63274L,63275L,63276L,63277L,63278L,63279L,63280L,63281L,63282L, +63283L,63284L,63285L,63286L,63287L,63288L,63289L,63290L,63291L,63292L, +63293L,63294L,63295L,63296L,63297L,63298L,63299L,63300L,63301L,63302L, +63303L,63304L,63305L,63306L,63307L,63308L,63309L,63310L,63311L,63312L, +63313L,63314L,63315L,63316L,63317L,63318L,63319L,63320L,63321L,63322L, +63323L,63324L,63325L,63326L,63327L,63328L,63329L,63330L,63331L,63332L, +63333L,63334L,63335L,63336L,63337L,63338L,63339L,63340L,63341L,63342L, +63343L,63344L,63345L,63346L,63347L,63348L,63349L,63350L,63351L,63352L, +63353L,63354L,63355L,63356L,63357L,63358L,63359L,63360L,63361L,63362L, +63363L,63364L,63365L,63366L,63367L,63368L,63369L,63370L,63371L,63372L, +63373L,63374L,63375L,63376L,63377L,63378L,63379L,63380L,63381L,63382L, +63383L,63384L,63385L,63386L,63387L,63388L,63389L,63390L,63391L,63392L, +63393L,63394L,63395L,63396L,63397L,63398L,63399L,63400L,63401L,63402L, +63403L,63404L,63405L,63406L,63407L,63408L,63409L,63410L,63411L,63412L, +63413L,63414L,63415L,63416L,63417L,63418L,63419L,63420L,63421L,63422L, +63423L,63424L,63425L,63426L,63427L,63428L,63429L,63430L,63431L,63432L, +63433L,63434L,63435L,63436L,63437L,63438L,63439L,63440L,63441L,63442L, +63443L,63444L,63445L,63446L,63447L,63448L,63449L,63450L,63451L,63452L, +63453L,63454L,63455L,63456L,63457L,63458L,63459L,63460L,63461L,63462L, +63463L,63464L,63465L,63466L,63467L,63468L,63469L,63470L,63471L,63472L, +63473L,63474L,63475L,63476L,63477L,63478L,63479L,63480L,63481L,63482L, +63483L,63484L,63485L,63486L,63487L,63488L,63489L,63490L,63491L,63492L, +63493L,63494L,63495L,63496L,63497L,63498L,63499L,63500L,63501L,63502L, +63503L,63504L,63505L,63506L,63507L,63508L,63509L,63510L,63511L,63512L, +63513L,63514L,63515L,63516L,63517L,63518L,63519L,63520L,63521L,63522L, +63523L,63524L,63525L,63526L,63527L,63528L,63529L,63530L,63531L,63532L, +63533L,63534L,63535L,63536L,63537L,63538L,63539L,63540L,63541L,63542L, +63543L,63544L,63545L,63546L,63547L,63548L,63549L,63550L,63551L,63552L, +63553L,63554L,63555L,63556L,63557L,63558L,63559L,63560L,63561L,63562L, +63563L,63564L,63565L,63566L,63567L,63568L,63569L,63570L,63571L,63572L, +63573L,63574L,63575L,63576L,63577L,63578L,63579L,63580L,63581L,63582L, +63583L,63584L,63585L,63586L,63587L,63588L,63589L,63590L,63591L,63592L, +63593L,63594L,63595L,63596L,63597L,63598L,63599L,63600L,63601L,63602L, +63603L,63604L,63605L,63606L,63607L,63608L,63609L,63610L,63611L,63612L, +63613L,63614L,63615L,63616L,63617L,63618L,63619L,63620L,63621L,63622L, +63623L,63624L,63625L,63626L,63627L,63628L,63629L,63630L,63631L,63632L, +63633L,63634L,63635L,63636L,63637L,63638L,63639L,63640L,63641L,63642L, +63643L,63644L,63645L,63646L,63647L,63648L,63649L,63650L,63651L,63652L, +63653L,63654L,63655L,63656L,63657L,63658L,63659L,63660L,63661L,63662L, +63663L,63664L,63665L,63666L,63667L,63668L,63669L,63670L,63671L,63672L, +63673L,63674L,63675L,63676L,63677L,63678L,63679L,63680L,63681L,63682L, +63683L,63684L,63685L,63686L,63687L,63688L,63689L,63690L,63691L,63692L, +63693L,63694L,63695L,63696L,63697L,63698L,63699L,63700L,63701L,63702L, +63703L,63704L,63705L,63706L,63707L,63708L,63709L,63710L,63711L,63712L, +63713L,63714L,63715L,63716L,63717L,63718L,63719L,63720L,63721L,63722L, +63723L,63724L,63725L,63726L,63727L,63728L,63729L,63730L,63731L,63732L, +63733L,63734L,63735L,63736L,63737L,63738L,63739L,63740L,63741L,63742L, +63743L,63744L,63745L,63746L,63747L,63748L,63749L,63750L,63751L,63752L, +63753L,63754L,63755L,63756L,63757L,63758L,63759L,63760L,63761L,63762L, +63763L,63764L,63765L,63766L,63767L,63768L,63769L,63770L,63771L,63772L, +63773L,63774L,63775L,63776L,63777L,63778L,63779L,63780L,63781L,63782L, +63783L,63784L,63785L,63786L,63787L,63788L,63789L,63790L,63791L,63792L, +63793L,63794L,63795L,63796L,63797L,63798L,63799L,63800L,63801L,63802L, +63803L,63804L,63805L,63806L,63807L,63808L,63809L,63810L,63811L,63812L, +63813L,63814L,63815L,63816L,63817L,63818L,63819L,63820L,63821L,63822L, +63823L,63824L,63825L,63826L,63827L,63828L,63829L,63830L,63831L,63832L, +63833L,63834L,63835L,63836L,63837L,63838L,63839L,63840L,63841L,63842L, +63843L,63844L,63845L,63846L,63847L,63848L,63849L,63850L,63851L,63852L, +63853L,63854L,63855L,63856L,63857L,63858L,63859L,63860L,63861L,63862L, +63863L,63864L,63865L,63866L,63867L,63868L,63869L,63870L,63871L,63872L, +63873L,63874L,63875L,63876L,63877L,63878L,63879L,63880L,63881L,63882L, +63883L,63884L,63885L,63886L,63887L,63888L,63889L,63890L,63891L,63892L, +63893L,63894L,63895L,63896L,63897L,63898L,63899L,63900L,63901L,63902L, +63903L,63904L,63905L,63906L,63907L,63908L,63909L,63910L,63911L,63912L, +63913L,63914L,63915L,63916L,63917L,63918L,63919L,63920L,63921L,63922L, +63923L,63924L,63925L,63926L,63927L,63928L,63929L,63930L,63931L,63932L, +63933L,63934L,63935L,63936L,63937L,63938L,63939L,63940L,63941L,63942L, +63943L,63944L,63945L,63946L,63947L,63948L,63949L,63950L,63951L,63952L, +63953L,63954L,63955L,63956L,63957L,63958L,63959L,63960L,63961L,63962L, +63963L,63964L,63965L,63966L,63967L,63968L,63969L,63970L,63971L,63972L, +63973L,63974L,63975L,63976L,63977L,63978L,63979L,63980L,63981L,63982L, +63983L,63984L,63985L,63986L,63987L,63988L,63989L,63990L,63991L,63992L, +63993L,63994L,63995L,63996L,63997L,63998L,63999L,64000L,64001L,64002L, +64003L,64004L,64005L,64006L,64007L,64008L,64009L,64010L,64011L,64012L, +64013L,64014L,64015L,64016L,64017L,64018L,64019L,64020L,64021L,64022L, +64023L,64024L,64025L,64026L,64027L,64028L,64029L,64030L,64031L,64032L, +64033L,64034L,64035L,64036L,64037L,64038L,64039L,64040L,64041L,64042L, +64043L,64044L,64045L,64046L,64047L,64048L,64049L,64050L,64051L,64052L, +64053L,64054L,64055L,64056L,64057L,64058L,64059L,64060L,64061L,64062L, +64063L,64064L,64065L,64066L,64067L,64068L,64069L,64070L,64071L,64072L, +64073L,64074L,64075L,64076L,64077L,64078L,64079L,64080L,64081L,64082L, +64083L,64084L,64085L,64086L,64087L,64088L,64089L,64090L,64091L,64092L, +64093L,64094L,64095L,64096L,64097L,64098L,64099L,64100L,64101L,64102L, +64103L,64104L,64105L,64106L,64107L,64108L,64109L,64110L,64111L,64112L, +64113L,64114L,64115L,64116L,64117L,64118L,64119L,64120L,64121L,64122L, +64123L,64124L,64125L,64126L,64127L,64128L,64129L,64130L,64131L,64132L, +64133L,64134L,64135L,64136L,64137L,64138L,64139L,64140L,64141L,64142L, +64143L,64144L,64145L,64146L,64147L,64148L,64149L,64150L,64151L,64152L, +64153L,64154L,64155L,64156L,64157L,64158L,64159L,64160L,64161L,64162L, +64163L,64164L,64165L,64166L,64167L,64168L,64169L,64170L,64171L,64172L, +64173L,64174L,64175L,64176L,64177L,64178L,64179L,64180L,64181L,64182L, +64183L,64184L,64185L,64186L,64187L,64188L,64189L,64190L,64191L,64192L, +64193L,64194L,64195L,64196L,64197L,64198L,64199L,64200L,64201L,64202L, +64203L,64204L,64205L,64206L,64207L,64208L,64209L,64210L,64211L,64212L, +64213L,64214L,64215L,64216L,64217L,64218L,64219L,64220L,64221L,64222L, +64223L,64224L,64225L,64226L,64227L,64228L,64229L,64230L,64231L,64232L, +64233L,64234L,64235L,64236L,64237L,64238L,64239L,64240L,64241L,64242L, +64243L,64244L,64245L,64246L,64247L,64248L,64249L,64250L,64251L,64252L, +64253L,64254L,64255L,64256L,64257L,64258L,64259L,64260L,64261L,64262L, +64263L,64264L,64265L,64266L,64267L,64268L,64269L,64270L,64271L,64272L, +64273L,64274L,64275L,64276L,64277L,64278L,64279L,64280L,64281L,64282L, +64283L,64284L,64285L,64286L,64287L,64288L,64289L,64290L,64291L,64292L, +64293L,64294L,64295L,64296L,64297L,64298L,64299L,64300L,64301L,64302L, +64303L,64304L,64305L,64306L,64307L,64308L,64309L,64310L,64311L,64312L, +64313L,64314L,64315L,64316L,64317L,64318L,64319L,64320L,64321L,64322L, +64323L,64324L,64325L,64326L,64327L,64328L,64329L,64330L,64331L,64332L, +64333L,64334L,64335L,64336L,64337L,64338L,64339L,64340L,64341L,64342L, +64343L,64344L,64345L,64346L,64347L,64348L,64349L,64350L,64351L,64352L, +64353L,64354L,64355L,64356L,64357L,64358L,64359L,64360L,64361L,64362L, +64363L,64364L,64365L,64366L,64367L,64368L,64369L,64370L,64371L,64372L, +64373L,64374L,64375L,64376L,64377L,64378L,64379L,64380L,64381L,64382L, +64383L,64384L,64385L,64386L,64387L,64388L,64389L,64390L,64391L,64392L, +64393L,64394L,64395L,64396L,64397L,64398L,64399L,64400L,64401L,64402L, +64403L,64404L,64405L,64406L,64407L,64408L,64409L,64410L,64411L,64412L, +64413L,64414L,64415L,64416L,64417L,64418L,64419L,64420L,64421L,64422L, +64423L,64424L,64425L,64426L,64427L,64428L,64429L,64430L,64431L,64432L, +64433L,64434L,64435L,64436L,64437L,64438L,64439L,64440L,64441L,64442L, +64443L,64444L,64445L,64446L,64447L,64448L,64449L,64450L,64451L,64452L, +64453L,64454L,64455L,64456L,64457L,64458L,64459L,64460L,64461L,64462L, +64463L,64464L,64465L,64466L,64467L,64468L,64469L,64470L,64471L,64472L, +64473L,64474L,64475L,64476L,64477L,64478L,64479L,64480L,64481L,64482L, +64483L,64484L,64485L,64486L,64487L,64488L,64489L,64490L,64491L,64492L, +64493L,64494L,64495L,64496L,64497L,64498L,64499L,64500L,64501L,64502L, +64503L,64504L,64505L,64506L,64507L,64508L,64509L,64510L,64511L,64512L, +64513L,64514L,64515L,64516L,64517L,64518L,64519L,64520L,64521L,64522L, +64523L,64524L,64525L,64526L,64527L,64528L,64529L,64530L,64531L,64532L, +64533L,64534L,64535L,64536L,64537L,64538L,64539L,64540L,64541L,64542L, +64543L,64544L,64545L,64546L,64547L,64548L,64549L,64550L,64551L,64552L, +64553L,64554L,64555L,64556L,64557L,64558L,64559L,64560L,64561L,64562L, +64563L,64564L,64565L,64566L,64567L,64568L,64569L,64570L,64571L,64572L, +64573L,64574L,64575L,64576L,64577L,64578L,64579L,64580L,64581L,64582L, +64583L,64584L,64585L,64586L,64587L,64588L,64589L,64590L,64591L,64592L, +64593L,64594L,64595L,64596L,64597L,64598L,64599L,64600L,64601L,64602L, +64603L,64604L,64605L,64606L,64607L,64608L,64609L,64610L,64611L,64612L, +64613L,64614L,64615L,64616L,64617L,64618L,64619L,64620L,64621L,64622L, +64623L,64624L,64625L,64626L,64627L,64628L,64629L,64630L,64631L,64632L, +64633L,64634L,64635L,64636L,64637L,64638L,64639L,64640L,64641L,64642L, +64643L,64644L,64645L,64646L,64647L,64648L,64649L,64650L,64651L,64652L, +64653L,64654L,64655L,64656L,64657L,64658L,64659L,64660L,64661L,64662L, +64663L,64664L,64665L,64666L,64667L,64668L,64669L,64670L,64671L,64672L, +64673L,64674L,64675L,64676L,64677L,64678L,64679L,64680L,64681L,64682L, +64683L,64684L,64685L,64686L,64687L,64688L,64689L,64690L,64691L,64692L, +64693L,64694L,64695L,64696L,64697L,64698L,64699L,64700L,64701L,64702L, +64703L,64704L,64705L,64706L,64707L,64708L,64709L,64710L,64711L,64712L, +64713L,64714L,64715L,64716L,64717L,64718L,64719L,64720L,64721L,64722L, +64723L,64724L,64725L,64726L,64727L,64728L,64729L,64730L,64731L,64732L, +64733L,64734L,64735L,64736L,64737L,64738L,64739L,64740L,64741L,64742L, +64743L,64744L,64745L,64746L,64747L,64748L,64749L,64750L,64751L,64752L, +64753L,64754L,64755L,64756L,64757L,64758L,64759L,64760L,64761L,64762L, +64763L,64764L,64765L,64766L,64767L,64768L,64769L,64770L,64771L,64772L, +64773L,64774L,64775L,64776L,64777L,64778L,64779L,64780L,64781L,64782L, +64783L,64784L,64785L,64786L,64787L,64788L,64789L,64790L,64791L,64792L, +64793L,64794L,64795L,64796L,64797L,64798L,64799L,64800L,64801L,64802L, +64803L,64804L,64805L,64806L,64807L,64808L,64809L,64810L,64811L,64812L, +64813L,64814L,64815L,64816L,64817L,64818L,64819L,64820L,64821L,64822L, +64823L,64824L,64825L,64826L,64827L,64828L,64829L,64830L,64831L,64832L, +64833L,64834L,64835L,64836L,64837L,64838L,64839L,64840L,64841L,64842L, +64843L,64844L,64845L,64846L,64847L,64848L,64849L,64850L,64851L,64852L, +64853L,64854L,64855L,64856L,64857L,64858L,64859L,64860L,64861L,64862L, +64863L,64864L,64865L,64866L,64867L,64868L,64869L,64870L,64871L,64872L, +64873L,64874L,64875L,64876L,64877L,64878L,64879L,64880L,64881L,64882L, +64883L,64884L,64885L,64886L,64887L,64888L,64889L,64890L,64891L,64892L, +64893L,64894L,64895L,64896L,64897L,64898L,64899L,64900L,64901L,64902L, +64903L,64904L,64905L,64906L,64907L,64908L,64909L,64910L,64911L,64912L, +64913L,64914L,64915L,64916L,64917L,64918L,64919L,64920L,64921L,64922L, +64923L,64924L,64925L,64926L,64927L,64928L,64929L,64930L,64931L,64932L, +64933L,64934L,64935L,64936L,64937L,64938L,64939L,64940L,64941L,64942L, +64943L,64944L,64945L,64946L,64947L,64948L,64949L,64950L,64951L,64952L, +64953L,64954L,64955L,64956L,64957L,64958L,64959L,64960L,64961L,64962L, +64963L,64964L,64965L,64966L,64967L,64968L,64969L,64970L,64971L,64972L, +64973L,64974L,64975L,64976L,64977L,64978L,64979L,64980L,64981L,64982L, +64983L,64984L,64985L,64986L,64987L,64988L,64989L,64990L,64991L,64992L, +64993L,64994L,64995L,64996L,64997L,64998L,64999L,65000L,65001L,65002L, +65003L,65004L,65005L,65006L,65007L,65008L,65009L,65010L,65011L,65012L, +65013L,65014L,65015L,65016L,65017L,65018L,65019L,65020L,65021L,65022L, +65023L,65024L,65025L,65026L,65027L,65028L,65029L,65030L,65031L,65032L, +65033L,65034L,65035L,65036L,65037L,65038L,65039L,65040L,65041L,65042L, +65043L,65044L,65045L,65046L,65047L,65048L,65049L,65050L,65051L,65052L, +65053L,65054L,65055L,65056L,65057L,65058L,65059L,65060L,65061L,65062L, +65063L,65064L,65065L,65066L,65067L,65068L,65069L,65070L,65071L,65072L, +65073L,65074L,65075L,65076L,65077L,65078L,65079L,65080L,65081L,65082L, +65083L,65084L,65085L,65086L,65087L,65088L,65089L,65090L,65091L,65092L, +65093L,65094L,65095L,65096L,65097L,65098L,65099L,65100L,65101L,65102L, +65103L,65104L,65105L,65106L,65107L,65108L,65109L,65110L,65111L,65112L, +65113L,65114L,65115L,65116L,65117L,65118L,65119L,65120L,65121L,65122L, +65123L,65124L,65125L,65126L,65127L,65128L,65129L,65130L,65131L,65132L, +65133L,65134L,65135L,65136L,65137L,65138L,65139L,65140L,65141L,65142L, +65143L,65144L,65145L,65146L,65147L,65148L,65149L,65150L,65151L,65152L, +65153L,65154L,65155L,65156L,65157L,65158L,65159L,65160L,65161L,65162L, +65163L,65164L,65165L,65166L,65167L,65168L,65169L,65170L,65171L,65172L, +65173L,65174L,65175L,65176L,65177L,65178L,65179L,65180L,65181L,65182L, +65183L,65184L,65185L,65186L,65187L,65188L,65189L,65190L,65191L,65192L, +65193L,65194L,65195L,65196L,65197L,65198L,65199L,65200L,65201L,65202L, +65203L,65204L,65205L,65206L,65207L,65208L,65209L,65210L,65211L,65212L, +65213L,65214L,65215L,65216L,65217L,65218L,65219L,65220L,65221L,65222L, +65223L,65224L,65225L,65226L,65227L,65228L,65229L,65230L,65231L,65232L, +65233L,65234L,65235L,65236L,65237L,65238L,65239L,65240L,65241L,65242L, +65243L,65244L,65245L,65246L,65247L,65248L,65249L,65250L,65251L,65252L, +65253L,65254L,65255L,65256L,65257L,65258L,65259L,65260L,65261L,65262L, +65263L,65264L,65265L,65266L,65267L,65268L,65269L,65270L,65271L,65272L, +65273L,65274L,65275L,65276L,65277L,65278L,65279L,65280L,65281L,65282L, +65283L,65284L,65285L,65286L,65287L,65288L,65289L,65290L,65291L,65292L, +65293L,65294L,65295L,65296L,65297L,65298L,65299L,65300L,65301L,65302L, +65303L,65304L,65305L,65306L,65307L,65308L,65309L,65310L,65311L,65312L, +65313L,65314L,65315L,65316L,65317L,65318L,65319L,65320L,65321L,65322L, +65323L,65324L,65325L,65326L,65327L,65328L,65329L,65330L,65331L,65332L, +65333L,65334L,65335L,65336L,65337L,65338L,65339L,65340L,65341L,65342L, +65343L,65344L,65313L,65314L,65315L,65316L,65317L,65318L,65319L,65320L, +65321L,65322L,65323L,65324L,65325L,65326L,65327L,65328L,65329L,65330L, +65331L,65332L,65333L,65334L,65335L,65336L,65337L,65338L,65371L,65372L, +65373L,65374L,65375L,65376L,65377L,65378L,65379L,65380L,65381L,65382L, +65383L,65384L,65385L,65386L,65387L,65388L,65389L,65390L,65391L,65392L, +65393L,65394L,65395L,65396L,65397L,65398L,65399L,65400L,65401L,65402L, +65403L,65404L,65405L,65406L,65407L,65408L,65409L,65410L,65411L,65412L, +65413L,65414L,65415L,65416L,65417L,65418L,65419L,65420L,65421L,65422L, +65423L,65424L,65425L,65426L,65427L,65428L,65429L,65430L,65431L,65432L, +65433L,65434L,65435L,65436L,65437L,65438L,65439L,65440L,65441L,65442L, +65443L,65444L,65445L,65446L,65447L,65448L,65449L,65450L,65451L,65452L, +65453L,65454L,65455L,65456L,65457L,65458L,65459L,65460L,65461L,65462L, +65463L,65464L,65465L,65466L,65467L,65468L,65469L,65470L,65471L,65472L, +65473L,65474L,65475L,65476L,65477L,65478L,65479L,65480L,65481L,65482L, +65483L,65484L,65485L,65486L,65487L,65488L,65489L,65490L,65491L,65492L, +65493L,65494L,65495L,65496L,65497L,65498L,65499L,65500L,65501L,65502L, +65503L,65504L,65505L,65506L,65507L,65508L,65509L,65510L,65511L,65512L, +65513L,65514L,65515L,65516L,65517L,65518L,65519L,65520L,65521L,65522L, +65523L,65524L,65525L,65526L,65527L,65528L,65529L,65530L,65531L,65532L, +65533L,65534L,65535L, }; #endif #line 1 "duk_util_bitdecoder.c" @@ -87707,7 +86087,7 @@ DUK_INTERNAL duk_uint8_t *duk_bw_resize(duk_hthread *thr, duk_bufwriter_ctx *bw_ new_sz = curr_off + sz + add_sz; if (new_sz < curr_off) { /* overflow */ - DUK_ERROR(thr, DUK_ERR_TYPE_ERROR, DUK_STR_BUFFER_TOO_LONG); + DUK_ERROR_RANGE(thr, DUK_STR_BUFFER_TOO_LONG); return NULL; /* not reachable */ } #if 0 /* for manual torture testing: tight allocation, useful with valgrind */ @@ -88122,4 +86502,3 @@ DUK_INTERNAL duk_double_t duk_util_tinyrandom_get_double(duk_hthread *thr) { return t; } -#endif diff --git a/javascript/duktape/duktape.h b/javascript/duktape/duktape.h index 7f7a7c327..a727187eb 100644 --- a/javascript/duktape/duktape.h +++ b/javascript/duktape/duktape.h @@ -1,11 +1,12 @@ /* - * Duktape public API for Duktape 1.4.0. + * Duktape public API for Duktape 1.5.0. + * * See the API reference for documentation on call semantics. * The exposed API is inside the DUK_API_PUBLIC_H_INCLUDED * include guard. Other parts of the header are Duktape * internal and related to platform/compiler/feature detection. * - * Git commit cad6f595382a0cc1a7e4207794ade5be11b3e397 (v1.4.0). + * Git commit 83d557704ee63f68ab40b6fcb00995c9b3d6777c (v1.5.0). * Git branch master. * * See Duktape AUTHORS.rst and LICENSE.txt for copyright and @@ -72,6 +73,8 @@ * * Karl Skomski * * Bruce Pascoe * * Ren\u00e9 Hollander + * * Julien Hamaide (https://github.com/crazyjul) + * * Sebastian G\u00f6tte (https://github.com/jaseg) * * Other contributions * =================== @@ -109,6 +112,7 @@ * * Michael Drake (https://github.com/tlsa) * * https://github.com/chris-y * * Laurent Zubiaur (https://github.com/lzubiaur) + * * Ole Andr\u00e9 Vadla Ravn\u00e5s (https://github.com/oleavr) * * If you are accidentally missing from this list, send me an e-mail * (``sami.vaarala@iki.fi``) and I'll fix the omission. @@ -183,6 +187,7 @@ typedef duk_size_t (*duk_debug_write_function) (void *udata, const char *buffer, typedef duk_size_t (*duk_debug_peek_function) (void *udata); typedef void (*duk_debug_read_flush_function) (void *udata); typedef void (*duk_debug_write_flush_function) (void *udata); +typedef duk_idx_t (*duk_debug_request_function) (duk_context *ctx, void *udata, duk_idx_t nvalues); typedef void (*duk_debug_detached_function) (void *udata); struct duk_memory_functions { @@ -213,15 +218,15 @@ struct duk_number_list_entry { * have 99 for patch level (e.g. 0.10.99 would be a development version * after 0.10.0 but before the next official release). */ -#define DUK_VERSION 10400L +#define DUK_VERSION 10500L /* Git commit, describe, and branch for Duktape build. Useful for * non-official snapshot builds so that application code can easily log * which Duktape snapshot was used. Not available in the Ecmascript * environment. */ -#define DUK_GIT_COMMIT "cad6f595382a0cc1a7e4207794ade5be11b3e397" -#define DUK_GIT_DESCRIBE "v1.4.0" +#define DUK_GIT_COMMIT "83d557704ee63f68ab40b6fcb00995c9b3d6777c" +#define DUK_GIT_DESCRIBE "v1.5.0" #define DUK_GIT_BRANCH "master" /* Duktape debug protocol version used by this build. */ @@ -286,13 +291,18 @@ struct duk_number_list_entry { #define DUK_ENUM_NO_PROXY_BEHAVIOR (1 << 5) /* enumerate a proxy object itself without invoking proxy behavior */ /* Compilation flags for duk_compile() and duk_eval() */ -#define DUK_COMPILE_EVAL (1 << 0) /* compile eval code (instead of global code) */ -#define DUK_COMPILE_FUNCTION (1 << 1) /* compile function code (instead of global code) */ -#define DUK_COMPILE_STRICT (1 << 2) /* use strict (outer) context for global, eval, or function code */ -#define DUK_COMPILE_SAFE (1 << 3) /* (internal) catch compilation errors */ -#define DUK_COMPILE_NORESULT (1 << 4) /* (internal) omit eval result */ -#define DUK_COMPILE_NOSOURCE (1 << 5) /* (internal) no source string on stack */ -#define DUK_COMPILE_STRLEN (1 << 6) /* (internal) take strlen() of src_buffer (avoids double evaluation in macro) */ +/* DUK_COMPILE_xxx bits 0-2 are reserved for an internal 'nargs' argument + * (the nargs value passed is direct stack arguments + 1 to account for an + * internal extra argument). + */ +#define DUK_COMPILE_EVAL (1 << 3) /* compile eval code (instead of global code) */ +#define DUK_COMPILE_FUNCTION (1 << 4) /* compile function code (instead of global code) */ +#define DUK_COMPILE_STRICT (1 << 5) /* use strict (outer) context for global, eval, or function code */ +#define DUK_COMPILE_SAFE (1 << 6) /* (internal) catch compilation errors */ +#define DUK_COMPILE_NORESULT (1 << 7) /* (internal) omit eval result */ +#define DUK_COMPILE_NOSOURCE (1 << 8) /* (internal) no source string on stack */ +#define DUK_COMPILE_STRLEN (1 << 9) /* (internal) take strlen() of src_buffer (avoids double evaluation in macro) */ +#define DUK_COMPILE_NOFILENAME (1 << 10) /* (internal) no filename on stack */ /* Flags for duk_def_prop() and its variants */ #define DUK_DEFPROP_WRITABLE (1 << 0) /* set writable (effective if DUK_DEFPROP_HAVE_WRITABLE set) */ @@ -318,15 +328,15 @@ struct duk_number_list_entry { /* Flags for duk_push_string_file_raw() */ #define DUK_STRING_PUSH_SAFE (1 << 0) /* no error if file does not exist */ -/* Duktape specific error codes */ +/* Duktape specific error codes (must be 8 bits at most, see duk_error.h) */ #define DUK_ERR_NONE 0 /* no error (e.g. from duk_get_error_code()) */ -#define DUK_ERR_UNIMPLEMENTED_ERROR 50 /* UnimplementedError */ -#define DUK_ERR_UNSUPPORTED_ERROR 51 /* UnsupportedError */ -#define DUK_ERR_INTERNAL_ERROR 52 /* InternalError */ -#define DUK_ERR_ALLOC_ERROR 53 /* AllocError */ -#define DUK_ERR_ASSERTION_ERROR 54 /* AssertionError */ -#define DUK_ERR_API_ERROR 55 /* APIError */ -#define DUK_ERR_UNCAUGHT_ERROR 56 /* UncaughtError */ +#define DUK_ERR_UNIMPLEMENTED_ERROR 50 /* UnimplementedError */ /* XXX: replace with TypeError? */ +#define DUK_ERR_UNSUPPORTED_ERROR 51 /* UnsupportedError */ /* XXX: replace with TypeError? */ +#define DUK_ERR_INTERNAL_ERROR 52 /* InternalError */ /* XXX: replace with plain Error? */ +#define DUK_ERR_ALLOC_ERROR 53 /* AllocError */ /* XXX: replace with RangeError? */ +#define DUK_ERR_ASSERTION_ERROR 54 /* AssertionError */ /* XXX: to be removed? */ +#define DUK_ERR_API_ERROR 55 /* APIError */ /* XXX: replace with TypeError? */ +#define DUK_ERR_UNCAUGHT_ERROR 56 /* UncaughtError */ /* XXX: to be removed? */ /* Ecmascript E5 specification error codes */ #define DUK_ERR_ERROR 100 /* Error */ @@ -353,7 +363,7 @@ struct duk_number_list_entry { #define DUK_RET_TYPE_ERROR (-DUK_ERR_TYPE_ERROR) #define DUK_RET_URI_ERROR (-DUK_ERR_URI_ERROR) -/* Return codes for protected calls (duk_safe_call(), duk_pcall()). */ +/* Return codes for protected calls (duk_safe_call(), duk_pcall()) */ #define DUK_EXEC_SUCCESS 0 #define DUK_EXEC_ERROR 1 @@ -914,119 +924,103 @@ DUK_EXTERNAL_DECL duk_int_t duk_compile_raw(duk_context *ctx, const char *src_bu /* plain */ #define duk_eval(ctx) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL)) + ((void) duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOFILENAME)) #define duk_eval_noresult(ctx) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT)) + ((void) duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME)) #define duk_peval(ctx) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE)) + (duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME)) #define duk_peval_noresult(ctx) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT)) + (duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME)) #define duk_compile(ctx,flags) \ - ((void) duk_compile_raw((ctx), NULL, 0, (flags))) + ((void) duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags))) #define duk_pcompile(ctx,flags) \ - (duk_compile_raw((ctx), NULL, 0, (flags) | DUK_COMPILE_SAFE)) + (duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags) | DUK_COMPILE_SAFE)) /* string */ #define duk_eval_string(ctx,src) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) + ((void) duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME)) #define duk_eval_string_noresult(ctx,src) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT)) + ((void) duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME)) #define duk_peval_string(ctx,src) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) + (duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME)) #define duk_peval_string_noresult(ctx,src) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT)) + (duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME)) #define duk_compile_string(ctx,flags,src) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) + ((void) duk_compile_raw((ctx), (src), 0, 1 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME)) #define duk_compile_string_filename(ctx,flags,src) \ - ((void) duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) + ((void) duk_compile_raw((ctx), (src), 0, 2 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) #define duk_pcompile_string(ctx,flags,src) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) + (duk_compile_raw((ctx), (src), 0, 1 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME)) #define duk_pcompile_string_filename(ctx,flags,src) \ - (duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) + (duk_compile_raw((ctx), (src), 0, 2 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN)) /* lstring */ #define duk_eval_lstring(ctx,buf,len) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE)) + ((void) duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME)) #define duk_eval_lstring_noresult(ctx,buf,len) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT)) + ((void) duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME)) #define duk_peval_lstring(ctx,buf,len) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_SAFE)) + (duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME)) #define duk_peval_lstring_noresult(ctx,buf,len) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT)) + (duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME)) #define duk_compile_lstring(ctx,flags,buf,len) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - (void) duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_NOSOURCE)) + ((void) duk_compile_raw((ctx), buf, len, 1 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME)) #define duk_compile_lstring_filename(ctx,flags,buf,len) \ - ((void) duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_NOSOURCE)) + ((void) duk_compile_raw((ctx), buf, len, 2 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE)) #define duk_pcompile_lstring(ctx,flags,buf,len) \ - ((void) duk_push_string((ctx), (const char *) (__FILE__)), \ - duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE)) + (duk_compile_raw((ctx), buf, len, 1 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME)) #define duk_pcompile_lstring_filename(ctx,flags,buf,len) \ - (duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE)) + (duk_compile_raw((ctx), buf, len, 2 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE)) /* file */ #define duk_eval_file(ctx,path) \ ((void) duk_push_string_file_raw((ctx), (path), 0), \ (void) duk_push_string((ctx), (path)), \ - (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL)) + (void) duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL)) #define duk_eval_file_noresult(ctx,path) \ ((void) duk_push_string_file_raw((ctx), (path), 0), \ (void) duk_push_string((ctx), (path)), \ - (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT)) + (void) duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT)) #define duk_peval_file(ctx,path) \ ((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \ (void) duk_push_string((ctx), (path)), \ - duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE)) + duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE)) #define duk_peval_file_noresult(ctx,path) \ ((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \ (void) duk_push_string((ctx), (path)), \ - duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT)) + duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT)) #define duk_compile_file(ctx,flags,path) \ ((void) duk_push_string_file_raw((ctx), (path), 0), \ (void) duk_push_string((ctx), (path)), \ - (void) duk_compile_raw((ctx), NULL, 0, (flags))) + (void) duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags))) #define duk_pcompile_file(ctx,flags,path) \ ((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \ (void) duk_push_string((ctx), (path)), \ - duk_compile_raw((ctx), NULL, 0, (flags) | DUK_COMPILE_SAFE)) + duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags) | DUK_COMPILE_SAFE)) /* * Bytecode load/dump @@ -1069,16 +1063,23 @@ DUK_EXTERNAL_DECL void duk_push_context_dump(duk_context *ctx); * Debugger (debug protocol) */ -DUK_EXTERNAL_DECL void duk_debugger_attach(duk_context *ctx, - duk_debug_read_function read_cb, - duk_debug_write_function write_cb, - duk_debug_peek_function peek_cb, - duk_debug_read_flush_function read_flush_cb, - duk_debug_write_flush_function write_flush_cb, - duk_debug_detached_function detached_cb, - void *udata); +#define duk_debugger_attach(ctx,read_cb,write_cb,peek_cb,read_flush_cb,write_flush_cb,detached_cb,udata) \ + duk_debugger_attach_custom((ctx), (read_cb), (write_cb), (peek_cb), (read_flush_cb), (write_flush_cb), \ + NULL, (detached_cb), (udata)) + +DUK_EXTERNAL_DECL void duk_debugger_attach_custom(duk_context *ctx, + duk_debug_read_function read_cb, + duk_debug_write_function write_cb, + duk_debug_peek_function peek_cb, + duk_debug_read_flush_function read_flush_cb, + duk_debug_write_flush_function write_flush_cb, + duk_debug_request_function request_cb, + duk_debug_detached_function detached_cb, + void *udata); DUK_EXTERNAL_DECL void duk_debugger_detach(duk_context *ctx); DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx); +DUK_EXTERNAL_DECL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t nvalues); +DUK_EXTERNAL_DECL void duk_debugger_pause(duk_context *ctx); /* * Date provider related constants @@ -1158,6 +1159,17 @@ DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx); #define DUK_DATE_FLAG_SEP_T (1 << 11) /* string conversion: use 'T' instead of ' ' as a separator */ #define DUK_DATE_FLAG_VALUE_SHIFT 12 /* additional values begin at bit 12 */ +/* + * ROM pointer compression + */ + +/* Support array for ROM pointer compression. Only declared when ROM + * pointer compression is active. + */ +#if defined(DUK_USE_ROM_OBJECTS) && defined(DUK_USE_HEAPPTR16) +DUK_EXTERNAL_DECL const void * const duk_rom_compressed_pointers[]; +#endif + /* * C++ name mangling */ -- cgit v1.2.3