71#if defined(DUK_USE_FASTINT)
72 if (DUK_TVAL_IS_FASTINT(tv_x) && DUK_TVAL_IS_FASTINT(tv_y)) {
73 duk_int64_t v1, v2, v3;
81 v1 = DUK_TVAL_GET_FASTINT(tv_x);
82 v2 = DUK_TVAL_GET_FASTINT(tv_y);
84 v3_hi = (duk_int32_t) (v3 >> 32);
85 if (
DUK_LIKELY(v3_hi >= -0x8000LL && v3_hi <= 0x7fffLL)) {
168#if defined(DUK_USE_FASTINT)
169 if (DUK_TVAL_IS_FASTINT(tv_x) && DUK_TVAL_IS_FASTINT(tv_y)) {
170 duk_int64_t v1, v2, v3;
173 v1 = DUK_TVAL_GET_FASTINT(tv_x);
174 v2 = DUK_TVAL_GET_FASTINT(tv_y);
187 if (v1 >= -0x80000000LL && v1 <= 0x7fffffffLL && v1 != 0 &&
188 v2 >= -0x80000000LL && v2 <= 0x7fffffffLL && v2 != 0) {
201 if (v1 == 0 || v2 == 0) {
215 if (v1 < 1 || v2 < 1) {
230 v3_hi = (duk_int32_t) (v3 >> 32);
231 if (
DUK_LIKELY(v3_hi >= -0x8000LL && v3_hi <= 0x7fffLL)) {
302 duk_int32_t i1, i2, i3;
303 duk_uint32_t u1, u2, u3;
304#if defined(DUK_USE_FASTINT)
317#if defined(DUK_USE_FASTINT)
318 if (DUK_TVAL_IS_FASTINT(tv_x) && DUK_TVAL_IS_FASTINT(tv_y)) {
319 i1 = (duk_int32_t) DUK_TVAL_GET_FASTINT_I32(tv_x);
320 i2 = (duk_int32_t) DUK_TVAL_GET_FASTINT_I32(tv_y);
351 u2 = ((duk_uint32_t) i2) & 0xffffffffUL;
352 i3 = i1 << (u2 & 0x1f);
353 i3 = i3 & ((duk_int32_t) 0xffffffffUL);
359 u2 = ((duk_uint32_t) i2) & 0xffffffffUL;
360 i3 = i1 >> (u2 & 0x1f);
366 u1 = ((duk_uint32_t) i1) & 0xffffffffUL;
367 u2 = ((duk_uint32_t) i2) & 0xffffffffUL;
370 u3 = u1 >> (u2 & 0x1f);
371#if defined(DUK_USE_FASTINT)
372 fi3 = (duk_int64_t) u3;
373 goto fastint_result_set;
386#if defined(DUK_USE_FASTINT)
391 fi3 = (duk_int64_t) i3;
428#if defined(DUK_USE_FASTINT)
429 if (DUK_TVAL_IS_FASTINT(tv_x)) {
432 v1 = DUK_TVAL_GET_FASTINT(tv_x);
438 if (
DUK_LIKELY(v1 != DUK_FASTINT_MIN && v1 != 0)) {
471#if defined(DUK_USE_FASTINT)
489#if !defined(DUK_USE_FASTINT)
499#if defined(DUK_USE_FASTINT)
500 if (DUK_TVAL_IS_FASTINT(tv_x)) {
501 i1 = (duk_int32_t) DUK_TVAL_GET_FASTINT_I32(tv_x);
513#if defined(DUK_USE_FASTINT)
562#define DUK__LONGJMP_RESTART 0
563#define DUK__LONGJMP_RETHROW 1
565#define DUK__RETHAND_RESTART 0
566#define DUK__RETHAND_FINISHED 1
800#if defined(DUK_USE_ASSERTIONS)
842 entry_callstack_index = entry_callstack_top - 1;
861 DUK_DD(
DUK_DDPRINT(
"handling longjmp: type=%ld, value1=%!T, value2=%!T, iserror=%ld",
943 DUK_DD(
DUK_DDPRINT(
"-> resume with an error, converted to a throw in the resumee, propagate"));
969 goto wipe_and_return;
1001 goto wipe_and_return;
1055 DUK_DD(
DUK_DDPRINT(
"-> yield an error, converted to a throw in the resumer, propagate"));
1070 goto wipe_and_return;
1100 if (thr == entry_thread &&
1116 goto wipe_and_return;
1128 DUK_DD(
DUK_DDPRINT(
"-> throw caught by a 'finally' clause, restart execution"));
1130 goto wipe_and_return;
1136 if (thr == entry_thread) {
1145 DUK_D(
DUK_DPRINT(
"-> throw propagated up to entry level, rethrow and exit bytecode executor"));
1151 DUK_DD(
DUK_DDPRINT(
"-> throw not caught by current thread, yield error to resumer and recheck longjmp"));
1190 goto convert_to_internal_error;
1208 convert_to_internal_error:
1269 DUK_DD(
DUK_DDPRINT(
"-> break/continue caught by 'finally', restart execution"));
1279 DUK_DD(
DUK_DDPRINT(
"-> break/continue caught by a label catcher (in the same function), restart execution"));
1286 DUK_D(
DUK_DPRINT(
"-> break/continue not caught by anything in the current function (should never happen), throw internal error"));
1371 if (thr == entry_thread &&
1412 DUK_DD(
DUK_DDPRINT(
"no calling activation, thread finishes (similar to yield)"));
1441 DUK_DD(
DUK_DDPRINT(
"-> return not caught, thread terminated; handle like yield, restart execution in resumer"));
1470#if defined(DUK_USE_INTERRUPT_COUNTER)
1472#define DUK__INT_NOACTION 0
1473#define DUK__INT_RESTART 1
1475#if defined(DUK_USE_DEBUGGER_SUPPORT)
1500 (thr->
heap->dbg_step_thread == thr &&
1502 line = duk_debug_curr_line(thr);
1504 if (act->prev_line != line) {
1508 (thr->
heap->dbg_step_thread == thr) &&
1510 (line != thr->
heap->dbg_step_startline)) {
1514 DUK_HEAP_SET_PAUSED(thr->
heap);
1529 bp_active = thr->
heap->dbg_breakpoints_active;
1537 if (act->prev_line != bp->
line && line == bp->
line) {
1541 DUK_HEAP_SET_PAUSED(thr->
heap);
1548 act->prev_line = line;
1563 process_messages = 0;
1564 if (thr->
heap->dbg_state_dirty || thr->
heap->dbg_paused || thr->
heap->dbg_detaching) {
1568 process_messages = 1;
1572 thr->
heap->dbg_exec_counter += thr->interrupt_init;
1580 thr->
heap->dbg_last_counter = thr->
heap->dbg_exec_counter;
1581 now = DUK_USE_DATE_GET_NOW(ctx);
1583 diff_last = now - thr->
heap->dbg_last_time;
1592 thr->
heap->dbg_last_time = now;
1593 thr->
heap->dbg_state_dirty = 1;
1594 process_messages = 1;
1614 if (process_messages) {
1616 processed_messages = duk_debug_process_messages(thr, 0 );
1628 if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->
heap)) {
1633 thr->
heap->dbg_step_thread == thr &&
1635 thr->
heap->dbg_paused) {
1642 if (processed_messages) {
1643 DUK_D(
DUK_DPRINT(
"processed debug messages, restart execution to recheck possibly changed breakpoints"));
1644 *out_interrupt_retval = DUK__INT_RESTART;
1647 DUK_D(
DUK_DPRINT(
"debugger became detached, resume normal execution"));
1664#if defined(DUK_USE_DEBUG)
1665 thr->
heap->inst_count_interrupt += thr->interrupt_init;
1667 "instruction counts: executor=%ld, interrupt=%ld",
1668 (
long) thr->interrupt_counter, (
long) thr->interrupt_init,
1669 (
long) thr->
heap->inst_count_exec, (
long) thr->
heap->inst_count_interrupt));
1672 retval = DUK__INT_NOACTION;
1673 ctr = DUK_HTHREAD_INTCTR_DEFAULT;
1686#if defined(DUK_USE_DEBUGGER_SUPPORT)
1696 thr->interrupt_init = ctr;
1697 thr->interrupt_counter = ctr - 1;
1698 return DUK__INT_NOACTION;
1709#if defined(DUK_USE_EXEC_TIMEOUT_CHECK)
1724 thr->interrupt_init = 0;
1725 thr->interrupt_counter = 0;
1731#if defined(DUK_USE_DEBUGGER_SUPPORT)
1732 if (!thr->
heap->dbg_processing &&
1733 (thr->
heap->dbg_read_cb !=
NULL || thr->
heap->dbg_detaching)) {
1737 duk__interrupt_handle_debugger(thr, &immediate, &retval);
1758 thr->interrupt_init = ctr;
1759 thr->interrupt_counter = ctr - 1;
1776#if defined(DUK_USE_DEBUGGER_SUPPORT)
1789 bp_active = heap->dbg_breakpoints_active;
1790 act->
flags &= ~DUK_ACT_FLAG_BREAKPOINT_ACTIVE;
1826 for (bp_idx = 0; bp_idx < heap->dbg_breakpoint_count; bp_idx++) {
1833 bp->
line >= fun->start_line && bp->
line <= fun->end_line) {
1836 "%s:%ld vs. %s (line %ld vs. %ld-%ld)",
1841 (
long) fun->start_line,
1842 (
long) fun->end_line));
1846 while (
funcs != funcs_end) {
1849 if (bp->
line >= inner_fun->start_line && bp->
line <= inner_fun->end_line) {
1863 *bp_active = heap->dbg_breakpoints + bp_idx;
1872 DUK_DD(
DUK_DDPRINT(
"ACTIVE BREAKPOINTS: %ld", (
long) (bp_active - thr->
heap->dbg_breakpoints_active)));
1875 if (thr->
heap->dbg_step_thread !=
NULL &&
1877 (thr->
heap->dbg_step_thread != thr ||
1880 DUK_HEAP_SET_PAUSED(thr->
heap);
1887 thr->
heap->dbg_paused ||
1895 DUK_ASSERT(thr->interrupt_counter <= thr->interrupt_init);
1896 thr->interrupt_init = thr->interrupt_init - thr->interrupt_counter;
1897 thr->interrupt_counter = 0;
1932#if defined(DUK_USE_EXEC_FUN_LOCAL)
1933#define DUK__FUN() fun
1935#define DUK__FUN() ((duk_hcompiledfunction *) DUK_ACT_GET_FUNC((thr)->callstack + (thr)->callstack_top - 1))
1937#define DUK__STRICT() (DUK_HOBJECT_HAS_STRICT((duk_hobject *) DUK__FUN()))
1942#define DUK__REG(x) (*(thr->valstack_bottom + (x)))
1943#define DUK__REGP(x) (thr->valstack_bottom + (x))
1944#define DUK__CONST(x) (*(consts + (x)))
1945#define DUK__CONSTP(x) (consts + (x))
1947#define DUK__REGCONST(x) ((x) < DUK_BC_REGLIMIT ? DUK__REG((x)) : DUK__CONST((x) - DUK_BC_REGLIMIT))
1948#define DUK__REGCONSTP(x) ((x) < DUK_BC_REGLIMIT ? DUK__REGP((x)) : DUK__CONSTP((x) - DUK_BC_REGLIMIT))
1949#define DUK__REGCONST(x) *((((x) < DUK_BC_REGLIMIT ? thr->valstack_bottom : consts2) + (x)))
1950#define DUK__REGCONSTP(x) (((x) < DUK_BC_REGLIMIT ? thr->valstack_bottom : consts2) + (x))
1956#define DUK__RCISREG(x) (((x) & 0x100) == 0)
1957#define DUK__REGCONST(x) (*((DUK__RCISREG((x)) ? thr->valstack_bottom : consts2) + (x)))
1958#define DUK__REGCONSTP(x) ((DUK__RCISREG((x)) ? thr->valstack_bottom : consts2) + (x))
1960#ifdef DUK_USE_VERBOSE_EXECUTOR_ERRORS
1961#define DUK__INTERNAL_ERROR(msg) do { \
1962 DUK_ERROR_INTERNAL(thr, (msg)); \
1965#define DUK__INTERNAL_ERROR(msg) do { \
1966 goto internal_error; \
1970#define DUK__SYNC_CURR_PC() do { \
1971 duk_activation *act; \
1972 act = thr->callstack + thr->callstack_top - 1; \
1973 act->curr_pc = curr_pc; \
1975#define DUK__SYNC_AND_NULL_CURR_PC() do { \
1976 duk_activation *act; \
1977 act = thr->callstack + thr->callstack_top - 1; \
1978 act->curr_pc = curr_pc; \
1979 thr->ptr_curr_pc = NULL; \
2042 entry_thread = exec_thr;
2043 heap = entry_thread->
heap;
2061#if defined(DUK_USE_CPP_EXCEPTIONS)
2074#if defined(DUK_USE_CPP_EXCEPTIONS)
2075 }
catch (duk_internal_exception &exc) {
2079#if defined(DUK_USE_CPP_EXCEPTIONS)
2086 entry_callstack_top,
2087 entry_call_recursion_depth,
2090#if defined(DUK_USE_CPP_EXCEPTIONS)
2091 catch (std::exception &exc) {
2092 const char *what = exc.what();
2096 DUK_D(
DUK_DPRINT(
"unexpected c++ std::exception (perhaps thrown by user code)"));
2100 }
catch (duk_internal_exception exc) {
2101 DUK_D(
DUK_DPRINT(
"caught api error thrown from unexpected c++ std::exception"));
2105 entry_callstack_top,
2106 entry_call_recursion_depth,
2110 DUK_D(
DUK_DPRINT(
"unexpected c++ exception (perhaps thrown by user code)"));
2114 }
catch (duk_internal_exception exc) {
2115 DUK_D(
DUK_DPRINT(
"caught api error thrown from unexpected c++ exception"));
2119 entry_callstack_top,
2120 entry_call_recursion_depth,
2147#if defined(DUK_USE_EXEC_FUN_LOCAL)
2153#ifdef DUK_USE_INTERRUPT_COUNTER
2157#ifdef DUK_USE_ASSERTIONS
2218#if !defined(DUK_USE_EXEC_FUN_LOCAL)
2233#if defined(DUK_USE_DEBUGGER_SUPPORT)
2234 if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->
heap) && !thr->
heap->dbg_processing) {
2235 duk__executor_recheck_debugger(thr, act, fun);
2240#ifdef DUK_USE_ASSERTIONS
2249 "consts %p, funcs %p, lev %ld, regbot %ld, regtop %ld, catchstack_top=%ld, "
2275#if defined(DUK_USE_INTERRUPT_COUNTER)
2276 int_ctr = thr->interrupt_counter;
2278 thr->interrupt_counter = int_ctr - 1;
2296#if defined(DUK_USE_DEBUGGER_SUPPORT)
2297 if (thr->
heap->dbg_force_restart) {
2299 thr->
heap->dbg_force_restart = 0;
2300 goto restart_execution;
2304 exec_int_ret = duk__executor_interrupt(thr);
2305 if (exec_int_ret == DUK__INT_RESTART) {
2307 goto restart_execution;
2311#if defined(DUK_USE_INTERRUPT_COUNTER) && defined(DUK_USE_DEBUG)
2315 thr->
heap->inst_count_exec++;
2318#if defined(DUK_USE_ASSERTIONS) || defined(DUK_USE_DEBUG)
2326 DUK_DDD(
DUK_DDDPRINT(
"executing bytecode: pc=%ld, ins=0x%08lx, op=%ld, valstack_top=%ld/%ld, nregs=%ld --> %!I",
2328 (
unsigned long) *curr_pc,
2337#if defined(DUK_USE_ASSERTIONS)
2410#if defined(DUK_USE_FASTINT)
2416#if defined(DUK_USE_FASTINT)
2444#if defined(DUK_USE_FASTINT)
2479#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
2513 duk_uint32_t arr_idx;
2534#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
2614#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
2624 for (i = 0; i < c; i++) {
2639#ifdef DUK_USE_REGEXP_SUPPORT
2695#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
2782 if (is_undef_value) {
2858#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
3048#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
3266 entry_callstack_top);
3268 goto restart_execution;
3289#if !defined(DUK_USE_EXEC_FUN_LOCAL)
3310#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
3341 if (flag_tailcall) {
3365 goto restart_execution;
3369 DUK_DDD(
DUK_DDDPRINT(
"ecma-to-ecma call not possible, target is native (may be lightfunc)"));
3392#if !defined(DUK_USE_EXEC_FUN_LOCAL)
3423 if (flag_evalcall) {
3427 DUK_DDD(
DUK_DDDPRINT(
"call target is eval, call identifier was not 'eval' -> indirect eval"));
3438#if !defined(DUK_USE_EXEC_FUN_LOCAL)
3493 "have_finally=%ld, catch_binding=%ld, with_binding=%ld (flags=0x%02lx)",
3617 DUK_DDD(
DUK_DDDPRINT(
"TRYCATCH catcher: flags=0x%08lx, callstack_index=%ld, pc_base=%ld, "
3618 "idx_base=%ld, h_varname=%!O",
3646#if defined(DUK_USE_FASTINT)
3647 if (DUK_TVAL_IS_FASTINT(tv1)) {
3648 duk_int64_t x_fi, y_fi, z_fi;
3649 x_fi = DUK_TVAL_GET_FASTINT(tv1);
3651 if (x_fi == DUK_FASTINT_MIN) {
3656 if (x_fi == DUK_FASTINT_MAX) {
3665 z_fi = (ins &
DUK_ENC_OP(0x02)) ? x_fi : y_fi;
3815 switch ((
int) extraop) {
4046#if defined(DUK_USE_EXEC_INDIRECT_BOUND_CHECK)
4096 DUK_DDD(
DUK_DDDPRINT(
"ENDTRY: clearing catch active flag (regardless of whether it was set or not)"));
4100 DUK_DDD(
DUK_DDDPRINT(
"ENDTRY: finally part is active, jump through 2nd jump slot with 'normal continuation'"));
4114 DUK_DDD(
DUK_DDDPRINT(
"ENDTRY: no finally part, dismantle catcher, jump through 2nd jump slot (to end of statement)"));
4154 DUK_DDD(
DUK_DDDPRINT(
"ENDCATCH: finally part is active, jump through 2nd jump slot with 'normal continuation'"));
4168 DUK_DDD(
DUK_DDDPRINT(
"ENDCATCH: no finally part, dismantle catcher, jump through 2nd jump slot (to end of statement)"));
4208 switch (cont_type) {
4210 DUK_DDD(
DUK_DDDPRINT(
"ENDFIN: finally part finishing with 'normal' (non-abrupt) completion -> "
4211 "dismantle catcher, resume execution after ENDFIN"));
4214 goto restart_execution;
4217 DUK_DDD(
DUK_DDDPRINT(
"ENDFIN: finally part finishing with 'return' complation -> dismantle "
4232 entry_callstack_top);
4234 goto restart_execution;
4257#if defined(DUK_USE_FASTINT)
4263 lj_type = cont_type;
4265 goto restart_execution;
4268 DUK_DDD(
DUK_DDDPRINT(
"ENDFIN: finally part finishing with abrupt completion, lj_type=%ld -> "
4269 "dismantle catcher, re-throw error",
4305#if defined(DUK_USE_AUGMENT_ERROR_THROW)
4339#if defined(DUK_USE_DEBUGGER_SUPPORT)
4340 if (DUK_HEAP_IS_DEBUGGER_ATTACHED(thr->
heap)) {
4343 duk_debug_halt_execution(thr, 1 );
4345 goto restart_execution;
4347 DUK_D(
DUK_DPRINT(
"DEBUGGER statement ignored, debugger not attached"));
4362 goto restart_execution;
4372 goto restart_execution;
4432 "idx_base=%ld, h_varname=%!O, label_id=%ld",
4442#if defined(DUK_USE_DDDPRINT) || defined(DUK_USE_ASSERTIONS)
4445#if defined(DUK_USE_DDDPRINT)
4482#ifndef DUK_USE_VERBOSE_EXECUTOR_ERRORS
4488#undef DUK__LONGJMP_RESTART
4489#undef DUK__LONGJMP_FINISHED
4490#undef DUK__LONGJMP_RETHROW
4492#undef DUK__RETHAND_RESTART
4493#undef DUK__RETHAND_FINISHED
4503#undef DUK__REGCONSTP
4505#undef DUK__INTERNAL_ERROR
4506#undef DUK__SYNC_CURR_PC
4507#undef DUK__SYNC_AND_NULL_CURR_PC
#define DUK_UNREACHABLE()
unsigned int duk_small_uint_t
duk_uint_fast32_t duk_uint_fast_t
duk_int_fast32_t duk_int_fast_t
duk_uint_fast16_t duk_small_uint_fast_t
duk_int_fast32_t duk_int_t
duk_uint_fast32_t duk_uint_t
duk_small_int_t duk_bool_t
duk_uint32_t duk_uint_fast32_t
DUK_EXTERNAL void duk_concat(duk_context *ctx, duk_idx_t count)
#define DUK_LJ_TYPE_THROW
#define DUK_CAT_FLAG_CATCH_BINDING_ENABLED
DUK_INTERNAL_DECL void duk_js_init_activation_environment_records_delayed(duk_hthread *thr, duk_activation *act)
#define DUK_ERROR_RANGE(thr, msg)
#define DUK_EXTRAOP_INVLHS
#define DUK_LJ_TYPE_CONTINUE
#define DUK_TVAL_SET_NUMBER_UPDREF
#define DUK_TVAL_SET_FASTINT_U32_UPDREF
#define DUK_LJ_TYPE_YIELD
DUK_INTERNAL_DECL duk_bool_t duk_js_declvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name, duk_tval *val, duk_small_int_t prop_flags, duk_bool_t is_func_decl)
#define DUK_HCOMPILEDFUNCTION_GET_CONSTS_BASE(heap, h)
#define DUK_STRIDX_INT_THIS
DUK_INTERNAL_DECL duk_hstring * duk_js_typeof(duk_hthread *thr, duk_tval *tv_x)
DUK_EXTERNAL void duk_pop_2(duk_context *ctx)
#define DUK_EXTRAOP_THROW
#define DUK_TVAL_SET_FASTINT_UPDREF
#define DUK_HSTRING_GET_DATA(x)
DUK_INTERNAL_DECL void duk_err_setup_heap_ljstate(duk_hthread *thr, duk_small_int_t lj_type)
#define DUK_TVAL_SET_FASTINT_U32(tv, val)
DUK_INTERNAL_DECL duk_idx_t duk_push_object_helper_proto(duk_context *ctx, duk_uint_t hobject_flags_and_class, duk_hobject *proto)
#define DUK_STRIDX_ENUMERABLE
#define DUK_HCOMPILEDFUNCTION_GET_CODE_BASE(heap, h)
DUK_INTERNAL_DECL duk_bool_t duk_put_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_BC_TRYCATCH_FLAG_HAVE_FINALLY
#define DUK_HOBJECT_GET_PROTOTYPE(heap, h)
#define DUK_TVAL_IS_NUMBER(tv)
#define DUK_HOBJECT_HAS_BOUND(h)
#define DUK_CAT_LABEL_SHIFT
DUK_INTERNAL void duk_err_longjmp(duk_hthread *thr)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
DUK_EXTERNAL void duk_push_true(duk_context *ctx)
DUK_INTERNAL_DECL void duk_hobject_enumerator_create(duk_context *ctx, duk_small_uint_t enum_flags)
#define DUK_CAT_GET_TYPE(c)
#define DUK_BC_TRYCATCH_FLAG_CATCH_BINDING
#define DUK_VSRESIZE_FLAG_THROW
DUK_EXTERNAL void duk_to_primitive(duk_context *ctx, duk_idx_t index, duk_int_t hint)
#define DUK_COMPARE_FLAG_NEGATE
DUK_INTERNAL_DECL duk_bool_t duk_js_delvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name)
#define DUK_ACT_FLAG_BREAKPOINT_ACTIVE
DUK_INTERNAL_DECL void duk_js_putvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name, duk_tval *val, duk_bool_t strict)
DUK_INTERNAL_DECL void duk_hthread_catchstack_unwind(duk_hthread *thr, duk_size_t new_top)
#define DUK_ASSERT_REFCOUNT_NONZERO_HEAPHDR(h)
#define DUK_GET_HOBJECT_NEGIDX(ctx, idx)
#define DUK_TVAL_GET_OBJECT(tv)
DUK_INTERNAL_DECL duk_bool_t duk_js_instanceof(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y)
DUK_EXTERNAL void duk_push_boolean(duk_context *ctx, duk_bool_t val)
DUK_EXTERNAL void duk_to_undefined(duk_context *ctx, duk_idx_t index)
#define DUK_STEP_TYPE_INTO
#define DUK_CAT_CLEAR_CATCH_ENABLED(c)
#define DUK_EXTRAOP_ENDTRY
#define duk_xdef_prop_index_wec(ctx, obj_index, arr_index)
#define duk_xdef_prop_wec(ctx, obj_index)
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_COUNT(heap, h)
DUK_EXTERNAL duk_bool_t duk_check_type_mask(duk_context *ctx, duk_idx_t index, duk_uint_t mask)
#define DUK_HCOMPILEDFUNCTION_GET_CODE_END(heap, h)
#define DUK_EXTRAOP_SETALEN
#define DUK_TVAL_IS_UNDEFINED(tv)
#define DUK_HOBJECT_IS_COMPILEDFUNCTION(h)
#define DUK_TVAL_GET_LIGHTFUNC_FUNCPTR(tv)
DUK_EXTERNAL void duk_new(duk_context *ctx, duk_idx_t nargs)
#define DUK_EXTRAOP_NEXTENUM
DUK_INTERNAL_DECL void duk_js_push_closure(duk_hthread *thr, duk_hcompiledfunction *fun_temp, duk_hobject *outer_var_env, duk_hobject *outer_lex_env, duk_bool_t add_auto_proto)
#define DUK_TVAL_IS_OBJECT(tv)
#define DUK_PROPDESC_FLAGS_NONE
DUK_EXTERNAL duk_bool_t duk_is_valid_index(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_push_hstring_stridx(duk_context *ctx, duk_small_int_t stridx)
DUK_INTERNAL_DECL duk_bool_t duk_js_in(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y)
#define DUK_TVAL_SET_TVAL_UPDREF_FAST
#define DUK_TVAL_SET_NULL_UPDREF
DUK_EXTERNAL void duk_require_stack(duk_context *ctx, duk_idx_t extra)
#define DUK_HEAP_DBG_RATELIMIT_OPCODES
#define DUK_EXTRAOP_ENDFIN
#define DUK_CAT_HAS_FINALLY_ENABLED(c)
#define DUK_EXTRAOP_LDNULL
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_BASE(heap, h)
#define DUK_ERROR_INTERNAL_DEFMSG(thr)
#define DUK_VSRESIZE_FLAG_SHRINK
#define DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, h, p)
#define DUK_STRIDX_LC_UNDEFINED
#define DUK_LJ_TYPE_RETURN
#define DUK_EXTRAOP_TYPEOFID
#define DUK_COMPARE_FLAG_EVAL_LEFT_FIRST
#define DUK_ASSERT_DISABLE(x)
DUK_EXTERNAL void duk_push_null(duk_context *ctx)
DUK_INTERNAL_DECL void duk_hthread_terminate(duk_hthread *thr)
#define DUK_CALL_FLAG_IS_RESUME
#define DUK_STRIDX_DEFINE_PROPERTY
#define DUK_ERROR_API(thr, msg)
#define DUK_HOBJECT_CLASS_AS_FLAGS(v)
#define DUK_CALL_FLAG_IS_TAILCALL
DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_resume(duk_context *ctx)
#define DUK_EXTRAOP_ENDLABEL
#define DUK_HEAP_HAS_INTERRUPT_RUNNING(heap)
#define DUK_HTHREAD_STATE_INACTIVE
DUK_EXTERNAL duk_double_t duk_to_number(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t index)
#define DUK_CAT_FLAG_LEXENV_ACTIVE
#define DUK_EXTRAOP_NEWOBJ
#define DUK_TVAL_SET_BOOLEAN_UPDREF
#define DUK_HOBJECT_IS_THREAD(h)
#define DUK_TVAL_GET_STRING(tv)
DUK_INTERNAL_DECL duk_tval * duk_hobject_find_existing_entry_tval_ptr(duk_heap *heap, duk_hobject *obj, duk_hstring *key)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_getprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key)
DUK_EXTERNAL void duk_replace(duk_context *ctx, duk_idx_t to_index)
#define DUK_BC_DECLVAR_FLAG_UNDEF_VALUE
#define DUK_EXTRAOP_BREAK
#define DUK_LJ_TYPE_UNKNOWN
DUK_INTERNAL_DECL void duk_hthread_callstack_unwind(duk_hthread *thr, duk_size_t new_top)
#define DUK_TVAL_SET_FASTINT(tv, val)
#define DUK_TVAL_SET_NUMBER_CHKFAST(tv, d)
#define DUK_BC_TRYCATCH_FLAG_HAVE_CATCH
#define DUK_HTHREAD_STATE_RESUMED
DUK_INTERNAL_DECL void duk_push_hobject_bidx(duk_context *ctx, duk_small_int_t builtin_idx)
#define DUK_TVAL_SET_TVAL_UPDREF
#define DUK_HOBJECT_IS_NATIVEFUNCTION(h)
#define DUK_CAT_HAS_CATCH_BINDING_ENABLED(c)
#define DUK_EXTRAOP_INITENUM
#define DUK_HOBJECT_CLASS_OBJENV
#define DUK_TVAL_IS_STRING(tv)
DUK_INTERNAL_DECL duk_bool_t duk_valstack_resize_raw(duk_context *ctx, duk_size_t min_new_size, duk_small_uint_t flags)
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_END(heap, h)
#define DUK_HOBJECT_DECREF(thr, h)
DUK_EXTERNAL duk_bool_t duk_is_object(duk_context *ctx, duk_idx_t index)
#define DUK_CAT_FLAG_CATCH_ENABLED
#define DUK_PROPDESC_FLAGS_MASK
#define DUK_HEAP_CLEAR_INTERRUPT_RUNNING(heap)
#define DUK_CAT_GET_LABEL(c)
#define DUK_EXTRAOP_INSTOF
#define DUK_TVAL_IS_LIGHTFUNC(tv)
DUK_EXTERNAL void duk_set_top(duk_context *ctx, duk_idx_t index)
#define DUK_BC_RETURN_FLAG_HAVE_RETVAL
DUK_EXTERNAL duk_idx_t duk_push_object(duk_context *ctx)
DUK_INTERNAL_DECL void duk_handle_call_unprotected(duk_hthread *thr, duk_idx_t num_stack_args, duk_small_uint_t call_flags)
#define DUK_HTHREAD_STATE_RUNNING
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)
#define DUK_TVAL_CHKFAST_INPLACE(v)
#define DUK_STEP_TYPE_OVER
DUK_EXTERNAL duk_bool_t duk_is_null(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_delprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key, duk_bool_t throw_flag)
#define DUK_EXTRAOP_INVALID
DUK_EXTERNAL duk_idx_t duk_get_top(duk_context *ctx)
#define DUK_EXTRAOP_INITSET
#define DUK_EXTRAOP_LDFALSE
#define DUK_CAT_FLAG_FINALLY_ENABLED
#define DUK_CAT_SET_LEXENV_ACTIVE(c)
#define DUK_CAT_HAS_LEXENV_ACTIVE(c)
DUK_INTERNAL_DECL void duk_push_tval(duk_context *ctx, duk_tval *tv)
#define DUK_EXTRAOP_ENDCATCH
#define DUK_HTHREAD_STRING_FILE_NAME(thr)
DUK_INTERNAL_DECL duk_bool_t duk_js_getvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name, duk_bool_t throw_flag)
#define DUK_EXTRAOP_LDTHIS
#define DUK_HOBJECT_CLASS_DECENV
DUK_INTERNAL_DECL void duk_err_augment_error_throw(duk_hthread *thr)
DUK_EXTERNAL void duk_push_undefined(duk_context *ctx)
#define DUK_STRIDX_INT_TARGET
#define DUK_EXTRAOP_DEBUGGER
DUK_EXTERNAL void duk_call_method(duk_context *ctx, duk_idx_t nargs)
DUK_EXTERNAL duk_int32_t duk_to_int32(duk_context *ctx, duk_idx_t index)
#define DUK_BC_LDINTX_SHIFT
#define DUK_BC_TRYCATCH_FLAG_WITH_BINDING
#define duk_js_equals(thr, tv_x, tv_y)
DUK_EXTERNAL void duk_push_number(duk_context *ctx, duk_double_t val)
#define DUK_HEAP_SET_INTERRUPT_RUNNING(heap)
#define DUK_GET_TVAL_NEGIDX(ctx, idx)
#define DUK_LJ_TYPE_RESUME
#define DUK_BC_CALL_FLAG_EVALCALL
#define DUK_HOBJECT_FLAG_EXTENSIBLE
DUK_INTERNAL_DECL duk_idx_t duk_push_object_helper(duk_context *ctx, duk_uint_t hobject_flags_and_class, duk_small_int_t prototype_bidx)
#define DUK_EXTRAOP_NEWARR
#define duk_js_strict_equals(tv_x, tv_y)
DUK_EXTERNAL duk_bool_t duk_is_null_or_undefined(duk_context *ctx, duk_idx_t index)
#define DUK_BIDX_OBJECT_CONSTRUCTOR
#define DUK_EXTRAOP_INITSETI
DUK_EXTERNAL void duk_to_object(duk_context *ctx, duk_idx_t index)
#define DUK_LJ_TYPE_BREAK
#define DUK_EXTRAOP_LDTRUE
DUK_EXTERNAL const char * duk_to_string(duk_context *ctx, duk_idx_t index)
#define DUK_BC_DECLVAR_FLAG_FUNC_DECL
#define DUK_STEP_TYPE_OUT
#define DUK_GET_TVAL_POSIDX(ctx, idx)
#define DUK_HOBJECT_INCREF(thr, h)
#define DUK_STRIDX_CONFIGURABLE
#define DUK_ACT_GET_FUNC(act)
#define DUK_EXTRAOP_LABEL
DUK_EXTERNAL void duk_pop(duk_context *ctx)
DUK_INTERNAL_DECL void duk_push_hobject(duk_context *ctx, duk_hobject *h)
#define DUK_TVAL_SET_UNDEFINED_UPDREF
#define DUK_CAT_HAS_CATCH_ENABLED(c)
#define DUK_HTHREAD_STATE_YIELDED
DUK_EXTERNAL duk_idx_t duk_push_array(duk_context *ctx)
#define DUK_TVAL_GET_NUMBER(tv)
#define DUK_LJ_TYPE_NORMAL
#define DUK_CALL_FLAG_DIRECT_EVAL
DUK_INTERNAL_DECL void duk_hthread_catchstack_grow(duk_hthread *thr)
DUK_INTERNAL_DECL void duk_hobject_set_length(duk_hthread *thr, duk_hobject *obj, duk_uint32_t length)
DUK_INTERNAL_DECL duk_bool_t duk_js_compare_helper(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y, duk_small_int_t flags)
#define DUK_CAT_CLEAR_LEXENV_ACTIVE(c)
DUK_INTERNAL_DECL void duk_xdef_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_uint_t desc_flags)
#define DUK_ASSERT_DOUBLE_IS_NORMALIZED(dval)
DUK_INTERNAL_DECL void duk_push_hstring(duk_context *ctx, duk_hstring *h)
#define DUK_ERROR(thr, err, msg)
#define DUK_CAT_TYPE_LABEL
DUK_EXTERNAL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t index)
#define DUK_EXTRAOP_CONTINUE
#define DUK_HEAP_SWITCH_THREAD(heap, newthr)
#define DUK_HTHREAD_STATE_TERMINATED
#define DUK_ERROR_INTERNAL(thr, msg)
DUK_INTERNAL_DECL duk_ret_t duk_bi_global_object_eval(duk_context *ctx)
#define DUK_CAT_CLEAR_FINALLY_ENABLED(c)
#define DUK_BC_LDINT_BIAS
#define DUK_EXTRAOP_INITGET
#define DUK_HEAP_DBG_RATELIMIT_MILLISECS
#define DUK_EXTRAOP_TYPEOF
DUK_INTERNAL_DECL duk_bool_t duk_handle_ecma_call_setup(duk_hthread *thr, duk_idx_t num_stack_args, duk_small_uint_t call_flags)
DUK_INTERNAL_DECL void duk_regexp_create_instance(duk_hthread *thr)
DUK_INTERNAL_DECL duk_ret_t duk_bi_thread_yield(duk_context *ctx)
#define DUK_EXTRAOP_INITGETI
#define DUK_PROPDESC_FLAGS_W
#define DUK_ERROR_FMT1(thr, err, fmt, arg1)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_putprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key, duk_tval *tv_val, duk_bool_t throw_flag)
#define DUK_HOBJECT_HAS_COMPILEDFUNCTION(h)
DUK_INTERNAL_DECL duk_bool_t duk_js_toboolean(duk_tval *tv)
#define DUK_EXTRAOP_LDUNDEF
#define DUK_TVAL_SET_NUMBER(tv, val)
#define DUK_TVAL_SET_FASTINT_I32_UPDREF
DUK_INTERNAL_DECL duk_bool_t duk_hobject_enumerator_next(duk_context *ctx, duk_bool_t get_value)
#define DUK_VALSTACK_INTERNAL_EXTRA
DUK_INTERNAL_DECL duk_tval * duk_get_tval(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_xdef_prop(duk_context *ctx, duk_idx_t obj_index, duk_small_uint_t desc_flags)
#define DUK_BC_CALL_FLAG_TAILCALL
#define DUK_TYPE_MASK_STRING
#define DUK_DBLUNION_IS_NORMALIZED(u)
#define DUK_TYPE_MASK_BUFFER
#define DUK_DBLUNION_NORMALIZE_NAN_CHECK(u)
#define DUK_ERR_INTERNAL_ERROR
#define DUK_ERR_API_ERROR
#define DUK_ERR_REFERENCE_ERROR
DUK_LOCAL void duk__reconfig_valstack_ecma_catcher(duk_hthread *thr, duk_size_t act_idx, duk_size_t cat_idx)
DUK_LOCAL void duk__handle_executor_error(duk_heap *heap, duk_hthread *entry_thread, duk_size_t entry_callstack_top, duk_int_t entry_call_recursion_depth, duk_jmpbuf *entry_jmpbuf_ptr)
DUK_LOCAL void duk__handle_label(duk_hthread *thr, duk_size_t cat_idx, duk_small_uint_t lj_type)
DUK_LOCAL void duk__vm_arith_unary_op(duk_hthread *thr, duk_tval *tv_x, duk_idx_t idx_x, duk_small_uint_fast_t opcode)
DUK_LOCAL void duk__vm_bitwise_binary_op(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y, duk_small_uint_fast_t idx_z, duk_small_uint_fast_t opcode)
DUK_LOCAL duk_small_uint_t duk__handle_return(duk_hthread *thr, duk_hthread *entry_thread, duk_size_t entry_callstack_top)
DUK_LOCAL void duk__vm_bitwise_not(duk_hthread *thr, duk_tval *tv_x, duk_uint_fast_t idx_z)
DUK_LOCAL duk_small_uint_t duk__handle_longjmp(duk_hthread *thr, duk_hthread *entry_thread, duk_size_t entry_callstack_top)
DUK_LOCAL void duk__vm_logical_not(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_z)
DUK_LOCAL void duk__reconfig_valstack_ecma_return(duk_hthread *thr, duk_size_t act_idx)
DUK_LOCAL void duk__set_catcher_regs(duk_hthread *thr, duk_size_t cat_idx, duk_tval *tv_val_unstable, duk_small_uint_t lj_type)
#define DUK__LONGJMP_RETHROW
DUK_LOCAL void duk__handle_catch(duk_hthread *thr, duk_size_t cat_idx, duk_tval *tv_val_unstable, duk_small_uint_t lj_type)
#define DUK__REGCONSTP(x)
#define DUK__SYNC_AND_NULL_CURR_PC()
#define DUK__LONGJMP_RESTART
#define DUK__RETHAND_FINISHED
DUK_LOCAL void duk__handle_yield(duk_hthread *thr, duk_hthread *resumer, duk_size_t act_idx, duk_tval *tv_val_unstable)
#define DUK__INTERNAL_ERROR(msg)
DUK_LOCAL void duk__vm_arith_binary_op(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y, duk_idx_t idx_z, duk_small_uint_fast_t opcode)
#define DUK__RETHAND_RESTART
DUK_LOCAL void duk__handle_break_or_continue(duk_hthread *thr, duk_uint_t label_id, duk_small_uint_t lj_type)
DUK_LOCAL duk_double_t duk__compute_mod(duk_double_t d1, duk_double_t d2)
DUK_LOCAL void duk__handle_finally(duk_hthread *thr, duk_size_t cat_idx, duk_tval *tv_val_unstable, duk_small_uint_t lj_type)
DUK_INTERNAL void duk_js_execute_bytecode(duk_hthread *exec_thr)
DUK_LOCAL_DECL void duk__js_execute_bytecode_inner(duk_hthread *entry_thread, duk_size_t entry_callstack_top)
DUK_LOCAL void duk__vm_arith_add(duk_hthread *thr, duk_tval *tv_x, duk_tval *tv_y, duk_small_uint_fast_t idx_z)
static const luaL_Reg funcs[]
duk_size_t callstack_index
duk_hthread * curr_thread
duk_int_t call_recursion_depth
duk_size_t catchstack_size
duk_size_t catchstack_top
duk_size_t callstack_preventcount
duk_instr_t ** ptr_curr_pc
duk_activation * callstack
duk_tval * valstack_bottom