23#define DUK__JSON_DECSTR_BUFSIZE 128
24#define DUK__JSON_DECSTR_CHUNKSIZE 64
25#define DUK__JSON_ENCSTR_CHUNKSIZE 64
26#define DUK__JSON_STRINGIFY_BUFSIZE 128
27#define DUK__JSON_MAX_ESC_LEN 10
54#if defined(DUK_USE_FASTINT)
68#if defined(DUK_USE_FASTINT)
71#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
82#if defined(DUK_USE_JSON_QUOTESTRING_FASTPATH)
90 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xe2, 0xf4, 0xee, 0x80, 0xe6, 0xf2, 0x80, 0x80,
91 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80,
92 0x20, 0x21, 0xa2, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
93 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
94 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
95 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0xdc, 0x5d, 0x5e, 0x5f,
96 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
97 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x81,
98 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
99 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
100 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
101 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
102 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
103 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
104 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
105 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81
108DUK_LOCAL const duk_uint8_t duk__json_quotestr_esc[14] = {
116#if defined(DUK_USE_JSON_DECSTRING_FASTPATH)
121 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
122 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
123 0x20, 0x21, 0x00, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
124 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
125 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
126 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59, 0x5a, 0x5b, 0x00, 0x5d, 0x5e, 0x5f,
127 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
128 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
129 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
130 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
131 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
132 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
133 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
134 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
135 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
136 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
140#if defined(DUK_USE_JSON_EATWHITE_FASTPATH)
145 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00,
146 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
148 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
149 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
150 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
151 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
152 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
153 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
154 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
155 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
156 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
157 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
158 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
159 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
160 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
164#if defined(DUK_USE_JSON_DECNUMBER_FASTPATH)
169 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
170 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
171 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00,
172 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
173 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
174 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
175 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
176 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
177 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
178 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
179 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
180 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
181 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
182 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
183 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
184 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
207 (
long) (js_ctx->
p - js_ctx->
p_start));
211 const duk_uint8_t *p;
219#if defined(DUK_USE_JSON_EATWHITE_FASTPATH)
228 if (!(t == 0x20 || t == 0x0a || t == 0x0d || t == 0x09)) {
262 for (i = 0; i < n; i++) {
267 (
long) i, (
long) n, (
long) res, (
long) x));
273 res = (res * 16) + t;
291 const duk_uint8_t *p;
394#if defined(DUK_USE_JSON_DECSTRING_FASTPATH)
398 const duk_uint8_t *p;
461 }
else if (x < 0x20) {
465 *q++ = (duk_uint8_t) x;
489 const duk_uint8_t *p;
532 const duk_uint8_t *p;
586 const duk_uint8_t *p;
625 DUK_MEMCPY((
void *) buf, (
const void *) js_ctx->
p, src_len);
643 const duk_uint8_t *p_start;
644 const duk_uint8_t *p;
661 (
const void *) p_start, (
const void *) p,
662 (
const void *) js_ctx->
p_end, (
long) x));
664#if defined(DUK_USE_JSON_DECNUMBER_FASTPATH)
747 (
long) x, (
long) key_count));
757 }
else if (key_count == 0) {
830 (
long) x, (
long) arr_idx));
840 }
else if (arr_idx == 0) {
968 for (i = 0; i < arr_len; i++) {
971 DUK_DDD(
DUK_DDDPRINT(
"walk: array, top=%ld, i=%ld, arr_len=%ld, holder=%!T, name=%!T, val=%!T",
997 DUK_DDD(
DUK_DDDPRINT(
"walk: object, top=%ld, holder=%!T, name=%!T, val=%!T, enum=%!iT, obj_key=%!T",
1044#define DUK__EMIT_1(js_ctx,ch) duk__emit_1((js_ctx), (duk_uint_fast8_t) (ch))
1045#define DUK__EMIT_2(js_ctx,ch1,ch2) duk__emit_2((js_ctx), (duk_uint_fast8_t) (ch1), (duk_uint_fast8_t) (ch2))
1046#define DUK__EMIT_HSTR(js_ctx,h) duk__emit_hstring((js_ctx), (h))
1047#if defined(DUK_USE_FASTINT) || defined(DUK_USE_JX) || defined(DUK_USE_JC)
1048#define DUK__EMIT_CSTR(js_ctx,p) duk__emit_cstring((js_ctx), (p))
1050#define DUK__EMIT_STRIDX(js_ctx,i) duk__emit_stridx((js_ctx), (i))
1051#define DUK__UNEMIT_1(js_ctx) duk__unemit_1((js_ctx))
1065#if defined(DUK_USE_FASTINT) || defined(DUK_USE_JX) || defined(DUK_USE_JC)
1087#define DUK__MKESC(nybbles,esc1,esc2) \
1088 (((duk_uint_fast32_t) (nybbles)) << 16) | \
1089 (((duk_uint_fast32_t) (esc1)) << 8) | \
1090 ((duk_uint_fast32_t) (esc2))
1133 *q++ = (duk_uint8_t) ((tmp >> 8) & 0xff);
1134 *q++ = (duk_uint8_t) (tmp & 0xff);
1147 const duk_int8_t *p, *p_start, *p_end;
1163 p_end = p_start + k_len;
1168 goto quote_normally;
1172 goto quote_normally;
1177 goto quote_normally;
1199 const duk_uint8_t *p, *p_start, *p_end, *p_now, *p_tmp;
1234#if defined(DUK_USE_JSON_QUOTESTRING_FASTPATH)
1241 }
else if (b >= 0xa0) {
1243 *q++ = (duk_uint8_t) (b - 0x80);
1244 }
else if (b == 0x80) {
1263 if (cp == 0x22 || cp == 0x5c) {
1266 *q++ = (duk_uint8_t) cp;
1267 }
else if (cp < 0x20) {
1273 if (cp < (
sizeof(duk__json_quotestr_esc) /
sizeof(duk_uint8_t)) &&
1274 (esc_char = duk__json_quotestr_esc[cp]) != 0) {
1276 *q++ = (duk_uint8_t) esc_char;
1284 *q++ = (duk_uint8_t) cp;
1312#ifdef DUK_USE_NONSTD_JSON_ESC_U2028_U2029
1362#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
1382#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
1388 }
else if (
s == 0) {
1399#if defined(DUK_USE_FASTINT)
1408 duk_uint8_t buf[20 + 1];
1412 v = DUK_TVAL_GET_FASTINT(tv);
1424#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
1425#if defined(DUK_USE_HEX_FASTPATH)
1431#if !defined(DUK_USE_UNALIGNED_ACCESSES_POSSIBLE)
1443#if defined(DUK_USE_UNALIGNED_ACCESSES_POSSIBLE)
1444 q16 = (duk_uint16_t *) (
void *) dst;
1448 DUK_DD(
DUK_DDPRINT(
"unaligned accesses not possible, dst not aligned -> step to dst + 1"));
1449 q16 = (duk_uint16_t *) (
void *) (dst + 1);
1452 q16 = (duk_uint16_t *) (
void *) dst;
1457 len_safe = src_len & ~0x03U;
1458 for (i = 0; i < len_safe; i += 4) {
1465 q = (duk_uint8_t *) q16;
1467#if !defined(DUK_USE_UNALIGNED_ACCESSES_POSSIBLE)
1470 DUK_MEMMOVE((
void *) dst, (
const void *) (dst + 1), 2 * len_safe);
1475 for (; i < src_len; i++) {
1485 const duk_uint8_t *p;
1486 const duk_uint8_t *p_end;
1491 p_end = src + src_len;
1493 while (p != p_end) {
1524 space = 9 + buf_len * 2 + 2;
1529#if defined(DUK_USE_JX) && defined(DUK_USE_JC)
1532#if defined(DUK_USE_JX)
1540#if defined(DUK_USE_JX) && defined(DUK_USE_JC)
1543#if defined(DUK_USE_JC)
1546 DUK_MEMCPY((
void *) q, (
const void *)
"{\"_buf\":\"", 9);
1564#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
1577#if defined(DUK_USE_JX) && defined(DUK_USE_JC)
1580#if defined(DUK_USE_JX)
1582 fmt = ptr ?
"(%p)" :
"(null)";
1585#if defined(DUK_USE_JX) && defined(DUK_USE_JC)
1588#if defined(DUK_USE_JC)
1591 fmt = ptr ?
"{\"_ptr\":\"%p\"}" :
"{\"_ptr\":\"null\"}";
1601#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
1619#if defined(DUK_USE_PREFER_SIZE)
1625 while (
depth-- > 0) {
1631 const duk_uint8_t *gap_data;
1635 duk_uint8_t *p_start;
1656 need_bytes = gap_len *
depth;
1660 DUK_MEMCPY((
void *) p, (
const void *) gap_data, (
size_t) gap_len);
1662 avail_bytes = gap_len;
1664 need_bytes -= gap_len;
1666 while (need_bytes >= avail_bytes) {
1667 DUK_MEMCPY((
void *) p, (
const void *) p_start, (
size_t) avail_bytes);
1669 need_bytes -= avail_bytes;
1674 DUK_MEMCPY((
void *) p, (
const void *) p_start, (
size_t) need_bytes);
1703 for (i = 0; i < n; i++) {
1782 idx_obj = entry_top - 1;
1809 for (i = 0; i < arr_len; i++) {
1875 idx_arr = entry_top - 1;
1883 for (i = 0; i < arr_len; i++) {
1886 (
long) i, (
long) arr_len));
1957 if (h_tmp !=
NULL) {
2000#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2012 DUK_DDD(
DUK_DDDPRINT(
"-> bufferobject (-> plain buffer) will result in undefined (type mask check)"));
2019 DUK_DDD(
DUK_DDDPRINT(
"no JX/JC support, bufferobject/buffer will always result in undefined"));
2042#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2059#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2093#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2109#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2139#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2147#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2157#if defined(DUK_USE_FASTINT)
2158 case DUK_TAG_FASTINT:
2162 duk__enc_fastint_tval(js_ctx, tv);
2215#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH)
2232#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2237 goto emit_undefined;
2240 goto emit_undefined;
2264 duk_uint32_t c_bit, c_all, c_array, c_unbox, c_undef,
2265 c_func, c_bufobj, c_object;
2331 DUK_DD(
DUK_DDPRINT(
"object has a .toJSON property or object is a Proxy, abort fast path"));
2332 goto abort_fastpath;
2344#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2355 c_object = c_all & ~(c_array | c_unbox | c_func | c_bufobj | c_undef);
2370 c_object = c_all & ~(c_array | c_unbox | c_func | c_bufobj | c_undef);
2374 if (c_bit & c_object) {
2384 goto abort_fastpath;
2403 goto abort_fastpath;
2421 if (duk__json_stringify_fast_value(js_ctx, tv_val) == 0) {
2444 }
else if (c_bit & c_array) {
2453 goto abort_fastpath;
2458 if (arr_len > asize) {
2463 goto abort_fastpath;
2468 for (i = 0; i < arr_len; i++) {
2492 if (has_inherited) {
2493 DUK_D(
DUK_DPRINT(
"gap in array, conflicting inherited property, abort fast path"));
2494 goto abort_fastpath;
2500 DUK_D(
DUK_DPRINT(
"gap in array, no conflicting inherited property, remain on fast path"));
2501#if defined(DUK_USE_JX)
2507 if (duk__json_stringify_fast_value(js_ctx, tv_val) == 0) {
2525 }
else if (c_bit & c_unbox) {
2537 goto abort_fastpath;
2556#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2557 }
else if (c_bit & c_func) {
2559 }
else if (c_bit & c_bufobj) {
2569 goto emit_undefined;
2578#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2583 goto emit_undefined;
2586 goto emit_undefined;
2590#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2595 goto emit_undefined;
2598 goto emit_undefined;
2607 goto abort_fastpath;
2609#if defined(DUK_USE_FASTINT)
2610 case DUK_TAG_FASTINT: {
2614 duk__enc_fastint_tval(js_ctx, tv);
2668 if (duk__json_stringify_fast_value(js_ctx, tv) == 0) {
2690#ifdef DUK_USE_ASSERTIONS
2698 DUK_DDD(
DUK_DDDPRINT(
"JSON parse start: text=%!T, reviver=%!T, flags=0x%08lx, stack_top=%ld",
2701 (
unsigned long) flags,
2706#ifdef DUK_USE_EXPLICIT_NULL_INIT
2716 js_ctx->
flags = flags;
2717#if defined(DUK_USE_JX)
2720#if defined(DUK_USE_JC)
2723#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2746 if (js_ctx->
p != js_ctx->
p_end) {
2774 DUK_DDD(
DUK_DDDPRINT(
"JSON parse end: text=%!T, reviver=%!T, flags=0x%08lx, result=%!T, stack_top=%ld",
2777 (
unsigned long) flags,
2802 DUK_DDD(
DUK_DDDPRINT(
"JSON stringify start: value=%!T, replacer=%!T, space=%!T, flags=0x%08lx, stack_top=%ld",
2806 (
unsigned long) flags,
2817#ifdef DUK_USE_EXPLICIT_NULL_INIT
2827 js_ctx->
flags = flags;
2836#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2843#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2845#if defined(DUK_USE_JX)
2857#if defined(DUK_USE_JX) && defined(DUK_USE_JC)
2860#if defined(DUK_USE_JC)
2871#if defined(DUK_USE_JX) || defined(DUK_USE_JC)
2914 duk_enum(ctx, idx_replacer, enum_flags);
2958 static const char spaces[10] = {
2995#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH)
2999#ifdef DUK_USE_MARK_AND_SWEEP
3023#if defined(DUK_USE_MARK_AND_SWEEP)
3031 pcall_rc =
duk_safe_call(ctx, duk__json_stringify_fast, 2 , 0 );
3033#if defined(DUK_USE_MARK_AND_SWEEP)
3039 goto replace_finished;
3047 DUK_D(
DUK_DPRINT(
"fast path failed, serialize using slow path instead"));
3049 js_ctx->recursion_depth = 0;
3062 "proplist=%!T, gap=%!O, holder=%!T",
3063 (
unsigned long) js_ctx->
flags,
3088 "proplist=%!T, gap=%!O, holder=%!T",
3089 (
unsigned long) js_ctx->
flags,
3100#if defined(DUK_USE_JSON_STRINGIFY_FASTPATH)
3107 "flags=0x%08lx, result=%!T, stack_top=%ld",
3111 (
unsigned long) flags,
3139#undef DUK__JSON_DECSTR_BUFSIZE
3140#undef DUK__JSON_DECSTR_CHUNKSIZE
3141#undef DUK__JSON_ENCSTR_CHUNKSIZE
3142#undef DUK__JSON_STRINGIFY_BUFSIZE
3143#undef DUK__JSON_MAX_ESC_LEN
#define DUK_UNREACHABLE()
unsigned int duk_small_uint_t
duk_uint_t duk_ucodepoint_t
duk_small_int_t duk_ret_t
#define DUK_USE_JSON_ENC_RECLIMIT
#define DUK_USE_JSON_DEC_RECLIMIT
duk_uint8_t duk_uint_fast8_t
duk_int_t duk_codepoint_t
duk_int_fast32_t duk_int_t
duk_uint_fast32_t duk_uint_t
#define DUK_MEMZERO(p, n)
#define DUK_DOUBLE_INFINITY
duk_small_int_t duk_bool_t
duk_uint32_t duk_uint_fast32_t
DUK_EXTERNAL void duk_enum(duk_context *ctx, duk_idx_t obj_index, duk_uint_t enum_flags)
#define DUK_HOBJECT_CLASS_BOOLEAN
DUK_INTERNAL_DECL duk_small_int_t duk_unicode_is_identifier_part(duk_codepoint_t cp)
#define DUK_MS_FLAG_NO_OBJECT_COMPACTION
#define DUK_ERROR_RANGE(thr, msg)
#define DUK_HOBJECT_A_GET_VALUE_PTR(heap, h, i)
#define DUK_ASC_DOUBLEQUOTE
DUK_INTERNAL_DECL duk_hstring * duk_to_hstring(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_pop_2(duk_context *ctx)
#define DUK_BW_ADD_PTR(thr, bw_ctx, delta)
#define DUK_HSTRING_GET_DATA(x)
DUK_EXTERNAL duk_bool_t duk_is_undefined(duk_context *ctx, duk_idx_t index)
#define DUK_JSON_ENC_LOOPARRAY
DUK_INTERNAL_DECL duk_bool_t duk_put_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_S2N_FLAG_ALLOW_FRAC
#define DUK_BW_SET_PTR(thr, bw_ctx, ptr)
#define DUK_TVAL_IS_NUMBER(tv)
DUK_EXTERNAL duk_idx_t duk_require_normalize_index(duk_context *ctx, duk_idx_t index)
#define DUK_ERROR_TYPE(thr, msg)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
DUK_EXTERNAL void duk_push_true(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_del_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
#define DUK_HOBJECT_CMASK_BOOLEAN
#define DUK_BW_WRITE_ENSURE_U8(thr, bw_ctx, val)
#define DUK_HOBJECT_E_SLOT_IS_ENUMERABLE(heap, h, i)
DUK_INTERNAL_DECL void duk_numconv_stringify(duk_context *ctx, duk_small_int_t radix, duk_small_int_t digits, duk_small_uint_t flags)
#define DUK_HOBJECT_CLASS_POINTER
#define DUK_HOBJECT_GET_ENEXT(h)
#define DUK_STRIDX_MINUS_INFINITY
#define DUK_BW_SET_SIZE(thr, bw_ctx, sz)
#define DUK_TVAL_GET_OBJECT(tv)
DUK_INTERNAL_DECL duk_int_t duk_to_int_clamped(duk_context *ctx, duk_idx_t index, duk_int_t minval, duk_int_t maxval)
#define DUK_STRIDX_JSON_EXT_UNDEFINED
#define DUK_HEAP_NUM_STRINGS
DUK_EXTERNAL duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx)
#define DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(heap, h, i)
#define DUK_S2N_FLAG_ALLOW_MINUS
#define DUK_HBUFFER_MAX_BYTELEN
#define duk_xdef_prop_index_wec(ctx, obj_index, arr_index)
#define duk_xdef_prop_wec(ctx, obj_index)
DUK_EXTERNAL duk_bool_t duk_next(duk_context *ctx, duk_idx_t enum_index, duk_bool_t get_value)
#define DUK_HOBJECT_GET_CLASS_MASK(h)
DUK_EXTERNAL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t index, duk_uint_t mask)
#define DUK_BW_SETPTR_AND_COMPACT(thr, bw_ctx, ptr)
#define DUK_TVAL_IS_OBJECT(tv)
DUK_EXTERNAL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index)
#define DUK_JSON_FLAG_AVOID_KEY_QUOTES
#define DUK_JSON_ENC_REQSTACK
DUK_INTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t index, duk_size_t length)
#define DUK_HOBJECT_CMASK_STRING
#define DUK_TVAL_GET_BUFFER(tv)
DUK_INTERNAL_DECL void duk_push_hstring_stridx(duk_context *ctx, duk_small_int_t stridx)
#define DUK_HBUFFEROBJECT_VALID_SLICE(h)
DUK_EXTERNAL void duk_require_stack(duk_context *ctx, duk_idx_t extra)
#define DUK_ASC_BACKSLASH
#define DUK_HSTRING_GET_CHARLEN(x)
#define DUK_HOBJECT_CLASS_ARRAY
DUK_INTERNAL const duk_uint8_t duk_lc_digits[36]
#define DUK_BW_RESET_SIZE(thr, bw_ctx)
#define DUK_HOBJECT_E_GET_KEY(heap, h, i)
#define DUK_ERROR_INTERNAL_DEFMSG(thr)
#define DUK_TVAL_GET_TAG(tv)
DUK_EXTERNAL const char * duk_push_lstring(duk_context *ctx, const char *str, duk_size_t len)
DUK_EXTERNAL void duk_remove(duk_context *ctx, duk_idx_t index)
#define DUK_TVAL_IS_POINTER(tv)
#define DUK_STRIDX_LC_UNDEFINED
#define DUK_HOBJECT_GET_ASIZE(h)
#define DUK_HOBJECT_CMASK_ALL
#define DUK_ASSERT_HBUFFEROBJECT_VALID(h)
#define DUK_STR_JSONENC_RECLIMIT
#define DUK_TVAL_IS_UNUSED(tv)
#define DUK_BW_ENSURE_RAW(thr, bw_ctx, sz, ptr)
DUK_INTERNAL_DECL duk_hobject * duk_get_hobject_or_lfunc_coerce(duk_context *ctx, duk_idx_t index)
#define DUK_MS_FLAG_NO_FINALIZERS
#define DUK_ASSERT_DISABLE(x)
DUK_EXTERNAL void duk_push_null(duk_context *ctx)
#define DUK_HOBJECT_IS_CALLABLE(h)
DUK_INTERNAL_DECL duk_small_int_t duk_unicode_is_identifier_start(duk_codepoint_t cp)
#define DUK_HOBJECT_CLASS_NUMBER
DUK_EXTERNAL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL void duk_dup_top(duk_context *ctx)
DUK_EXTERNAL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t index)
#define DUK_TVAL_GET_STRING(tv)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key)
DUK_EXTERNAL void duk_replace(duk_context *ctx, duk_idx_t to_index)
#define DUK_HOBJECT_CMASK_NUMBER
DUK_EXTERNAL void duk_push_pointer(duk_context *ctx, void *val)
#define DUK_HOBJECT_HAS_ARRAY_PART(h)
#define DUK_STR_FMT_INVALID_JSON
#define DUK_TVAL_IS_STRING(tv)
#define DUK_HBUFFEROBJECT_GET_SLICE_BASE(heap, h)
DUK_EXTERNAL duk_bool_t duk_del_prop(duk_context *ctx, duk_idx_t obj_index)
#define DUK_STRIDX_JSON_EXT_FUNCTION2
#define DUK_STR_JSONDEC_RECLIMIT
#define DUK_HOBJECT_IS_BUFFEROBJECT(h)
#define DUK_HSTRING_GET_BYTELEN(x)
DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t index)
#define DUK_BW_GET_SIZE(thr, bw_ctx)
DUK_EXTERNAL duk_idx_t duk_push_object(duk_context *ctx)
#define DUK_STRIDX_LC_NULL
#define DUK_STRIDX_EMPTY_STRING
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)
#define DUK_JSON_FLAG_EXT_CUSTOM
DUK_INTERNAL const duk_int8_t duk_hex_dectab[256]
DUK_EXTERNAL void duk_insert(duk_context *ctx, duk_idx_t to_index)
#define DUK_STRIDX_INT_VALUE
DUK_INTERNAL_DECL duk_bool_t duk_hobject_hasprop_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key)
#define DUK_STR_CYCLIC_INPUT
DUK_EXTERNAL duk_idx_t duk_get_top(duk_context *ctx)
#define DUK_TVAL_IS_DOUBLE(v)
#define DUK_HOBJECT_E_SLOT_IS_ACCESSOR(heap, h, i)
DUK_EXTERNAL duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index)
#define DUK_ASSERT_HOBJECT_VALID(h)
DUK_INTERNAL_DECL void duk_push_tval(duk_context *ctx, duk_tval *tv)
#define DUK_HOBJECT_CMASK_FUNCTION
DUK_EXTERNAL duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_function func, duk_idx_t nargs, duk_idx_t nrets)
#define DUK_BW_WRITE_ENSURE_HSTRING(thr, bw_ctx, val)
DUK_EXTERNAL void duk_push_uint(duk_context *ctx, duk_uint_t val)
#define DUK_BW_INIT_PUSHBUF(thr, bw_ctx, sz)
#define DUK_HOBJECT_CLASS_MAX
DUK_EXTERNAL void duk_push_undefined(duk_context *ctx)
#define DUK_BW_GET_PTR(thr, bw_ctx)
#define DUK_HTHREAD_STRING_TO_JSON(thr)
#define DUK_HSTRING_HAS_INTERNAL(x)
DUK_EXTERNAL void duk_call_method(duk_context *ctx, duk_idx_t nargs)
#define DUK_TAG_UNDEFINED
#define DUK_HTHREAD_GET_STRING(thr, idx)
DUK_EXTERNAL duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t obj_index)
DUK_EXTERNAL const char * duk_push_sprintf(duk_context *ctx, const char *fmt,...)
DUK_EXTERNAL duk_bool_t duk_is_nan(duk_context *ctx, duk_idx_t index)
#define DUK_TVAL_GET_POINTER(tv)
DUK_EXTERNAL void duk_push_number(duk_context *ctx, duk_double_t val)
#define DUK_STRIDX_INFINITY
#define DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ(h)
DUK_INTERNAL_DECL duk_ret_t duk_hobject_get_enumerated_keys(duk_context *ctx, duk_small_uint_t enum_flags)
#define DUK_GET_TVAL_NEGIDX(ctx, idx)
#define DUK_ASSERT_TOP(ctx, n)
DUK_EXTERNAL void duk_push_false(duk_context *ctx)
#define DUK_HOBJECT_CMASK_POINTER
#define DUK_STRIDX_JSON_EXT_NEGINF
DUK_EXTERNAL void duk_substring(duk_context *ctx, duk_idx_t index, duk_size_t start_offset, duk_size_t end_offset)
DUK_INTERNAL_DECL duk_uint32_t duk_hobject_get_length(duk_hthread *thr, duk_hobject *obj)
#define DUK_STRIDX_JSON_EXT_NAN
#define DUK_STRIDX_MINUS_ZERO
DUK_INTERNAL_DECL duk_idx_t duk_push_object_internal(duk_context *ctx)
#define DUK_TVAL_GET_BOOLEAN(tv)
DUK_EXTERNAL const char * duk_to_string(duk_context *ctx, duk_idx_t index)
#define DUK_BW_WRITE_ENSURE_U8_2(thr, bw_ctx, val1, val2)
#define DUK_GET_TVAL_POSIDX(ctx, idx)
#define DUK_HBUFFER_GET_DATA_PTR(heap, x)
DUK_EXTERNAL void duk_pop(duk_context *ctx)
DUK_INTERNAL_DECL duk_hobject * duk_get_hobject(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_push_hobject(duk_context *ctx, duk_hobject *h)
DUK_INTERNAL_DECL void duk_numconv_parse(duk_context *ctx, duk_small_int_t radix, duk_small_uint_t flags)
DUK_INTERNAL const duk_uint16_t duk_hex_enctab[256]
DUK_EXTERNAL duk_idx_t duk_push_array(duk_context *ctx)
#define DUK_HOBJECT_GET_CLASS_NUMBER(h)
DUK_EXTERNAL void duk_push_nan(duk_context *ctx)
#define DUK_STRIDX_TO_JSON
#define DUK_JSON_FLAG_EXT_COMPATIBLE
DUK_INTERNAL_DECL duk_hstring * duk_get_hstring(duk_context *ctx, duk_idx_t index)
#define DUK_BW_PUSH_AS_STRING(thr, bw_ctx)
#define duk_hobject_get_internal_value_tval_ptr(heap, obj)
DUK_EXTERNAL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t index)
#define DUK_BW_WRITE_ENSURE_CSTRING(thr, bw_ctx, val)
#define DUK_JSON_DEC_REQSTACK
#define DUK_HOBJECT_CLASS_STRING
DUK_EXTERNAL void duk_hex_decode(duk_context *ctx, duk_idx_t index)
#define DUK_S2N_FLAG_ALLOW_EXP
#define DUK_HOBJECT_CMASK_ARRAY
#define DUK_BW_ENSURE_GETPTR(thr, bw_ctx, sz)
#define DUK_JSON_FLAG_ASCII_ONLY
#define DUK_TVAL_GET_DOUBLE(tv)
#define DUK_ERROR_FMT1(thr, err, fmt, arg1)
#define DUK_UNICODE_MAX_XUTF8_LENGTH
#define DUK_TVAL_IS_BOOLEAN(tv)
DUK_INTERNAL_DECL duk_small_int_t duk_unicode_decode_xutf8(duk_hthread *thr, const duk_uint8_t **ptr, const duk_uint8_t *ptr_start, const duk_uint8_t *ptr_end, duk_ucodepoint_t *out_cp)
#define DUK_HBUFFER_GET_SIZE(x)
DUK_EXTERNAL duk_bool_t duk_put_prop(duk_context *ctx, duk_idx_t obj_idx)
DUK_EXTERNAL duk_bool_t duk_has_prop(duk_context *ctx, duk_idx_t obj_index)
DUK_INTERNAL_DECL duk_tval * duk_get_tval(duk_context *ctx, duk_idx_t index)
#define DUK_RAW_WRITE_XUTF8(ptr, val)
#define DUK_TAG_LIGHTFUNC
#define DUK_STRIDX_JSON_EXT_POSINF
#define DUK_STRIDX_JSON_EXT_FUNCTION1
#define DUK_HOBJECT_CMASK_ALL_BUFFEROBJECTS
#define DUK_ENUM_ARRAY_INDICES_ONLY
#define DUK_ENUM_SORT_ARRAY_INDICES
#define duk_push_fixed_buffer(ctx, size)
#define DUK_TYPE_MASK_BUFFER
#define DUK_TYPE_MASK_LIGHTFUNC
#define DUK_ENUM_OWN_PROPERTIES_ONLY
#define DUK_ERR_SYNTAX_ERROR
#define DUK_INVALID_INDEX
#define DUK_TYPE_MASK_POINTER
#define duk_is_callable(ctx, index)
#define DUK_TYPE_MASK_UNDEFINED
DUK_LOCAL_DECL void duk__emit_stridx(duk_json_enc_ctx *js_ctx, duk_small_uint_t stridx)
DUK_LOCAL_DECL void duk__dec_number(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__emit_2(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch1, duk_uint_fast8_t ch2)
DUK_LOCAL void duk__emit_cstring(duk_json_enc_ctx *js_ctx, const char *str)
DUK_LOCAL const duk_uint8_t duk__json_decstr_lookup[256]
DUK_LOCAL_DECL duk_uint8_t duk__dec_get_nonwhite(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL duk_uint8_t duk__dec_get(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__dec_reviver_walk(duk_json_dec_ctx *js_ctx)
DUK_INTERNAL duk_ret_t duk_bi_json_object_parse(duk_context *ctx)
DUK_LOCAL void duk__enc_buffer_data(duk_json_enc_ctx *js_ctx, duk_uint8_t *buf_data, duk_size_t buf_len)
#define DUK__EMIT_2(js_ctx, ch1, ch2)
DUK_LOCAL_DECL duk_uint8_t duk__dec_peek(duk_json_dec_ctx *js_ctx)
#define DUK__JSON_DECSTR_CHUNKSIZE
#define DUK__EMIT_CSTR(js_ctx, p)
DUK_LOCAL_DECL void duk__enc_quote_string(duk_json_enc_ctx *js_ctx, duk_hstring *h_str)
DUK_LOCAL_DECL void duk__dec_syntax_error(duk_json_dec_ctx *js_ctx)
#define DUK__JSON_DECSTR_BUFSIZE
DUK_LOCAL_DECL void duk__enc_objarr_entry(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_top)
DUK_LOCAL duk_small_int_t duk__dec_string_escape(duk_json_dec_ctx *js_ctx, duk_uint8_t **ext_p)
#define DUK__JSON_STRINGIFY_BUFSIZE
DUK_LOCAL_DECL duk_uint_fast32_t duk__dec_decode_hex_escape(duk_json_dec_ctx *js_ctx, duk_small_uint_t n)
DUK_LOCAL const duk_uint8_t duk__json_eatwhite_lookup[256]
#define DUK__EMIT_STRIDX(js_ctx, i)
DUK_LOCAL const duk_uint8_t duk__json_quotestr_lookup[256]
DUK_LOCAL_DECL void duk__dec_object(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__emit_hstring(duk_json_enc_ctx *js_ctx, duk_hstring *h)
DUK_LOCAL_DECL void duk__enc_newline_indent(duk_json_enc_ctx *js_ctx, duk_int_t depth)
#define DUK__JSON_ENCSTR_CHUNKSIZE
DUK_LOCAL_DECL void duk__enc_array(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_INTERNAL void duk_bi_json_stringify_helper(duk_context *ctx, duk_idx_t idx_value, duk_idx_t idx_replacer, duk_idx_t idx_space, duk_small_uint_t flags)
DUK_INTERNAL void duk_bi_json_parse_helper(duk_context *ctx, duk_idx_t idx_value, duk_idx_t idx_reviver, duk_small_uint_t flags)
DUK_LOCAL_DECL void duk__dec_eat_white(duk_json_dec_ctx *js_ctx)
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 void duk__emit_1(duk_json_enc_ctx *js_ctx, duk_uint_fast8_t ch)
DUK_LOCAL_DECL void duk__dec_plain_string(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__dec_pointer(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__enc_key_autoquote(duk_json_enc_ctx *js_ctx, duk_hstring *k)
DUK_LOCAL const duk_uint8_t duk__json_decnumber_lookup[256]
DUK_LOCAL_DECL void duk__unemit_1(duk_json_enc_ctx *js_ctx)
DUK_LOCAL_DECL void duk__dec_string(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__enc_objarr_exit(duk_json_enc_ctx *js_ctx, duk_idx_t *entry_top)
#define DUK__EMIT_HSTR(js_ctx, h)
DUK_LOCAL_DECL void duk__dec_objarr_exit(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__dec_array(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__enc_buffer(duk_json_enc_ctx *js_ctx, duk_hbuffer *h)
DUK_LOCAL_DECL void duk__dec_objarr_entry(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__enc_bufferobject(duk_json_enc_ctx *js_ctx, duk_hbufferobject *h_bufobj)
DUK_LOCAL_DECL duk_bool_t duk__enc_allow_into_proplist(duk_tval *tv)
DUK_LOCAL_DECL void duk__dec_buffer(duk_json_dec_ctx *js_ctx)
DUK_INTERNAL duk_ret_t duk_bi_json_object_stringify(duk_context *ctx)
DUK_LOCAL_DECL void duk__enc_pointer(duk_json_enc_ctx *js_ctx, void *ptr)
#define DUK__UNEMIT_1(js_ctx)
DUK_LOCAL_DECL void duk__dec_req_stridx(duk_json_dec_ctx *js_ctx, duk_small_uint_t stridx)
DUK_LOCAL duk_uint8_t * duk__enc_buffer_data_hex(const duk_uint8_t *src, duk_size_t src_len, duk_uint8_t *dst)
#define DUK__MKESC(nybbles, esc1, esc2)
#define DUK__EMIT_1(js_ctx, ch)
DUK_LOCAL_DECL void duk__dec_value(duk_json_dec_ctx *js_ctx)
DUK_LOCAL_DECL void duk__enc_double(duk_json_enc_ctx *js_ctx)
DUK_LOCAL_DECL void duk__enc_object(duk_json_enc_ctx *js_ctx)
CURL_EXTERN CURLMcode curl_socket_t s
duk_small_uint_t mark_and_sweep_base_flags
duk_small_uint_t flag_ext_custom
duk_small_uint_t flag_ext_compatible
duk_int_t recursion_depth
duk_int_t recursion_limit
duk_small_uint_t flag_ext_custom_or_compatible
const duk_uint8_t * p_start
const duk_uint8_t * p_end
duk_small_uint_t stridx_custom_function
duk_small_uint_t flag_avoid_key_quotes
duk_uint_t mask_for_undefined
duk_small_uint_t stridx_custom_undefined
duk_hobject * visiting[DUK_JSON_ENC_LOOPARRAY]
duk_small_uint_t flag_ext_custom_or_compatible
duk_int_t recursion_limit
duk_small_uint_t flag_ascii_only
duk_int_t recursion_depth
duk_small_uint_t flag_ext_custom
duk_small_uint_t stridx_custom_posinf
duk_small_uint_t stridx_custom_nan
duk_small_uint_t stridx_custom_neginf
duk_small_uint_t flag_ext_compatible