duktape 1.3.0.6 → 1.6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,13 @@
1
1
  /*
2
- * Duktape public API for Duktape 1.3.0.
2
+ * Duktape public API for Duktape 1.6.1.
3
+ *
3
4
  * See the API reference for documentation on call semantics.
4
5
  * The exposed API is inside the DUK_API_PUBLIC_H_INCLUDED
5
6
  * include guard. Other parts of the header are Duktape
6
7
  * internal and related to platform/compiler/feature detection.
7
8
  *
8
- * Git commit 675165f35ea3a5bac34ff4d0a58b007cc2f442dc (v1.3.0).
9
+ * Git commit 34ac011501ccaa8b74684a6c45ed4eaca9e83517 (v1.6.1).
10
+ * Git branch v1.6-maintenance.
9
11
  *
10
12
  * See Duktape AUTHORS.rst and LICENSE.txt for copyright and
11
13
  * licensing information.
@@ -19,7 +21,7 @@
19
21
  *
20
22
  * (http://opensource.org/licenses/MIT)
21
23
  *
22
- * Copyright (c) 2013-2015 by Duktape authors (see AUTHORS.rst)
24
+ * Copyright (c) 2013-2016 by Duktape authors (see AUTHORS.rst)
23
25
  *
24
26
  * Permission is hereby granted, free of charge, to any person obtaining a copy
25
27
  * of this software and associated documentation files (the "Software"), to deal
@@ -70,6 +72,9 @@
70
72
  * * Legimet <legimet.calc@gmail.com>
71
73
  * * Karl Skomski <karl@skomski.com>
72
74
  * * Bruce Pascoe <fatcerberus1@gmail.com>
75
+ * * Ren\u00e9 Hollander <rene@rene8888.at>
76
+ * * Julien Hamaide (https://github.com/crazyjul)
77
+ * * Sebastian G\u00f6tte (https://github.com/jaseg)
73
78
  *
74
79
  * Other contributions
75
80
  * ===================
@@ -106,6 +111,8 @@
106
111
  * * https://github.com/sstruchtrup
107
112
  * * Michael Drake (https://github.com/tlsa)
108
113
  * * https://github.com/chris-y
114
+ * * Laurent Zubiaur (https://github.com/lzubiaur)
115
+ * * Ole Andr\u00e9 Vadla Ravn\u00e5s (https://github.com/oleavr)
109
116
  *
110
117
  * If you are accidentally missing from this list, send me an e-mail
111
118
  * (``sami.vaarala@iki.fi``) and I'll fix the omission.
@@ -156,6 +163,7 @@ extern "C" {
156
163
  * in Duktape web documentation.
157
164
  */
158
165
 
166
+ struct duk_thread_state;
159
167
  struct duk_memory_functions;
160
168
  struct duk_function_list_entry;
161
169
  struct duk_number_list_entry;
@@ -163,6 +171,7 @@ struct duk_number_list_entry;
163
171
  /* duk_context is now defined in duk_config.h because it may also be
164
172
  * referenced there by prototypes.
165
173
  */
174
+ typedef struct duk_thread_state duk_thread_state;
166
175
  typedef struct duk_memory_functions duk_memory_functions;
167
176
  typedef struct duk_function_list_entry duk_function_list_entry;
168
177
  typedef struct duk_number_list_entry duk_number_list_entry;
@@ -180,8 +189,17 @@ typedef duk_size_t (*duk_debug_write_function) (void *udata, const char *buffer,
180
189
  typedef duk_size_t (*duk_debug_peek_function) (void *udata);
181
190
  typedef void (*duk_debug_read_flush_function) (void *udata);
182
191
  typedef void (*duk_debug_write_flush_function) (void *udata);
192
+ typedef duk_idx_t (*duk_debug_request_function) (duk_context *ctx, void *udata, duk_idx_t nvalues);
183
193
  typedef void (*duk_debug_detached_function) (void *udata);
184
194
 
195
+ struct duk_thread_state {
196
+ /* XXX: Enough space to hold internal suspend/resume structure.
197
+ * This is rather awkward and to be fixed when the internal
198
+ * structure is visible for the public API header.
199
+ */
200
+ char data[128];
201
+ };
202
+
185
203
  struct duk_memory_functions {
186
204
  duk_alloc_function alloc_func;
187
205
  duk_realloc_function realloc_func;
@@ -210,13 +228,16 @@ struct duk_number_list_entry {
210
228
  * have 99 for patch level (e.g. 0.10.99 would be a development version
211
229
  * after 0.10.0 but before the next official release).
212
230
  */
213
- #define DUK_VERSION 10300L
231
+ #define DUK_VERSION 10601L
214
232
 
215
- /* Git describe for Duktape build. Useful for non-official snapshot builds
216
- * so that application code can easily log which Duktape snapshot was used.
217
- * Not available in the Ecmascript environment.
233
+ /* Git commit, describe, and branch for Duktape build. Useful for
234
+ * non-official snapshot builds so that application code can easily log
235
+ * which Duktape snapshot was used. Not available in the Ecmascript
236
+ * environment.
218
237
  */
219
- #define DUK_GIT_DESCRIBE "v1.3.0"
238
+ #define DUK_GIT_COMMIT "34ac011501ccaa8b74684a6c45ed4eaca9e83517"
239
+ #define DUK_GIT_DESCRIBE "v1.6.1"
240
+ #define DUK_GIT_BRANCH "v1.6-maintenance"
220
241
 
221
242
  /* Duktape debug protocol version used by this build. */
222
243
  #define DUK_DEBUG_PROTOCOL_VERSION 1
@@ -238,6 +259,7 @@ struct duk_number_list_entry {
238
259
  #define DUK_API_ENTRY_STACK 64
239
260
 
240
261
  /* Value types, used by e.g. duk_get_type() */
262
+ #define DUK_TYPE_MIN 0
241
263
  #define DUK_TYPE_NONE 0 /* no value, e.g. invalid index */
242
264
  #define DUK_TYPE_UNDEFINED 1 /* Ecmascript undefined */
243
265
  #define DUK_TYPE_NULL 2 /* Ecmascript null */
@@ -248,6 +270,7 @@ struct duk_number_list_entry {
248
270
  #define DUK_TYPE_BUFFER 7 /* fixed or dynamic, garbage collected byte buffer */
249
271
  #define DUK_TYPE_POINTER 8 /* raw void pointer */
250
272
  #define DUK_TYPE_LIGHTFUNC 9 /* lightweight function pointer */
273
+ #define DUK_TYPE_MAX 9
251
274
 
252
275
  /* Value mask types, used by e.g. duk_get_type_mask() */
253
276
  #define DUK_TYPE_MASK_NONE (1 << DUK_TYPE_NONE)
@@ -278,13 +301,18 @@ struct duk_number_list_entry {
278
301
  #define DUK_ENUM_NO_PROXY_BEHAVIOR (1 << 5) /* enumerate a proxy object itself without invoking proxy behavior */
279
302
 
280
303
  /* Compilation flags for duk_compile() and duk_eval() */
281
- #define DUK_COMPILE_EVAL (1 << 0) /* compile eval code (instead of global code) */
282
- #define DUK_COMPILE_FUNCTION (1 << 1) /* compile function code (instead of global code) */
283
- #define DUK_COMPILE_STRICT (1 << 2) /* use strict (outer) context for global, eval, or function code */
284
- #define DUK_COMPILE_SAFE (1 << 3) /* (internal) catch compilation errors */
285
- #define DUK_COMPILE_NORESULT (1 << 4) /* (internal) omit eval result */
286
- #define DUK_COMPILE_NOSOURCE (1 << 5) /* (internal) no source string on stack */
287
- #define DUK_COMPILE_STRLEN (1 << 6) /* (internal) take strlen() of src_buffer (avoids double evaluation in macro) */
304
+ /* DUK_COMPILE_xxx bits 0-2 are reserved for an internal 'nargs' argument
305
+ * (the nargs value passed is direct stack arguments + 1 to account for an
306
+ * internal extra argument).
307
+ */
308
+ #define DUK_COMPILE_EVAL (1 << 3) /* compile eval code (instead of global code) */
309
+ #define DUK_COMPILE_FUNCTION (1 << 4) /* compile function code (instead of global code) */
310
+ #define DUK_COMPILE_STRICT (1 << 5) /* use strict (outer) context for global, eval, or function code */
311
+ #define DUK_COMPILE_SAFE (1 << 6) /* (internal) catch compilation errors */
312
+ #define DUK_COMPILE_NORESULT (1 << 7) /* (internal) omit eval result */
313
+ #define DUK_COMPILE_NOSOURCE (1 << 8) /* (internal) no source string on stack */
314
+ #define DUK_COMPILE_STRLEN (1 << 9) /* (internal) take strlen() of src_buffer (avoids double evaluation in macro) */
315
+ #define DUK_COMPILE_NOFILENAME (1 << 10) /* (internal) no filename on stack */
288
316
 
289
317
  /* Flags for duk_def_prop() and its variants */
290
318
  #define DUK_DEFPROP_WRITABLE (1 << 0) /* set writable (effective if DUK_DEFPROP_HAVE_WRITABLE set) */
@@ -297,6 +325,12 @@ struct duk_number_list_entry {
297
325
  #define DUK_DEFPROP_HAVE_GETTER (1 << 7) /* set getter (given on value stack) */
298
326
  #define DUK_DEFPROP_HAVE_SETTER (1 << 8) /* set setter (given on value stack) */
299
327
  #define DUK_DEFPROP_FORCE (1 << 9) /* force change if possible, may still fail for e.g. virtual properties */
328
+ #define DUK_DEFPROP_SET_WRITABLE (DUK_DEFPROP_HAVE_WRITABLE | DUK_DEFPROP_WRITABLE)
329
+ #define DUK_DEFPROP_CLEAR_WRITABLE DUK_DEFPROP_HAVE_WRITABLE
330
+ #define DUK_DEFPROP_SET_ENUMERABLE (DUK_DEFPROP_HAVE_ENUMERABLE | DUK_DEFPROP_ENUMERABLE)
331
+ #define DUK_DEFPROP_CLEAR_ENUMERABLE DUK_DEFPROP_HAVE_ENUMERABLE
332
+ #define DUK_DEFPROP_SET_CONFIGURABLE (DUK_DEFPROP_HAVE_CONFIGURABLE | DUK_DEFPROP_CONFIGURABLE)
333
+ #define DUK_DEFPROP_CLEAR_CONFIGURABLE DUK_DEFPROP_HAVE_CONFIGURABLE
300
334
 
301
335
  /* Flags for duk_push_thread_raw() */
302
336
  #define DUK_THREAD_NEW_GLOBAL_ENV (1 << 0) /* create a new global environment */
@@ -304,15 +338,15 @@ struct duk_number_list_entry {
304
338
  /* Flags for duk_push_string_file_raw() */
305
339
  #define DUK_STRING_PUSH_SAFE (1 << 0) /* no error if file does not exist */
306
340
 
307
- /* Duktape specific error codes */
341
+ /* Duktape specific error codes (must be 8 bits at most, see duk_error.h) */
308
342
  #define DUK_ERR_NONE 0 /* no error (e.g. from duk_get_error_code()) */
309
- #define DUK_ERR_UNIMPLEMENTED_ERROR 50 /* UnimplementedError */
310
- #define DUK_ERR_UNSUPPORTED_ERROR 51 /* UnsupportedError */
311
- #define DUK_ERR_INTERNAL_ERROR 52 /* InternalError */
312
- #define DUK_ERR_ALLOC_ERROR 53 /* AllocError */
313
- #define DUK_ERR_ASSERTION_ERROR 54 /* AssertionError */
314
- #define DUK_ERR_API_ERROR 55 /* APIError */
315
- #define DUK_ERR_UNCAUGHT_ERROR 56 /* UncaughtError */
343
+ #define DUK_ERR_UNIMPLEMENTED_ERROR 50 /* UnimplementedError */ /* XXX: replace with TypeError? */
344
+ #define DUK_ERR_UNSUPPORTED_ERROR 51 /* UnsupportedError */ /* XXX: replace with TypeError? */
345
+ #define DUK_ERR_INTERNAL_ERROR 52 /* InternalError */ /* XXX: replace with plain Error? */
346
+ #define DUK_ERR_ALLOC_ERROR 53 /* AllocError */ /* XXX: replace with RangeError? */
347
+ #define DUK_ERR_ASSERTION_ERROR 54 /* AssertionError */ /* XXX: to be removed? */
348
+ #define DUK_ERR_API_ERROR 55 /* APIError */ /* XXX: replace with TypeError? */
349
+ #define DUK_ERR_UNCAUGHT_ERROR 56 /* UncaughtError */ /* XXX: to be removed? */
316
350
 
317
351
  /* Ecmascript E5 specification error codes */
318
352
  #define DUK_ERR_ERROR 100 /* Error */
@@ -339,7 +373,7 @@ struct duk_number_list_entry {
339
373
  #define DUK_RET_TYPE_ERROR (-DUK_ERR_TYPE_ERROR)
340
374
  #define DUK_RET_URI_ERROR (-DUK_ERR_URI_ERROR)
341
375
 
342
- /* Return codes for protected calls (duk_safe_call(), duk_pcall()). */
376
+ /* Return codes for protected calls (duk_safe_call(), duk_pcall()) */
343
377
  #define DUK_EXEC_SUCCESS 0
344
378
  #define DUK_EXEC_ERROR 1
345
379
 
@@ -373,6 +407,9 @@ duk_context *duk_create_heap(duk_alloc_function alloc_func,
373
407
  duk_fatal_function fatal_handler);
374
408
  DUK_EXTERNAL_DECL void duk_destroy_heap(duk_context *ctx);
375
409
 
410
+ DUK_EXTERNAL_DECL void duk_suspend(duk_context *ctx, duk_thread_state *state);
411
+ DUK_EXTERNAL_DECL void duk_resume(duk_context *ctx, const duk_thread_state *state);
412
+
376
413
  #define duk_create_heap_default() \
377
414
  duk_create_heap(NULL, NULL, NULL, NULL, NULL)
378
415
 
@@ -402,7 +439,7 @@ DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_error_raw(duk_context *ctx, duk_errc
402
439
 
403
440
  #ifdef DUK_API_VARIADIC_MACROS
404
441
  #define duk_error(ctx,err_code,...) \
405
- duk_error_raw((ctx), (duk_errcode_t) (err_code), (const char *) (__FILE__), (duk_int_t) (__LINE__), __VA_ARGS__)
442
+ duk_error_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__)
406
443
  #else
407
444
  DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_error_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...));
408
445
  /* One problem with this macro is that expressions like the following fail
@@ -410,14 +447,14 @@ DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_error_stash(duk_context *ctx, duk_er
410
447
  * they make little sense anyway.
411
448
  */
412
449
  #define duk_error \
413
- (duk_api_global_filename = (const char *) (__FILE__), \
414
- duk_api_global_line = (duk_int_t) (__LINE__), \
450
+ (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
451
+ duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
415
452
  duk_error_stash) /* last value is func pointer, arguments follow in parens */
416
453
  #endif
417
454
 
418
455
  DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_error_va_raw(duk_context *ctx, duk_errcode_t err_code, const char *filename, duk_int_t line, const char *fmt, va_list ap));
419
456
  #define duk_error_va(ctx,err_code,fmt,ap) \
420
- duk_error_va_raw((ctx), (duk_errcode_t) (err_code), (const char *) (__FILE__), (duk_int_t) (__LINE__), (fmt), (ap))
457
+ duk_error_va_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap))
421
458
 
422
459
  /*
423
460
  * Other state related functions
@@ -523,19 +560,19 @@ DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_raw(duk_context *ctx, duk_errc
523
560
 
524
561
  #ifdef DUK_API_VARIADIC_MACROS
525
562
  #define duk_push_error_object(ctx,err_code,...) \
526
- duk_push_error_object_raw((ctx), (err_code), (const char *) (__FILE__), (duk_int_t) (__LINE__), __VA_ARGS__)
563
+ duk_push_error_object_raw((ctx), (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__)
527
564
  #else
528
565
  DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...);
529
566
  /* Note: parentheses are required so that the comma expression works in assignments. */
530
567
  #define duk_push_error_object \
531
- (duk_api_global_filename = (const char *) (__FILE__), \
532
- duk_api_global_line = (duk_int_t) (__LINE__), \
568
+ (duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
569
+ duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
533
570
  duk_push_error_object_stash) /* last value is func pointer, arguments follow in parens */
534
571
  #endif
535
572
 
536
573
  DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_va_raw(duk_context *ctx, duk_errcode_t err_code, const char *filename, duk_int_t line, const char *fmt, va_list ap);
537
574
  #define duk_push_error_object_va(ctx,err_code,fmt,ap) \
538
- duk_push_error_object_va_raw((ctx), (err_code), (const char *) (__FILE__), (duk_int_t) (__LINE__), (fmt), (ap))
575
+ duk_push_error_object_va_raw((ctx), (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap))
539
576
 
540
577
  #define DUK_BUF_FLAG_DYNAMIC (1 << 0) /* internal flag: dynamic buffer */
541
578
  #define DUK_BUF_FLAG_EXTERNAL (1 << 1) /* internal flag: external buffer */
@@ -544,7 +581,7 @@ DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_va_raw(duk_context *ctx, duk_e
544
581
  DUK_EXTERNAL_DECL void *duk_push_buffer_raw(duk_context *ctx, duk_size_t size, duk_small_uint_t flags);
545
582
 
546
583
  #define duk_push_buffer(ctx,size,dynamic) \
547
- duk_push_buffer_raw((ctx), (size), (dynamic) ? DUK_BUF_FLAG_DYNAMIC : 0);
584
+ duk_push_buffer_raw((ctx), (size), (dynamic) ? DUK_BUF_FLAG_DYNAMIC : 0)
548
585
  #define duk_push_fixed_buffer(ctx,size) \
549
586
  duk_push_buffer_raw((ctx), (size), 0 /*flags*/)
550
587
  #define duk_push_dynamic_buffer(ctx,size) \
@@ -611,7 +648,8 @@ DUK_EXTERNAL_DECL duk_bool_t duk_is_ecmascript_function(duk_context *ctx, duk_id
611
648
  DUK_EXTERNAL_DECL duk_bool_t duk_is_bound_function(duk_context *ctx, duk_idx_t index);
612
649
  DUK_EXTERNAL_DECL duk_bool_t duk_is_thread(duk_context *ctx, duk_idx_t index);
613
650
 
614
- DUK_EXTERNAL_DECL duk_bool_t duk_is_callable(duk_context *ctx, duk_idx_t index);
651
+ #define duk_is_callable(ctx,index) \
652
+ duk_is_function((ctx), (index))
615
653
  DUK_EXTERNAL_DECL duk_bool_t duk_is_dynamic_buffer(duk_context *ctx, duk_idx_t index);
616
654
  DUK_EXTERNAL_DECL duk_bool_t duk_is_fixed_buffer(duk_context *ctx, duk_idx_t index);
617
655
  DUK_EXTERNAL_DECL duk_bool_t duk_is_external_buffer(duk_context *ctx, duk_idx_t index);
@@ -638,6 +676,18 @@ DUK_EXTERNAL_DECL duk_bool_t duk_is_external_buffer(duk_context *ctx, duk_idx_t
638
676
  DUK_EXTERNAL_DECL duk_errcode_t duk_get_error_code(duk_context *ctx, duk_idx_t index);
639
677
  #define duk_is_error(ctx,index) \
640
678
  (duk_get_error_code((ctx), (index)) != 0)
679
+ #define duk_is_eval_error(ctx,index) \
680
+ (duk_get_error_code((ctx), (index)) == DUK_ERR_EVAL_ERROR)
681
+ #define duk_is_range_error(ctx,index) \
682
+ (duk_get_error_code((ctx), (index)) == DUK_ERR_RANGE_ERROR)
683
+ #define duk_is_reference_error(ctx,index) \
684
+ (duk_get_error_code((ctx), (index)) == DUK_ERR_REFERENCE_ERROR)
685
+ #define duk_is_syntax_error(ctx,index) \
686
+ (duk_get_error_code((ctx), (index)) == DUK_ERR_SYNTAX_ERROR)
687
+ #define duk_is_type_error(ctx,index) \
688
+ (duk_get_error_code((ctx), (index)) == DUK_ERR_TYPE_ERROR)
689
+ #define duk_is_uri_error(ctx,index) \
690
+ (duk_get_error_code((ctx), (index)) == DUK_ERR_URI_ERROR)
641
691
 
642
692
  /*
643
693
  * Get operations: no coercion, returns default value for invalid
@@ -682,6 +732,9 @@ DUK_EXTERNAL_DECL void *duk_require_buffer_data(duk_context *ctx, duk_idx_t inde
682
732
  DUK_EXTERNAL_DECL void *duk_require_pointer(duk_context *ctx, duk_idx_t index);
683
733
  DUK_EXTERNAL_DECL duk_c_function duk_require_c_function(duk_context *ctx, duk_idx_t index);
684
734
  DUK_EXTERNAL_DECL duk_context *duk_require_context(duk_context *ctx, duk_idx_t index);
735
+ DUK_EXTERNAL_DECL void duk_require_function(duk_context *ctx, duk_idx_t index);
736
+ #define duk_require_callable(ctx,index) \
737
+ duk_require_function((ctx), (index))
685
738
  DUK_EXTERNAL_DECL void *duk_require_heapptr(duk_context *ctx, duk_idx_t index);
686
739
 
687
740
  #define duk_require_object_coercible(ctx,index) \
@@ -884,119 +937,103 @@ DUK_EXTERNAL_DECL duk_int_t duk_compile_raw(duk_context *ctx, const char *src_bu
884
937
 
885
938
  /* plain */
886
939
  #define duk_eval(ctx) \
887
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
888
- (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL))
940
+ ((void) duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOFILENAME))
889
941
 
890
942
  #define duk_eval_noresult(ctx) \
891
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
892
- (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT))
943
+ ((void) duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
893
944
 
894
945
  #define duk_peval(ctx) \
895
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
896
- duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE))
946
+ (duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME))
897
947
 
898
948
  #define duk_peval_noresult(ctx) \
899
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
900
- duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT))
949
+ (duk_eval_raw((ctx), NULL, 0, 2 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
901
950
 
902
951
  #define duk_compile(ctx,flags) \
903
- ((void) duk_compile_raw((ctx), NULL, 0, (flags)))
952
+ ((void) duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags)))
904
953
 
905
954
  #define duk_pcompile(ctx,flags) \
906
- (duk_compile_raw((ctx), NULL, 0, (flags) | DUK_COMPILE_SAFE))
955
+ (duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags) | DUK_COMPILE_SAFE))
907
956
 
908
957
  /* string */
909
958
  #define duk_eval_string(ctx,src) \
910
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
911
- (void) duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
959
+ ((void) duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
912
960
 
913
961
  #define duk_eval_string_noresult(ctx,src) \
914
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
915
- (void) duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT))
962
+ ((void) duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
916
963
 
917
964
  #define duk_peval_string(ctx,src) \
918
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
919
- duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
965
+ (duk_eval_raw((ctx), (src), 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
920
966
 
921
967
  #define duk_peval_string_noresult(ctx,src) \
922
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
923
- duk_eval_raw((ctx), (src), 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT))
968
+ (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))
924
969
 
925
970
  #define duk_compile_string(ctx,flags,src) \
926
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
927
- (void) duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
971
+ ((void) duk_compile_raw((ctx), (src), 0, 1 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
928
972
 
929
973
  #define duk_compile_string_filename(ctx,flags,src) \
930
- ((void) duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
974
+ ((void) duk_compile_raw((ctx), (src), 0, 2 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
931
975
 
932
976
  #define duk_pcompile_string(ctx,flags,src) \
933
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
934
- duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
977
+ (duk_compile_raw((ctx), (src), 0, 1 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
935
978
 
936
979
  #define duk_pcompile_string_filename(ctx,flags,src) \
937
- (duk_compile_raw((ctx), (src), 0, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
980
+ (duk_compile_raw((ctx), (src), 0, 2 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
938
981
 
939
982
  /* lstring */
940
983
  #define duk_eval_lstring(ctx,buf,len) \
941
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
942
- (void) duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE))
984
+ ((void) duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
943
985
 
944
986
  #define duk_eval_lstring_noresult(ctx,buf,len) \
945
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
946
- (void) duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT))
987
+ ((void) duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
947
988
 
948
989
  #define duk_peval_lstring(ctx,buf,len) \
949
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
950
- duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_SAFE))
990
+ (duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME))
951
991
 
952
992
  #define duk_peval_lstring_noresult(ctx,buf,len) \
953
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
954
- duk_eval_raw((ctx), buf, len, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT))
993
+ (duk_eval_raw((ctx), buf, len, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
955
994
 
956
995
  #define duk_compile_lstring(ctx,flags,buf,len) \
957
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
958
- (void) duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_NOSOURCE))
996
+ ((void) duk_compile_raw((ctx), buf, len, 1 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
959
997
 
960
998
  #define duk_compile_lstring_filename(ctx,flags,buf,len) \
961
- ((void) duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_NOSOURCE))
999
+ ((void) duk_compile_raw((ctx), buf, len, 2 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE))
962
1000
 
963
1001
  #define duk_pcompile_lstring(ctx,flags,buf,len) \
964
- ((void) duk_push_string((ctx), (const char *) (__FILE__)), \
965
- duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE))
1002
+ (duk_compile_raw((ctx), buf, len, 1 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
966
1003
 
967
1004
  #define duk_pcompile_lstring_filename(ctx,flags,buf,len) \
968
- (duk_compile_raw((ctx), buf, len, (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE))
1005
+ (duk_compile_raw((ctx), buf, len, 2 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE))
969
1006
 
970
1007
  /* file */
971
1008
  #define duk_eval_file(ctx,path) \
972
1009
  ((void) duk_push_string_file_raw((ctx), (path), 0), \
973
1010
  (void) duk_push_string((ctx), (path)), \
974
- (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL))
1011
+ (void) duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL))
975
1012
 
976
1013
  #define duk_eval_file_noresult(ctx,path) \
977
1014
  ((void) duk_push_string_file_raw((ctx), (path), 0), \
978
1015
  (void) duk_push_string((ctx), (path)), \
979
- (void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT))
1016
+ (void) duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT))
980
1017
 
981
1018
  #define duk_peval_file(ctx,path) \
982
1019
  ((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
983
1020
  (void) duk_push_string((ctx), (path)), \
984
- duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE))
1021
+ duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE))
985
1022
 
986
1023
  #define duk_peval_file_noresult(ctx,path) \
987
1024
  ((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
988
1025
  (void) duk_push_string((ctx), (path)), \
989
- duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT))
1026
+ duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT))
990
1027
 
991
1028
  #define duk_compile_file(ctx,flags,path) \
992
1029
  ((void) duk_push_string_file_raw((ctx), (path), 0), \
993
1030
  (void) duk_push_string((ctx), (path)), \
994
- (void) duk_compile_raw((ctx), NULL, 0, (flags)))
1031
+ (void) duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags)))
995
1032
 
996
1033
  #define duk_pcompile_file(ctx,flags,path) \
997
1034
  ((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
998
1035
  (void) duk_push_string((ctx), (path)), \
999
- duk_compile_raw((ctx), NULL, 0, (flags) | DUK_COMPILE_SAFE))
1036
+ duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags) | DUK_COMPILE_SAFE))
1000
1037
 
1001
1038
  /*
1002
1039
  * Bytecode load/dump
@@ -1039,16 +1076,23 @@ DUK_EXTERNAL_DECL void duk_push_context_dump(duk_context *ctx);
1039
1076
  * Debugger (debug protocol)
1040
1077
  */
1041
1078
 
1042
- DUK_EXTERNAL_DECL void duk_debugger_attach(duk_context *ctx,
1043
- duk_debug_read_function read_cb,
1044
- duk_debug_write_function write_cb,
1045
- duk_debug_peek_function peek_cb,
1046
- duk_debug_read_flush_function read_flush_cb,
1047
- duk_debug_write_flush_function write_flush_cb,
1048
- duk_debug_detached_function detached_cb,
1049
- void *udata);
1079
+ #define duk_debugger_attach(ctx,read_cb,write_cb,peek_cb,read_flush_cb,write_flush_cb,detached_cb,udata) \
1080
+ duk_debugger_attach_custom((ctx), (read_cb), (write_cb), (peek_cb), (read_flush_cb), (write_flush_cb), \
1081
+ NULL, (detached_cb), (udata))
1082
+
1083
+ DUK_EXTERNAL_DECL void duk_debugger_attach_custom(duk_context *ctx,
1084
+ duk_debug_read_function read_cb,
1085
+ duk_debug_write_function write_cb,
1086
+ duk_debug_peek_function peek_cb,
1087
+ duk_debug_read_flush_function read_flush_cb,
1088
+ duk_debug_write_flush_function write_flush_cb,
1089
+ duk_debug_request_function request_cb,
1090
+ duk_debug_detached_function detached_cb,
1091
+ void *udata);
1050
1092
  DUK_EXTERNAL_DECL void duk_debugger_detach(duk_context *ctx);
1051
1093
  DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx);
1094
+ DUK_EXTERNAL_DECL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t nvalues);
1095
+ DUK_EXTERNAL_DECL void duk_debugger_pause(duk_context *ctx);
1052
1096
 
1053
1097
  /*
1054
1098
  * Date provider related constants
@@ -1128,6 +1172,17 @@ DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx);
1128
1172
  #define DUK_DATE_FLAG_SEP_T (1 << 11) /* string conversion: use 'T' instead of ' ' as a separator */
1129
1173
  #define DUK_DATE_FLAG_VALUE_SHIFT 12 /* additional values begin at bit 12 */
1130
1174
 
1175
+ /*
1176
+ * ROM pointer compression
1177
+ */
1178
+
1179
+ /* Support array for ROM pointer compression. Only declared when ROM
1180
+ * pointer compression is active.
1181
+ */
1182
+ #if defined(DUK_USE_ROM_OBJECTS) && defined(DUK_USE_HEAPPTR16)
1183
+ DUK_EXTERNAL_DECL const void * const duk_rom_compressed_pointers[];
1184
+ #endif
1185
+
1131
1186
  /*
1132
1187
  * C++ name mangling
1133
1188
  */
@@ -1203,13 +1258,13 @@ DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx);
1203
1258
  union duk_double_union {
1204
1259
  double d;
1205
1260
  float f[2];
1206
- #ifdef DUK_USE_64BIT_OPS
1261
+ #if defined(DUK_USE_64BIT_OPS)
1207
1262
  duk_uint64_t ull[1];
1208
1263
  #endif
1209
1264
  duk_uint32_t ui[2];
1210
1265
  duk_uint16_t us[4];
1211
1266
  duk_uint8_t uc[8];
1212
- #ifdef DUK_USE_PACKED_TVAL_POSSIBLE
1267
+ #if defined(DUK_USE_PACKED_TVAL)
1213
1268
  void *vp[2]; /* used by packed duk_tval, assumes sizeof(void *) == 4 */
1214
1269
  #endif
1215
1270
  };
@@ -1348,7 +1403,7 @@ typedef union duk_double_union duk_double_union;
1348
1403
  *
1349
1404
  * When packed duk_tval is used, the NaN space is used to store pointers
1350
1405
  * and other tagged values in addition to NaNs. Actual NaNs are normalized
1351
- * to a specific format. The macros below are used by the implementation
1406
+ * to a specific quiet NaN. The macros below are used by the implementation
1352
1407
  * to check and normalize NaN values when they might be created. The macros
1353
1408
  * are essentially NOPs when the non-packed duk_tval representation is used.
1354
1409
  *
@@ -1356,7 +1411,8 @@ typedef union duk_double_union duk_double_union;
1356
1411
  * the packed duk_tval and works correctly for all NaNs except those that
1357
1412
  * begin with 0x7ff0. Since the 'normalized NaN' values used with packed
1358
1413
  * duk_tval begin with 0x7ff8, the partial check is reliable when packed
1359
- * duk_tval is used.
1414
+ * duk_tval is used. The 0x7ff8 prefix means the normalized NaN will be a
1415
+ * quiet NaN regardless of its remaining lower bits.
1360
1416
  *
1361
1417
  * The ME variant below is specifically for ARM byte order, which has the
1362
1418
  * feature that while doubles have a mixed byte order (32107654), unsigned