summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2016-05-07 21:34:58 +0100
committerMichael Drake <tlsa@netsurf-browser.org>2016-05-07 21:36:43 +0100
commit59eea1333a16a0acb85d0eaa7e14d5d66c2e333a (patch)
tree1b3f481b11e40e53b053fb7af79842573f2cebd9
parentc428775c0dd9262122f1d343bf8cd8b73954bc41 (diff)
downloadnetsurf-59eea1333a16a0acb85d0eaa7e14d5d66c2e333a.tar.gz
netsurf-59eea1333a16a0acb85d0eaa7e14d5d66c2e333a.tar.bz2
Update to Duktape 1.5.0 release.
-rw-r--r--javascript/duktape/duk_config.h217
-rw-r--r--javascript/duktape/duktape.c18263
-rw-r--r--javascript/duktape/duktape.h158
3 files changed, 8566 insertions, 10072 deletions
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 <sys/time.h>
#include <time.h>
-#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,10 +1258,13 @@
#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
/* Most portable, potentially wastes space */
@@ -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 <karl@skomski.com>
* * Bruce Pascoe <fatcerberus1@gmail.com>
* * Ren\u00e9 Hollander <rene@rene8888.at>
+* * 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,6 +353,525 @@ 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_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
+
+#if defined(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]" */
+#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 */
+
+#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 */
+
+#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__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
+
+/* 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.
+ */
+
+/* setters */
+#define DUK_TVAL_SET_UNDEFINED(tv) do { \
+ (tv)->t = DUK_TAG_UNDEFINED; \
+ } while (0)
+
+#define DUK_TVAL_SET_UNUSED(tv) do { \
+ (tv)->t = DUK_TAG_UNUSED; \
+ } while (0)
+
+#define DUK_TVAL_SET_NULL(tv) do { \
+ (tv)->t = DUK_TAG_NULL; \
+ } while (0)
+
+#define DUK_TVAL_SET_BOOLEAN(tv,val) do { \
+ (tv)->t = DUK_TAG_BOOLEAN; \
+ (tv)->v.i = (val); \
+ } while (0)
+
+#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 */
+
+#define DUK_TVAL_SET_POINTER(tv,hptr) do { \
+ (tv)->t = DUK_TAG_POINTER; \
+ (tv)->v.voidptr = (hptr); \
+ } while (0)
+
+#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!
@@ -366,3967 +880,759 @@ typedef struct duk_re_compiler_ctx duk_re_compiler_ctx;
#ifndef DUK_BUILTINS_H_INCLUDED
#define DUK_BUILTINS_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 */
-
-#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' */
+#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_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_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_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_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_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_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_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_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_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_HEAP_NUM_STRINGS 414
-
-#define DUK_STRIDX_START_RESERVED 369
-#define DUK_STRIDX_START_STRICT_RESERVED 405
-#define DUK_STRIDX_END_RESERVED 414 /* exclusive endpoint */
-
-#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_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
-#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_NUM_BUILTINS 71
-
-#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 */
-
-#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_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_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_HEAP_NUM_STRINGS 414
-
-#define DUK_STRIDX_START_RESERVED 369
-#define DUK_STRIDX_START_STRICT_RESERVED 405
-#define DUK_STRIDX_END_RESERVED 414 /* exclusive endpoint */
-
-#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_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
-#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_NUM_BUILTINS 71
-
-#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_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_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_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_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_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_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_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_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 */
@@ -6163,516 +3463,6 @@ 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 */
-/* ======================================================================== */
-
-/*
- * 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
-
-/* 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.
- */
-
-/* setters */
-#define DUK_TVAL_SET_UNDEFINED(tv) do { \
- (tv)->t = DUK_TAG_UNDEFINED; \
- } while (0)
-
-#define DUK_TVAL_SET_UNUSED(tv) do { \
- (tv)->t = DUK_TAG_UNUSED; \
- } while (0)
-
-#define DUK_TVAL_SET_NULL(tv) do { \
- (tv)->t = DUK_TAG_NULL; \
- } while (0)
-
-#define DUK_TVAL_SET_BOOLEAN(tv,val) do { \
- (tv)->t = DUK_TAG_BOOLEAN; \
- (tv)->v.i = (val); \
- } while (0)
-
-#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 */
-
-#define DUK_TVAL_SET_POINTER(tv,hptr) do { \
- (tv)->t = DUK_TAG_POINTER; \
- (tv)->v.voidptr = (hptr); \
- } while (0)
-
-#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_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))
@@ -6908,6 +3704,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
* thread argument is needed for features like finalization. Currently
@@ -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,15 +4581,19 @@ 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,140 +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.
- */
-
+#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,
@@ -12311,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,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
+#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,
@@ -12412,783 +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_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.
- */
-
-/* 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,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,
+#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,
};
-#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_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,
};
-#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,
+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,
};
-
-/* 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,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,
-};
-#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 */
#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(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));
}
-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 */
-}
-#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_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_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_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_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_syntax(duk_hthread *thr) {
+ DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_SYNTAX_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_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_internal(duk_hthread *thr) {
+ DUK_ERROR_RAW(thr, NULL, 0, DUK_ERR_INTERNAL_ERROR, NULL);
+}
+DUK_INTERNAL void duk_err_alloc(duk_hthread *thr) {
+ DUK_ERROR_RAW(thr, NULL, thr, DUK_ERR_ALLOC_ERROR, NULL);
}
#endif
@@ -13366,6 +9942,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,14 +18547,18 @@ 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));
/* make the new thread reachable */
@@ -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 ] */
+
+ 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;
+ }
- duk__enc_value2(js_ctx); /* -> [ ... ] */
+ /* [ ... ] */
}
- 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;
- }
-
- /* 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;
- }
+ goto pop2_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);
}
- duk_debug_write_string(thr,
- (const char *) DUK_HCOMPILEDFUNCTION_GET_CODE_BASE(heap, fun),
- (duk_size_t) DUK_HCOMPILEDFUNCTION_GET_CODE_SIZE(heap, fun));
+ 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;
+
+ 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)
@@ -56022,6 +53958,13 @@ DUK_INTERNAL void duk_hthread_create_builtin_objects(duk_hthread *thr) {
#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 */
#if defined(DUK_USE_HOBJECT_LAYOUT_1)
@@ -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 <karl@skomski.com>
* * Bruce Pascoe <fatcerberus1@gmail.com>
* * Ren\u00e9 Hollander <rene@rene8888.at>
+ * * 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
@@ -1159,6 +1160,17 @@ DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx);
#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
*/