duktape 0.11.0.0 → 1.0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +45 -0
- data/ext/duktape/duktape.c +7962 -6809
- data/ext/duktape/duktape.h +476 -242
- data/ext/duktape/duktape_ext.c +4 -5
- data/lib/duktape/version.rb +1 -2
- metadata +3 -1
data/ext/duktape/duktape.h
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
/*
|
2
|
-
* Duktape public API for Duktape 0.
|
2
|
+
* Duktape public API for Duktape 1.0.2.
|
3
3
|
* See the API reference for documentation on call semantics.
|
4
4
|
* The exposed API is inside the DUK_API_PUBLIC_H_INCLUDED
|
5
5
|
* include guard. Other parts of the header are Duktape
|
6
6
|
* internal and related to platform/compiler/feature detection.
|
7
7
|
*
|
8
|
-
* Git commit
|
8
|
+
* Git commit a476318bf025137c2847c808a8334d8b7db985f2 (v1.0.2).
|
9
9
|
*
|
10
|
-
* See Duktape AUTHORS.
|
10
|
+
* See Duktape AUTHORS.rst and LICENSE.txt for copyright and
|
11
11
|
* licensing information.
|
12
12
|
*/
|
13
13
|
|
@@ -19,7 +19,7 @@
|
|
19
19
|
*
|
20
20
|
* (http://opensource.org/licenses/MIT)
|
21
21
|
*
|
22
|
-
* Copyright (c) 2013-2014 by Duktape authors (see AUTHORS.
|
22
|
+
* Copyright (c) 2013-2014 by Duktape authors (see AUTHORS.rst)
|
23
23
|
*
|
24
24
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
25
25
|
* of this software and associated documentation files (the "Software"), to deal
|
@@ -41,7 +41,7 @@
|
|
41
41
|
*
|
42
42
|
*/
|
43
43
|
|
44
|
-
/* AUTHORS.
|
44
|
+
/* AUTHORS.rst */
|
45
45
|
/*
|
46
46
|
* ===============
|
47
47
|
* Duktape authors
|
@@ -88,11 +88,14 @@
|
|
88
88
|
* * Andreas \u00d6man
|
89
89
|
* * Doug Sanden
|
90
90
|
* * Remo Eichenberger (https://github.com/remoe)
|
91
|
+
* * David Demelier
|
91
92
|
*/
|
92
93
|
|
93
94
|
#ifndef DUKTAPE_H_INCLUDED
|
94
95
|
#define DUKTAPE_H_INCLUDED
|
95
96
|
|
97
|
+
#define DUK_SINGLE_FILE
|
98
|
+
|
96
99
|
/*
|
97
100
|
* Determine platform features, select feature selection defines
|
98
101
|
* (e.g. _XOPEN_SOURCE), include system headers, and define DUK_USE_XXX
|
@@ -230,7 +233,7 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
230
233
|
#endif
|
231
234
|
|
232
235
|
/* MIPS */
|
233
|
-
/*
|
236
|
+
/* XXX: 32-bit vs. 64-bit MIPS */
|
234
237
|
#if defined(__mips__) || defined(mips) || defined(_MIPS_ISA) || \
|
235
238
|
defined(_R3000) || defined(_R4000) || defined(_R5900) || \
|
236
239
|
defined(_MIPS_ISA_MIPS1) || defined(_MIPS_ISA_MIPS2) || \
|
@@ -272,12 +275,17 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
272
275
|
#define DUK_F_BSD
|
273
276
|
#endif
|
274
277
|
|
275
|
-
/* Generic Unix */
|
278
|
+
/* Generic Unix (includes Cygwin) */
|
276
279
|
#if defined(__unix) || defined(__unix__) || defined(unix) || \
|
277
280
|
defined(DUK_F_LINUX) || defined(DUK_F_BSD)
|
278
281
|
#define DUK_F_UNIX
|
279
282
|
#endif
|
280
283
|
|
284
|
+
/* Cygwin */
|
285
|
+
#if defined(__CYGWIN__)
|
286
|
+
#define DUK_F_CYGWIN
|
287
|
+
#endif
|
288
|
+
|
281
289
|
/* Windows (32-bit or above) */
|
282
290
|
#if defined(_WIN32) || defined(WIN32) || defined(_WIN64) || defined(WIN64) || \
|
283
291
|
defined(__WIN32__) || defined(__TOS_WIN__) || defined(__WINDOWS__)
|
@@ -328,6 +336,13 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
328
336
|
/* Clang */
|
329
337
|
#if defined(__clang__)
|
330
338
|
#define DUK_F_CLANG
|
339
|
+
/* It seems clang also defines __GNUC__, so undo the GCC detection. */
|
340
|
+
#if defined(DUK_F_GCC)
|
341
|
+
#undef DUK_F_GCC
|
342
|
+
#endif
|
343
|
+
#if defined(DUK_F_GCC_VERSION)
|
344
|
+
#undef DUK_F_GCC_VERSION
|
345
|
+
#endif
|
331
346
|
#endif
|
332
347
|
|
333
348
|
/* MSVC */
|
@@ -337,7 +352,14 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
337
352
|
* BOOST_MSVC_FULL_VER in http://www.boost.org/doc/libs/1_52_0/boost/config/compiler/visualc.hpp
|
338
353
|
*/
|
339
354
|
#define DUK_F_MSVC
|
355
|
+
#if defined(_MSC_FULL_VER)
|
356
|
+
#if (_MSC_FULL_VER > 100000000)
|
357
|
+
#define DUK_F_MSVC_FULL_VER _MSC_FULL_VER
|
358
|
+
#else
|
359
|
+
#define DUK_F_MSCV_FULL_VER (_MSC_FULL_VER * 10)
|
340
360
|
#endif
|
361
|
+
#endif
|
362
|
+
#endif /* _MSC_VER */
|
341
363
|
|
342
364
|
/* MinGW */
|
343
365
|
#if defined(__MINGW32__) || defined(__MINGW64__)
|
@@ -393,7 +415,7 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
393
415
|
* #ifdefs, but it would then be more difficult to make fixes which
|
394
416
|
* affect only a specific platform.
|
395
417
|
*
|
396
|
-
*
|
418
|
+
* XXX: add a way to provide custom functions to provide the critical
|
397
419
|
* primitives; this would be convenient when porting to unknown platforms
|
398
420
|
* (rather than muck with Duktape internals).
|
399
421
|
*/
|
@@ -563,6 +585,17 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
563
585
|
#include <sys/param.h>
|
564
586
|
#include <sys/time.h>
|
565
587
|
#include <time.h>
|
588
|
+
#elif defined(DUK_F_CYGWIN)
|
589
|
+
/* Cygwin -- don't use strptime() for now */
|
590
|
+
#define DUK_USE_DATE_NOW_GETTIMEOFDAY
|
591
|
+
#define DUK_USE_DATE_TZO_GMTIME_R
|
592
|
+
#define DUK_USE_DATE_FMT_STRFTIME
|
593
|
+
#include <sys/types.h>
|
594
|
+
#include <endian.h>
|
595
|
+
#include <limits.h>
|
596
|
+
#include <sys/param.h>
|
597
|
+
#include <sys/time.h>
|
598
|
+
#include <time.h>
|
566
599
|
#else
|
567
600
|
/* Other UNIX, hopefully others */
|
568
601
|
#define DUK_USE_DATE_NOW_GETTIMEOFDAY
|
@@ -631,7 +664,7 @@ static __inline__ unsigned long long duk_rdtsc(void) {
|
|
631
664
|
* being able to compare DUK_SIZE_MAX against a limit.
|
632
665
|
*/
|
633
666
|
|
634
|
-
/*
|
667
|
+
/* XXX: add feature options to force basic types from outside? */
|
635
668
|
|
636
669
|
#if !defined(INT_MAX)
|
637
670
|
#error INT_MAX not defined
|
@@ -1978,6 +2011,94 @@ typedef FILE duk_file;
|
|
1978
2011
|
#define DUK_UNLIKELY(x) (x)
|
1979
2012
|
#endif
|
1980
2013
|
|
2014
|
+
/*
|
2015
|
+
* Symbol visibility macros
|
2016
|
+
*/
|
2017
|
+
|
2018
|
+
/* XXX: user override for these? user override for just using the default visibility macros? */
|
2019
|
+
/* XXX: separate macros for function and data may be necessary at some point. */
|
2020
|
+
|
2021
|
+
#if defined(DUK_F_GCC_VERSION)
|
2022
|
+
#if (DUK_F_GCC_VERSION >= 40000)
|
2023
|
+
/* Might work on earlier versions too but limit to GCC 4+. */
|
2024
|
+
#define DUK_F_GCC_SYMBOL_VISIBILITY
|
2025
|
+
#endif
|
2026
|
+
#endif
|
2027
|
+
#if defined(DUK_F_CLANG) && !defined(DUK_F_GCC_SYMBOL_VISIBILITY)
|
2028
|
+
#define DUK_F_GCC_SYMBOL_VISIBILITY
|
2029
|
+
#endif
|
2030
|
+
#if defined(DUK_OPT_DLL_BUILD) && defined(_WIN32) && (defined(_MSC_VER) || defined(__GNUC__))
|
2031
|
+
/* __declspec(dllexport) and __declspec(dllimport) only for Windows DLL build.
|
2032
|
+
* MSVC: any minimum version?
|
2033
|
+
* MinGW: no minimum version, even gcc-2.95.3 supported dllimport/dllexport.
|
2034
|
+
*/
|
2035
|
+
#define DUK_F_MSVC_DLL_SYMBOL_VISIBILITY
|
2036
|
+
#endif
|
2037
|
+
|
2038
|
+
#if defined(DUK_F_GCC_SYMBOL_VISIBILITY)
|
2039
|
+
/* GCC 4+ visibility attributes. */
|
2040
|
+
#define DUK_EXTERNAL_DECL __attribute__ ((visibility("default"))) extern
|
2041
|
+
#define DUK_EXTERNAL __attribute__ ((visibility("default")))
|
2042
|
+
#if defined(DUK_SINGLE_FILE)
|
2043
|
+
#define DUK_INTERNAL_DECL static
|
2044
|
+
#define DUK_INTERNAL static
|
2045
|
+
#else
|
2046
|
+
#define DUK_INTERNAL_DECL __attribute__ ((visibility("hidden"))) extern
|
2047
|
+
#define DUK_INTERNAL __attribute__ ((visibility("hidden")))
|
2048
|
+
#endif
|
2049
|
+
#elif defined(DUK_F_MSVC_DLL_SYMBOL_VISIBILITY)
|
2050
|
+
/* MSVC dllexport/dllimport: appropriate __declspec depends on whether we're
|
2051
|
+
* compiling Duktape or the application.
|
2052
|
+
*/
|
2053
|
+
#if defined(DUK_COMPILING_DUKTAPE)
|
2054
|
+
#define DUK_EXTERNAL_DECL extern __declspec(dllexport)
|
2055
|
+
#define DUK_EXTERNAL __declspec(dllexport)
|
2056
|
+
#else
|
2057
|
+
#define DUK_EXTERNAL_DECL extern __declspec(dllimport)
|
2058
|
+
#define DUK_EXTERNAL should_not_happen
|
2059
|
+
#endif
|
2060
|
+
#if defined(DUK_SINGLE_FILE)
|
2061
|
+
#define DUK_INTERNAL_DECL static
|
2062
|
+
#define DUK_INTERNAL static
|
2063
|
+
#else
|
2064
|
+
#define DUK_INTERNAL_DECL extern
|
2065
|
+
#define DUK_INTERNAL /*empty*/
|
2066
|
+
#endif
|
2067
|
+
#else
|
2068
|
+
/* Default visibility. */
|
2069
|
+
#define DUK_EXTERNAL_DECL extern
|
2070
|
+
#define DUK_EXTERNAL /*empty*/
|
2071
|
+
#if defined(DUK_SINGLE_FILE)
|
2072
|
+
#define DUK_INTERNAL_DECL static
|
2073
|
+
#define DUK_INTERNAL static
|
2074
|
+
#else /* DUK_SINGLE_FILE */
|
2075
|
+
#define DUK_INTERNAL_DECL extern
|
2076
|
+
#define DUK_INTERNAL /*empty*/
|
2077
|
+
#endif
|
2078
|
+
#endif
|
2079
|
+
|
2080
|
+
/* For now, these are shared. */
|
2081
|
+
#define DUK_LOCAL_DECL static
|
2082
|
+
#define DUK_LOCAL static
|
2083
|
+
|
2084
|
+
/* In C++ one cannot declare and define "static" variables separately (GH-63).
|
2085
|
+
* As a quick workaround, use "extern" instead: it makes the symbol table ugly
|
2086
|
+
* but allows compilation. A better fix is to avoid the need to forward declare
|
2087
|
+
* internal symbols, but it requires changes to combine_src.py.
|
2088
|
+
*
|
2089
|
+
* XXX: better fix is needed.
|
2090
|
+
*/
|
2091
|
+
#if defined(DUK_F_CPP)
|
2092
|
+
#undef DUK_INTERNAL_DECL
|
2093
|
+
#undef DUK_INTERNAL
|
2094
|
+
#undef DUK_LOCAL_DECL
|
2095
|
+
#undef DUK_LOCAL
|
2096
|
+
#define DUK_INTERNAL_DECL extern
|
2097
|
+
#define DUK_INTERNAL /*empty*/
|
2098
|
+
#define DUK_LOCAL_DECL extern
|
2099
|
+
#define DUK_LOCAL /*empty*/
|
2100
|
+
#endif
|
2101
|
+
|
1981
2102
|
/*
|
1982
2103
|
* __FILE__, __LINE__, __func__ are wrapped. Especially __func__ is a
|
1983
2104
|
* problem because it is not available even in some compilers which try
|
@@ -2018,7 +2139,53 @@ typedef FILE duk_file;
|
|
2018
2139
|
#define DUK_USE_ARCH_STRING "unknown"
|
2019
2140
|
#endif
|
2020
2141
|
|
2021
|
-
/*
|
2142
|
+
/*
|
2143
|
+
* OS string, human readable value exposed in Duktape.env
|
2144
|
+
*/
|
2145
|
+
|
2146
|
+
#if defined(DUK_F_LINUX)
|
2147
|
+
#define DUK_USE_OS_STRING "linux"
|
2148
|
+
#elif defined(DUK_F_FREEBSD)
|
2149
|
+
#define DUK_USE_OS_STRING "freebsd"
|
2150
|
+
#elif defined(DUK_F_OPENBSD)
|
2151
|
+
#define DUK_USE_OS_STRING "openbsd"
|
2152
|
+
#elif defined(DUK_F_NETBSD)
|
2153
|
+
#define DUK_USE_OS_STRING "netbsd"
|
2154
|
+
#elif defined(DUK_F_BSD)
|
2155
|
+
#define DUK_USE_OS_STRING "bsd"
|
2156
|
+
#elif defined(DUK_F_UNIX)
|
2157
|
+
#define DUK_USE_OS_STRING "unix"
|
2158
|
+
#elif defined(DUK_F_WINDOWS)
|
2159
|
+
#define DUK_USE_OS_STRING "windows"
|
2160
|
+
#elif defined(DUK_F_TOS)
|
2161
|
+
#define DUK_USE_OS_STRING "tos"
|
2162
|
+
#elif defined(DUK_F_AMIGAOS)
|
2163
|
+
#define DUK_USE_OS_STRING "amigaos"
|
2164
|
+
#elif defined(DUK_F_QNX)
|
2165
|
+
#define DUK_USE_OS_STRING "qnx"
|
2166
|
+
#else
|
2167
|
+
#define DUK_USE_OS_STRING "unknown"
|
2168
|
+
#endif
|
2169
|
+
|
2170
|
+
/*
|
2171
|
+
* Compiler string, human readable value exposed in Duktape.env
|
2172
|
+
*/
|
2173
|
+
|
2174
|
+
#if defined(DUK_F_GCC)
|
2175
|
+
#define DUK_USE_COMPILER_STRING "gcc"
|
2176
|
+
#elif defined(DUK_F_CLANG)
|
2177
|
+
#define DUK_USE_COMPILER_STRING "clang"
|
2178
|
+
#elif defined(DUK_F_MSVC)
|
2179
|
+
#define DUK_USE_COMPILER_STRING "msvc"
|
2180
|
+
#elif defined(DUK_F_MINGW)
|
2181
|
+
#define DUK_USE_COMPILER_STRING "mingw"
|
2182
|
+
#elif defined(DUK_F_VBCC)
|
2183
|
+
#define DUK_USE_COMPILER_STRING "vbcc"
|
2184
|
+
#else
|
2185
|
+
#define DUK_USE_COMPILER_STRING "unknown"
|
2186
|
+
#endif
|
2187
|
+
|
2188
|
+
/*
|
2022
2189
|
* Tagged type representation (duk_tval)
|
2023
2190
|
*/
|
2024
2191
|
|
@@ -2112,10 +2279,15 @@ typedef FILE duk_file;
|
|
2112
2279
|
* Execution and debugger options
|
2113
2280
|
*/
|
2114
2281
|
|
2282
|
+
/* Executor interrupt disabled for 1.0 release: there is no API to use it */
|
2283
|
+
#if 0
|
2115
2284
|
#define DUK_USE_INTERRUPT_COUNTER
|
2116
2285
|
#if defined(DUK_OPT_NO_INTERRUPT_COUNTER)
|
2117
2286
|
#undef DUK_USE_INTERRUPT_COUNTER
|
2118
2287
|
#endif
|
2288
|
+
#endif
|
2289
|
+
|
2290
|
+
#undef DUK_USE_INTERRUPT_COUNTER
|
2119
2291
|
|
2120
2292
|
/* For opcodes with indirect indices, check final index against stack size.
|
2121
2293
|
* This should not be necessary because the compiler is trusted, and we don't
|
@@ -2228,7 +2400,7 @@ typedef FILE duk_file;
|
|
2228
2400
|
/* Treat function statements (function declarations outside top level of
|
2229
2401
|
* Program or FunctionBody) same as normal function declarations. This is
|
2230
2402
|
* also V8 behavior. See test-dev-func-decl-outside-top.js.
|
2231
|
-
*/
|
2403
|
+
*/
|
2232
2404
|
#define DUK_USE_NONSTD_FUNC_STMT
|
2233
2405
|
#if defined(DUK_OPT_NO_NONSTD_FUNC_STMT)
|
2234
2406
|
#undef DUK_USE_NONSTD_FUNC_STMT
|
@@ -2242,6 +2414,22 @@ typedef FILE duk_file;
|
|
2242
2414
|
#undef DUK_USE_NONSTD_ARRAY_SPLICE_DELCOUNT
|
2243
2415
|
#endif
|
2244
2416
|
|
2417
|
+
/* Array.prototype.concat() non-standard but real world compatible behavior
|
2418
|
+
* for non-existent trailing elements.
|
2419
|
+
*/
|
2420
|
+
#define DUK_USE_NONSTD_ARRAY_CONCAT_TRAILER
|
2421
|
+
#if defined(DUK_OPT_NO_NONSTD_ARRAY_CONCAT_TRAILER)
|
2422
|
+
#undef DUK_USE_NONSTD_ARRAY_CONCAT_TRAILER
|
2423
|
+
#endif
|
2424
|
+
|
2425
|
+
/* Array.prototype.map() non-standard but real world compatible behavior
|
2426
|
+
* for non-existent trailing elements.
|
2427
|
+
*/
|
2428
|
+
#define DUK_USE_NONSTD_ARRAY_MAP_TRAILER
|
2429
|
+
#if defined(DUK_OPT_NO_NONSTD_ARRAY_MAP_TRAILER)
|
2430
|
+
#undef DUK_USE_NONSTD_ARRAY_MAP_TRAILER
|
2431
|
+
#endif
|
2432
|
+
|
2245
2433
|
/* Non-standard 'caller' property for function instances, see
|
2246
2434
|
* test-bi-function-nonstd-caller-prop.js.
|
2247
2435
|
*/
|
@@ -2435,16 +2623,21 @@ typedef FILE duk_file;
|
|
2435
2623
|
#undef DUK_USE_ZERO_BUFFER_DATA
|
2436
2624
|
#endif
|
2437
2625
|
|
2626
|
+
#undef DUK_USE_VARIADIC_MACROS
|
2438
2627
|
#if defined(DUK_F_C99) || (defined(DUK_F_CPP11) && defined(__GNUC__))
|
2439
2628
|
#define DUK_USE_VARIADIC_MACROS
|
2440
|
-
#
|
2441
|
-
#
|
2629
|
+
#endif
|
2630
|
+
#if defined(_MSC_VER) && !defined(DUK_USE_VARIADIC_MACROS)
|
2631
|
+
#if (_MSC_VER >= 1400)
|
2632
|
+
/* VS2005+ should have variadic macros even when they're not C99. */
|
2633
|
+
#define DUK_USE_VARIADIC_MACROS
|
2634
|
+
#endif
|
2442
2635
|
#endif
|
2443
2636
|
|
2444
2637
|
/*
|
2445
2638
|
* Variable size array initialization.
|
2446
2639
|
*
|
2447
|
-
* Variable size array at the end of a structure is nonportable.
|
2640
|
+
* Variable size array at the end of a structure is nonportable.
|
2448
2641
|
* There are three alternatives:
|
2449
2642
|
*
|
2450
2643
|
* 1) C99 (flexible array member): char buf[]
|
@@ -2558,16 +2751,16 @@ typedef duk_codepoint_t (*duk_map_char_function) (void *udata, duk_codepoint_t c
|
|
2558
2751
|
typedef duk_ret_t (*duk_safe_call_function) (duk_context *ctx);
|
2559
2752
|
|
2560
2753
|
struct duk_memory_functions {
|
2561
|
-
duk_alloc_function
|
2562
|
-
duk_realloc_function
|
2563
|
-
duk_free_function
|
2754
|
+
duk_alloc_function alloc_func;
|
2755
|
+
duk_realloc_function realloc_func;
|
2756
|
+
duk_free_function free_func;
|
2564
2757
|
void *udata;
|
2565
2758
|
};
|
2566
2759
|
|
2567
2760
|
struct duk_function_list_entry {
|
2568
2761
|
const char *key;
|
2569
2762
|
duk_c_function value;
|
2570
|
-
|
2763
|
+
duk_idx_t nargs;
|
2571
2764
|
};
|
2572
2765
|
|
2573
2766
|
struct duk_number_list_entry {
|
@@ -2585,13 +2778,13 @@ struct duk_number_list_entry {
|
|
2585
2778
|
* have 99 for patch level (e.g. 0.10.99 would be a development version
|
2586
2779
|
* after 0.10.0 but before the next official release).
|
2587
2780
|
*/
|
2588
|
-
#define DUK_VERSION
|
2781
|
+
#define DUK_VERSION 10002L
|
2589
2782
|
|
2590
2783
|
/* Used to represent invalid index; if caller uses this without checking,
|
2591
2784
|
* this index will map to a non-existent stack entry. Also used in some
|
2592
2785
|
* API calls as a marker to denote "no value".
|
2593
2786
|
*/
|
2594
|
-
#define DUK_INVALID_INDEX
|
2787
|
+
#define DUK_INVALID_INDEX DUK_IDX_MIN
|
2595
2788
|
|
2596
2789
|
/* Indicates that a native function does not have a fixed number of args,
|
2597
2790
|
* and the argument stack should not be capped/extended at all.
|
@@ -2653,6 +2846,9 @@ struct duk_number_list_entry {
|
|
2653
2846
|
/* Flags for duk_push_thread_raw() */
|
2654
2847
|
#define DUK_THREAD_NEW_GLOBAL_ENV (1 << 0) /* create a new global environment */
|
2655
2848
|
|
2849
|
+
/* Flags for duk_push_string_file_raw() */
|
2850
|
+
#define DUK_STRING_PUSH_SAFE (1 << 0) /* no error if file does not exist */
|
2851
|
+
|
2656
2852
|
/* Duktape specific error codes */
|
2657
2853
|
#define DUK_ERR_UNIMPLEMENTED_ERROR 50 /* UnimplementedError */
|
2658
2854
|
#define DUK_ERR_UNSUPPORTED_ERROR 51 /* UnsupportedError */
|
@@ -2692,12 +2888,12 @@ struct duk_number_list_entry {
|
|
2692
2888
|
#define DUK_EXEC_ERROR 1
|
2693
2889
|
|
2694
2890
|
/* Log levels */
|
2695
|
-
#define
|
2696
|
-
#define
|
2697
|
-
#define
|
2698
|
-
#define
|
2699
|
-
#define
|
2700
|
-
#define
|
2891
|
+
#define DUK_LOG_TRACE 0
|
2892
|
+
#define DUK_LOG_DEBUG 1
|
2893
|
+
#define DUK_LOG_INFO 2
|
2894
|
+
#define DUK_LOG_WARN 3
|
2895
|
+
#define DUK_LOG_ERROR 4
|
2896
|
+
#define DUK_LOG_FATAL 5
|
2701
2897
|
|
2702
2898
|
/*
|
2703
2899
|
* If no variadic macros, __FILE__ and __LINE__ are passed through globals
|
@@ -2705,20 +2901,21 @@ struct duk_number_list_entry {
|
|
2705
2901
|
*/
|
2706
2902
|
|
2707
2903
|
#ifndef DUK_API_VARIADIC_MACROS
|
2708
|
-
|
2709
|
-
|
2904
|
+
DUK_EXTERNAL_DECL const char *duk_api_global_filename;
|
2905
|
+
DUK_EXTERNAL_DECL duk_int_t duk_api_global_line;
|
2710
2906
|
#endif
|
2711
2907
|
|
2712
2908
|
/*
|
2713
2909
|
* Context management
|
2714
2910
|
*/
|
2715
2911
|
|
2912
|
+
DUK_EXTERNAL_DECL
|
2716
2913
|
duk_context *duk_create_heap(duk_alloc_function alloc_func,
|
2717
2914
|
duk_realloc_function realloc_func,
|
2718
2915
|
duk_free_function free_func,
|
2719
2916
|
void *alloc_udata,
|
2720
2917
|
duk_fatal_function fatal_handler);
|
2721
|
-
void duk_destroy_heap(duk_context *ctx);
|
2918
|
+
DUK_EXTERNAL_DECL void duk_destroy_heap(duk_context *ctx);
|
2722
2919
|
|
2723
2920
|
#define duk_create_heap_default() \
|
2724
2921
|
duk_create_heap(NULL, NULL, NULL, NULL, NULL)
|
@@ -2729,56 +2926,59 @@ void duk_destroy_heap(duk_context *ctx);
|
|
2729
2926
|
* Raw functions have no side effects (cannot trigger GC).
|
2730
2927
|
*/
|
2731
2928
|
|
2732
|
-
void *duk_alloc_raw(duk_context *ctx, duk_size_t size);
|
2733
|
-
void duk_free_raw(duk_context *ctx, void *ptr);
|
2734
|
-
void *duk_realloc_raw(duk_context *ctx, void *ptr, duk_size_t size);
|
2735
|
-
void *duk_alloc(duk_context *ctx, duk_size_t size);
|
2736
|
-
void duk_free(duk_context *ctx, void *ptr);
|
2737
|
-
void *duk_realloc(duk_context *ctx, void *ptr, duk_size_t size);
|
2738
|
-
void duk_get_memory_functions(duk_context *ctx, duk_memory_functions *out_funcs);
|
2739
|
-
void duk_gc(duk_context *ctx, duk_uint_t flags);
|
2929
|
+
DUK_EXTERNAL_DECL void *duk_alloc_raw(duk_context *ctx, duk_size_t size);
|
2930
|
+
DUK_EXTERNAL_DECL void duk_free_raw(duk_context *ctx, void *ptr);
|
2931
|
+
DUK_EXTERNAL_DECL void *duk_realloc_raw(duk_context *ctx, void *ptr, duk_size_t size);
|
2932
|
+
DUK_EXTERNAL_DECL void *duk_alloc(duk_context *ctx, duk_size_t size);
|
2933
|
+
DUK_EXTERNAL_DECL void duk_free(duk_context *ctx, void *ptr);
|
2934
|
+
DUK_EXTERNAL_DECL void *duk_realloc(duk_context *ctx, void *ptr, duk_size_t size);
|
2935
|
+
DUK_EXTERNAL_DECL void duk_get_memory_functions(duk_context *ctx, duk_memory_functions *out_funcs);
|
2936
|
+
DUK_EXTERNAL_DECL void duk_gc(duk_context *ctx, duk_uint_t flags);
|
2740
2937
|
|
2741
2938
|
/*
|
2742
2939
|
* Error handling
|
2743
2940
|
*/
|
2744
2941
|
|
2745
|
-
DUK_API_NORETURN(void duk_throw(duk_context *ctx));
|
2942
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_throw(duk_context *ctx));
|
2746
2943
|
|
2747
|
-
DUK_API_NORETURN(void duk_error_raw(duk_context *ctx, duk_errcode_t err_code, const char *filename, duk_int_t line, const char *fmt, ...));
|
2944
|
+
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, ...));
|
2748
2945
|
#ifdef DUK_API_VARIADIC_MACROS
|
2749
2946
|
#define duk_error(ctx,err_code,...) \
|
2750
2947
|
duk_error_raw((ctx), (duk_errcode_t) (err_code), __FILE__, (duk_int_t) __LINE__, __VA_ARGS__)
|
2751
2948
|
#else
|
2752
|
-
DUK_API_NORETURN(void duk_error_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...));
|
2949
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_error_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...));
|
2950
|
+
/* One problem with this macro is that expressions like the following fail
|
2951
|
+
* to compile: "(void) duk_error(...)". But because duk_error() is noreturn,
|
2952
|
+
* they make little sense anyway.
|
2953
|
+
*/
|
2753
2954
|
#define duk_error \
|
2754
2955
|
duk_api_global_filename = __FILE__, \
|
2755
2956
|
duk_api_global_line = (duk_int_t) __LINE__, \
|
2756
2957
|
duk_error_stash /* arguments follow */
|
2757
2958
|
#endif
|
2758
2959
|
|
2759
|
-
DUK_API_NORETURN(void duk_fatal(duk_context *ctx, duk_errcode_t err_code, const char *err_msg));
|
2960
|
+
DUK_API_NORETURN(DUK_EXTERNAL_DECL void duk_fatal(duk_context *ctx, duk_errcode_t err_code, const char *err_msg));
|
2760
2961
|
|
2761
2962
|
/*
|
2762
2963
|
* Other state related functions
|
2763
2964
|
*/
|
2764
2965
|
|
2765
|
-
duk_bool_t duk_is_strict_call(duk_context *ctx);
|
2766
|
-
duk_bool_t duk_is_constructor_call(duk_context *ctx);
|
2767
|
-
duk_int_t duk_get_magic(duk_context *ctx);
|
2966
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_strict_call(duk_context *ctx);
|
2967
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_constructor_call(duk_context *ctx);
|
2768
2968
|
|
2769
2969
|
/*
|
2770
2970
|
* Stack management
|
2771
2971
|
*/
|
2772
2972
|
|
2773
|
-
duk_idx_t duk_normalize_index(duk_context *ctx, duk_idx_t index);
|
2774
|
-
duk_idx_t duk_require_normalize_index(duk_context *ctx, duk_idx_t index);
|
2775
|
-
duk_bool_t duk_is_valid_index(duk_context *ctx, duk_idx_t index);
|
2776
|
-
void duk_require_valid_index(duk_context *ctx, duk_idx_t index);
|
2973
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_normalize_index(duk_context *ctx, duk_idx_t index);
|
2974
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_require_normalize_index(duk_context *ctx, duk_idx_t index);
|
2975
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_valid_index(duk_context *ctx, duk_idx_t index);
|
2976
|
+
DUK_EXTERNAL_DECL void duk_require_valid_index(duk_context *ctx, duk_idx_t index);
|
2777
2977
|
|
2778
|
-
duk_idx_t duk_get_top(duk_context *ctx);
|
2779
|
-
void duk_set_top(duk_context *ctx, duk_idx_t index);
|
2780
|
-
duk_idx_t duk_get_top_index(duk_context *ctx);
|
2781
|
-
duk_idx_t duk_require_top_index(duk_context *ctx);
|
2978
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_get_top(duk_context *ctx);
|
2979
|
+
DUK_EXTERNAL_DECL void duk_set_top(duk_context *ctx, duk_idx_t index);
|
2980
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_get_top_index(duk_context *ctx);
|
2981
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_require_top_index(duk_context *ctx);
|
2782
2982
|
|
2783
2983
|
/* Although extra/top could be an unsigned type here, using a signed type
|
2784
2984
|
* makes the API more robust to calling code calculation errors or corner
|
@@ -2787,25 +2987,29 @@ duk_idx_t duk_require_top_index(duk_context *ctx);
|
|
2787
2987
|
* to a large unsigned number. (This principle is used elsewhere in the
|
2788
2988
|
* API too.)
|
2789
2989
|
*/
|
2790
|
-
duk_bool_t duk_check_stack(duk_context *ctx, duk_idx_t extra);
|
2791
|
-
void duk_require_stack(duk_context *ctx, duk_idx_t extra);
|
2792
|
-
duk_bool_t duk_check_stack_top(duk_context *ctx, duk_idx_t top);
|
2793
|
-
void duk_require_stack_top(duk_context *ctx, duk_idx_t top);
|
2990
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_check_stack(duk_context *ctx, duk_idx_t extra);
|
2991
|
+
DUK_EXTERNAL_DECL void duk_require_stack(duk_context *ctx, duk_idx_t extra);
|
2992
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_check_stack_top(duk_context *ctx, duk_idx_t top);
|
2993
|
+
DUK_EXTERNAL_DECL void duk_require_stack_top(duk_context *ctx, duk_idx_t top);
|
2794
2994
|
|
2795
2995
|
/*
|
2796
2996
|
* Stack manipulation (other than push/pop)
|
2797
2997
|
*/
|
2798
2998
|
|
2799
|
-
void duk_swap(duk_context *ctx, duk_idx_t index1, duk_idx_t index2);
|
2800
|
-
void duk_swap_top(duk_context *ctx, duk_idx_t index);
|
2801
|
-
void duk_dup(duk_context *ctx, duk_idx_t from_index);
|
2802
|
-
void duk_dup_top(duk_context *ctx);
|
2803
|
-
void duk_insert(duk_context *ctx, duk_idx_t to_index);
|
2804
|
-
void duk_replace(duk_context *ctx, duk_idx_t to_index);
|
2805
|
-
void duk_copy(duk_context *ctx, duk_idx_t from_index, duk_idx_t to_index);
|
2806
|
-
void duk_remove(duk_context *ctx, duk_idx_t index);
|
2807
|
-
|
2808
|
-
|
2999
|
+
DUK_EXTERNAL_DECL void duk_swap(duk_context *ctx, duk_idx_t index1, duk_idx_t index2);
|
3000
|
+
DUK_EXTERNAL_DECL void duk_swap_top(duk_context *ctx, duk_idx_t index);
|
3001
|
+
DUK_EXTERNAL_DECL void duk_dup(duk_context *ctx, duk_idx_t from_index);
|
3002
|
+
DUK_EXTERNAL_DECL void duk_dup_top(duk_context *ctx);
|
3003
|
+
DUK_EXTERNAL_DECL void duk_insert(duk_context *ctx, duk_idx_t to_index);
|
3004
|
+
DUK_EXTERNAL_DECL void duk_replace(duk_context *ctx, duk_idx_t to_index);
|
3005
|
+
DUK_EXTERNAL_DECL void duk_copy(duk_context *ctx, duk_idx_t from_index, duk_idx_t to_index);
|
3006
|
+
DUK_EXTERNAL_DECL void duk_remove(duk_context *ctx, duk_idx_t index);
|
3007
|
+
DUK_EXTERNAL_DECL void duk_xcopymove_raw(duk_context *to_ctx, duk_context *from_ctx, duk_idx_t count, duk_bool_t is_copy);
|
3008
|
+
|
3009
|
+
#define duk_xmove_top(to_ctx,from_ctx,count) \
|
3010
|
+
duk_xcopymove_raw((to_ctx), (from_ctx), (count), 0 /*is_copy*/)
|
3011
|
+
#define duk_xcopy_top(to_ctx,from_ctx,count) \
|
3012
|
+
duk_xcopymove_raw((to_ctx), (from_ctx), (count), 1 /*is_copy*/)
|
2809
3013
|
|
2810
3014
|
/*
|
2811
3015
|
* Push operations
|
@@ -2816,34 +3020,37 @@ void duk_xmove(duk_context *from_ctx, duk_context *to_ctx, duk_idx_t count);
|
|
2816
3020
|
* Note: duk_dup() is technically a push.
|
2817
3021
|
*/
|
2818
3022
|
|
2819
|
-
void duk_push_undefined(duk_context *ctx);
|
2820
|
-
void duk_push_null(duk_context *ctx);
|
2821
|
-
void duk_push_boolean(duk_context *ctx, duk_bool_t val);
|
2822
|
-
void duk_push_true(duk_context *ctx);
|
2823
|
-
void duk_push_false(duk_context *ctx);
|
2824
|
-
void duk_push_number(duk_context *ctx, duk_double_t val);
|
2825
|
-
void duk_push_nan(duk_context *ctx);
|
2826
|
-
void duk_push_int(duk_context *ctx, duk_int_t val);
|
2827
|
-
void duk_push_uint(duk_context *ctx, duk_uint_t val);
|
2828
|
-
const char *duk_push_string(duk_context *ctx, const char *str);
|
2829
|
-
const char *
|
2830
|
-
|
2831
|
-
|
2832
|
-
const char *
|
2833
|
-
|
2834
|
-
|
2835
|
-
|
2836
|
-
|
2837
|
-
|
2838
|
-
void
|
2839
|
-
void
|
2840
|
-
void
|
2841
|
-
void
|
2842
|
-
|
2843
|
-
|
2844
|
-
|
2845
|
-
|
2846
|
-
duk_idx_t
|
3023
|
+
DUK_EXTERNAL_DECL void duk_push_undefined(duk_context *ctx);
|
3024
|
+
DUK_EXTERNAL_DECL void duk_push_null(duk_context *ctx);
|
3025
|
+
DUK_EXTERNAL_DECL void duk_push_boolean(duk_context *ctx, duk_bool_t val);
|
3026
|
+
DUK_EXTERNAL_DECL void duk_push_true(duk_context *ctx);
|
3027
|
+
DUK_EXTERNAL_DECL void duk_push_false(duk_context *ctx);
|
3028
|
+
DUK_EXTERNAL_DECL void duk_push_number(duk_context *ctx, duk_double_t val);
|
3029
|
+
DUK_EXTERNAL_DECL void duk_push_nan(duk_context *ctx);
|
3030
|
+
DUK_EXTERNAL_DECL void duk_push_int(duk_context *ctx, duk_int_t val);
|
3031
|
+
DUK_EXTERNAL_DECL void duk_push_uint(duk_context *ctx, duk_uint_t val);
|
3032
|
+
DUK_EXTERNAL_DECL const char *duk_push_string(duk_context *ctx, const char *str);
|
3033
|
+
DUK_EXTERNAL_DECL const char *duk_push_lstring(duk_context *ctx, const char *str, duk_size_t len);
|
3034
|
+
DUK_EXTERNAL_DECL void duk_push_pointer(duk_context *ctx, void *p);
|
3035
|
+
DUK_EXTERNAL_DECL const char *duk_push_sprintf(duk_context *ctx, const char *fmt, ...);
|
3036
|
+
DUK_EXTERNAL_DECL const char *duk_push_vsprintf(duk_context *ctx, const char *fmt, va_list ap);
|
3037
|
+
|
3038
|
+
DUK_EXTERNAL_DECL const char *duk_push_string_file_raw(duk_context *ctx, const char *path, duk_uint_t flags);
|
3039
|
+
#define duk_push_string_file(ctx,path) \
|
3040
|
+
duk_push_string_file_raw((ctx), (path), 0)
|
3041
|
+
|
3042
|
+
DUK_EXTERNAL_DECL void duk_push_this(duk_context *ctx);
|
3043
|
+
DUK_EXTERNAL_DECL void duk_push_current_function(duk_context *ctx);
|
3044
|
+
DUK_EXTERNAL_DECL void duk_push_current_thread(duk_context *ctx);
|
3045
|
+
DUK_EXTERNAL_DECL void duk_push_global_object(duk_context *ctx);
|
3046
|
+
DUK_EXTERNAL_DECL void duk_push_heap_stash(duk_context *ctx);
|
3047
|
+
DUK_EXTERNAL_DECL void duk_push_global_stash(duk_context *ctx);
|
3048
|
+
DUK_EXTERNAL_DECL void duk_push_thread_stash(duk_context *ctx, duk_context *target_ctx);
|
3049
|
+
|
3050
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_push_object(duk_context *ctx);
|
3051
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_push_array(duk_context *ctx);
|
3052
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_push_c_function(duk_context *ctx, duk_c_function func, duk_idx_t nargs);
|
3053
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t flags);
|
2847
3054
|
|
2848
3055
|
#define duk_push_thread(ctx) \
|
2849
3056
|
duk_push_thread_raw((ctx), 0 /*flags*/)
|
@@ -2851,30 +3058,30 @@ duk_idx_t duk_push_thread_raw(duk_context *ctx, duk_uint_t flags);
|
|
2851
3058
|
#define duk_push_thread_new_globalenv(ctx) \
|
2852
3059
|
duk_push_thread_raw((ctx), DUK_THREAD_NEW_GLOBAL_ENV /*flags*/)
|
2853
3060
|
|
2854
|
-
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, ...);
|
3061
|
+
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, ...);
|
2855
3062
|
#ifdef DUK_API_VARIADIC_MACROS
|
2856
3063
|
#define duk_push_error_object(ctx,err_code,...) \
|
2857
3064
|
duk_push_error_object_raw((ctx),(err_code),__FILE__,__LINE__,__VA_ARGS__)
|
2858
3065
|
#else
|
2859
|
-
duk_idx_t duk_push_error_object_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...);
|
3066
|
+
DUK_EXTERNAL_DECL duk_idx_t duk_push_error_object_stash(duk_context *ctx, duk_errcode_t err_code, const char *fmt, ...);
|
2860
3067
|
#define duk_push_error_object \
|
2861
3068
|
duk_api_global_filename = __FILE__, \
|
2862
3069
|
duk_api_global_line = __LINE__, \
|
2863
3070
|
duk_push_error_object_stash /* arguments follow */
|
2864
3071
|
#endif
|
2865
3072
|
|
2866
|
-
void *duk_push_buffer(duk_context *ctx, duk_size_t size, duk_bool_t dynamic);
|
2867
|
-
void *duk_push_fixed_buffer(duk_context *ctx, duk_size_t size);
|
2868
|
-
void *duk_push_dynamic_buffer(duk_context *ctx, duk_size_t size);
|
3073
|
+
DUK_EXTERNAL_DECL void *duk_push_buffer(duk_context *ctx, duk_size_t size, duk_bool_t dynamic);
|
3074
|
+
DUK_EXTERNAL_DECL void *duk_push_fixed_buffer(duk_context *ctx, duk_size_t size);
|
3075
|
+
DUK_EXTERNAL_DECL void *duk_push_dynamic_buffer(duk_context *ctx, duk_size_t size);
|
2869
3076
|
|
2870
3077
|
/*
|
2871
3078
|
* Pop operations
|
2872
3079
|
*/
|
2873
3080
|
|
2874
|
-
void duk_pop(duk_context *ctx);
|
2875
|
-
void duk_pop_n(duk_context *ctx, duk_idx_t count);
|
2876
|
-
void duk_pop_2(duk_context *ctx);
|
2877
|
-
void duk_pop_3(duk_context *ctx);
|
3081
|
+
DUK_EXTERNAL_DECL void duk_pop(duk_context *ctx);
|
3082
|
+
DUK_EXTERNAL_DECL void duk_pop_n(duk_context *ctx, duk_idx_t count);
|
3083
|
+
DUK_EXTERNAL_DECL void duk_pop_2(duk_context *ctx);
|
3084
|
+
DUK_EXTERNAL_DECL void duk_pop_3(duk_context *ctx);
|
2878
3085
|
|
2879
3086
|
/*
|
2880
3087
|
* Type checks
|
@@ -2883,35 +3090,34 @@ void duk_pop_3(duk_context *ctx);
|
|
2883
3090
|
* is not needed; duk_is_valid_index() gives the same information.
|
2884
3091
|
*/
|
2885
3092
|
|
2886
|
-
|
2887
|
-
|
2888
|
-
|
2889
|
-
|
2890
|
-
|
2891
|
-
|
2892
|
-
duk_bool_t
|
2893
|
-
duk_bool_t
|
2894
|
-
duk_bool_t
|
2895
|
-
duk_bool_t
|
2896
|
-
duk_bool_t
|
2897
|
-
duk_bool_t
|
2898
|
-
duk_bool_t
|
2899
|
-
duk_bool_t
|
2900
|
-
duk_bool_t
|
2901
|
-
|
2902
|
-
|
2903
|
-
duk_bool_t
|
2904
|
-
duk_bool_t
|
2905
|
-
duk_bool_t
|
2906
|
-
duk_bool_t
|
2907
|
-
duk_bool_t
|
2908
|
-
|
2909
|
-
|
2910
|
-
duk_bool_t
|
2911
|
-
duk_bool_t
|
2912
|
-
|
2913
|
-
|
2914
|
-
duk_bool_t duk_is_primitive(duk_context *ctx, duk_idx_t index);
|
3093
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_type(duk_context *ctx, duk_idx_t index);
|
3094
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_check_type(duk_context *ctx, duk_idx_t index, duk_int_t type);
|
3095
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_get_type_mask(duk_context *ctx, duk_idx_t index);
|
3096
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t index, duk_uint_t mask);
|
3097
|
+
|
3098
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_undefined(duk_context *ctx, duk_idx_t index);
|
3099
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_null(duk_context *ctx, duk_idx_t index);
|
3100
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_null_or_undefined(duk_context *ctx, duk_idx_t index);
|
3101
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_boolean(duk_context *ctx, duk_idx_t index);
|
3102
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t index);
|
3103
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_nan(duk_context *ctx, duk_idx_t index);
|
3104
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t index);
|
3105
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_object(duk_context *ctx, duk_idx_t index);
|
3106
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_buffer(duk_context *ctx, duk_idx_t index);
|
3107
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_pointer(duk_context *ctx, duk_idx_t index);
|
3108
|
+
|
3109
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_array(duk_context *ctx, duk_idx_t index);
|
3110
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_function(duk_context *ctx, duk_idx_t index);
|
3111
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_c_function(duk_context *ctx, duk_idx_t index);
|
3112
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_ecmascript_function(duk_context *ctx, duk_idx_t index);
|
3113
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_bound_function(duk_context *ctx, duk_idx_t index);
|
3114
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_thread(duk_context *ctx, duk_idx_t index);
|
3115
|
+
|
3116
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_callable(duk_context *ctx, duk_idx_t index);
|
3117
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_dynamic_buffer(duk_context *ctx, duk_idx_t index);
|
3118
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_fixed_buffer(duk_context *ctx, duk_idx_t index);
|
3119
|
+
|
3120
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_is_primitive(duk_context *ctx, duk_idx_t index);
|
2915
3121
|
#define duk_is_object_coercible(ctx,index) \
|
2916
3122
|
duk_check_type_mask((ctx), (index), DUK_TYPE_MASK_BOOLEAN | \
|
2917
3123
|
DUK_TYPE_MASK_NUMBER | \
|
@@ -2928,17 +3134,17 @@ duk_bool_t duk_is_primitive(duk_context *ctx, duk_idx_t index);
|
|
2928
3134
|
* are not included.
|
2929
3135
|
*/
|
2930
3136
|
|
2931
|
-
duk_bool_t duk_get_boolean(duk_context *ctx, duk_idx_t index);
|
2932
|
-
duk_double_t duk_get_number(duk_context *ctx, duk_idx_t index);
|
2933
|
-
duk_int_t duk_get_int(duk_context *ctx, duk_idx_t index);
|
2934
|
-
duk_uint_t duk_get_uint(duk_context *ctx, duk_idx_t index);
|
2935
|
-
const char *duk_get_string(duk_context *ctx, duk_idx_t index);
|
2936
|
-
const char *duk_get_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
2937
|
-
void *duk_get_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
2938
|
-
void *duk_get_pointer(duk_context *ctx, duk_idx_t index);
|
2939
|
-
duk_c_function duk_get_c_function(duk_context *ctx, duk_idx_t index);
|
2940
|
-
duk_context *duk_get_context(duk_context *ctx, duk_idx_t index);
|
2941
|
-
duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index);
|
3137
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_boolean(duk_context *ctx, duk_idx_t index);
|
3138
|
+
DUK_EXTERNAL_DECL duk_double_t duk_get_number(duk_context *ctx, duk_idx_t index);
|
3139
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_int(duk_context *ctx, duk_idx_t index);
|
3140
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_get_uint(duk_context *ctx, duk_idx_t index);
|
3141
|
+
DUK_EXTERNAL_DECL const char *duk_get_string(duk_context *ctx, duk_idx_t index);
|
3142
|
+
DUK_EXTERNAL_DECL const char *duk_get_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
3143
|
+
DUK_EXTERNAL_DECL void *duk_get_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
3144
|
+
DUK_EXTERNAL_DECL void *duk_get_pointer(duk_context *ctx, duk_idx_t index);
|
3145
|
+
DUK_EXTERNAL_DECL duk_c_function duk_get_c_function(duk_context *ctx, duk_idx_t index);
|
3146
|
+
DUK_EXTERNAL_DECL duk_context *duk_get_context(duk_context *ctx, duk_idx_t index);
|
3147
|
+
DUK_EXTERNAL_DECL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index);
|
2942
3148
|
|
2943
3149
|
/*
|
2944
3150
|
* Require operations: no coercion, throw error if index or type
|
@@ -2948,18 +3154,18 @@ duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index);
|
|
2948
3154
|
#define duk_require_type_mask(ctx,index,mask) \
|
2949
3155
|
((void) duk_check_type_mask((ctx), (index), (mask) | DUK_TYPE_MASK_THROW))
|
2950
3156
|
|
2951
|
-
void duk_require_undefined(duk_context *ctx, duk_idx_t index);
|
2952
|
-
void duk_require_null(duk_context *ctx, duk_idx_t index);
|
2953
|
-
duk_bool_t duk_require_boolean(duk_context *ctx, duk_idx_t index);
|
2954
|
-
duk_double_t duk_require_number(duk_context *ctx, duk_idx_t index);
|
2955
|
-
duk_int_t duk_require_int(duk_context *ctx, duk_idx_t index);
|
2956
|
-
duk_uint_t duk_require_uint(duk_context *ctx, duk_idx_t index);
|
2957
|
-
const char *duk_require_string(duk_context *ctx, duk_idx_t index);
|
2958
|
-
const char *duk_require_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
2959
|
-
void *duk_require_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
2960
|
-
void *duk_require_pointer(duk_context *ctx, duk_idx_t index);
|
2961
|
-
duk_c_function duk_require_c_function(duk_context *ctx, duk_idx_t index);
|
2962
|
-
duk_context *duk_require_context(duk_context *ctx, duk_idx_t index);
|
3157
|
+
DUK_EXTERNAL_DECL void duk_require_undefined(duk_context *ctx, duk_idx_t index);
|
3158
|
+
DUK_EXTERNAL_DECL void duk_require_null(duk_context *ctx, duk_idx_t index);
|
3159
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_require_boolean(duk_context *ctx, duk_idx_t index);
|
3160
|
+
DUK_EXTERNAL_DECL duk_double_t duk_require_number(duk_context *ctx, duk_idx_t index);
|
3161
|
+
DUK_EXTERNAL_DECL duk_int_t duk_require_int(duk_context *ctx, duk_idx_t index);
|
3162
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_require_uint(duk_context *ctx, duk_idx_t index);
|
3163
|
+
DUK_EXTERNAL_DECL const char *duk_require_string(duk_context *ctx, duk_idx_t index);
|
3164
|
+
DUK_EXTERNAL_DECL const char *duk_require_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
3165
|
+
DUK_EXTERNAL_DECL void *duk_require_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
3166
|
+
DUK_EXTERNAL_DECL void *duk_require_pointer(duk_context *ctx, duk_idx_t index);
|
3167
|
+
DUK_EXTERNAL_DECL duk_c_function duk_require_c_function(duk_context *ctx, duk_idx_t index);
|
3168
|
+
DUK_EXTERNAL_DECL duk_context *duk_require_context(duk_context *ctx, duk_idx_t index);
|
2963
3169
|
|
2964
3170
|
#define duk_require_object_coercible(ctx,index) \
|
2965
3171
|
((void) duk_check_type_mask((ctx), (index), DUK_TYPE_MASK_BOOLEAN | \
|
@@ -2977,27 +3183,27 @@ duk_context *duk_require_context(duk_context *ctx, duk_idx_t index);
|
|
2977
3183
|
* or an internal error (e.g. from out of memory).
|
2978
3184
|
*/
|
2979
3185
|
|
2980
|
-
void duk_to_undefined(duk_context *ctx, duk_idx_t index);
|
2981
|
-
void duk_to_null(duk_context *ctx, duk_idx_t index);
|
2982
|
-
duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t index);
|
2983
|
-
duk_double_t duk_to_number(duk_context *ctx, duk_idx_t index);
|
2984
|
-
duk_int_t duk_to_int(duk_context *ctx, duk_idx_t index);
|
2985
|
-
duk_uint_t duk_to_uint(duk_context *ctx, duk_idx_t index);
|
2986
|
-
duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t index);
|
2987
|
-
duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t index);
|
2988
|
-
duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t index);
|
2989
|
-
const char *duk_to_string(duk_context *ctx, duk_idx_t index);
|
2990
|
-
const char *duk_to_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
2991
|
-
void *duk_to_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
2992
|
-
void *duk_to_fixed_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
2993
|
-
void *duk_to_dynamic_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
2994
|
-
void *duk_to_pointer(duk_context *ctx, duk_idx_t index);
|
2995
|
-
void duk_to_object(duk_context *ctx, duk_idx_t index);
|
2996
|
-
void duk_to_defaultvalue(duk_context *ctx, duk_idx_t index, duk_int_t hint);
|
2997
|
-
void duk_to_primitive(duk_context *ctx, duk_idx_t index, duk_int_t hint);
|
3186
|
+
DUK_EXTERNAL_DECL void duk_to_undefined(duk_context *ctx, duk_idx_t index);
|
3187
|
+
DUK_EXTERNAL_DECL void duk_to_null(duk_context *ctx, duk_idx_t index);
|
3188
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_to_boolean(duk_context *ctx, duk_idx_t index);
|
3189
|
+
DUK_EXTERNAL_DECL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t index);
|
3190
|
+
DUK_EXTERNAL_DECL duk_int_t duk_to_int(duk_context *ctx, duk_idx_t index);
|
3191
|
+
DUK_EXTERNAL_DECL duk_uint_t duk_to_uint(duk_context *ctx, duk_idx_t index);
|
3192
|
+
DUK_EXTERNAL_DECL duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t index);
|
3193
|
+
DUK_EXTERNAL_DECL duk_uint32_t duk_to_uint32(duk_context *ctx, duk_idx_t index);
|
3194
|
+
DUK_EXTERNAL_DECL duk_uint16_t duk_to_uint16(duk_context *ctx, duk_idx_t index);
|
3195
|
+
DUK_EXTERNAL_DECL const char *duk_to_string(duk_context *ctx, duk_idx_t index);
|
3196
|
+
DUK_EXTERNAL_DECL const char *duk_to_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
3197
|
+
DUK_EXTERNAL_DECL void *duk_to_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
3198
|
+
DUK_EXTERNAL_DECL void *duk_to_fixed_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
3199
|
+
DUK_EXTERNAL_DECL void *duk_to_dynamic_buffer(duk_context *ctx, duk_idx_t index, duk_size_t *out_size);
|
3200
|
+
DUK_EXTERNAL_DECL void *duk_to_pointer(duk_context *ctx, duk_idx_t index);
|
3201
|
+
DUK_EXTERNAL_DECL void duk_to_object(duk_context *ctx, duk_idx_t index);
|
3202
|
+
DUK_EXTERNAL_DECL void duk_to_defaultvalue(duk_context *ctx, duk_idx_t index, duk_int_t hint);
|
3203
|
+
DUK_EXTERNAL_DECL void duk_to_primitive(duk_context *ctx, duk_idx_t index, duk_int_t hint);
|
2998
3204
|
|
2999
3205
|
/* safe variants of a few coercion operations */
|
3000
|
-
const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
3206
|
+
DUK_EXTERNAL_DECL const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *out_len);
|
3001
3207
|
#define duk_safe_to_string(ctx,index) \
|
3002
3208
|
duk_safe_to_lstring((ctx), (index), NULL)
|
3003
3209
|
|
@@ -3005,18 +3211,18 @@ const char *duk_safe_to_lstring(duk_context *ctx, duk_idx_t index, duk_size_t *o
|
|
3005
3211
|
* Misc conversion
|
3006
3212
|
*/
|
3007
3213
|
|
3008
|
-
const char *duk_base64_encode(duk_context *ctx, duk_idx_t index);
|
3009
|
-
void duk_base64_decode(duk_context *ctx, duk_idx_t index);
|
3010
|
-
const char *duk_hex_encode(duk_context *ctx, duk_idx_t index);
|
3011
|
-
void duk_hex_decode(duk_context *ctx, duk_idx_t index);
|
3012
|
-
const char *duk_json_encode(duk_context *ctx, duk_idx_t index);
|
3013
|
-
void duk_json_decode(duk_context *ctx, duk_idx_t index);
|
3214
|
+
DUK_EXTERNAL_DECL const char *duk_base64_encode(duk_context *ctx, duk_idx_t index);
|
3215
|
+
DUK_EXTERNAL_DECL void duk_base64_decode(duk_context *ctx, duk_idx_t index);
|
3216
|
+
DUK_EXTERNAL_DECL const char *duk_hex_encode(duk_context *ctx, duk_idx_t index);
|
3217
|
+
DUK_EXTERNAL_DECL void duk_hex_decode(duk_context *ctx, duk_idx_t index);
|
3218
|
+
DUK_EXTERNAL_DECL const char *duk_json_encode(duk_context *ctx, duk_idx_t index);
|
3219
|
+
DUK_EXTERNAL_DECL void duk_json_decode(duk_context *ctx, duk_idx_t index);
|
3014
3220
|
|
3015
3221
|
/*
|
3016
3222
|
* Buffer
|
3017
3223
|
*/
|
3018
3224
|
|
3019
|
-
void *duk_resize_buffer(duk_context *ctx, duk_idx_t index, duk_size_t new_size);
|
3225
|
+
DUK_EXTERNAL_DECL void *duk_resize_buffer(duk_context *ctx, duk_idx_t index, duk_size_t new_size);
|
3020
3226
|
|
3021
3227
|
/*
|
3022
3228
|
* Property access
|
@@ -3026,77 +3232,108 @@ void *duk_resize_buffer(duk_context *ctx, duk_idx_t index, duk_size_t new_size);
|
|
3026
3232
|
* index as a property name (e.g. 123 is equivalent to the key "123").
|
3027
3233
|
*/
|
3028
3234
|
|
3029
|
-
duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t obj_index);
|
3030
|
-
duk_bool_t duk_get_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3031
|
-
duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3032
|
-
duk_bool_t duk_put_prop(duk_context *ctx, duk_idx_t obj_index);
|
3033
|
-
duk_bool_t duk_put_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3034
|
-
duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3035
|
-
duk_bool_t duk_del_prop(duk_context *ctx, duk_idx_t obj_index);
|
3036
|
-
duk_bool_t duk_del_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3037
|
-
duk_bool_t duk_del_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3038
|
-
duk_bool_t duk_has_prop(duk_context *ctx, duk_idx_t obj_index);
|
3039
|
-
duk_bool_t duk_has_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3040
|
-
duk_bool_t duk_has_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3235
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop(duk_context *ctx, duk_idx_t obj_index);
|
3236
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3237
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3238
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop(duk_context *ctx, duk_idx_t obj_index);
|
3239
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3240
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3241
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop(duk_context *ctx, duk_idx_t obj_index);
|
3242
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3243
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3244
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop(duk_context *ctx, duk_idx_t obj_index);
|
3245
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_string(duk_context *ctx, duk_idx_t obj_index, const char *key);
|
3246
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_prop_index(duk_context *ctx, duk_idx_t obj_index, duk_uarridx_t arr_index);
|
3041
3247
|
|
3042
|
-
duk_bool_t duk_get_global_string(duk_context *ctx, const char *key);
|
3248
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_get_global_string(duk_context *ctx, const char *key);
|
3249
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_put_global_string(duk_context *ctx, const char *key);
|
3250
|
+
|
3251
|
+
/*
|
3252
|
+
* Object prototype
|
3253
|
+
*/
|
3254
|
+
|
3255
|
+
DUK_EXTERNAL_DECL void duk_get_prototype(duk_context *ctx, duk_idx_t index);
|
3256
|
+
DUK_EXTERNAL_DECL void duk_set_prototype(duk_context *ctx, duk_idx_t index);
|
3257
|
+
|
3258
|
+
/*
|
3259
|
+
* Object finalizer
|
3260
|
+
*/
|
3261
|
+
|
3262
|
+
DUK_EXTERNAL_DECL void duk_get_finalizer(duk_context *ctx, duk_idx_t index);
|
3263
|
+
DUK_EXTERNAL_DECL void duk_set_finalizer(duk_context *ctx, duk_idx_t index);
|
3264
|
+
|
3265
|
+
/*
|
3266
|
+
* Global object
|
3267
|
+
*/
|
3268
|
+
|
3269
|
+
DUK_EXTERNAL_DECL void duk_set_global_object(duk_context *ctx);
|
3270
|
+
|
3271
|
+
/*
|
3272
|
+
* Duktape/C function magic value
|
3273
|
+
*/
|
3274
|
+
|
3275
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_magic(duk_context *ctx, duk_idx_t index);
|
3276
|
+
DUK_EXTERNAL_DECL void duk_set_magic(duk_context *ctx, duk_idx_t index, duk_int_t magic);
|
3277
|
+
DUK_EXTERNAL_DECL duk_int_t duk_get_current_magic(duk_context *ctx);
|
3043
3278
|
|
3044
3279
|
/*
|
3045
3280
|
* Module helpers: put multiple function or constant properties
|
3046
3281
|
*/
|
3047
3282
|
|
3048
|
-
void duk_put_function_list(duk_context *ctx, duk_idx_t obj_index, const duk_function_list_entry *funcs);
|
3049
|
-
void duk_put_number_list(duk_context *ctx, duk_idx_t obj_index, const duk_number_list_entry *numbers);
|
3283
|
+
DUK_EXTERNAL_DECL void duk_put_function_list(duk_context *ctx, duk_idx_t obj_index, const duk_function_list_entry *funcs);
|
3284
|
+
DUK_EXTERNAL_DECL void duk_put_number_list(duk_context *ctx, duk_idx_t obj_index, const duk_number_list_entry *numbers);
|
3050
3285
|
|
3051
3286
|
/*
|
3052
3287
|
* Variable access
|
3053
3288
|
*/
|
3054
3289
|
|
3055
|
-
/*
|
3056
|
-
|
3057
|
-
|
3058
|
-
|
3059
|
-
|
3290
|
+
/* XXX: These calls are incomplete and not usable now. They are not (yet)
|
3291
|
+
* part of the public API.
|
3292
|
+
*/
|
3293
|
+
DUK_EXTERNAL_DECL void duk_get_var(duk_context *ctx);
|
3294
|
+
DUK_EXTERNAL_DECL void duk_put_var(duk_context *ctx);
|
3295
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_del_var(duk_context *ctx);
|
3296
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_has_var(duk_context *ctx);
|
3060
3297
|
|
3061
3298
|
/*
|
3062
3299
|
* Object operations
|
3063
3300
|
*/
|
3064
3301
|
|
3065
|
-
void duk_compact(duk_context *ctx, duk_idx_t obj_index);
|
3066
|
-
void duk_enum(duk_context *ctx, duk_idx_t obj_index, duk_uint_t enum_flags);
|
3067
|
-
duk_bool_t duk_next(duk_context *ctx, duk_idx_t enum_index, duk_bool_t get_value);
|
3302
|
+
DUK_EXTERNAL_DECL void duk_compact(duk_context *ctx, duk_idx_t obj_index);
|
3303
|
+
DUK_EXTERNAL_DECL void duk_enum(duk_context *ctx, duk_idx_t obj_index, duk_uint_t enum_flags);
|
3304
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_next(duk_context *ctx, duk_idx_t enum_index, duk_bool_t get_value);
|
3068
3305
|
|
3069
3306
|
/*
|
3070
3307
|
* String manipulation
|
3071
3308
|
*/
|
3072
3309
|
|
3073
|
-
void duk_concat(duk_context *ctx, duk_idx_t count);
|
3074
|
-
void duk_join(duk_context *ctx, duk_idx_t count);
|
3075
|
-
void duk_decode_string(duk_context *ctx, duk_idx_t index, duk_decode_char_function callback, void *udata);
|
3076
|
-
void duk_map_string(duk_context *ctx, duk_idx_t index, duk_map_char_function callback, void *udata);
|
3077
|
-
void duk_substring(duk_context *ctx, duk_idx_t index, duk_size_t start_char_offset, duk_size_t end_char_offset);
|
3078
|
-
void duk_trim(duk_context *ctx, duk_idx_t index);
|
3079
|
-
duk_codepoint_t duk_char_code_at(duk_context *ctx, duk_idx_t index, duk_size_t char_offset);
|
3310
|
+
DUK_EXTERNAL_DECL void duk_concat(duk_context *ctx, duk_idx_t count);
|
3311
|
+
DUK_EXTERNAL_DECL void duk_join(duk_context *ctx, duk_idx_t count);
|
3312
|
+
DUK_EXTERNAL_DECL void duk_decode_string(duk_context *ctx, duk_idx_t index, duk_decode_char_function callback, void *udata);
|
3313
|
+
DUK_EXTERNAL_DECL void duk_map_string(duk_context *ctx, duk_idx_t index, duk_map_char_function callback, void *udata);
|
3314
|
+
DUK_EXTERNAL_DECL void duk_substring(duk_context *ctx, duk_idx_t index, duk_size_t start_char_offset, duk_size_t end_char_offset);
|
3315
|
+
DUK_EXTERNAL_DECL void duk_trim(duk_context *ctx, duk_idx_t index);
|
3316
|
+
DUK_EXTERNAL_DECL duk_codepoint_t duk_char_code_at(duk_context *ctx, duk_idx_t index, duk_size_t char_offset);
|
3080
3317
|
|
3081
3318
|
/*
|
3082
3319
|
* Ecmascript operators
|
3083
3320
|
*/
|
3084
3321
|
|
3085
|
-
duk_bool_t duk_equals(duk_context *ctx, duk_idx_t index1, duk_idx_t index2);
|
3086
|
-
duk_bool_t duk_strict_equals(duk_context *ctx, duk_idx_t index1, duk_idx_t index2);
|
3322
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_equals(duk_context *ctx, duk_idx_t index1, duk_idx_t index2);
|
3323
|
+
DUK_EXTERNAL_DECL duk_bool_t duk_strict_equals(duk_context *ctx, duk_idx_t index1, duk_idx_t index2);
|
3087
3324
|
|
3088
3325
|
/*
|
3089
3326
|
* Function (method) calls
|
3090
3327
|
*/
|
3091
3328
|
|
3092
|
-
void duk_call(duk_context *ctx, duk_idx_t nargs);
|
3093
|
-
void duk_call_method(duk_context *ctx, duk_idx_t nargs);
|
3094
|
-
void duk_call_prop(duk_context *ctx, duk_idx_t obj_index, duk_idx_t nargs);
|
3095
|
-
duk_int_t duk_pcall(duk_context *ctx, duk_idx_t nargs);
|
3096
|
-
duk_int_t duk_pcall_method(duk_context *ctx, duk_idx_t nargs);
|
3097
|
-
duk_int_t duk_pcall_prop(duk_context *ctx, duk_idx_t obj_index, duk_idx_t nargs);
|
3098
|
-
void duk_new(duk_context *ctx, duk_idx_t nargs);
|
3099
|
-
duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_function func, duk_idx_t nargs, duk_idx_t nrets);
|
3329
|
+
DUK_EXTERNAL_DECL void duk_call(duk_context *ctx, duk_idx_t nargs);
|
3330
|
+
DUK_EXTERNAL_DECL void duk_call_method(duk_context *ctx, duk_idx_t nargs);
|
3331
|
+
DUK_EXTERNAL_DECL void duk_call_prop(duk_context *ctx, duk_idx_t obj_index, duk_idx_t nargs);
|
3332
|
+
DUK_EXTERNAL_DECL duk_int_t duk_pcall(duk_context *ctx, duk_idx_t nargs);
|
3333
|
+
DUK_EXTERNAL_DECL duk_int_t duk_pcall_method(duk_context *ctx, duk_idx_t nargs);
|
3334
|
+
DUK_EXTERNAL_DECL duk_int_t duk_pcall_prop(duk_context *ctx, duk_idx_t obj_index, duk_idx_t nargs);
|
3335
|
+
DUK_EXTERNAL_DECL void duk_new(duk_context *ctx, duk_idx_t nargs);
|
3336
|
+
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);
|
3100
3337
|
|
3101
3338
|
/*
|
3102
3339
|
* Thread management
|
@@ -3110,8 +3347,8 @@ duk_int_t duk_safe_call(duk_context *ctx, duk_safe_call_function func, duk_idx_t
|
|
3110
3347
|
* Compilation and evaluation
|
3111
3348
|
*/
|
3112
3349
|
|
3113
|
-
duk_int_t duk_eval_raw(duk_context *ctx, const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
|
3114
|
-
duk_int_t duk_compile_raw(duk_context *ctx, const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
|
3350
|
+
DUK_EXTERNAL_DECL duk_int_t duk_eval_raw(duk_context *ctx, const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
|
3351
|
+
DUK_EXTERNAL_DECL duk_int_t duk_compile_raw(duk_context *ctx, const char *src_buffer, duk_size_t src_length, duk_uint_t flags);
|
3115
3352
|
|
3116
3353
|
/* plain */
|
3117
3354
|
#define duk_eval(ctx) \
|
@@ -3200,32 +3437,32 @@ duk_int_t duk_compile_raw(duk_context *ctx, const char *src_buffer, duk_size_t s
|
|
3200
3437
|
|
3201
3438
|
/* file */
|
3202
3439
|
#define duk_eval_file(ctx,path) \
|
3203
|
-
((void)
|
3440
|
+
((void) duk_push_string_file_raw((ctx), (path), 0), \
|
3204
3441
|
(void) duk_push_string((ctx), (path)), \
|
3205
3442
|
(void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL))
|
3206
3443
|
|
3207
3444
|
#define duk_eval_file_noresult(ctx,path) \
|
3208
|
-
((void)
|
3445
|
+
((void) duk_push_string_file_raw((ctx), (path), 0), \
|
3209
3446
|
(void) duk_push_string((ctx), (path)), \
|
3210
3447
|
(void) duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_NORESULT))
|
3211
3448
|
|
3212
3449
|
#define duk_peval_file(ctx,path) \
|
3213
|
-
((void)
|
3450
|
+
((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
|
3214
3451
|
(void) duk_push_string((ctx), (path)), \
|
3215
3452
|
duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE))
|
3216
3453
|
|
3217
3454
|
#define duk_peval_file_noresult(ctx,path) \
|
3218
|
-
((void)
|
3455
|
+
((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
|
3219
3456
|
(void) duk_push_string((ctx), (path)), \
|
3220
3457
|
duk_eval_raw((ctx), NULL, 0, DUK_COMPILE_EVAL | DUK_COMPILE_SAFE | DUK_COMPILE_NORESULT))
|
3221
3458
|
|
3222
3459
|
#define duk_compile_file(ctx,flags,path) \
|
3223
|
-
((void)
|
3460
|
+
((void) duk_push_string_file_raw((ctx), (path), 0), \
|
3224
3461
|
(void) duk_push_string((ctx), (path)), \
|
3225
3462
|
(void) duk_compile_raw((ctx), NULL, 0, (flags)))
|
3226
3463
|
|
3227
3464
|
#define duk_pcompile_file(ctx,flags,path) \
|
3228
|
-
((void)
|
3465
|
+
((void) duk_push_string_file_raw((ctx), (path), DUK_STRING_PUSH_SAFE), \
|
3229
3466
|
(void) duk_push_string((ctx), (path)), \
|
3230
3467
|
duk_compile_raw((ctx), NULL, 0, (flags) | DUK_COMPILE_SAFE))
|
3231
3468
|
|
@@ -3233,32 +3470,29 @@ duk_int_t duk_compile_raw(duk_context *ctx, const char *src_buffer, duk_size_t s
|
|
3233
3470
|
* Logging
|
3234
3471
|
*/
|
3235
3472
|
|
3236
|
-
|
3237
|
-
void duk_log(duk_context *ctx, duk_int_t level, const char *fmt, ...);
|
3473
|
+
DUK_EXTERNAL_DECL void duk_log(duk_context *ctx, duk_int_t level, const char *fmt, ...);
|
3238
3474
|
|
3239
3475
|
/*
|
3240
3476
|
* Debugging
|
3241
3477
|
*/
|
3242
3478
|
|
3243
|
-
void duk_push_context_dump(duk_context *ctx);
|
3479
|
+
DUK_EXTERNAL_DECL void duk_push_context_dump(duk_context *ctx);
|
3244
3480
|
|
3245
3481
|
#if defined(DUK_USE_FILE_IO)
|
3246
3482
|
/* internal use */
|
3247
3483
|
#define duk_dump_context_filehandle(ctx,fh) \
|
3248
|
-
|
3249
|
-
|
3250
|
-
|
3251
|
-
duk_pop(ctx); \
|
3252
|
-
} while (0)
|
3484
|
+
(duk_push_context_dump((ctx)), \
|
3485
|
+
DUK_FPRINTF((fh), "%s\n", duk_safe_to_string(ctx, -1)), \
|
3486
|
+
duk_pop(ctx))
|
3253
3487
|
|
3254
3488
|
/* external use */
|
3255
3489
|
#define duk_dump_context_stdout(ctx) \
|
3256
|
-
duk_dump_context_filehandle(ctx,
|
3490
|
+
duk_dump_context_filehandle((ctx), DUK_STDOUT)
|
3257
3491
|
#define duk_dump_context_stderr(ctx) \
|
3258
|
-
duk_dump_context_filehandle(ctx,
|
3492
|
+
duk_dump_context_filehandle((ctx), DUK_STDERR)
|
3259
3493
|
#else /* DUK_USE_FILE_IO */
|
3260
|
-
#define duk_dump_context_stdout(ctx)
|
3261
|
-
#define duk_dump_context_stderr(ctx)
|
3494
|
+
#define duk_dump_context_stdout(ctx) ((void) 0)
|
3495
|
+
#define duk_dump_context_stderr(ctx) ((void) 0)
|
3262
3496
|
#endif /* DUK_USE_FILE_IO */
|
3263
3497
|
|
3264
3498
|
/*
|
@@ -3391,7 +3625,7 @@ void duk_push_context_dump(duk_context *ctx);
|
|
3391
3625
|
* Indexes of various types (8-bit, 16-bit, 32-bit) in memory relative to
|
3392
3626
|
* the logical (big endian) order:
|
3393
3627
|
*
|
3394
|
-
* byte order duk_uint8_t duk_uint16_t duk_uint32_t
|
3628
|
+
* byte order duk_uint8_t duk_uint16_t duk_uint32_t
|
3395
3629
|
* BE 01234567 0123 01
|
3396
3630
|
* LE 76543210 3210 10
|
3397
3631
|
* ME (ARM) 32107654 1032 01
|