5#ifndef DUK_UTIL_H_INCLUDED
6#define DUK_UTIL_H_INCLUDED
8#define DUK_UTIL_MIN_HASH_PRIME 17
10#define DUK_UTIL_GET_HASH_PROBE_STEP(hash) (duk_util_probe_steps[(hash) & 0x1f])
16#if defined(DUK_USE_INTEGER_LE)
17#define DUK_HTON32(x) DUK_BSWAP32((x))
18#define DUK_NTOH32(x) DUK_BSWAP32((x))
19#define DUK_HTON16(x) DUK_BSWAP16((x))
20#define DUK_NTOH16(x) DUK_BSWAP16((x))
21#elif defined(DUK_USE_INTEGER_BE)
22#define DUK_HTON32(x) (x)
23#define DUK_NTOH32(x) (x)
24#define DUK_HTON16(x) (x)
25#define DUK_NTOH16(x) (x)
27#error internal error, endianness defines broken
35 const duk_uint8_t *
data;
62#define DUK_RAW_WRITE_U8(ptr,val) do { \
63 *(ptr)++ = (duk_uint8_t) (val); \
65#define DUK_RAW_WRITE_U16_BE(ptr,val) duk_raw_write_u16_be(&(ptr), (duk_uint16_t) (val))
66#define DUK_RAW_WRITE_U32_BE(ptr,val) duk_raw_write_u32_be(&(ptr), (duk_uint32_t) (val))
67#define DUK_RAW_WRITE_DOUBLE_BE(ptr,val) duk_raw_write_double_be(&(ptr), (duk_double_t) (val))
68#define DUK_RAW_WRITE_XUTF8(ptr,val) do { \
70 duk_uint8_t *duk__ptr; \
71 duk_small_int_t duk__len; \
72 duk__ptr = (duk_uint8_t *) (ptr); \
73 duk__len = duk_unicode_encode_xutf8((duk_ucodepoint_t) (val), duk__ptr); \
74 duk__ptr += duk__len; \
77#define DUK_RAW_WRITE_CESU8(ptr,val) do { \
79 duk_uint8_t *duk__ptr; \
80 duk_small_int_t duk__len; \
81 duk__ptr = (duk_uint8_t *) (ptr); \
82 duk__len = duk_unicode_encode_cesu8((duk_ucodepoint_t) (val), duk__ptr); \
83 duk__ptr += duk__len; \
87#define DUK_RAW_READ_U8(ptr) ((duk_uint8_t) (*(ptr)++))
88#define DUK_RAW_READ_U16_BE(ptr) duk_raw_read_u16_be(&(ptr));
89#define DUK_RAW_READ_U32_BE(ptr) duk_raw_read_u32_be(&(ptr));
90#define DUK_RAW_READ_DOUBLE_BE(ptr) duk_raw_read_double_be(&(ptr));
124#define DUK_BW_SPARE_ADD 64
125#define DUK_BW_SPARE_SHIFT 4
129#define DUK_BW_INIT_PUSHBUF(thr,bw_ctx,sz) do { \
130 duk_bw_init_pushbuf((thr), (bw_ctx), (sz)); \
132#define DUK_BW_INIT_WITHBUF(thr,bw_ctx,buf) do { \
133 duk_bw_init((thr), (bw_ctx), (buf)); \
135#define DUK_BW_COMPACT(thr,bw_ctx) do { \
137 duk_bw_compact((thr), (bw_ctx)); \
139#define DUK_BW_PUSH_AS_STRING(thr,bw_ctx) do { \
140 duk_push_lstring((duk_context *) (thr), \
141 (const char *) (bw_ctx)->p_base, \
142 (duk_size_t) ((bw_ctx)->p - (bw_ctx)->p_base)); \
149#define DUK_BW_ASSERT_VALID_EXPR(thr,bw_ctx) \
150 DUK_ASSERT_EXPR((bw_ctx) != NULL && \
151 (bw_ctx)->buf != NULL && \
152 ((DUK_HBUFFER_DYNAMIC_GET_SIZE((bw_ctx)->buf) == 0) || \
153 ((bw_ctx)->p != NULL && \
154 (bw_ctx)->p_base != NULL && \
155 (bw_ctx)->p_limit != NULL && \
156 (bw_ctx)->p_limit >= (bw_ctx)->p_base && \
157 (bw_ctx)->p >= (bw_ctx)->p_base && \
158 (bw_ctx)->p <= (bw_ctx)->p_limit)))
159#define DUK_BW_ASSERT_VALID(thr,bw_ctx) do { \
160 DUK_BW_ASSERT_VALID_EXPR((thr), (bw_ctx)); \
165#define DUK_BW_GET_PTR(thr,bw_ctx) \
167#define DUK_BW_SET_PTR(thr,bw_ctx,ptr) do { \
168 (bw_ctx)->p = (ptr); \
170#define DUK_BW_ADD_PTR(thr,bw_ctx,delta) do { \
171 (bw_ctx)->p += (delta); \
173#define DUK_BW_GET_BASEPTR(thr,bw_ctx) \
175#define DUK_BW_GET_LIMITPTR(thr,bw_ctx) \
177#define DUK_BW_GET_SIZE(thr,bw_ctx) \
178 ((duk_size_t) ((bw_ctx)->p - (bw_ctx)->p_base))
179#define DUK_BW_SET_SIZE(thr,bw_ctx,sz) do { \
180 DUK_ASSERT((duk_size_t) (sz) <= (duk_size_t) ((bw_ctx)->p - (bw_ctx)->p_base)); \
181 (bw_ctx)->p = (bw_ctx)->p_base + (sz); \
183#define DUK_BW_RESET_SIZE(thr,bw_ctx) do { \
185 (bw_ctx)->p = (bw_ctx)->p_base; \
187#define DUK_BW_GET_BUFFER(thr,bw_ctx) \
192#define DUK_BW_ENSURE(thr,bw_ctx,sz) do { \
193 duk_size_t duk__sz, duk__space; \
194 DUK_BW_ASSERT_VALID((thr), (bw_ctx)); \
196 duk__space = (duk_size_t) ((bw_ctx)->p_limit - (bw_ctx)->p); \
197 if (duk__space < duk__sz) { \
198 (void) duk_bw_resize((thr), (bw_ctx), duk__sz); \
203#define DUK_BW_ENSURE_RAW(thr,bw_ctx,sz,ptr) \
204 (((duk_size_t) ((bw_ctx)->p_limit - (ptr)) >= (sz)) ? \
206 ((bw_ctx)->p = (ptr), duk_bw_resize((thr),(bw_ctx),(sz))))
207#define DUK_BW_ENSURE_GETPTR(thr,bw_ctx,sz) \
208 DUK_BW_ENSURE_RAW((thr), (bw_ctx), (sz), (bw_ctx)->p)
209#define DUK_BW_ASSERT_SPACE_EXPR(thr,bw_ctx,sz) \
210 (DUK_BW_ASSERT_VALID_EXPR((thr), (bw_ctx)), \
211 DUK_ASSERT_EXPR((duk_size_t) ((bw_ctx)->p_limit - (bw_ctx)->p) >= (duk_size_t) (sz)))
212#define DUK_BW_ASSERT_SPACE(thr,bw_ctx,sz) do { \
213 DUK_BW_ASSERT_SPACE_EXPR((thr), (bw_ctx), (sz)); \
218#define DUK_BW_SETPTR_AND_COMPACT(thr,bw_ctx,ptr) do { \
219 (bw_ctx)->p = (ptr); \
220 duk_bw_compact((thr), (bw_ctx)); \
229#define DUK_BW_WRITE_RAW_U8(thr,bw_ctx,val) do { \
230 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), 1); \
231 *(bw_ctx)->p++ = (duk_uint8_t) (val); \
233#define DUK_BW_WRITE_RAW_U8_2(thr,bw_ctx,val1,val2) do { \
234 duk_uint8_t *duk__p; \
235 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), 2); \
236 duk__p = (bw_ctx)->p; \
237 *duk__p++ = (duk_uint8_t) (val1); \
238 *duk__p++ = (duk_uint8_t) (val2); \
239 (bw_ctx)->p = duk__p; \
241#define DUK_BW_WRITE_RAW_U8_3(thr,bw_ctx,val1,val2,val3) do { \
242 duk_uint8_t *duk__p; \
243 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), 3); \
244 duk__p = (bw_ctx)->p; \
245 *duk__p++ = (duk_uint8_t) (val1); \
246 *duk__p++ = (duk_uint8_t) (val2); \
247 *duk__p++ = (duk_uint8_t) (val3); \
248 (bw_ctx)->p = duk__p; \
250#define DUK_BW_WRITE_RAW_U8_4(thr,bw_ctx,val1,val2,val3,val4) do { \
251 duk_uint8_t *duk__p; \
252 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), 4); \
253 duk__p = (bw_ctx)->p; \
254 *duk__p++ = (duk_uint8_t) (val1); \
255 *duk__p++ = (duk_uint8_t) (val2); \
256 *duk__p++ = (duk_uint8_t) (val3); \
257 *duk__p++ = (duk_uint8_t) (val4); \
258 (bw_ctx)->p = duk__p; \
260#define DUK_BW_WRITE_RAW_U8_5(thr,bw_ctx,val1,val2,val3,val4,val5) do { \
261 duk_uint8_t *duk__p; \
262 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), 5); \
263 duk__p = (bw_ctx)->p; \
264 *duk__p++ = (duk_uint8_t) (val1); \
265 *duk__p++ = (duk_uint8_t) (val2); \
266 *duk__p++ = (duk_uint8_t) (val3); \
267 *duk__p++ = (duk_uint8_t) (val4); \
268 *duk__p++ = (duk_uint8_t) (val5); \
269 (bw_ctx)->p = duk__p; \
271#define DUK_BW_WRITE_RAW_U8_6(thr,bw_ctx,val1,val2,val3,val4,val5,val6) do { \
272 duk_uint8_t *duk__p; \
273 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), 6); \
274 duk__p = (bw_ctx)->p; \
275 *duk__p++ = (duk_uint8_t) (val1); \
276 *duk__p++ = (duk_uint8_t) (val2); \
277 *duk__p++ = (duk_uint8_t) (val3); \
278 *duk__p++ = (duk_uint8_t) (val4); \
279 *duk__p++ = (duk_uint8_t) (val5); \
280 *duk__p++ = (duk_uint8_t) (val6); \
281 (bw_ctx)->p = duk__p; \
283#define DUK_BW_WRITE_RAW_XUTF8(thr,bw_ctx,cp) do { \
284 duk_ucodepoint_t duk__cp; \
285 duk_small_int_t duk__enc_len; \
287 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), duk_unicode_get_xutf8_length(duk__cp)); \
288 duk__enc_len = duk_unicode_encode_xutf8(duk__cp, (bw_ctx)->p); \
289 (bw_ctx)->p += duk__enc_len; \
291#define DUK_BW_WRITE_RAW_CESU8(thr,bw_ctx,cp) do { \
292 duk_ucodepoint_t duk__cp; \
293 duk_small_int_t duk__enc_len; \
294 duk__cp = (duk_ucodepoint_t) (cp); \
295 DUK_BW_ASSERT_SPACE((thr), (bw_ctx), duk_unicode_get_cesu8_length(duk__cp)); \
296 duk__enc_len = duk_unicode_encode_cesu8(duk__cp, (bw_ctx)->p); \
297 (bw_ctx)->p += duk__enc_len; \
300#define DUK_BW_WRITE_RAW_BYTES(thr,bw_ctx,valptr,valsz) do { \
301 const void *duk__valptr; \
302 duk_size_t duk__valsz; \
303 duk__valptr = (const void *) (valptr); \
304 duk__valsz = (duk_size_t) (valsz); \
305 DUK_MEMCPY((void *) ((bw_ctx)->p), duk__valptr, duk__valsz); \
306 (bw_ctx)->p += duk__valsz; \
308#define DUK_BW_WRITE_RAW_CSTRING(thr,bw_ctx,val) do { \
309 const duk_uint8_t *duk__val; \
310 duk_size_t duk__val_len; \
311 duk__val = (const duk_uint8_t *) (val); \
312 duk__val_len = DUK_STRLEN((const char *) duk__val); \
313 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) duk__val, duk__val_len); \
314 (bw_ctx)->p += duk__val_len; \
316#define DUK_BW_WRITE_RAW_HSTRING(thr,bw_ctx,val) do { \
317 duk_size_t duk__val_len; \
318 duk__val_len = DUK_HSTRING_GET_BYTELEN((val)); \
319 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HSTRING_GET_DATA((val)), duk__val_len); \
320 (bw_ctx)->p += duk__val_len; \
322#define DUK_BW_WRITE_RAW_HBUFFER(thr,bw_ctx,val) do { \
323 duk_size_t duk__val_len; \
324 duk__val_len = DUK_HBUFFER_GET_SIZE((val)); \
325 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HBUFFER_GET_DATA_PTR((thr)->heap, (val)), duk__val_len); \
326 (bw_ctx)->p += duk__val_len; \
328#define DUK_BW_WRITE_RAW_HBUFFER_FIXED(thr,bw_ctx,val) do { \
329 duk_size_t duk__val_len; \
330 duk__val_len = DUK_HBUFFER_FIXED_GET_SIZE((val)); \
331 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HBUFFER_FIXED_GET_DATA_PTR((thr)->heap, (val)), duk__val_len); \
332 (bw_ctx)->p += duk__val_len; \
334#define DUK_BW_WRITE_RAW_HBUFFER_DYNAMIC(thr,bw_ctx,val) do { \
335 duk_size_t duk__val_len; \
336 duk__val_len = DUK_HBUFFER_DYNAMIC_GET_SIZE((val)); \
337 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HBUFFER_DYNAMIC_GET_DATA_PTR((thr)->heap, (val)), duk__val_len); \
338 (bw_ctx)->p += duk__val_len; \
342#define DUK_BW_WRITE_RAW_SLICE(thr,bw,dst_off,dst_len) \
343 duk_bw_write_raw_slice((thr), (bw), (dst_off), (dst_len))
346#define DUK_BW_INSERT_RAW_BYTES(thr,bw,dst_off,buf,len) \
347 duk_bw_insert_raw_bytes((thr), (bw), (dst_off), (buf), (len))
352#define DUK_BW_INSERT_RAW_SLICE(thr,bw,dst_off,src_off,len) \
353 duk_bw_insert_raw_slice((thr), (bw), (dst_off), (src_off), (len))
359#define DUK_BW_INSERT_RAW_AREA(thr,bw,off,len) \
360 duk_bw_insert_raw_area((thr), (bw), (off), (len))
363#define DUK_BW_REMOVE_RAW_SLICE(thr,bw,off,len) \
364 duk_bw_remove_raw_slice((thr), (bw), (off), (len))
368#define DUK_BW_WRITE_ENSURE_U8(thr,bw_ctx,val) do { \
369 DUK_BW_ENSURE((thr), (bw_ctx), 1); \
370 DUK_BW_WRITE_RAW_U8((thr), (bw_ctx), (val)); \
372#define DUK_BW_WRITE_ENSURE_U8_2(thr,bw_ctx,val1,val2) do { \
373 DUK_BW_ENSURE((thr), (bw_ctx), 2); \
374 DUK_BW_WRITE_RAW_U8_2((thr), (bw_ctx), (val1), (val2)); \
376#define DUK_BW_WRITE_ENSURE_U8_3(thr,bw_ctx,val1,val2,val3) do { \
377 DUK_BW_ENSURE((thr), (bw_ctx), 3); \
378 DUK_BW_WRITE_RAW_U8_3((thr), (bw_ctx), (val1), (val2), (val3)); \
380#define DUK_BW_WRITE_ENSURE_U8_4(thr,bw_ctx,val1,val2,val3,val4) do { \
381 DUK_BW_ENSURE((thr), (bw_ctx), 4); \
382 DUK_BW_WRITE_RAW_U8_4((thr), (bw_ctx), (val1), (val2), (val3), (val4)); \
384#define DUK_BW_WRITE_ENSURE_U8_5(thr,bw_ctx,val1,val2,val3,val4,val5) do { \
385 DUK_BW_ENSURE((thr), (bw_ctx), 5); \
386 DUK_BW_WRITE_RAW_U8_5((thr), (bw_ctx), (val1), (val2), (val3), (val4), (val5)); \
388#define DUK_BW_WRITE_ENSURE_U8_6(thr,bw_ctx,val1,val2,val3,val4,val5,val6) do { \
389 DUK_BW_ENSURE((thr), (bw_ctx), 6); \
390 DUK_BW_WRITE_RAW_U8_6((thr), (bw_ctx), (val1), (val2), (val3), (val4), (val5), (val6)); \
392#define DUK_BW_WRITE_ENSURE_XUTF8(thr,bw_ctx,cp) do { \
393 DUK_BW_ENSURE((thr), (bw_ctx), DUK_UNICODE_MAX_XUTF8_LENGTH); \
394 DUK_BW_WRITE_RAW_XUTF8((thr), (bw_ctx), (cp)); \
396#define DUK_BW_WRITE_ENSURE_CESU8(thr,bw_ctx,cp) do { \
397 DUK_BW_ENSURE((thr), (bw_ctx), DUK_UNICODE_MAX_CESU8_LENGTH); \
398 DUK_BW_WRITE_RAW_CESU8((thr), (bw_ctx), (cp)); \
401#define DUK_BW_WRITE_ENSURE_BYTES(thr,bw_ctx,valptr,valsz) do { \
402 const void *duk__valptr; \
403 duk_size_t duk__valsz; \
404 duk__valptr = (const void *) (valptr); \
405 duk__valsz = (duk_size_t) (valsz); \
406 DUK_BW_ENSURE((thr), (bw_ctx), duk__valsz); \
407 DUK_MEMCPY((void *) ((bw_ctx)->p), duk__valptr, duk__valsz); \
408 (bw_ctx)->p += duk__valsz; \
410#define DUK_BW_WRITE_ENSURE_CSTRING(thr,bw_ctx,val) do { \
411 const duk_uint8_t *duk__val; \
412 duk_size_t duk__val_len; \
413 duk__val = (const duk_uint8_t *) (val); \
414 duk__val_len = DUK_STRLEN((const char *) duk__val); \
415 DUK_BW_ENSURE((thr), (bw_ctx), duk__val_len); \
416 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) duk__val, duk__val_len); \
417 (bw_ctx)->p += duk__val_len; \
419#define DUK_BW_WRITE_ENSURE_HSTRING(thr,bw_ctx,val) do { \
420 duk_size_t duk__val_len; \
421 duk__val_len = DUK_HSTRING_GET_BYTELEN((val)); \
422 DUK_BW_ENSURE((thr), (bw_ctx), duk__val_len); \
423 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HSTRING_GET_DATA((val)), duk__val_len); \
424 (bw_ctx)->p += duk__val_len; \
426#define DUK_BW_WRITE_ENSURE_HBUFFER(thr,bw_ctx,val) do { \
427 duk_size_t duk__val_len; \
428 duk__val_len = DUK_HBUFFER_GET_SIZE((val)); \
429 DUK_BW_ENSURE((thr), (bw_ctx), duk__val_len); \
430 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HBUFFER_GET_DATA_PTR((thr)->heap, (val)), duk__val_len); \
431 (bw_ctx)->p += duk__val_len; \
433#define DUK_BW_WRITE_ENSURE_HBUFFER_FIXED(thr,bw_ctx,val) do { \
434 duk_size_t duk__val_len; \
435 duk__val_len = DUK_HBUFFER_FIXED_GET_SIZE((val)); \
436 DUK_BW_ENSURE((thr), (bw_ctx), duk__val_len); \
437 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HBUFFER_FIXED_GET_DATA_PTR((thr)->heap, (val)), duk__val_len); \
438 (bw_ctx)->p += duk__val_len; \
440#define DUK_BW_WRITE_ENSURE_HBUFFER_DYNAMIC(thr,bw_ctx,val) do { \
441 duk_size_t duk__val_len; \
442 duk__val_len = DUK_HBUFFER_DYNAMIC_GET_SIZE((val)); \
443 DUK_BW_ENSURE((thr), (bw_ctx), duk__val_len); \
444 DUK_MEMCPY((void *) ((bw_ctx)->p), (const void *) DUK_HBUFFER_DYNAMIC_GET_DATA_PTR((thr)->heap, (val)), duk__val_len); \
445 (bw_ctx)->p += duk__val_len; \
448#define DUK_BW_WRITE_ENSURE_SLICE(thr,bw,dst_off,dst_len) \
449 duk_bw_write_ensure_slice((thr), (bw), (dst_off), (dst_len))
450#define DUK_BW_INSERT_ENSURE_BYTES(thr,bw,dst_off,buf,len) \
451 duk_bw_insert_ensure_bytes((thr), (bw), (dst_off), (buf), (len))
452#define DUK_BW_INSERT_ENSURE_SLICE(thr,bw,dst_off,src_off,len) \
453 duk_bw_insert_ensure_slice((thr), (bw), (dst_off), (src_off), (len))
454#define DUK_BW_INSERT_ENSURE_AREA(thr,bw,off,len) \
456 duk_bw_insert_ensure_area((thr), (bw), (off), (len))
457#define DUK_BW_REMOVE_ENSURE_SLICE(thr,bw,off,len) \
459 DUK_BW_REMOVE_RAW_SLICE((thr), (bw), (off), (len))
465#if !defined(DUK_SINGLE_FILE)
469#if defined(DUK_USE_HEX_FASTPATH)
473#if defined(DUK_USE_BASE64_FASTPATH)
480#if defined(DUK_USE_HOBJECT_HASH_PART) || defined(DUK_USE_STRTAB_PROBE)
481#if !defined(DUK_SINGLE_FILE)
486#if defined(DUK_USE_STRHASH_DENSE)
490#if defined(DUK_USE_HOBJECT_HASH_PART) || defined(DUK_USE_STRTAB_PROBE)
526#if defined(DUK_USE_DEBUGGER_SUPPORT)
unsigned int duk_small_uint_t
#define DUK_INTERNAL_DECL
DUK_INTERNAL const duk_uint8_t duk_base64_enctab[64]
DUK_INTERNAL const duk_int16_t duk_hex_dectab_shift4[256]
DUK_INTERNAL duk_uint8_t duk_util_probe_steps[32]
DUK_INTERNAL const duk_uint16_t duk_hex_enctab[256]
DUK_INTERNAL_DECL duk_uint32_t duk_util_get_hash_prime(duk_uint32_t size)
DUK_INTERNAL const duk_int8_t duk_base64_dectab[256]
DUK_INTERNAL_DECL void duk_raw_write_u16_be(duk_uint8_t **p, duk_uint16_t val)
DUK_INTERNAL_DECL void duk_bw_insert_raw_bytes(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t dst_off, const duk_uint8_t *buf, duk_size_t len)
DUK_INTERNAL_DECL duk_double_t duk_raw_read_double_be(duk_uint8_t **p)
DUK_INTERNAL_DECL void duk_bw_write_raw_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t src_off, duk_size_t len)
DUK_INTERNAL_DECL const duk_int8_t duk_hex_dectab[256]
DUK_INTERNAL_DECL duk_int32_t duk_bd_decode_flagged(duk_bitdecoder_ctx *ctx, duk_small_int_t bits, duk_int32_t def_value)
DUK_INTERNAL_DECL duk_uint8_t * duk_bw_insert_ensure_area(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t off, duk_size_t len)
DUK_INTERNAL_DECL void duk_bw_init(duk_hthread *thr, duk_bufwriter_ctx *bw_ctx, duk_hbuffer_dynamic *h_buf)
DUK_INTERNAL_DECL void duk_bw_insert_ensure_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t dst_off, duk_size_t src_off, duk_size_t len)
DUK_INTERNAL_DECL void duk_be_finish(duk_bitencoder_ctx *ctx)
DUK_INTERNAL_DECL void duk_bw_write_ensure_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t src_off, duk_size_t len)
DUK_INTERNAL_DECL duk_uint32_t duk_util_tinyrandom_get_bits(duk_hthread *thr, duk_small_int_t n)
DUK_INTERNAL_DECL const duk_uint8_t duk_uc_nybbles[16]
DUK_INTERNAL_DECL duk_uint8_t * duk_bw_resize(duk_hthread *thr, duk_bufwriter_ctx *bw_ctx, duk_size_t sz)
DUK_INTERNAL_DECL void duk_raw_write_u32_be(duk_uint8_t **p, duk_uint32_t val)
DUK_INTERNAL_DECL void duk_bw_insert_ensure_bytes(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t dst_off, const duk_uint8_t *buf, duk_size_t len)
DUK_INTERNAL_DECL duk_uint8_t * duk_bw_insert_raw_area(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t off, duk_size_t len)
DUK_INTERNAL_DECL void duk_bw_remove_raw_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t off, duk_size_t len)
DUK_INTERNAL_DECL void duk_bw_init_pushbuf(duk_hthread *thr, duk_bufwriter_ctx *bw_ctx, duk_size_t buf_size)
DUK_INTERNAL_DECL const duk_uint8_t duk_lc_digits[36]
DUK_INTERNAL_DECL void duk_raw_write_double_be(duk_uint8_t **p, duk_double_t val)
DUK_INTERNAL_DECL void duk_bw_insert_raw_slice(duk_hthread *thr, duk_bufwriter_ctx *bw, duk_size_t dst_off, duk_size_t src_off, duk_size_t len)
DUK_INTERNAL_DECL void duk_bw_compact(duk_hthread *thr, duk_bufwriter_ctx *bw_ctx)
DUK_INTERNAL_DECL duk_small_int_t duk_bd_decode_flag(duk_bitdecoder_ctx *ctx)
DUK_INTERNAL_DECL duk_double_t duk_util_tinyrandom_get_double(duk_hthread *thr)
DUK_INTERNAL_DECL duk_int32_t duk_bd_decode(duk_bitdecoder_ctx *ctx, duk_small_int_t bits)
DUK_INTERNAL_DECL void duk_be_encode(duk_bitencoder_ctx *ctx, duk_uint32_t data, duk_small_int_t bits)
DUK_INTERNAL_DECL duk_uint32_t duk_raw_read_u32_be(duk_uint8_t **p)
DUK_INTERNAL_DECL duk_uint16_t duk_raw_read_u16_be(duk_uint8_t **p)
duk_small_int_t truncated
duk_hbuffer_dynamic * buf