duktape 1.6.1.0 → 2.0.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/ext/duktape/duk_config.h +166 -1094
- data/ext/duktape/duktape.c +24025 -19343
- data/ext/duktape/duktape.h +509 -428
- data/ext/duktape/duktape_ext.c +50 -47
- data/lib/duktape/version.rb +1 -1
- metadata +3 -3
data/ext/duktape/duktape.h
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
/*
|
2
|
-
* Duktape public API for Duktape
|
2
|
+
* Duktape public API for Duktape 2.0.1.
|
3
3
|
*
|
4
4
|
* See the API reference for documentation on call semantics.
|
5
5
|
* The exposed API is inside the DUK_API_PUBLIC_H_INCLUDED
|
6
6
|
* include guard. Other parts of the header are Duktape
|
7
7
|
* internal and related to platform/compiler/feature detection.
|
8
8
|
*
|
9
|
-
* Git commit
|
10
|
-
* Git branch
|
9
|
+
* Git commit 3f5e91704aff97c754f6ef5d44aedc5e529d1b16 (v2.0.1).
|
10
|
+
* Git branch v2.0-maintenance.
|
11
11
|
*
|
12
12
|
* See Duktape AUTHORS.rst and LICENSE.txt for copyright and
|
13
13
|
* licensing information.
|
@@ -21,7 +21,7 @@
|
|
21
21
|
*
|
22
22
|
* (http://opensource.org/licenses/MIT)
|
23
23
|
*
|
24
|
-
* Copyright (c) 2013-
|
24
|
+
* Copyright (c) 2013-2017 by Duktape authors (see AUTHORS.rst)
|
25
25
|
*
|
26
26
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
27
27
|
* of this software and associated documentation files (the "Software"), to deal
|
@@ -75,6 +75,18 @@
|
|
75
75
|
* * Ren\u00e9 Hollander <rene@rene8888.at>
|
76
76
|
* * Julien Hamaide (https://github.com/crazyjul)
|
77
77
|
* * Sebastian G\u00f6tte (https://github.com/jaseg)
|
78
|
+
* * Tomasz Magulski (https://github.com/magul)
|
79
|
+
* * \D. Bohdan (https://github.com/dbohdan)
|
80
|
+
* * Ond\u0159ej Jirman (https://github.com/megous)
|
81
|
+
* * Sa\u00fal Ibarra Corretg\u00e9 <saghul@gmail.com>
|
82
|
+
* * Jeremy HU <huxingyi@msn.com>
|
83
|
+
* * Ole Andr\u00e9 Vadla Ravn\u00e5s (https://github.com/oleavr)
|
84
|
+
* * Harold Brenes (https://github.com/harold-b)
|
85
|
+
* * Oliver Crow (https://github.com/ocrow)
|
86
|
+
* * Jakub Ch\u0142api\u0144ski (https://github.com/jchlapinski)
|
87
|
+
* * Brett Vickers (https://github.com/beevik)
|
88
|
+
* * Dominik Okwieka (https://github.com/okitec)
|
89
|
+
* * Remko Tron\u00e7on (https://el-tramo.be)
|
78
90
|
*
|
79
91
|
* Other contributions
|
80
92
|
* ===================
|
@@ -112,13 +124,13 @@
|
|
112
124
|
* * Michael Drake (https://github.com/tlsa)
|
113
125
|
* * https://github.com/chris-y
|
114
126
|
* * Laurent Zubiaur (https://github.com/lzubiaur)
|
115
|
-
* *
|
127
|
+
* * Neil Kolban (https://github.com/nkolban)
|
116
128
|
*
|
117
129
|
* If you are accidentally missing from this list, send me an e-mail
|
118
130
|
* (``sami.vaarala@iki.fi``) and I'll fix the omission.
|
119
131
|
*/
|
120
132
|
|
121
|
-
#
|
133
|
+
#if !defined(DUKTAPE_H_INCLUDED)
|
122
134
|
#define DUKTAPE_H_INCLUDED
|
123
135
|
|
124
136
|
#define DUK_SINGLE_FILE
|
@@ -133,14 +145,14 @@
|
|
133
145
|
* BEGIN PUBLIC API
|
134
146
|
*/
|
135
147
|
|
136
|
-
#
|
148
|
+
#if !defined(DUK_API_PUBLIC_H_INCLUDED)
|
137
149
|
#define DUK_API_PUBLIC_H_INCLUDED
|
138
150
|
|
139
151
|
/*
|
140
152
|
* Avoid C++ name mangling
|
141
153
|
*/
|
142
154
|
|
143
|
-
#
|
155
|
+
#if defined(__cplusplus)
|
144
156
|
extern "C" {
|
145
157
|
#endif
|
146
158
|
|
@@ -149,7 +161,7 @@ extern "C" {
|
|
149
161
|
*/
|
150
162
|
|
151
163
|
#undef DUK_API_VARIADIC_MACROS
|
152
|
-
#
|
164
|
+
#if defined(DUK_USE_VARIADIC_MACROS)
|
153
165
|
#define DUK_API_VARIADIC_MACROS
|
154
166
|
#endif
|
155
167
|
|
@@ -167,6 +179,7 @@ struct duk_thread_state;
|
|
167
179
|
struct duk_memory_functions;
|
168
180
|
struct duk_function_list_entry;
|
169
181
|
struct duk_number_list_entry;
|
182
|
+
struct duk_time_components;
|
170
183
|
|
171
184
|
/* duk_context is now defined in duk_config.h because it may also be
|
172
185
|
* referenced there by prototypes.
|
@@ -175,22 +188,23 @@ typedef struct duk_thread_state duk_thread_state;
|
|
175
188
|
typedef struct duk_memory_functions duk_memory_functions;
|
176
189
|
typedef struct duk_function_list_entry duk_function_list_entry;
|
177
190
|
typedef struct duk_number_list_entry duk_number_list_entry;
|
191
|
+
typedef struct duk_time_components duk_time_components;
|
178
192
|
|
179
193
|
typedef duk_ret_t (*duk_c_function)(duk_context *ctx);
|
180
194
|
typedef void *(*duk_alloc_function) (void *udata, duk_size_t size);
|
181
195
|
typedef void *(*duk_realloc_function) (void *udata, void *ptr, duk_size_t size);
|
182
196
|
typedef void (*duk_free_function) (void *udata, void *ptr);
|
183
|
-
typedef void (*duk_fatal_function) (
|
197
|
+
typedef void (*duk_fatal_function) (void *udata, const char *msg);
|
184
198
|
typedef void (*duk_decode_char_function) (void *udata, duk_codepoint_t codepoint);
|
185
199
|
typedef duk_codepoint_t (*duk_map_char_function) (void *udata, duk_codepoint_t codepoint);
|
186
|
-
typedef duk_ret_t (*duk_safe_call_function) (duk_context *ctx);
|
200
|
+
typedef duk_ret_t (*duk_safe_call_function) (duk_context *ctx, void *udata);
|
187
201
|
typedef duk_size_t (*duk_debug_read_function) (void *udata, char *buffer, duk_size_t length);
|
188
202
|
typedef duk_size_t (*duk_debug_write_function) (void *udata, const char *buffer, duk_size_t length);
|
189
203
|
typedef duk_size_t (*duk_debug_peek_function) (void *udata);
|
190
204
|
typedef void (*duk_debug_read_flush_function) (void *udata);
|
191
205
|
typedef void (*duk_debug_write_flush_function) (void *udata);
|
192
206
|
typedef duk_idx_t (*duk_debug_request_function) (duk_context *ctx, void *udata, duk_idx_t nvalues);
|
193
|
-
typedef void (*duk_debug_detached_function) (void *udata);
|
207
|
+
typedef void (*duk_debug_detached_function) (duk_context *ctx, void *udata);
|
194
208
|
|
195
209
|
struct duk_thread_state {
|
196
210
|
/* XXX: Enough space to hold internal suspend/resume structure.
|
@@ -218,29 +232,40 @@ struct duk_number_list_entry {
|
|
218
232
|
duk_double_t value;
|
219
233
|
};
|
220
234
|
|
235
|
+
struct duk_time_components {
|
236
|
+
duk_double_t year; /* year, e.g. 2016, Ecmascript year range */
|
237
|
+
duk_double_t month; /* month: 1-12 */
|
238
|
+
duk_double_t day; /* day: 1-31 */
|
239
|
+
duk_double_t hours; /* hour: 0-59 */
|
240
|
+
duk_double_t minutes; /* minute: 0-59 */
|
241
|
+
duk_double_t seconds; /* second: 0-59 (in POSIX time no leap second) */
|
242
|
+
duk_double_t milliseconds; /* may contain sub-millisecond fractions */
|
243
|
+
duk_double_t weekday; /* weekday: 0-6, 0=Sunday, 1=Monday, ..., 6=Saturday */
|
244
|
+
};
|
245
|
+
|
221
246
|
/*
|
222
247
|
* Constants
|
223
248
|
*/
|
224
249
|
|
225
250
|
/* Duktape version, (major * 10000) + (minor * 100) + patch. Allows C code
|
226
|
-
* to #
|
227
|
-
* to Ecmascript code in Duktape.version. Unofficial
|
228
|
-
* have 99 for patch level (e.g. 0.10.99 would be a
|
229
|
-
* after 0.10.0 but before the next official release).
|
251
|
+
* to #if (DUK_VERSION >= NNN) against Duktape API version. The same value
|
252
|
+
* is also available to Ecmascript code in Duktape.version. Unofficial
|
253
|
+
* development snapshots have 99 for patch level (e.g. 0.10.99 would be a
|
254
|
+
* development version after 0.10.0 but before the next official release).
|
230
255
|
*/
|
231
|
-
#define DUK_VERSION
|
256
|
+
#define DUK_VERSION 20001L
|
232
257
|
|
233
258
|
/* Git commit, describe, and branch for Duktape build. Useful for
|
234
259
|
* non-official snapshot builds so that application code can easily log
|
235
260
|
* which Duktape snapshot was used. Not available in the Ecmascript
|
236
261
|
* environment.
|
237
262
|
*/
|
238
|
-
#define DUK_GIT_COMMIT "
|
239
|
-
#define DUK_GIT_DESCRIBE "
|
240
|
-
#define DUK_GIT_BRANCH "
|
263
|
+
#define DUK_GIT_COMMIT "3f5e91704aff97c754f6ef5d44aedc5e529d1b16"
|
264
|
+
#define DUK_GIT_DESCRIBE "v2.0.1"
|
265
|
+
#define DUK_GIT_BRANCH "v2.0-maintenance"
|
241
266
|
|
242
267
|
/* Duktape debug protocol version used by this build. */
|
243
|
-
#define DUK_DEBUG_PROTOCOL_VERSION
|
268
|
+
#define DUK_DEBUG_PROTOCOL_VERSION 2
|
244
269
|
|
245
270
|
/* Used to represent invalid index; if caller uses this without checking,
|
246
271
|
* this index will map to a non-existent stack entry. Also used in some
|
@@ -284,6 +309,7 @@ struct duk_number_list_entry {
|
|
284
309
|
#define DUK_TYPE_MASK_POINTER (1 << DUK_TYPE_POINTER)
|
285
310
|
#define DUK_TYPE_MASK_LIGHTFUNC (1 << DUK_TYPE_LIGHTFUNC)
|
286
311
|
#define DUK_TYPE_MASK_THROW (1 << 10) /* internal flag value: throw if mask doesn't match */
|
312
|
+
#define DUK_TYPE_MASK_PROMOTE (1 << 11) /* internal flag value: promote to object if mask matches */
|
287
313
|
|
288
314
|
/* Coercion hints */
|
289
315
|
#define DUK_HINT_NONE 0 /* prefer number, unless input is a Date, in which
|
@@ -294,16 +320,16 @@ struct duk_number_list_entry {
|
|
294
320
|
|
295
321
|
/* Enumeration flags for duk_enum() */
|
296
322
|
#define DUK_ENUM_INCLUDE_NONENUMERABLE (1 << 0) /* enumerate non-numerable properties in addition to enumerable */
|
297
|
-
#define
|
298
|
-
#define
|
299
|
-
#define
|
300
|
-
#define
|
301
|
-
#define
|
323
|
+
#define DUK_ENUM_INCLUDE_HIDDEN (1 << 1) /* enumerate hidden symbols too (in Duktape 1.x called internal properties) */
|
324
|
+
#define DUK_ENUM_INCLUDE_SYMBOLS (1 << 2) /* enumerate symbols */
|
325
|
+
#define DUK_ENUM_EXCLUDE_STRINGS (1 << 3) /* exclude strings */
|
326
|
+
#define DUK_ENUM_OWN_PROPERTIES_ONLY (1 << 4) /* don't walk prototype chain, only check own properties */
|
327
|
+
#define DUK_ENUM_ARRAY_INDICES_ONLY (1 << 5) /* only enumerate array indices */
|
328
|
+
#define DUK_ENUM_SORT_ARRAY_INDICES (1 << 6) /* sort array indices (applied to full enumeration result, including inherited array indices) */
|
329
|
+
#define DUK_ENUM_NO_PROXY_BEHAVIOR (1 << 7) /* enumerate a proxy object itself without invoking proxy behavior */
|
302
330
|
|
303
331
|
/* Compilation flags for duk_compile() and duk_eval() */
|
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).
|
332
|
+
/* DUK_COMPILE_xxx bits 0-2 are reserved for an internal 'nargs' argument.
|
307
333
|
*/
|
308
334
|
#define DUK_COMPILE_EVAL (1 << 3) /* compile eval code (instead of global code) */
|
309
335
|
#define DUK_COMPILE_FUNCTION (1 << 4) /* compile function code (instead of global code) */
|
@@ -335,36 +361,20 @@ struct duk_number_list_entry {
|
|
335
361
|
/* Flags for duk_push_thread_raw() */
|
336
362
|
#define DUK_THREAD_NEW_GLOBAL_ENV (1 << 0) /* create a new global environment */
|
337
363
|
|
338
|
-
/* Flags for
|
339
|
-
#define
|
364
|
+
/* Flags for duk_gc() */
|
365
|
+
#define DUK_GC_COMPACT (1 << 0) /* compact heap objects */
|
340
366
|
|
341
|
-
/*
|
367
|
+
/* Error codes (must be 8 bits at most, see duk_error.h) */
|
342
368
|
#define DUK_ERR_NONE 0 /* no error (e.g. from duk_get_error_code()) */
|
343
|
-
#define
|
344
|
-
#define
|
345
|
-
#define
|
346
|
-
#define
|
347
|
-
#define
|
348
|
-
#define
|
349
|
-
#define
|
350
|
-
|
351
|
-
/* Ecmascript E5 specification error codes */
|
352
|
-
#define DUK_ERR_ERROR 100 /* Error */
|
353
|
-
#define DUK_ERR_EVAL_ERROR 101 /* EvalError */
|
354
|
-
#define DUK_ERR_RANGE_ERROR 102 /* RangeError */
|
355
|
-
#define DUK_ERR_REFERENCE_ERROR 103 /* ReferenceError */
|
356
|
-
#define DUK_ERR_SYNTAX_ERROR 104 /* SyntaxError */
|
357
|
-
#define DUK_ERR_TYPE_ERROR 105 /* TypeError */
|
358
|
-
#define DUK_ERR_URI_ERROR 106 /* URIError */
|
369
|
+
#define DUK_ERR_ERROR 1 /* Error */
|
370
|
+
#define DUK_ERR_EVAL_ERROR 2 /* EvalError */
|
371
|
+
#define DUK_ERR_RANGE_ERROR 3 /* RangeError */
|
372
|
+
#define DUK_ERR_REFERENCE_ERROR 4 /* ReferenceError */
|
373
|
+
#define DUK_ERR_SYNTAX_ERROR 5 /* SyntaxError */
|
374
|
+
#define DUK_ERR_TYPE_ERROR 6 /* TypeError */
|
375
|
+
#define DUK_ERR_URI_ERROR 7 /* URIError */
|
359
376
|
|
360
377
|
/* Return codes for C functions (shortcut for throwing an error) */
|
361
|
-
#define DUK_RET_UNIMPLEMENTED_ERROR (-DUK_ERR_UNIMPLEMENTED_ERROR)
|
362
|
-
#define DUK_RET_UNSUPPORTED_ERROR (-DUK_ERR_UNSUPPORTED_ERROR)
|
363
|
-
#define DUK_RET_INTERNAL_ERROR (-DUK_ERR_INTERNAL_ERROR)
|
364
|
-
#define DUK_RET_ALLOC_ERROR (-DUK_ERR_ALLOC_ERROR)
|
365
|
-
#define DUK_RET_ASSERTION_ERROR (-DUK_ERR_ASSERTION_ERROR)
|
366
|
-
#define DUK_RET_API_ERROR (-DUK_ERR_API_ERROR)
|
367
|
-
#define DUK_RET_UNCAUGHT_ERROR (-DUK_ERR_UNCAUGHT_ERROR)
|
368
378
|
#define DUK_RET_ERROR (-DUK_ERR_ERROR)
|
369
379
|
#define DUK_RET_EVAL_ERROR (-DUK_ERR_EVAL_ERROR)
|
370
380
|
#define DUK_RET_RANGE_ERROR (-DUK_ERR_RANGE_ERROR)
|
@@ -377,20 +387,17 @@ struct duk_number_list_entry {
|
|
377
387
|
#define DUK_EXEC_SUCCESS 0
|
378
388
|
#define DUK_EXEC_ERROR 1
|
379
389
|
|
380
|
-
/*
|
381
|
-
#define
|
382
|
-
#define
|
383
|
-
#define
|
384
|
-
#define DUK_LOG_WARN 3
|
385
|
-
#define DUK_LOG_ERROR 4
|
386
|
-
#define DUK_LOG_FATAL 5
|
390
|
+
/* Debug levels for DUK_USE_DEBUG_WRITE(). */
|
391
|
+
#define DUK_LEVEL_DEBUG 0
|
392
|
+
#define DUK_LEVEL_DDEBUG 1
|
393
|
+
#define DUK_LEVEL_DDDEBUG 2
|
387
394
|
|
388
395
|
/*
|
389
396
|
* If no variadic macros, __FILE__ and __LINE__ are passed through globals
|
390
397
|
* which is ugly and not thread safe.
|
391
398
|
*/
|
392
399
|
|
393
|
-
#
|
400
|
+
#if !defined(DUK_API_VARIADIC_MACROS)
|
394
401
|
DUK_EXTERNAL_DECL const char *duk_api_global_filename;
|
395
402
|
DUK_EXTERNAL_DECL duk_int_t duk_api_global_line;
|
396
403
|
#endif
|
@@ -432,29 +439,99 @@ DUK_EXTERNAL_DECL void duk_gc(duk_context *ctx, duk_uint_t flags);
|
|
432
439
|
* Error handling
|
433
440
|
*/
|
434
441
|
|
435
|
-
DUK_API_NORETURN(DUK_EXTERNAL_DECL void
|
436
|
-
|
442
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_throw_raw(duk_context *ctx));
|
443
|
+
#define duk_throw(ctx) \
|
444
|
+
(duk_throw_raw((ctx)), (duk_ret_t) 0)
|
445
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_fatal_raw(duk_context *ctx, const char *err_msg));
|
446
|
+
#define duk_fatal(ctx,err_msg) \
|
447
|
+
(duk_fatal_raw((ctx), (err_msg)), (duk_ret_t) 0)
|
437
448
|
|
449
|
+
#if defined(DUK_API_VARIADIC_MACROS)
|
438
450
|
DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_error_raw(duk_context *ctx, duk_errcode_t err_code, const char *filename, duk_int_t line, const char *fmt, ...));
|
439
|
-
|
440
|
-
#ifdef DUK_API_VARIADIC_MACROS
|
441
451
|
#define duk_error(ctx,err_code,...) \
|
442
|
-
duk_error_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__)
|
443
|
-
#
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
452
|
+
(duk_error_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
453
|
+
#define duk_generic_error(ctx,...) \
|
454
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
455
|
+
#define duk_eval_error(ctx,...) \
|
456
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_EVAL_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
457
|
+
#define duk_range_error(ctx,...) \
|
458
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_RANGE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
459
|
+
#define duk_reference_error(ctx,...) \
|
460
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_REFERENCE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
461
|
+
#define duk_syntax_error(ctx,...) \
|
462
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_SYNTAX_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
463
|
+
#define duk_type_error(ctx,...) \
|
464
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_TYPE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
465
|
+
#define duk_uri_error(ctx,...) \
|
466
|
+
(duk_error_raw((ctx), (duk_errcode_t) DUK_ERR_URI_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__), (duk_ret_t) 0)
|
467
|
+
#else /* DUK_API_VARIADIC_MACROS */
|
468
|
+
/* For legacy compilers without variadic macros a macro hack is used to allow
|
469
|
+
* variable arguments. While the macro allows "return duk_error(...)", it
|
470
|
+
* will fail with e.g. "(void) duk_error(...)". The calls are noreturn but
|
471
|
+
* with a return value to allow the "return duk_error(...)" idiom. This may
|
472
|
+
* cause some compiler warnings, but without noreturn the generated code is
|
473
|
+
* often worse. The same approach as with variadic macros (using
|
474
|
+
* "(duk_error(...), 0)") won't work due to the macro hack structure.
|
475
|
+
*/
|
476
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_error_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...));
|
477
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_generic_error_stash(duk_context *ctx, const char *fmt, ...));
|
478
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_eval_error_stash(duk_context *ctx, const char *fmt, ...));
|
479
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_range_error_stash(duk_context *ctx, const char *fmt, ...));
|
480
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_reference_error_stash(duk_context *ctx, const char *fmt, ...));
|
481
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_syntax_error_stash(duk_context *ctx, const char *fmt, ...));
|
482
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_type_error_stash(duk_context *ctx, const char *fmt, ...));
|
483
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL duk_ret_t duk_uri_error_stash(duk_context *ctx, const char *fmt, ...));
|
449
484
|
#define duk_error \
|
450
485
|
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
451
486
|
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
452
487
|
duk_error_stash) /* last value is func pointer, arguments follow in parens */
|
453
|
-
#
|
488
|
+
#define duk_generic_error \
|
489
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
490
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
491
|
+
duk_generic_error_stash)
|
492
|
+
#define duk_eval_error \
|
493
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
494
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
495
|
+
duk_eval_error_stash)
|
496
|
+
#define duk_range_error \
|
497
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
498
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
499
|
+
duk_range_error_stash)
|
500
|
+
#define duk_reference_error \
|
501
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
502
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
503
|
+
duk_reference_error_stash)
|
504
|
+
#define duk_syntax_error \
|
505
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
506
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
507
|
+
duk_syntax_error_stash)
|
508
|
+
#define duk_type_error \
|
509
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
510
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
511
|
+
duk_type_error_stash)
|
512
|
+
#define duk_uri_error \
|
513
|
+
(duk_api_global_filename = (const char *) (DUK_FILE_MACRO), \
|
514
|
+
duk_api_global_line = (duk_int_t) (DUK_LINE_MACRO), \
|
515
|
+
duk_uri_error_stash)
|
516
|
+
#endif /* DUK_API_VARIADIC_MACROS */
|
454
517
|
|
455
518
|
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));
|
456
519
|
#define duk_error_va(ctx,err_code,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))
|
520
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
521
|
+
#define duk_generic_error_va(ctx,fmt,ap) \
|
522
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
523
|
+
#define duk_eval_error_va(ctx,fmt,ap) \
|
524
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_EVAL_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
525
|
+
#define duk_range_error_va(ctx,fmt,ap) \
|
526
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_RANGE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
527
|
+
#define duk_reference_error_va(ctx,fmt,ap) \
|
528
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_REFERENCE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
529
|
+
#define duk_syntax_error_va(ctx,fmt,ap) \
|
530
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_SYNTAX_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
531
|
+
#define duk_type_error_va(ctx,fmt,ap) \
|
532
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_TYPE_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
533
|
+
#define duk_uri_error_va(ctx,fmt,ap) \
|
534
|
+
(duk_error_va_raw((ctx), (duk_errcode_t) DUK_ERR_URI_ERROR, (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), (fmt), (ap)), (duk_ret_t) 0)
|
458
535
|
|
459
536
|
/*
|
460
537
|
* Other state related functions
|
@@ -467,13 +544,13 @@ DUK_EXTERNAL_DECL duk_bool_t duk_is_constructor_call(duk_context *ctx);
|
|
467
544
|
* Stack management
|
468
545
|
*/
|
469
546
|
|
470
|
-
DUK_EXTERNAL_DECL duk_idx_t duk_normalize_index(duk_context *ctx, duk_idx_t
|
471
|
-
DUK_EXTERNAL_DECL duk_idx_t duk_require_normalize_index(duk_context *ctx, duk_idx_t
|
472
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_is_valid_index(duk_context *ctx, duk_idx_t
|
473
|
-
DUK_EXTERNAL_DECL void duk_require_valid_index(duk_context *ctx, duk_idx_t
|
547
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_normalize_index(duk_context *ctx, duk_idx_t idx);
|
548
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_require_normalize_index(duk_context *ctx, duk_idx_t idx);
|
549
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_valid_index(duk_context *ctx, duk_idx_t idx);
|
550
|
+
DUK_EXTERNAL_DECL void duk_require_valid_index(duk_context *ctx, duk_idx_t idx);
|
474
551
|
|
475
552
|
DUK_EXTERNAL_DECL duk_idx_t duk_get_top(duk_context *ctx);
|
476
|
-
DUK_EXTERNAL_DECL void duk_set_top(duk_context *ctx, duk_idx_t
|
553
|
+
DUK_EXTERNAL_DECL void duk_set_top(duk_context *ctx, duk_idx_t idx);
|
477
554
|
DUK_EXTERNAL_DECL duk_idx_t duk_get_top_index(duk_context *ctx);
|
478
555
|
DUK_EXTERNAL_DECL duk_idx_t duk_require_top_index(duk_context *ctx);
|
479
556
|
|
@@ -493,14 +570,14 @@ DUK_EXTERNAL_DECL void duk_require_stack_top(duk_context *ctx, duk_idx_t top);
|
|
493
570
|
* Stack manipulation (other than push/pop)
|
494
571
|
*/
|
495
572
|
|
496
|
-
DUK_EXTERNAL_DECL void duk_swap(duk_context *ctx, duk_idx_t
|
497
|
-
DUK_EXTERNAL_DECL void duk_swap_top(duk_context *ctx, duk_idx_t
|
498
|
-
DUK_EXTERNAL_DECL void duk_dup(duk_context *ctx, duk_idx_t
|
573
|
+
DUK_EXTERNAL_DECL void duk_swap(duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
|
574
|
+
DUK_EXTERNAL_DECL void duk_swap_top(duk_context *ctx, duk_idx_t idx);
|
575
|
+
DUK_EXTERNAL_DECL void duk_dup(duk_context *ctx, duk_idx_t from_idx);
|
499
576
|
DUK_EXTERNAL_DECL void duk_dup_top(duk_context *ctx);
|
500
|
-
DUK_EXTERNAL_DECL void duk_insert(duk_context *ctx, duk_idx_t
|
501
|
-
DUK_EXTERNAL_DECL void duk_replace(duk_context *ctx, duk_idx_t
|
502
|
-
DUK_EXTERNAL_DECL void duk_copy(duk_context *ctx, duk_idx_t
|
503
|
-
DUK_EXTERNAL_DECL void duk_remove(duk_context *ctx, duk_idx_t
|
577
|
+
DUK_EXTERNAL_DECL void duk_insert(duk_context *ctx, duk_idx_t to_idx);
|
578
|
+
DUK_EXTERNAL_DECL void duk_replace(duk_context *ctx, duk_idx_t to_idx);
|
579
|
+
DUK_EXTERNAL_DECL void duk_copy(duk_context *ctx, duk_idx_t from_idx, duk_idx_t to_idx);
|
580
|
+
DUK_EXTERNAL_DECL void duk_remove(duk_context *ctx, duk_idx_t idx);
|
504
581
|
DUK_EXTERNAL_DECL void duk_xcopymove_raw(duk_context *to_ctx, duk_context *from_ctx, duk_idx_t count, duk_bool_t is_copy);
|
505
582
|
|
506
583
|
#define duk_xmove_top(to_ctx,from_ctx,count) \
|
@@ -532,10 +609,6 @@ DUK_EXTERNAL_DECL void duk_push_pointer(duk_context *ctx, void *p);
|
|
532
609
|
DUK_EXTERNAL_DECL const char *duk_push_sprintf(duk_context *ctx, const char *fmt, ...);
|
533
610
|
DUK_EXTERNAL_DECL const char *duk_push_vsprintf(duk_context *ctx, const char *fmt, va_list ap);
|
534
611
|
|
535
|
-
DUK_EXTERNAL_DECL const char *duk_push_string_file_raw(duk_context *ctx, const char *path, duk_uint_t flags);
|
536
|
-
#define duk_push_string_file(ctx,path) \
|
537
|
-
duk_push_string_file_raw((ctx), (path), 0)
|
538
|
-
|
539
612
|
DUK_EXTERNAL_DECL void duk_push_this(duk_context *ctx);
|
540
613
|
DUK_EXTERNAL_DECL void duk_push_current_function(duk_context *ctx);
|
541
614
|
DUK_EXTERNAL_DECL void duk_push_current_thread(duk_context *ctx);
|
@@ -545,6 +618,7 @@ DUK_EXTERNAL_DECL void duk_push_global_stash(duk_context *ctx);
|
|
545
618
|
DUK_EXTERNAL_DECL void duk_push_thread_stash(duk_context *ctx, duk_context *target_ctx);
|
546
619
|
|
547
620
|
DUK_EXTERNAL_DECL duk_idx_t duk_push_object(duk_context *ctx);
|
621
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_push_bare_object(duk_context *ctx);
|
548
622
|
DUK_EXTERNAL_DECL duk_idx_t duk_push_array(duk_context *ctx);
|
549
623
|
DUK_EXTERNAL_DECL duk_idx_t duk_push_c_function(duk_context *ctx, duk_c_function func, duk_idx_t nargs);
|
550
624
|
DUK_EXTERNAL_DECL duk_idx_t duk_push_c_lightfunc(duk_context *ctx, duk_c_function func, duk_idx_t nargs, duk_idx_t length, duk_int_t magic);
|
@@ -558,7 +632,7 @@ DUK_EXTERNAL_DECL duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t fla
|
|
558
632
|
|
559
633
|
DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_raw(duk_context *ctx, duk_errcode_t err_code, const char *filename, duk_int_t line, const char *fmt, ...);
|
560
634
|
|
561
|
-
#
|
635
|
+
#if defined(DUK_API_VARIADIC_MACROS)
|
562
636
|
#define duk_push_error_object(ctx,err_code,...) \
|
563
637
|
duk_push_error_object_raw((ctx), (err_code), (const char *) (DUK_FILE_MACRO), (duk_int_t) (DUK_LINE_MACRO), __VA_ARGS__)
|
564
638
|
#else
|
@@ -590,19 +664,18 @@ DUK_EXTERNAL_DECL void *duk_push_buffer_raw(duk_context *ctx, duk_size_t size, d
|
|
590
664
|
((void) duk_push_buffer_raw((ctx), 0, DUK_BUF_FLAG_DYNAMIC | DUK_BUF_FLAG_EXTERNAL))
|
591
665
|
|
592
666
|
#define DUK_BUFOBJ_CREATE_ARRBUF (1 << 4) /* internal flag: create backing ArrayBuffer; keep in one byte */
|
593
|
-
#define
|
594
|
-
#define DUK_BUFOBJ_NODEJS_BUFFER 1
|
595
|
-
#define
|
596
|
-
#define
|
597
|
-
#define
|
598
|
-
#define
|
599
|
-
#define
|
600
|
-
#define
|
601
|
-
#define
|
602
|
-
#define
|
603
|
-
#define
|
604
|
-
#define
|
605
|
-
#define DUK_BUFOBJ_FLOAT64ARRAY (12 | DUK_BUFOBJ_CREATE_ARRBUF)
|
667
|
+
#define DUK_BUFOBJ_ARRAYBUFFER 0
|
668
|
+
#define DUK_BUFOBJ_NODEJS_BUFFER (1 | DUK_BUFOBJ_CREATE_ARRBUF)
|
669
|
+
#define DUK_BUFOBJ_DATAVIEW (2 | DUK_BUFOBJ_CREATE_ARRBUF)
|
670
|
+
#define DUK_BUFOBJ_INT8ARRAY (3 | DUK_BUFOBJ_CREATE_ARRBUF)
|
671
|
+
#define DUK_BUFOBJ_UINT8ARRAY (4 | DUK_BUFOBJ_CREATE_ARRBUF)
|
672
|
+
#define DUK_BUFOBJ_UINT8CLAMPEDARRAY (5 | DUK_BUFOBJ_CREATE_ARRBUF)
|
673
|
+
#define DUK_BUFOBJ_INT16ARRAY (6 | DUK_BUFOBJ_CREATE_ARRBUF)
|
674
|
+
#define DUK_BUFOBJ_UINT16ARRAY (7 | DUK_BUFOBJ_CREATE_ARRBUF)
|
675
|
+
#define DUK_BUFOBJ_INT32ARRAY (8 | DUK_BUFOBJ_CREATE_ARRBUF)
|
676
|
+
#define DUK_BUFOBJ_UINT32ARRAY (9 | DUK_BUFOBJ_CREATE_ARRBUF)
|
677
|
+
#define DUK_BUFOBJ_FLOAT32ARRAY (10 | DUK_BUFOBJ_CREATE_ARRBUF)
|
678
|
+
#define DUK_BUFOBJ_FLOAT64ARRAY (11 | DUK_BUFOBJ_CREATE_ARRBUF)
|
606
679
|
|
607
680
|
DUK_EXTERNAL_DECL void duk_push_buffer_object(duk_context *ctx, duk_idx_t idx_buffer, duk_size_t byte_offset, duk_size_t byte_length, duk_uint_t flags);
|
608
681
|
|
@@ -624,70 +697,77 @@ DUK_EXTERNAL_DECL void duk_pop_3(duk_context *ctx);
|
|
624
697
|
* is not needed; duk_is_valid_index() gives the same information.
|
625
698
|
*/
|
626
699
|
|
627
|
-
DUK_EXTERNAL_DECL duk_int_t duk_get_type(duk_context *ctx, duk_idx_t
|
628
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_check_type(duk_context *ctx, duk_idx_t
|
629
|
-
DUK_EXTERNAL_DECL duk_uint_t duk_get_type_mask(duk_context *ctx, duk_idx_t
|
630
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t
|
631
|
-
|
632
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_is_undefined(duk_context *ctx, duk_idx_t
|
633
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_is_null(duk_context *ctx, duk_idx_t
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
638
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
639
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
640
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
641
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
642
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
643
|
-
|
644
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
645
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
646
|
-
|
647
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
648
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
649
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
675
|
-
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
700
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_type(duk_context *ctx, duk_idx_t idx);
|
701
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_check_type(duk_context *ctx, duk_idx_t idx, duk_int_t type);
|
702
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_get_type_mask(duk_context *ctx, duk_idx_t idx);
|
703
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t idx, duk_uint_t mask);
|
704
|
+
|
705
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_undefined(duk_context *ctx, duk_idx_t idx);
|
706
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_null(duk_context *ctx, duk_idx_t idx);
|
707
|
+
#define duk_is_null_or_undefined(ctx, idx) \
|
708
|
+
((duk_get_type_mask((ctx), (idx)) & (DUK_TYPE_MASK_NULL | DUK_TYPE_MASK_UNDEFINED)) ? 1 : 0)
|
709
|
+
|
710
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_boolean(duk_context *ctx, duk_idx_t idx);
|
711
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t idx);
|
712
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_nan(duk_context *ctx, duk_idx_t idx);
|
713
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t idx);
|
714
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_object(duk_context *ctx, duk_idx_t idx);
|
715
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer(duk_context *ctx, duk_idx_t idx);
|
716
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer_data(duk_context *ctx, duk_idx_t idx);
|
717
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_pointer(duk_context *ctx, duk_idx_t idx);
|
718
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_lightfunc(duk_context *ctx, duk_idx_t idx);
|
719
|
+
|
720
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_symbol(duk_context *ctx, duk_idx_t idx);
|
721
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_array(duk_context *ctx, duk_idx_t idx);
|
722
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_function(duk_context *ctx, duk_idx_t idx);
|
723
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_c_function(duk_context *ctx, duk_idx_t idx);
|
724
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_ecmascript_function(duk_context *ctx, duk_idx_t idx);
|
725
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_bound_function(duk_context *ctx, duk_idx_t idx);
|
726
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_thread(duk_context *ctx, duk_idx_t idx);
|
727
|
+
|
728
|
+
#define duk_is_callable(ctx,idx) \
|
729
|
+
duk_is_function((ctx), (idx))
|
730
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_dynamic_buffer(duk_context *ctx, duk_idx_t idx);
|
731
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_fixed_buffer(duk_context *ctx, duk_idx_t idx);
|
732
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_external_buffer(duk_context *ctx, duk_idx_t idx);
|
733
|
+
|
734
|
+
/* Buffers and lightfuncs are not considered primitive because they mimic
|
735
|
+
* objects and e.g. duk_to_primitive() will coerce them instead of returning
|
736
|
+
* them as is. Symbols are represented as strings internally.
|
737
|
+
*/
|
738
|
+
#define duk_is_primitive(ctx,idx) \
|
739
|
+
duk_check_type_mask((ctx), (idx), DUK_TYPE_MASK_UNDEFINED | \
|
740
|
+
DUK_TYPE_MASK_NULL | \
|
741
|
+
DUK_TYPE_MASK_BOOLEAN | \
|
742
|
+
DUK_TYPE_MASK_NUMBER | \
|
743
|
+
DUK_TYPE_MASK_STRING | \
|
744
|
+
DUK_TYPE_MASK_POINTER)
|
745
|
+
|
746
|
+
/* Symbols are object coercible, covered by DUK_TYPE_MASK_STRING. */
|
747
|
+
#define duk_is_object_coercible(ctx,idx) \
|
748
|
+
duk_check_type_mask((ctx), (idx), DUK_TYPE_MASK_BOOLEAN | \
|
749
|
+
DUK_TYPE_MASK_NUMBER | \
|
750
|
+
DUK_TYPE_MASK_STRING | \
|
751
|
+
DUK_TYPE_MASK_OBJECT | \
|
752
|
+
DUK_TYPE_MASK_BUFFER | \
|
753
|
+
DUK_TYPE_MASK_POINTER | \
|
754
|
+
DUK_TYPE_MASK_LIGHTFUNC)
|
755
|
+
|
756
|
+
DUK_EXTERNAL_DECL duk_errcode_t duk_get_error_code(duk_context *ctx, duk_idx_t idx);
|
757
|
+
#define duk_is_error(ctx,idx) \
|
758
|
+
(duk_get_error_code((ctx), (idx)) != 0)
|
759
|
+
#define duk_is_eval_error(ctx,idx) \
|
760
|
+
(duk_get_error_code((ctx), (idx)) == DUK_ERR_EVAL_ERROR)
|
761
|
+
#define duk_is_range_error(ctx,idx) \
|
762
|
+
(duk_get_error_code((ctx), (idx)) == DUK_ERR_RANGE_ERROR)
|
763
|
+
#define duk_is_reference_error(ctx,idx) \
|
764
|
+
(duk_get_error_code((ctx), (idx)) == DUK_ERR_REFERENCE_ERROR)
|
765
|
+
#define duk_is_syntax_error(ctx,idx) \
|
766
|
+
(duk_get_error_code((ctx), (idx)) == DUK_ERR_SYNTAX_ERROR)
|
767
|
+
#define duk_is_type_error(ctx,idx) \
|
768
|
+
(duk_get_error_code((ctx), (idx)) == DUK_ERR_TYPE_ERROR)
|
769
|
+
#define duk_is_uri_error(ctx,idx) \
|
770
|
+
(duk_get_error_code((ctx), (idx)) == DUK_ERR_URI_ERROR)
|
691
771
|
|
692
772
|
/*
|
693
773
|
* Get operations: no coercion, returns default value for invalid
|
@@ -697,48 +777,50 @@ DUK_EXTERNAL_DECL duk_errcode_t duk_get_error_code(duk_context *ctx, duk_idx_t i
|
|
697
777
|
* are not included.
|
698
778
|
*/
|
699
779
|
|
700
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_get_boolean(duk_context *ctx, duk_idx_t
|
701
|
-
DUK_EXTERNAL_DECL duk_double_t duk_get_number(duk_context *ctx, duk_idx_t
|
702
|
-
DUK_EXTERNAL_DECL duk_int_t duk_get_int(duk_context *ctx, duk_idx_t
|
703
|
-
DUK_EXTERNAL_DECL duk_uint_t duk_get_uint(duk_context *ctx, duk_idx_t
|
704
|
-
DUK_EXTERNAL_DECL const char *duk_get_string(duk_context *ctx, duk_idx_t
|
705
|
-
DUK_EXTERNAL_DECL const char *duk_get_lstring(duk_context *ctx, duk_idx_t
|
706
|
-
DUK_EXTERNAL_DECL void *duk_get_buffer(duk_context *ctx, duk_idx_t
|
707
|
-
DUK_EXTERNAL_DECL void *duk_get_buffer_data(duk_context *ctx, duk_idx_t
|
708
|
-
DUK_EXTERNAL_DECL void *duk_get_pointer(duk_context *ctx, duk_idx_t
|
709
|
-
DUK_EXTERNAL_DECL duk_c_function duk_get_c_function(duk_context *ctx, duk_idx_t
|
710
|
-
DUK_EXTERNAL_DECL duk_context *duk_get_context(duk_context *ctx, duk_idx_t
|
711
|
-
DUK_EXTERNAL_DECL void *duk_get_heapptr(duk_context *ctx, duk_idx_t
|
712
|
-
DUK_EXTERNAL_DECL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t
|
780
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_boolean(duk_context *ctx, duk_idx_t idx);
|
781
|
+
DUK_EXTERNAL_DECL duk_double_t duk_get_number(duk_context *ctx, duk_idx_t idx);
|
782
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_int(duk_context *ctx, duk_idx_t idx);
|
783
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_get_uint(duk_context *ctx, duk_idx_t idx);
|
784
|
+
DUK_EXTERNAL_DECL const char *duk_get_string(duk_context *ctx, duk_idx_t idx);
|
785
|
+
DUK_EXTERNAL_DECL const char *duk_get_lstring(duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
|
786
|
+
DUK_EXTERNAL_DECL void *duk_get_buffer(duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
|
787
|
+
DUK_EXTERNAL_DECL void *duk_get_buffer_data(duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
|
788
|
+
DUK_EXTERNAL_DECL void *duk_get_pointer(duk_context *ctx, duk_idx_t idx);
|
789
|
+
DUK_EXTERNAL_DECL duk_c_function duk_get_c_function(duk_context *ctx, duk_idx_t idx);
|
790
|
+
DUK_EXTERNAL_DECL duk_context *duk_get_context(duk_context *ctx, duk_idx_t idx);
|
791
|
+
DUK_EXTERNAL_DECL void *duk_get_heapptr(duk_context *ctx, duk_idx_t idx);
|
792
|
+
DUK_EXTERNAL_DECL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t idx);
|
793
|
+
DUK_EXTERNAL_DECL void duk_set_length(duk_context *ctx, duk_idx_t idx, duk_size_t len);
|
713
794
|
|
714
795
|
/*
|
715
796
|
* Require operations: no coercion, throw error if index or type
|
716
797
|
* is incorrect. No defaulting.
|
717
798
|
*/
|
718
799
|
|
719
|
-
#define duk_require_type_mask(ctx,
|
720
|
-
((void) duk_check_type_mask((ctx), (
|
721
|
-
|
722
|
-
DUK_EXTERNAL_DECL void duk_require_undefined(duk_context *ctx, duk_idx_t
|
723
|
-
DUK_EXTERNAL_DECL void duk_require_null(duk_context *ctx, duk_idx_t
|
724
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_require_boolean(duk_context *ctx, duk_idx_t
|
725
|
-
DUK_EXTERNAL_DECL duk_double_t duk_require_number(duk_context *ctx, duk_idx_t
|
726
|
-
DUK_EXTERNAL_DECL duk_int_t duk_require_int(duk_context *ctx, duk_idx_t
|
727
|
-
DUK_EXTERNAL_DECL duk_uint_t duk_require_uint(duk_context *ctx, duk_idx_t
|
728
|
-
DUK_EXTERNAL_DECL const char *duk_require_string(duk_context *ctx, duk_idx_t
|
729
|
-
DUK_EXTERNAL_DECL const char *duk_require_lstring(duk_context *ctx, duk_idx_t
|
730
|
-
DUK_EXTERNAL_DECL void *duk_require_buffer(duk_context *ctx, duk_idx_t
|
731
|
-
DUK_EXTERNAL_DECL void *duk_require_buffer_data(duk_context *ctx, duk_idx_t
|
732
|
-
DUK_EXTERNAL_DECL void *duk_require_pointer(duk_context *ctx, duk_idx_t
|
733
|
-
DUK_EXTERNAL_DECL duk_c_function duk_require_c_function(duk_context *ctx, duk_idx_t
|
734
|
-
DUK_EXTERNAL_DECL duk_context *duk_require_context(duk_context *ctx, duk_idx_t
|
735
|
-
DUK_EXTERNAL_DECL void duk_require_function(duk_context *ctx, duk_idx_t
|
736
|
-
#define duk_require_callable(ctx,
|
737
|
-
duk_require_function((ctx), (
|
738
|
-
DUK_EXTERNAL_DECL void *duk_require_heapptr(duk_context *ctx, duk_idx_t
|
739
|
-
|
740
|
-
|
741
|
-
|
800
|
+
#define duk_require_type_mask(ctx,idx,mask) \
|
801
|
+
((void) duk_check_type_mask((ctx), (idx), (mask) | DUK_TYPE_MASK_THROW))
|
802
|
+
|
803
|
+
DUK_EXTERNAL_DECL void duk_require_undefined(duk_context *ctx, duk_idx_t idx);
|
804
|
+
DUK_EXTERNAL_DECL void duk_require_null(duk_context *ctx, duk_idx_t idx);
|
805
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_require_boolean(duk_context *ctx, duk_idx_t idx);
|
806
|
+
DUK_EXTERNAL_DECL duk_double_t duk_require_number(duk_context *ctx, duk_idx_t idx);
|
807
|
+
DUK_EXTERNAL_DECL duk_int_t duk_require_int(duk_context *ctx, duk_idx_t idx);
|
808
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_require_uint(duk_context *ctx, duk_idx_t idx);
|
809
|
+
DUK_EXTERNAL_DECL const char *duk_require_string(duk_context *ctx, duk_idx_t idx);
|
810
|
+
DUK_EXTERNAL_DECL const char *duk_require_lstring(duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
|
811
|
+
DUK_EXTERNAL_DECL void *duk_require_buffer(duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
|
812
|
+
DUK_EXTERNAL_DECL void *duk_require_buffer_data(duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
|
813
|
+
DUK_EXTERNAL_DECL void *duk_require_pointer(duk_context *ctx, duk_idx_t idx);
|
814
|
+
DUK_EXTERNAL_DECL duk_c_function duk_require_c_function(duk_context *ctx, duk_idx_t idx);
|
815
|
+
DUK_EXTERNAL_DECL duk_context *duk_require_context(duk_context *ctx, duk_idx_t idx);
|
816
|
+
DUK_EXTERNAL_DECL void duk_require_function(duk_context *ctx, duk_idx_t idx);
|
817
|
+
#define duk_require_callable(ctx,idx) \
|
818
|
+
duk_require_function((ctx), (idx))
|
819
|
+
DUK_EXTERNAL_DECL void *duk_require_heapptr(duk_context *ctx, duk_idx_t idx);
|
820
|
+
|
821
|
+
/* Symbols are object coercible and covered by DUK_TYPE_MASK_STRING. */
|
822
|
+
#define duk_require_object_coercible(ctx,idx) \
|
823
|
+
((void) duk_check_type_mask((ctx), (idx), DUK_TYPE_MASK_BOOLEAN | \
|
742
824
|
DUK_TYPE_MASK_NUMBER | \
|
743
825
|
DUK_TYPE_MASK_STRING | \
|
744
826
|
DUK_TYPE_MASK_OBJECT | \
|
@@ -754,57 +836,58 @@ DUK_EXTERNAL_DECL void *duk_require_heapptr(duk_context *ctx, duk_idx_t index);
|
|
754
836
|
* or an internal error (e.g. from out of memory).
|
755
837
|
*/
|
756
838
|
|
757
|
-
DUK_EXTERNAL_DECL void duk_to_undefined(duk_context *ctx, duk_idx_t
|
758
|
-
DUK_EXTERNAL_DECL void duk_to_null(duk_context *ctx, duk_idx_t
|
759
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t
|
760
|
-
DUK_EXTERNAL_DECL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t
|
761
|
-
DUK_EXTERNAL_DECL duk_int_t duk_to_int(duk_context *ctx, duk_idx_t
|
762
|
-
DUK_EXTERNAL_DECL duk_uint_t duk_to_uint(duk_context *ctx, duk_idx_t
|
763
|
-
DUK_EXTERNAL_DECL duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t
|
764
|
-
DUK_EXTERNAL_DECL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t
|
765
|
-
DUK_EXTERNAL_DECL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t
|
766
|
-
DUK_EXTERNAL_DECL const char *duk_to_string(duk_context *ctx, duk_idx_t
|
767
|
-
DUK_EXTERNAL_DECL const char *duk_to_lstring(duk_context *ctx, duk_idx_t
|
768
|
-
DUK_EXTERNAL_DECL void *duk_to_buffer_raw(duk_context *ctx, duk_idx_t
|
769
|
-
DUK_EXTERNAL_DECL void *duk_to_pointer(duk_context *ctx, duk_idx_t
|
770
|
-
DUK_EXTERNAL_DECL void duk_to_object(duk_context *ctx, duk_idx_t
|
771
|
-
DUK_EXTERNAL_DECL void
|
772
|
-
DUK_EXTERNAL_DECL void duk_to_primitive(duk_context *ctx, duk_idx_t index, duk_int_t hint);
|
839
|
+
DUK_EXTERNAL_DECL void duk_to_undefined(duk_context *ctx, duk_idx_t idx);
|
840
|
+
DUK_EXTERNAL_DECL void duk_to_null(duk_context *ctx, duk_idx_t idx);
|
841
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t idx);
|
842
|
+
DUK_EXTERNAL_DECL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t idx);
|
843
|
+
DUK_EXTERNAL_DECL duk_int_t duk_to_int(duk_context *ctx, duk_idx_t idx);
|
844
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_to_uint(duk_context *ctx, duk_idx_t idx);
|
845
|
+
DUK_EXTERNAL_DECL duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t idx);
|
846
|
+
DUK_EXTERNAL_DECL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t idx);
|
847
|
+
DUK_EXTERNAL_DECL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t idx);
|
848
|
+
DUK_EXTERNAL_DECL const char *duk_to_string(duk_context *ctx, duk_idx_t idx);
|
849
|
+
DUK_EXTERNAL_DECL const char *duk_to_lstring(duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
|
850
|
+
DUK_EXTERNAL_DECL void *duk_to_buffer_raw(duk_context *ctx, duk_idx_t idx, duk_size_t *out_size, duk_uint_t flags);
|
851
|
+
DUK_EXTERNAL_DECL void *duk_to_pointer(duk_context *ctx, duk_idx_t idx);
|
852
|
+
DUK_EXTERNAL_DECL void duk_to_object(duk_context *ctx, duk_idx_t idx);
|
853
|
+
DUK_EXTERNAL_DECL void duk_to_primitive(duk_context *ctx, duk_idx_t idx, duk_int_t hint);
|
773
854
|
|
774
855
|
#define DUK_BUF_MODE_FIXED 0 /* internal: request fixed buffer result */
|
775
856
|
#define DUK_BUF_MODE_DYNAMIC 1 /* internal: request dynamic buffer result */
|
776
857
|
#define DUK_BUF_MODE_DONTCARE 2 /* internal: don't care about fixed/dynamic nature */
|
777
858
|
|
778
|
-
#define duk_to_buffer(ctx,
|
779
|
-
duk_to_buffer_raw((ctx), (
|
780
|
-
#define duk_to_fixed_buffer(ctx,
|
781
|
-
duk_to_buffer_raw((ctx), (
|
782
|
-
#define duk_to_dynamic_buffer(ctx,
|
783
|
-
duk_to_buffer_raw((ctx), (
|
859
|
+
#define duk_to_buffer(ctx,idx,out_size) \
|
860
|
+
duk_to_buffer_raw((ctx), (idx), (out_size), DUK_BUF_MODE_DONTCARE)
|
861
|
+
#define duk_to_fixed_buffer(ctx,idx,out_size) \
|
862
|
+
duk_to_buffer_raw((ctx), (idx), (out_size), DUK_BUF_MODE_FIXED)
|
863
|
+
#define duk_to_dynamic_buffer(ctx,idx,out_size) \
|
864
|
+
duk_to_buffer_raw((ctx), (idx), (out_size), DUK_BUF_MODE_DYNAMIC)
|
784
865
|
|
785
866
|
/* safe variants of a few coercion operations */
|
786
|
-
DUK_EXTERNAL_DECL const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t
|
787
|
-
#define duk_safe_to_string(ctx,
|
788
|
-
duk_safe_to_lstring((ctx), (
|
867
|
+
DUK_EXTERNAL_DECL const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t idx, duk_size_t *out_len);
|
868
|
+
#define duk_safe_to_string(ctx,idx) \
|
869
|
+
duk_safe_to_lstring((ctx), (idx), NULL)
|
789
870
|
|
790
871
|
/*
|
791
872
|
* Misc conversion
|
792
873
|
*/
|
793
874
|
|
794
|
-
DUK_EXTERNAL_DECL const char *duk_base64_encode(duk_context *ctx, duk_idx_t
|
795
|
-
DUK_EXTERNAL_DECL void duk_base64_decode(duk_context *ctx, duk_idx_t
|
796
|
-
DUK_EXTERNAL_DECL const char *duk_hex_encode(duk_context *ctx, duk_idx_t
|
797
|
-
DUK_EXTERNAL_DECL void duk_hex_decode(duk_context *ctx, duk_idx_t
|
798
|
-
DUK_EXTERNAL_DECL const char *duk_json_encode(duk_context *ctx, duk_idx_t
|
799
|
-
DUK_EXTERNAL_DECL void duk_json_decode(duk_context *ctx, duk_idx_t
|
875
|
+
DUK_EXTERNAL_DECL const char *duk_base64_encode(duk_context *ctx, duk_idx_t idx);
|
876
|
+
DUK_EXTERNAL_DECL void duk_base64_decode(duk_context *ctx, duk_idx_t idx);
|
877
|
+
DUK_EXTERNAL_DECL const char *duk_hex_encode(duk_context *ctx, duk_idx_t idx);
|
878
|
+
DUK_EXTERNAL_DECL void duk_hex_decode(duk_context *ctx, duk_idx_t idx);
|
879
|
+
DUK_EXTERNAL_DECL const char *duk_json_encode(duk_context *ctx, duk_idx_t idx);
|
880
|
+
DUK_EXTERNAL_DECL void duk_json_decode(duk_context *ctx, duk_idx_t idx);
|
881
|
+
|
882
|
+
DUK_EXTERNAL_DECL const char *duk_buffer_to_string(duk_context *ctx, duk_idx_t idx);
|
800
883
|
|
801
884
|
/*
|
802
885
|
* Buffer
|
803
886
|
*/
|
804
887
|
|
805
|
-
DUK_EXTERNAL_DECL void *duk_resize_buffer(duk_context *ctx, duk_idx_t
|
806
|
-
DUK_EXTERNAL_DECL void *duk_steal_buffer(duk_context *ctx, duk_idx_t
|
807
|
-
DUK_EXTERNAL_DECL void duk_config_buffer(duk_context *ctx, duk_idx_t
|
888
|
+
DUK_EXTERNAL_DECL void *duk_resize_buffer(duk_context *ctx, duk_idx_t idx, duk_size_t new_size);
|
889
|
+
DUK_EXTERNAL_DECL void *duk_steal_buffer(duk_context *ctx, duk_idx_t idx, duk_size_t *out_size);
|
890
|
+
DUK_EXTERNAL_DECL void duk_config_buffer(duk_context *ctx, duk_idx_t idx, void *ptr, duk_size_t len);
|
808
891
|
|
809
892
|
/*
|
810
893
|
* Property access
|
@@ -814,36 +897,51 @@ DUK_EXTERNAL_DECL void duk_config_buffer(duk_context *ctx, duk_idx_t index, void
|
|
814
897
|
* index as a property name (e.g. 123 is equivalent to the key "123").
|
815
898
|
*/
|
816
899
|
|
817
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t
|
818
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_string(duk_context *ctx, duk_idx_t
|
819
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
820
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
821
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
822
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
823
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
824
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
825
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
826
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
827
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
828
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
829
|
-
DUK_EXTERNAL_DECL
|
900
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t obj_idx);
|
901
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_string(duk_context *ctx, duk_idx_t obj_idx, const char *key);
|
902
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_lstring(duk_context *ctx, duk_idx_t obj_idx, const char *key, duk_size_t key_len);
|
903
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
|
904
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop(duk_context *ctx, duk_idx_t obj_idx);
|
905
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_string(duk_context *ctx, duk_idx_t obj_idx, const char *key);
|
906
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_lstring(duk_context *ctx, duk_idx_t obj_idx, const char *key, duk_size_t key_len);
|
907
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
|
908
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop(duk_context *ctx, duk_idx_t obj_idx);
|
909
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_string(duk_context *ctx, duk_idx_t obj_idx, const char *key);
|
910
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_lstring(duk_context *ctx, duk_idx_t obj_idx, const char *key, duk_size_t key_len);
|
911
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
|
912
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop(duk_context *ctx, duk_idx_t obj_idx);
|
913
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_string(duk_context *ctx, duk_idx_t obj_idx, const char *key);
|
914
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_lstring(duk_context *ctx, duk_idx_t obj_idx, const char *key, duk_size_t key_len);
|
915
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_index(duk_context *ctx, duk_idx_t obj_idx, duk_uarridx_t arr_idx);
|
916
|
+
|
917
|
+
DUK_EXTERNAL_DECL void duk_get_prop_desc(duk_context *ctx, duk_idx_t obj_idx, duk_uint_t flags);
|
918
|
+
DUK_EXTERNAL_DECL void duk_def_prop(duk_context *ctx, duk_idx_t obj_idx, duk_uint_t flags);
|
830
919
|
|
831
920
|
DUK_EXTERNAL_DECL duk_bool_t duk_get_global_string(duk_context *ctx, const char *key);
|
921
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_global_lstring(duk_context *ctx, const char *key, duk_size_t key_len);
|
832
922
|
DUK_EXTERNAL_DECL duk_bool_t duk_put_global_string(duk_context *ctx, const char *key);
|
923
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_global_lstring(duk_context *ctx, const char *key, duk_size_t key_len);
|
924
|
+
|
925
|
+
/*
|
926
|
+
* Inspection
|
927
|
+
*/
|
928
|
+
|
929
|
+
DUK_EXTERNAL_DECL void duk_inspect_value(duk_context *ctx, duk_idx_t idx);
|
930
|
+
DUK_EXTERNAL_DECL void duk_inspect_callstack_entry(duk_context *ctx, duk_int_t level);
|
833
931
|
|
834
932
|
/*
|
835
933
|
* Object prototype
|
836
934
|
*/
|
837
935
|
|
838
|
-
DUK_EXTERNAL_DECL void duk_get_prototype(duk_context *ctx, duk_idx_t
|
839
|
-
DUK_EXTERNAL_DECL void duk_set_prototype(duk_context *ctx, duk_idx_t
|
936
|
+
DUK_EXTERNAL_DECL void duk_get_prototype(duk_context *ctx, duk_idx_t idx);
|
937
|
+
DUK_EXTERNAL_DECL void duk_set_prototype(duk_context *ctx, duk_idx_t idx);
|
840
938
|
|
841
939
|
/*
|
842
940
|
* Object finalizer
|
843
941
|
*/
|
844
942
|
|
845
|
-
DUK_EXTERNAL_DECL void duk_get_finalizer(duk_context *ctx, duk_idx_t
|
846
|
-
DUK_EXTERNAL_DECL void duk_set_finalizer(duk_context *ctx, duk_idx_t
|
943
|
+
DUK_EXTERNAL_DECL void duk_get_finalizer(duk_context *ctx, duk_idx_t idx);
|
944
|
+
DUK_EXTERNAL_DECL void duk_set_finalizer(duk_context *ctx, duk_idx_t idx);
|
847
945
|
|
848
946
|
/*
|
849
947
|
* Global object
|
@@ -855,36 +953,24 @@ DUK_EXTERNAL_DECL void duk_set_global_object(duk_context *ctx);
|
|
855
953
|
* Duktape/C function magic value
|
856
954
|
*/
|
857
955
|
|
858
|
-
DUK_EXTERNAL_DECL duk_int_t duk_get_magic(duk_context *ctx, duk_idx_t
|
859
|
-
DUK_EXTERNAL_DECL void duk_set_magic(duk_context *ctx, duk_idx_t
|
956
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_magic(duk_context *ctx, duk_idx_t idx);
|
957
|
+
DUK_EXTERNAL_DECL void duk_set_magic(duk_context *ctx, duk_idx_t idx, duk_int_t magic);
|
860
958
|
DUK_EXTERNAL_DECL duk_int_t duk_get_current_magic(duk_context *ctx);
|
861
959
|
|
862
960
|
/*
|
863
961
|
* Module helpers: put multiple function or constant properties
|
864
962
|
*/
|
865
963
|
|
866
|
-
DUK_EXTERNAL_DECL void duk_put_function_list(duk_context *ctx, duk_idx_t
|
867
|
-
DUK_EXTERNAL_DECL void duk_put_number_list(duk_context *ctx, duk_idx_t
|
868
|
-
|
869
|
-
/*
|
870
|
-
* Variable access
|
871
|
-
*/
|
872
|
-
|
873
|
-
/* XXX: These calls are incomplete and not usable now. They are not (yet)
|
874
|
-
* part of the public API.
|
875
|
-
*/
|
876
|
-
DUK_EXTERNAL_DECL void duk_get_var(duk_context *ctx);
|
877
|
-
DUK_EXTERNAL_DECL void duk_put_var(duk_context *ctx);
|
878
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_del_var(duk_context *ctx);
|
879
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_has_var(duk_context *ctx);
|
964
|
+
DUK_EXTERNAL_DECL void duk_put_function_list(duk_context *ctx, duk_idx_t obj_idx, const duk_function_list_entry *funcs);
|
965
|
+
DUK_EXTERNAL_DECL void duk_put_number_list(duk_context *ctx, duk_idx_t obj_idx, const duk_number_list_entry *numbers);
|
880
966
|
|
881
967
|
/*
|
882
968
|
* Object operations
|
883
969
|
*/
|
884
970
|
|
885
|
-
DUK_EXTERNAL_DECL void duk_compact(duk_context *ctx, duk_idx_t
|
886
|
-
DUK_EXTERNAL_DECL void duk_enum(duk_context *ctx, duk_idx_t
|
887
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_next(duk_context *ctx, duk_idx_t
|
971
|
+
DUK_EXTERNAL_DECL void duk_compact(duk_context *ctx, duk_idx_t obj_idx);
|
972
|
+
DUK_EXTERNAL_DECL void duk_enum(duk_context *ctx, duk_idx_t obj_idx, duk_uint_t enum_flags);
|
973
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_next(duk_context *ctx, duk_idx_t enum_idx, duk_bool_t get_value);
|
888
974
|
|
889
975
|
/*
|
890
976
|
* String manipulation
|
@@ -892,19 +978,20 @@ DUK_EXTERNAL_DECL duk_bool_t duk_next(duk_context *ctx, duk_idx_t enum_index, du
|
|
892
978
|
|
893
979
|
DUK_EXTERNAL_DECL void duk_concat(duk_context *ctx, duk_idx_t count);
|
894
980
|
DUK_EXTERNAL_DECL void duk_join(duk_context *ctx, duk_idx_t count);
|
895
|
-
DUK_EXTERNAL_DECL void duk_decode_string(duk_context *ctx, duk_idx_t
|
896
|
-
DUK_EXTERNAL_DECL void duk_map_string(duk_context *ctx, duk_idx_t
|
897
|
-
DUK_EXTERNAL_DECL void duk_substring(duk_context *ctx, duk_idx_t
|
898
|
-
DUK_EXTERNAL_DECL void duk_trim(duk_context *ctx, duk_idx_t
|
899
|
-
DUK_EXTERNAL_DECL duk_codepoint_t duk_char_code_at(duk_context *ctx, duk_idx_t
|
981
|
+
DUK_EXTERNAL_DECL void duk_decode_string(duk_context *ctx, duk_idx_t idx, duk_decode_char_function callback, void *udata);
|
982
|
+
DUK_EXTERNAL_DECL void duk_map_string(duk_context *ctx, duk_idx_t idx, duk_map_char_function callback, void *udata);
|
983
|
+
DUK_EXTERNAL_DECL void duk_substring(duk_context *ctx, duk_idx_t idx, duk_size_t start_char_offset, duk_size_t end_char_offset);
|
984
|
+
DUK_EXTERNAL_DECL void duk_trim(duk_context *ctx, duk_idx_t idx);
|
985
|
+
DUK_EXTERNAL_DECL duk_codepoint_t duk_char_code_at(duk_context *ctx, duk_idx_t idx, duk_size_t char_offset);
|
900
986
|
|
901
987
|
/*
|
902
988
|
* Ecmascript operators
|
903
989
|
*/
|
904
990
|
|
905
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_equals(duk_context *ctx, duk_idx_t
|
906
|
-
DUK_EXTERNAL_DECL duk_bool_t duk_strict_equals(duk_context *ctx, duk_idx_t
|
907
|
-
DUK_EXTERNAL_DECL duk_bool_t
|
991
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_equals(duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
|
992
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_strict_equals(duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
|
993
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_samevalue(duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
|
994
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_instanceof(duk_context *ctx, duk_idx_t idx1, duk_idx_t idx2);
|
908
995
|
|
909
996
|
/*
|
910
997
|
* Function (method) calls
|
@@ -912,13 +999,13 @@ DUK_EXTERNAL_DECL duk_bool_t duk_instanceof(duk_context *ctx, duk_idx_t index1,
|
|
912
999
|
|
913
1000
|
DUK_EXTERNAL_DECL void duk_call(duk_context *ctx, duk_idx_t nargs);
|
914
1001
|
DUK_EXTERNAL_DECL void duk_call_method(duk_context *ctx, duk_idx_t nargs);
|
915
|
-
DUK_EXTERNAL_DECL void duk_call_prop(duk_context *ctx, duk_idx_t
|
1002
|
+
DUK_EXTERNAL_DECL void duk_call_prop(duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs);
|
916
1003
|
DUK_EXTERNAL_DECL duk_int_t duk_pcall(duk_context *ctx, duk_idx_t nargs);
|
917
1004
|
DUK_EXTERNAL_DECL duk_int_t duk_pcall_method(duk_context *ctx, duk_idx_t nargs);
|
918
|
-
DUK_EXTERNAL_DECL duk_int_t duk_pcall_prop(duk_context *ctx, duk_idx_t
|
1005
|
+
DUK_EXTERNAL_DECL duk_int_t duk_pcall_prop(duk_context *ctx, duk_idx_t obj_idx, duk_idx_t nargs);
|
919
1006
|
DUK_EXTERNAL_DECL void duk_new(duk_context *ctx, duk_idx_t nargs);
|
920
1007
|
DUK_EXTERNAL_DECL duk_int_t duk_pnew(duk_context *ctx, duk_idx_t nargs);
|
921
|
-
DUK_EXTERNAL_DECL duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_function func, duk_idx_t nargs, duk_idx_t nrets);
|
1008
|
+
DUK_EXTERNAL_DECL duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_function func, void *udata, duk_idx_t nargs, duk_idx_t nrets);
|
922
1009
|
|
923
1010
|
/*
|
924
1011
|
* Thread management
|
@@ -937,103 +1024,72 @@ DUK_EXTERNAL_DECL duk_int_t duk_compile_raw(duk_context *ctx, const char *src_bu
|
|
937
1024
|
|
938
1025
|
/* plain */
|
939
1026
|
#define duk_eval(ctx) \
|
940
|
-
((void) duk_eval_raw((ctx), NULL, 0,
|
1027
|
+
((void) duk_eval_raw((ctx), NULL, 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOFILENAME))
|
941
1028
|
|
942
1029
|
#define duk_eval_noresult(ctx) \
|
943
|
-
((void) duk_eval_raw((ctx), NULL, 0,
|
1030
|
+
((void) duk_eval_raw((ctx), NULL, 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
|
944
1031
|
|
945
1032
|
#define duk_peval(ctx) \
|
946
|
-
(duk_eval_raw((ctx), NULL, 0,
|
1033
|
+
(duk_eval_raw((ctx), NULL, 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME))
|
947
1034
|
|
948
1035
|
#define duk_peval_noresult(ctx) \
|
949
|
-
(duk_eval_raw((ctx), NULL, 0,
|
1036
|
+
(duk_eval_raw((ctx), NULL, 0, 1 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
|
950
1037
|
|
951
1038
|
#define duk_compile(ctx,flags) \
|
952
|
-
((void) duk_compile_raw((ctx), NULL, 0,
|
1039
|
+
((void) duk_compile_raw((ctx), NULL, 0, 2 /*args*/ | (flags)))
|
953
1040
|
|
954
1041
|
#define duk_pcompile(ctx,flags) \
|
955
|
-
(duk_compile_raw((ctx), NULL, 0,
|
1042
|
+
(duk_compile_raw((ctx), NULL, 0, 2 /*args*/ | (flags) | DUK_COMPILE_SAFE))
|
956
1043
|
|
957
1044
|
/* string */
|
958
1045
|
#define duk_eval_string(ctx,src) \
|
959
|
-
((void) duk_eval_raw((ctx), (src), 0,
|
1046
|
+
((void) duk_eval_raw((ctx), (src), 0, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
|
960
1047
|
|
961
1048
|
#define duk_eval_string_noresult(ctx,src) \
|
962
|
-
((void) duk_eval_raw((ctx), (src), 0,
|
1049
|
+
((void) duk_eval_raw((ctx), (src), 0, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
|
963
1050
|
|
964
1051
|
#define duk_peval_string(ctx,src) \
|
965
|
-
(duk_eval_raw((ctx), (src), 0,
|
1052
|
+
(duk_eval_raw((ctx), (src), 0, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
|
966
1053
|
|
967
1054
|
#define duk_peval_string_noresult(ctx,src) \
|
968
|
-
(duk_eval_raw((ctx), (src), 0,
|
1055
|
+
(duk_eval_raw((ctx), (src), 0, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
|
969
1056
|
|
970
1057
|
#define duk_compile_string(ctx,flags,src) \
|
971
|
-
((void) duk_compile_raw((ctx), (src), 0,
|
1058
|
+
((void) duk_compile_raw((ctx), (src), 0, 0 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
|
972
1059
|
|
973
1060
|
#define duk_compile_string_filename(ctx,flags,src) \
|
974
|
-
((void) duk_compile_raw((ctx), (src), 0,
|
1061
|
+
((void) duk_compile_raw((ctx), (src), 0, 1 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
|
975
1062
|
|
976
1063
|
#define duk_pcompile_string(ctx,flags,src) \
|
977
|
-
(duk_compile_raw((ctx), (src), 0,
|
1064
|
+
(duk_compile_raw((ctx), (src), 0, 0 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN | DUK_COMPILE_NOFILENAME))
|
978
1065
|
|
979
1066
|
#define duk_pcompile_string_filename(ctx,flags,src) \
|
980
|
-
(duk_compile_raw((ctx), (src), 0,
|
1067
|
+
(duk_compile_raw((ctx), (src), 0, 1 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_STRLEN))
|
981
1068
|
|
982
1069
|
/* lstring */
|
983
1070
|
#define duk_eval_lstring(ctx,buf,len) \
|
984
|
-
((void) duk_eval_raw((ctx), buf, len,
|
1071
|
+
((void) duk_eval_raw((ctx), buf, len, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
|
985
1072
|
|
986
1073
|
#define duk_eval_lstring_noresult(ctx,buf,len) \
|
987
|
-
((void) duk_eval_raw((ctx), buf, len,
|
1074
|
+
((void) duk_eval_raw((ctx), buf, len, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
|
988
1075
|
|
989
1076
|
#define duk_peval_lstring(ctx,buf,len) \
|
990
|
-
(duk_eval_raw((ctx), buf, len,
|
1077
|
+
(duk_eval_raw((ctx), buf, len, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NOSOURCE | DUK_COMPILE_SAFE | DUK_COMPILE_NOFILENAME))
|
991
1078
|
|
992
1079
|
#define duk_peval_lstring_noresult(ctx,buf,len) \
|
993
|
-
(duk_eval_raw((ctx), buf, len,
|
1080
|
+
(duk_eval_raw((ctx), buf, len, 0 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NORESULT | DUK_COMPILE_NOFILENAME))
|
994
1081
|
|
995
1082
|
#define duk_compile_lstring(ctx,flags,buf,len) \
|
996
|
-
((void) duk_compile_raw((ctx), buf, len,
|
1083
|
+
((void) duk_compile_raw((ctx), buf, len, 0 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
|
997
1084
|
|
998
1085
|
#define duk_compile_lstring_filename(ctx,flags,buf,len) \
|
999
|
-
((void) duk_compile_raw((ctx), buf, len,
|
1086
|
+
((void) duk_compile_raw((ctx), buf, len, 1 /*args*/ | (flags) | DUK_COMPILE_NOSOURCE))
|
1000
1087
|
|
1001
1088
|
#define duk_pcompile_lstring(ctx,flags,buf,len) \
|
1002
|
-
(duk_compile_raw((ctx), buf, len,
|
1089
|
+
(duk_compile_raw((ctx), buf, len, 0 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE | DUK_COMPILE_NOFILENAME))
|
1003
1090
|
|
1004
1091
|
#define duk_pcompile_lstring_filename(ctx,flags,buf,len) \
|
1005
|
-
(duk_compile_raw((ctx), buf, len,
|
1006
|
-
|
1007
|
-
/* file */
|
1008
|
-
#define duk_eval_file(ctx,path) \
|
1009
|
-
((void) duk_push_string_file_raw((ctx), (path), 0), \
|
1010
|
-
(void) duk_push_string((ctx), (path)), \
|
1011
|
-
(void) duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL))
|
1012
|
-
|
1013
|
-
#define duk_eval_file_noresult(ctx,path) \
|
1014
|
-
((void) duk_push_string_file_raw((ctx), (path), 0), \
|
1015
|
-
(void) duk_push_string((ctx), (path)), \
|
1016
|
-
(void) duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT))
|
1017
|
-
|
1018
|
-
#define duk_peval_file(ctx,path) \
|
1019
|
-
((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
|
1020
|
-
(void) duk_push_string((ctx), (path)), \
|
1021
|
-
duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE))
|
1022
|
-
|
1023
|
-
#define duk_peval_file_noresult(ctx,path) \
|
1024
|
-
((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
|
1025
|
-
(void) duk_push_string((ctx), (path)), \
|
1026
|
-
duk_eval_raw((ctx), NULL, 0, 3 /*args*/ | DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT))
|
1027
|
-
|
1028
|
-
#define duk_compile_file(ctx,flags,path) \
|
1029
|
-
((void) duk_push_string_file_raw((ctx), (path), 0), \
|
1030
|
-
(void) duk_push_string((ctx), (path)), \
|
1031
|
-
(void) duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags)))
|
1032
|
-
|
1033
|
-
#define duk_pcompile_file(ctx,flags,path) \
|
1034
|
-
((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
|
1035
|
-
(void) duk_push_string((ctx), (path)), \
|
1036
|
-
duk_compile_raw((ctx), NULL, 0, 3 /*args*/ | (flags) | DUK_COMPILE_SAFE))
|
1092
|
+
(duk_compile_raw((ctx), buf, len, 1 /*args*/ | (flags) | DUK_COMPILE_SAFE | DUK_COMPILE_NOSOURCE))
|
1037
1093
|
|
1038
1094
|
/*
|
1039
1095
|
* Bytecode load/dump
|
@@ -1042,58 +1098,38 @@ DUK_EXTERNAL_DECL duk_int_t duk_compile_raw(duk_context *ctx, const char *src_bu
|
|
1042
1098
|
DUK_EXTERNAL_DECL void duk_dump_function(duk_context *ctx);
|
1043
1099
|
DUK_EXTERNAL_DECL void duk_load_function(duk_context *ctx);
|
1044
1100
|
|
1045
|
-
/*
|
1046
|
-
* Logging
|
1047
|
-
*/
|
1048
|
-
|
1049
|
-
DUK_EXTERNAL_DECL void duk_log(duk_context *ctx, duk_int_t level, const char *fmt, ...);
|
1050
|
-
DUK_EXTERNAL_DECL void duk_log_va(duk_context *ctx, duk_int_t level, const char *fmt, va_list ap);
|
1051
|
-
|
1052
1101
|
/*
|
1053
1102
|
* Debugging
|
1054
1103
|
*/
|
1055
1104
|
|
1056
1105
|
DUK_EXTERNAL_DECL void duk_push_context_dump(duk_context *ctx);
|
1057
1106
|
|
1058
|
-
#if defined(DUK_USE_FILE_IO)
|
1059
|
-
/* internal use */
|
1060
|
-
#define duk_dump_context_filehandle(ctx,fh) \
|
1061
|
-
(duk_push_context_dump((ctx)), \
|
1062
|
-
DUK_FPRINTF((fh), "%s\n", duk_safe_to_string(ctx, -1)), \
|
1063
|
-
duk_pop(ctx))
|
1064
|
-
|
1065
|
-
/* external use */
|
1066
|
-
#define duk_dump_context_stdout(ctx) \
|
1067
|
-
duk_dump_context_filehandle((ctx), DUK_STDOUT)
|
1068
|
-
#define duk_dump_context_stderr(ctx) \
|
1069
|
-
duk_dump_context_filehandle((ctx), DUK_STDERR)
|
1070
|
-
#else /* DUK_USE_FILE_IO */
|
1071
|
-
#define duk_dump_context_stdout(ctx) ((void) 0)
|
1072
|
-
#define duk_dump_context_stderr(ctx) ((void) 0)
|
1073
|
-
#endif /* DUK_USE_FILE_IO */
|
1074
|
-
|
1075
1107
|
/*
|
1076
1108
|
* Debugger (debug protocol)
|
1077
1109
|
*/
|
1078
1110
|
|
1079
|
-
|
1080
|
-
|
1081
|
-
|
1082
|
-
|
1083
|
-
|
1084
|
-
|
1085
|
-
|
1086
|
-
|
1087
|
-
|
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);
|
1111
|
+
DUK_EXTERNAL_DECL void duk_debugger_attach(duk_context *ctx,
|
1112
|
+
duk_debug_read_function read_cb,
|
1113
|
+
duk_debug_write_function write_cb,
|
1114
|
+
duk_debug_peek_function peek_cb,
|
1115
|
+
duk_debug_read_flush_function read_flush_cb,
|
1116
|
+
duk_debug_write_flush_function write_flush_cb,
|
1117
|
+
duk_debug_request_function request_cb,
|
1118
|
+
duk_debug_detached_function detached_cb,
|
1119
|
+
void *udata);
|
1092
1120
|
DUK_EXTERNAL_DECL void duk_debugger_detach(duk_context *ctx);
|
1093
1121
|
DUK_EXTERNAL_DECL void duk_debugger_cooperate(duk_context *ctx);
|
1094
1122
|
DUK_EXTERNAL_DECL duk_bool_t duk_debugger_notify(duk_context *ctx, duk_idx_t nvalues);
|
1095
1123
|
DUK_EXTERNAL_DECL void duk_debugger_pause(duk_context *ctx);
|
1096
1124
|
|
1125
|
+
/*
|
1126
|
+
* Time handling
|
1127
|
+
*/
|
1128
|
+
|
1129
|
+
DUK_EXTERNAL_DECL duk_double_t duk_get_now(duk_context *ctx);
|
1130
|
+
DUK_EXTERNAL_DECL void duk_time_to_components(duk_context *ctx, duk_double_t timeval, duk_time_components *comp);
|
1131
|
+
DUK_EXTERNAL_DECL duk_double_t duk_components_to_time(duk_context *ctx, duk_time_components *comp);
|
1132
|
+
|
1097
1133
|
/*
|
1098
1134
|
* Date provider related constants
|
1099
1135
|
*
|
@@ -1130,7 +1166,7 @@ DUK_EXTERNAL_DECL void duk_debugger_pause(duk_context *ctx);
|
|
1130
1166
|
* depend on the specific ordering, so change with care. 16 bits are not
|
1131
1167
|
* enough for all parts (year, specifically).
|
1132
1168
|
*
|
1133
|
-
*
|
1169
|
+
* Must be in-sync with genbuiltins.py.
|
1134
1170
|
*/
|
1135
1171
|
#define DUK_DATE_IDX_YEAR 0 /* year */
|
1136
1172
|
#define DUK_DATE_IDX_MONTH 1 /* month: 0 to 11 */
|
@@ -1142,7 +1178,7 @@ DUK_EXTERNAL_DECL void duk_debugger_pause(duk_context *ctx);
|
|
1142
1178
|
#define DUK_DATE_IDX_WEEKDAY 7 /* weekday: 0 to 6, 0=sunday, 1=monday, etc */
|
1143
1179
|
#define DUK_DATE_IDX_NUM_PARTS 8
|
1144
1180
|
|
1145
|
-
/* Internal API call flags, used for various functions in
|
1181
|
+
/* Internal API call flags, used for various functions in duk_bi_date.c.
|
1146
1182
|
* Certain flags are used by only certain functions, but since the flags
|
1147
1183
|
* don't overlap, a single flags value can be passed around to multiple
|
1148
1184
|
* functions.
|
@@ -1150,7 +1186,7 @@ DUK_EXTERNAL_DECL void duk_debugger_pause(duk_context *ctx);
|
|
1150
1186
|
* The unused top bits of the flags field are also used to pass values
|
1151
1187
|
* to helpers (duk__get_part_helper() and duk__set_part_helper()).
|
1152
1188
|
*
|
1153
|
-
*
|
1189
|
+
* Must be in-sync with genbuiltins.py.
|
1154
1190
|
*/
|
1155
1191
|
|
1156
1192
|
/* NOTE: when writing a Date provider you only need a few specific
|
@@ -1187,7 +1223,7 @@ DUK_EXTERNAL_DECL const void * const duk_rom_compressed_pointers[];
|
|
1187
1223
|
* C++ name mangling
|
1188
1224
|
*/
|
1189
1225
|
|
1190
|
-
#
|
1226
|
+
#if defined(__cplusplus)
|
1191
1227
|
/* end 'extern "C"' wrapper */
|
1192
1228
|
}
|
1193
1229
|
#endif
|
@@ -1248,7 +1284,7 @@ DUK_EXTERNAL_DECL const void * const duk_rom_compressed_pointers[];
|
|
1248
1284
|
* duk_tval values. See: misc/clang_aliasing.c.
|
1249
1285
|
*/
|
1250
1286
|
|
1251
|
-
#
|
1287
|
+
#if !defined(DUK_DBLUNION_H_INCLUDED)
|
1252
1288
|
#define DUK_DBLUNION_H_INCLUDED
|
1253
1289
|
|
1254
1290
|
/*
|
@@ -1276,7 +1312,7 @@ typedef union duk_double_union duk_double_union;
|
|
1276
1312
|
*/
|
1277
1313
|
|
1278
1314
|
#if defined(DUK_USE_DOUBLE_LE)
|
1279
|
-
#
|
1315
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1280
1316
|
#define DUK_DBL_IDX_ULL0 0
|
1281
1317
|
#endif
|
1282
1318
|
#define DUK_DBL_IDX_UI0 1
|
@@ -1296,7 +1332,7 @@ typedef union duk_double_union duk_double_union;
|
|
1296
1332
|
#define DUK_DBL_IDX_VP0 DUK_DBL_IDX_UI0 /* packed tval */
|
1297
1333
|
#define DUK_DBL_IDX_VP1 DUK_DBL_IDX_UI1 /* packed tval */
|
1298
1334
|
#elif defined(DUK_USE_DOUBLE_BE)
|
1299
|
-
#
|
1335
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1300
1336
|
#define DUK_DBL_IDX_ULL0 0
|
1301
1337
|
#endif
|
1302
1338
|
#define DUK_DBL_IDX_UI0 0
|
@@ -1316,7 +1352,7 @@ typedef union duk_double_union duk_double_union;
|
|
1316
1352
|
#define DUK_DBL_IDX_VP0 DUK_DBL_IDX_UI0 /* packed tval */
|
1317
1353
|
#define DUK_DBL_IDX_VP1 DUK_DBL_IDX_UI1 /* packed tval */
|
1318
1354
|
#elif defined(DUK_USE_DOUBLE_ME)
|
1319
|
-
#
|
1355
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1320
1356
|
#define DUK_DBL_IDX_ULL0 0 /* not directly applicable, byte order differs from a double */
|
1321
1357
|
#endif
|
1322
1358
|
#define DUK_DBL_IDX_UI0 0
|
@@ -1352,8 +1388,8 @@ typedef union duk_double_union duk_double_union;
|
|
1352
1388
|
(u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) (v); \
|
1353
1389
|
} while (0)
|
1354
1390
|
|
1355
|
-
#
|
1356
|
-
#
|
1391
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1392
|
+
#if defined(DUK_USE_DOUBLE_ME)
|
1357
1393
|
#define DUK_DBLUNION_SET_HIGH32_ZERO_LOW32(u,v) do { \
|
1358
1394
|
(u)->ull[DUK_DBL_IDX_ULL0] = (duk_uint64_t) (v); \
|
1359
1395
|
} while (0)
|
@@ -1377,8 +1413,8 @@ typedef union duk_double_union duk_double_union;
|
|
1377
1413
|
#define DUK_DBLUNION_GET_HIGH32(u) ((u)->ui[DUK_DBL_IDX_UI0])
|
1378
1414
|
#define DUK_DBLUNION_GET_LOW32(u) ((u)->ui[DUK_DBL_IDX_UI1])
|
1379
1415
|
|
1380
|
-
#
|
1381
|
-
#
|
1416
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1417
|
+
#if defined(DUK_USE_DOUBLE_ME)
|
1382
1418
|
#define DUK_DBLUNION_SET_UINT64(u,v) do { \
|
1383
1419
|
(u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) ((v) >> 32); \
|
1384
1420
|
(u)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) (v); \
|
@@ -1418,70 +1454,98 @@ typedef union duk_double_union duk_double_union;
|
|
1418
1454
|
* feature that while doubles have a mixed byte order (32107654), unsigned
|
1419
1455
|
* long long values has a little endian byte order (76543210). When writing
|
1420
1456
|
* a logical double value through a ULL pointer, the 32-bit words need to be
|
1421
|
-
* swapped; hence the #
|
1457
|
+
* swapped; hence the #if defined()s below for ULL writes with DUK_USE_DOUBLE_ME.
|
1422
1458
|
* This is not full ARM support but suffices for some environments.
|
1423
1459
|
*/
|
1424
1460
|
|
1425
|
-
#
|
1426
|
-
#
|
1461
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1462
|
+
#if defined(DUK_USE_DOUBLE_ME)
|
1463
|
+
/* Macros for 64-bit ops + mixed endian doubles. */
|
1427
1464
|
#define DUK__DBLUNION_SET_NAN_FULL(u) do { \
|
1428
1465
|
(u)->ull[DUK_DBL_IDX_ULL0] = 0x000000007ff80000ULL; \
|
1429
1466
|
} while (0)
|
1467
|
+
#define DUK__DBLUNION_IS_NAN_FULL(u) \
|
1468
|
+
((((u)->ull[DUK_DBL_IDX_ULL0] & 0x000000007ff00000ULL) == 0x000000007ff00000ULL) && \
|
1469
|
+
((((u)->ull[DUK_DBL_IDX_ULL0]) & 0xffffffff000fffffULL) != 0))
|
1470
|
+
#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
|
1471
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x000000007ff80000ULL)
|
1472
|
+
#define DUK__DBLUNION_IS_ANYINF(u) \
|
1473
|
+
(((u)->ull[DUK_DBL_IDX_ULL0] & 0xffffffff7fffffffULL) == 0x000000007ff00000ULL)
|
1474
|
+
#define DUK__DBLUNION_IS_POSINF(u) \
|
1475
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x000000007ff00000ULL)
|
1476
|
+
#define DUK__DBLUNION_IS_NEGINF(u) \
|
1477
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x00000000fff00000ULL)
|
1478
|
+
#define DUK__DBLUNION_IS_ANYZERO(u) \
|
1479
|
+
(((u)->ull[DUK_DBL_IDX_ULL0] & 0xffffffff7fffffffULL) == 0x0000000000000000ULL)
|
1480
|
+
#define DUK__DBLUNION_IS_POSZERO(u) \
|
1481
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x0000000000000000ULL)
|
1482
|
+
#define DUK__DBLUNION_IS_NEGZERO(u) \
|
1483
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x0000000080000000ULL)
|
1430
1484
|
#else
|
1485
|
+
/* Macros for 64-bit ops + big/little endian doubles. */
|
1431
1486
|
#define DUK__DBLUNION_SET_NAN_FULL(u) do { \
|
1432
1487
|
(u)->ull[DUK_DBL_IDX_ULL0] = 0x7ff8000000000000ULL; \
|
1433
1488
|
} while (0)
|
1489
|
+
#define DUK__DBLUNION_IS_NAN_FULL(u) \
|
1490
|
+
((((u)->ull[DUK_DBL_IDX_ULL0] & 0x7ff0000000000000ULL) == 0x7ff0000000000000UL) && \
|
1491
|
+
((((u)->ull[DUK_DBL_IDX_ULL0]) & 0x000fffffffffffffULL) != 0))
|
1492
|
+
#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
|
1493
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x7ff8000000000000ULL)
|
1494
|
+
#define DUK__DBLUNION_IS_ANYINF(u) \
|
1495
|
+
(((u)->ull[DUK_DBL_IDX_ULL0] & 0x7fffffffffffffffULL) == 0x7ff0000000000000ULL)
|
1496
|
+
#define DUK__DBLUNION_IS_POSINF(u) \
|
1497
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x7ff0000000000000ULL)
|
1498
|
+
#define DUK__DBLUNION_IS_NEGINF(u) \
|
1499
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0xfff0000000000000ULL)
|
1500
|
+
#define DUK__DBLUNION_IS_ANYZERO(u) \
|
1501
|
+
(((u)->ull[DUK_DBL_IDX_ULL0] & 0x7fffffffffffffffULL) == 0x0000000000000000ULL)
|
1502
|
+
#define DUK__DBLUNION_IS_POSZERO(u) \
|
1503
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x0000000000000000ULL)
|
1504
|
+
#define DUK__DBLUNION_IS_NEGZERO(u) \
|
1505
|
+
((u)->ull[DUK_DBL_IDX_ULL0] == 0x8000000000000000ULL)
|
1434
1506
|
#endif
|
1435
1507
|
#else /* DUK_USE_64BIT_OPS */
|
1508
|
+
/* Macros for no 64-bit ops, any endianness. */
|
1436
1509
|
#define DUK__DBLUNION_SET_NAN_FULL(u) do { \
|
1437
1510
|
(u)->ui[DUK_DBL_IDX_UI0] = (duk_uint32_t) 0x7ff80000UL; \
|
1438
1511
|
(u)->ui[DUK_DBL_IDX_UI1] = (duk_uint32_t) 0x00000000UL; \
|
1439
1512
|
} while (0)
|
1440
|
-
#endif /* DUK_USE_64BIT_OPS */
|
1441
|
-
|
1442
|
-
#define DUK__DBLUNION_SET_NAN_NOTFULL(u) do { \
|
1443
|
-
(u)->us[DUK_DBL_IDX_US0] = 0x7ff8UL; \
|
1444
|
-
} while (0)
|
1445
|
-
|
1446
|
-
#ifdef DUK_USE_64BIT_OPS
|
1447
|
-
#ifdef DUK_USE_DOUBLE_ME
|
1448
|
-
#define DUK__DBLUNION_IS_NAN_FULL(u) \
|
1449
|
-
/* E == 0x7ff, F != 0 => NaN */ \
|
1450
|
-
((((u)->us[DUK_DBL_IDX_US0] & 0x7ff0UL) == 0x7ff0UL) && \
|
1451
|
-
((((u)->ull[DUK_DBL_IDX_ULL0]) & 0xffffffff000fffffULL) != 0))
|
1452
|
-
#else
|
1453
|
-
#define DUK__DBLUNION_IS_NAN_FULL(u) \
|
1454
|
-
/* E == 0x7ff, F != 0 => NaN */ \
|
1455
|
-
((((u)->us[DUK_DBL_IDX_US0] & 0x7ff0UL) == 0x7ff0UL) && \
|
1456
|
-
((((u)->ull[DUK_DBL_IDX_ULL0]) & 0x000fffffffffffffULL) != 0))
|
1457
|
-
#endif
|
1458
|
-
#else /* DUK_USE_64BIT_OPS */
|
1459
1513
|
#define DUK__DBLUNION_IS_NAN_FULL(u) \
|
1460
|
-
/* E == 0x7ff, F != 0 => NaN */ \
|
1461
1514
|
((((u)->ui[DUK_DBL_IDX_UI0] & 0x7ff00000UL) == 0x7ff00000UL) && \
|
1462
1515
|
(((u)->ui[DUK_DBL_IDX_UI0] & 0x000fffffUL) != 0 || \
|
1463
1516
|
(u)->ui[DUK_DBL_IDX_UI1] != 0))
|
1517
|
+
#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
|
1518
|
+
(((u)->ui[DUK_DBL_IDX_UI0] == 0x7ff80000UL) && \
|
1519
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1520
|
+
#define DUK__DBLUNION_IS_ANYINF(u) \
|
1521
|
+
((((u)->ui[DUK_DBL_IDX_UI0] & 0x7fffffffUL) == 0x7ff00000UL) && \
|
1522
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1523
|
+
#define DUK__DBLUNION_IS_POSINF(u) \
|
1524
|
+
(((u)->ui[DUK_DBL_IDX_UI0] == 0x7ff00000UL) && \
|
1525
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1526
|
+
#define DUK__DBLUNION_IS_NEGINF(u) \
|
1527
|
+
(((u)->ui[DUK_DBL_IDX_UI0] == 0xfff00000UL) && \
|
1528
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1529
|
+
#define DUK__DBLUNION_IS_ANYZERO(u) \
|
1530
|
+
((((u)->ui[DUK_DBL_IDX_UI0] & 0x7fffffffUL) == 0x00000000UL) && \
|
1531
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1532
|
+
#define DUK__DBLUNION_IS_POSZERO(u) \
|
1533
|
+
(((u)->ui[DUK_DBL_IDX_UI0] == 0x00000000UL) && \
|
1534
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1535
|
+
#define DUK__DBLUNION_IS_NEGZERO(u) \
|
1536
|
+
(((u)->ui[DUK_DBL_IDX_UI0] == 0x80000000UL) && \
|
1537
|
+
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1464
1538
|
#endif /* DUK_USE_64BIT_OPS */
|
1465
1539
|
|
1540
|
+
#define DUK__DBLUNION_SET_NAN_NOTFULL(u) do { \
|
1541
|
+
(u)->us[DUK_DBL_IDX_US0] = 0x7ff8UL; \
|
1542
|
+
} while (0)
|
1543
|
+
|
1466
1544
|
#define DUK__DBLUNION_IS_NAN_NOTFULL(u) \
|
1467
1545
|
/* E == 0x7ff, topmost four bits of F != 0 => assume NaN */ \
|
1468
1546
|
((((u)->us[DUK_DBL_IDX_US0] & 0x7ff0UL) == 0x7ff0UL) && \
|
1469
1547
|
(((u)->us[DUK_DBL_IDX_US0] & 0x000fUL) != 0x0000UL))
|
1470
1548
|
|
1471
|
-
#ifdef DUK_USE_64BIT_OPS
|
1472
|
-
#ifdef DUK_USE_DOUBLE_ME
|
1473
|
-
#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
|
1474
|
-
((u)->ull[DUK_DBL_IDX_ULL0] == 0x000000007ff80000ULL)
|
1475
|
-
#else
|
1476
|
-
#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
|
1477
|
-
((u)->ull[DUK_DBL_IDX_ULL0] == 0x7ff8000000000000ULL)
|
1478
|
-
#endif
|
1479
|
-
#else /* DUK_USE_64BIT_OPS */
|
1480
|
-
#define DUK__DBLUNION_IS_NORMALIZED_NAN_FULL(u) \
|
1481
|
-
(((u)->ui[DUK_DBL_IDX_UI0] == 0x7ff80000UL) && \
|
1482
|
-
((u)->ui[DUK_DBL_IDX_UI1] == 0x00000000UL))
|
1483
|
-
#endif /* DUK_USE_64BIT_OPS */
|
1484
|
-
|
1485
1549
|
#define DUK__DBLUNION_IS_NORMALIZED_NAN_NOTFULL(u) \
|
1486
1550
|
/* E == 0x7ff, F == 8 => normalized NaN */ \
|
1487
1551
|
((u)->us[DUK_DBL_IDX_US0] == 0x7ff8UL)
|
@@ -1521,8 +1585,8 @@ typedef union duk_double_union duk_double_union;
|
|
1521
1585
|
DUK_DBLUNION_IS_NORMALIZED_NAN((u))) /* or is a normalized NaN */
|
1522
1586
|
#else /* DUK_USE_PACKED_TVAL */
|
1523
1587
|
#define DUK_DBLUNION_NORMALIZE_NAN_CHECK(u) /* nop: no need to normalize */
|
1524
|
-
#define DUK_DBLUNION_IS_NAN(u) (DUK_ISNAN((u)->d))
|
1525
|
-
#define DUK_DBLUNION_IS_NORMALIZED_NAN(u) (DUK_ISNAN((u)->d))
|
1588
|
+
#define DUK_DBLUNION_IS_NAN(u) DUK__DBLUNION_IS_NAN_FULL((u)) /* (DUK_ISNAN((u)->d)) */
|
1589
|
+
#define DUK_DBLUNION_IS_NORMALIZED_NAN(u) DUK__DBLUNION_IS_NAN_FULL((u)) /* (DUK_ISNAN((u)->d)) */
|
1526
1590
|
#define DUK_DBLUNION_IS_NORMALIZED(u) 1 /* all doubles are considered normalized */
|
1527
1591
|
#define DUK_DBLUNION_SET_NAN(u) do { \
|
1528
1592
|
/* in non-packed representation we don't care about which NaN is used */ \
|
@@ -1530,6 +1594,14 @@ typedef union duk_double_union duk_double_union;
|
|
1530
1594
|
} while (0)
|
1531
1595
|
#endif /* DUK_USE_PACKED_TVAL */
|
1532
1596
|
|
1597
|
+
#define DUK_DBLUNION_IS_ANYINF(u) DUK__DBLUNION_IS_ANYINF((u))
|
1598
|
+
#define DUK_DBLUNION_IS_POSINF(u) DUK__DBLUNION_IS_POSINF((u))
|
1599
|
+
#define DUK_DBLUNION_IS_NEGINF(u) DUK__DBLUNION_IS_NEGINF((u))
|
1600
|
+
|
1601
|
+
#define DUK_DBLUNION_IS_ANYZERO(u) DUK__DBLUNION_IS_ANYZERO((u))
|
1602
|
+
#define DUK_DBLUNION_IS_POSZERO(u) DUK__DBLUNION_IS_POSZERO((u))
|
1603
|
+
#define DUK_DBLUNION_IS_NEGZERO(u) DUK__DBLUNION_IS_NEGZERO((u))
|
1604
|
+
|
1533
1605
|
/* XXX: native 64-bit byteswaps when available */
|
1534
1606
|
|
1535
1607
|
/* 64-bit byteswap, same operation independent of target endianness. */
|
@@ -1575,6 +1647,15 @@ typedef union duk_double_union duk_double_union;
|
|
1575
1647
|
/* Reverse operation is the same. */
|
1576
1648
|
#define DUK_DBLUNION_DOUBLE_NTOH(u) DUK_DBLUNION_DOUBLE_HTON((u))
|
1577
1649
|
|
1650
|
+
/* Some sign bit helpers. */
|
1651
|
+
#if defined(DUK_USE_64BIT_OPS)
|
1652
|
+
#define DUK_DBLUNION_HAS_SIGNBIT(u) (((u)->ull[DUK_DBL_IDX_ULL0] & 0x8000000000000000ULL) != 0)
|
1653
|
+
#define DUK_DBLUNION_GET_SIGNBIT(u) (((u)->ull[DUK_DBL_IDX_ULL0] >> 63U))
|
1654
|
+
#else
|
1655
|
+
#define DUK_DBLUNION_HAS_SIGNBIT(u) (((u)->ui[DUK_DBL_IDX_UI0] & 0x80000000UL) != 0)
|
1656
|
+
#define DUK_DBLUNION_GET_SIGNBIT(u) (((u)->ui[DUK_DBL_IDX_UI0] >> 31U))
|
1657
|
+
#endif
|
1658
|
+
|
1578
1659
|
#endif /* DUK_DBLUNION_H_INCLUDED */
|
1579
1660
|
|
1580
1661
|
#endif /* DUKTAPE_H_INCLUDED */
|