94 while (
funcs < funcs_end) {
160#if defined(DUK_USE_DEBUGGER_SUPPORT)
161 fun_clos->start_line = fun_temp->start_line;
162 fun_clos->end_line = fun_temp->end_line;
244 proto = outer_lex_env;
301 if (outer_var_env != outer_lex_env) {
306#ifdef DUK_USE_DDDPRINT
382 if (add_auto_proto) {
404#ifdef DUK_USE_NONSTD_FUNC_CALLER_PROPERTY
405 DUK_DDD(
DUK_DDDPRINT(
"function is non-strict and non-standard 'caller' property in use, add initial 'null' value"));
409 DUK_DDD(
DUK_DDDPRINT(
"function is non-strict and non-standard 'caller' property not used"));
551#ifdef DUK_USE_DDDPRINT
594 "or already closed: %!iO",
605#ifdef DUK_USE_ASSERTIONS
655 DUK_DDD(
DUK_DDDPRINT(
"env has no callee property, nothing to close; re-delete the control properties just in case"));
663 DUK_DDD(
DUK_DDDPRINT(
"callee has no varmap property, nothing to close; delete the control properties"));
818 idx = env_regbase + reg_rel;
929 DUK_DDD(
DUK_DDDPRINT(
"duk__get_identifier_reference: env is NULL, activation is non-NULL -> "
930 "delayed env case, look up activation regs first"));
938 "name=%!O -> value=%!T, attrs=%ld, this=%!T, env=%!O, holder=%!O "
939 "(found from register bindings when env=NULL)",
965 "(not found from register bindings when env=NULL)"));
993 while (env !=
NULL) {
997 DUK_DDD(
DUK_DDDPRINT(
"duk__get_identifier_reference, name=%!O, considering env=%p -> %!iO",
1028 "name=%!O -> value=%!T, attrs=%ld, this=%!T, env=%!O, holder=%!O "
1029 "(declarative environment record, scope open, found in regs)",
1048 "name=%!O -> value=%!T, attrs=%ld, this=%!T, env=%!O, holder=%!O "
1049 "(declarative environment record, found in properties)",
1111 "name=%!O -> value=%!T, attrs=%ld, this=%!T, env=%!O, holder=%!O "
1112 "(object environment record)",
1122 "(not found from first traversed env)"));
1123 goto fail_not_found;
1126 if (sanity-- == 0) {
1224 (
void *) thr, (
void *) env, (
void *) act,
1266 "identifier '%s' undefined",
1319 "(env -> %!dO, val -> %!T)",
1320 (
void *) thr, (
void *) env, (
void *) act,
1451 (
void *) thr, (
void *) env, (
void *) act,
1483 "(treated as silent success)",
1568 DUK_DDD(
DUK_DDDPRINT(
"declvar: thr=%p, env=%p, name=%!O, val=%!T, prop_flags=0x%08lx, is_func_decl=%ld "
1571 (
duk_tval *) val, (
unsigned long) prop_flags,
1572 (
unsigned int) is_func_decl, (
duk_heaphdr *) env));
1635 "updated E5.1 processing"));
1674 "accessor -> reject"));
1675 goto fail_existing_attributes;
1680 "plain property which is not writable and "
1681 "enumerable -> reject"));
1682 goto fail_existing_attributes;
1686 "is plain, enumerable, and writable -> "
1687 "allow redeclaration"));
1690 if (holder == ref.
holder) {
1723 "value -> %!T, prop_flags=0x%08lx",
1725 (
unsigned long) prop_flags));
1770 goto fail_not_extensible;
1781 fail_existing_attributes:
1782 fail_not_extensible:
unsigned int duk_small_uint_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
#define DUK_HCOMPILEDFUNCTION_SET_FUNCS(heap, h, v)
#define DUK_TVAL_SET_TVAL(v, x)
#define DUK_STRIDX_INT_CALLEE
#define DUK_ERROR_RANGE(thr, msg)
DUK_INTERNAL_DECL duk_bool_t duk_del_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_HOBJECT_DECREF_ALLOWNULL(thr, h)
#define DUK_HOBJECT_HAS_EXOTIC_ARRAY(h)
#define DUK_HCOMPILEDFUNCTION_GET_CONSTS_BASE(heap, h)
DUK_EXTERNAL void duk_pop_2(duk_context *ctx)
#define DUK_HSTRING_GET_DATA(x)
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_INT_REGBASE
#define DUK_HOBJECT_GET_PROTOTYPE(heap, h)
DUK_INTERNAL_DECL duk_hobject * duk_require_hobject(duk_context *ctx, duk_idx_t index)
#define DUK_TVAL_IS_NUMBER(tv)
#define DUK_HCOMPILEDFUNCTION_SET_BYTECODE(heap, h, v)
#define DUK_ERROR_TYPE(thr, msg)
#define DUK_HOBJECT_HAS_BOUND(h)
DUK_INTERNAL_DECL duk_bool_t duk_get_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_HBUFFER_INCREF(thr, h)
#define DUK_STRIDX_INT_FORMALS
DUK_EXTERNAL duk_double_t duk_get_number(duk_context *ctx, duk_idx_t index)
#define DUK_STRIDX_LC_ARGUMENTS
#define DUK_TVAL_SET_OBJECT(tv, hptr)
#define DUK_HOBJECT_GET_ENEXT(h)
#define DUK_ASSERT_REFCOUNT_NONZERO_HEAPHDR(h)
#define DUK_TVAL_GET_OBJECT(tv)
DUK_EXTERNAL void duk_compact(duk_context *ctx, duk_idx_t obj_index)
#define duk_xdef_prop_stridx_wec(ctx, obj_index, stridx)
#define DUK_HOBJECT_E_GET_VALUE_TVAL_PTR(heap, h, i)
#define DUK_HOBJECT_HAS_EXOTIC_STRINGOBJ(h)
#define DUK_STRIDX_FILE_NAME
#define DUK_HOBJECT_IS_COMPILEDFUNCTION(h)
#define DUK_TVAL_IS_OBJECT(tv)
#define DUK_HOBJECT_IS_OBJENV(h)
DUK_EXTERNAL duk_size_t duk_get_length(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_SET_CREATEARGS(h)
#define DUK_HOBJECT_HAS_CREATEARGS(h)
DUK_INTERNAL_DECL duk_bool_t duk_has_prop_stridx(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx)
#define DUK_BIDX_FUNCTION_PROTOTYPE
#define DUK_PROPDESC_FLAGS_NONE
DUK_INTERNAL_DECL void duk_push_hstring_stridx(duk_context *ctx, duk_small_int_t stridx)
#define DUK_STRIDX_INT_THREAD
#define duk_push_size_t(ctx, val)
#define DUK_HOBJECT_CLASS_FUNCTION
#define DUK_HTHREAD_STRING_INT_TARGET(thr)
#define DUK_STRIDX_CONSTRUCTOR
#define DUK_TVAL_INCREF(thr, tv)
#define DUK_HOBJECT_E_GET_VALUE_SETTER(heap, h, i)
#define DUK_PROPDESC_FLAG_ACCESSOR
#define DUK_HOBJECT_HAS_CONSTRUCTABLE(h)
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_BASE(heap, h)
#define DUK_HCOMPILEDFUNCTION_SET_DATA(heap, h, v)
#define DUK_HOBJECT_E_GET_KEY(heap, h, i)
#define DUK_PROPDESC_FLAGS_WE
#define DUK_HOBJECT_SET_PROTOTYPE_UPDREF(thr, h, p)
#define DUK_HTHREAD_STRING_INT_REGBASE(thr)
#define DUK_HTHREAD_STRING_INT_THREAD(thr)
#define DUK_HTHREAD_STRING_INT_VARENV(thr)
#define DUK_ASSERT_DISABLE(x)
#define DUK_ASSERT_REFCOUNT_NONZERO_TVAL(tv)
DUK_EXTERNAL void duk_push_null(duk_context *ctx)
#define DUK_HOBJECT_SET_NOTAIL(h)
#define DUK_HTHREAD_STRING_INT_LEXENV(thr)
#define DUK_HOBJECT_CLASS_AS_FLAGS(v)
DUK_INTERNAL_DECL void duk_hobject_find_existing_entry(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *e_idx, duk_int_t *h_idx)
DUK_EXTERNAL duk_bool_t duk_is_number(duk_context *ctx, duk_idx_t index)
#define DUK_BIDX_GLOBAL_ENV
#define DUK_HOBJECT_IS_ENV(h)
#define DUK_HOBJECT_SET_STRICT(h)
#define DUK_HTHREAD_STRING_INT_VARMAP(thr)
#define DUK_HOBJECT_IS_THREAD(h)
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_INTERNAL_DECL duk_tval * duk_hobject_find_existing_entry_tval_ptr_and_attrs(duk_heap *heap, duk_hobject *obj, duk_hstring *key, duk_int_t *out_attrs)
#define DUK_HOBJECT_HAS_EXOTIC_ARGUMENTS(h)
DUK_INTERNAL_DECL duk_bool_t duk_hobject_delprop_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_small_uint_t flags)
#define DUK_HOBJECT_HAS_ARRAY_PART(h)
#define DUK_TVAL_SET_TVAL_UPDREF
#define DUK_HTHREAD_STRING_LC_ARGUMENTS(thr)
#define DUK_HOBJECT_CLASS_OBJENV
#define DUK_STRIDX_INT_LEXENV
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS_END(heap, h)
DUK_EXTERNAL duk_bool_t duk_is_object(duk_context *ctx, duk_idx_t index)
DUK_EXTERNAL duk_idx_t duk_push_object(duk_context *ctx)
#define DUK_STRIDX_EMPTY_STRING
#define DUK_HOBJECT_CLASS_GLOBAL
#define DUK_STRIDX_INT_VARMAP
#define DUK_STRIDX_LENGTH
DUK_EXTERNAL void duk_dup(duk_context *ctx, duk_idx_t from_index)
DUK_EXTERNAL void duk_insert(duk_context *ctx, duk_idx_t to_index)
#define DUK_STR_PROTOTYPE_CHAIN_LIMIT
#define duk_push_hthread(ctx, h)
#define DUK_PROPDESC_FLAG_CONFIGURABLE
DUK_INTERNAL_DECL duk_bool_t duk_hobject_hasprop_raw(duk_hthread *thr, duk_hobject *obj, duk_hstring *key)
#define DUK_HOBJECT_E_SET_VALUE_SETTER(heap, h, i, v)
#define DUK_HOBJECT_E_SLOT_IS_ACCESSOR(heap, h, i)
#define DUK_HTHREAD_STRING_INT_THIS(thr)
#define DUK_HTHREAD_STRING_EVAL(thr)
DUK_INTERNAL_DECL void duk_push_tval(duk_context *ctx, duk_tval *tv)
#define DUK_HOBJECT_HAS_NATIVEFUNCTION(h)
#define DUK_HOBJECT_PROTOTYPE_CHAIN_SANITY
DUK_INTERNAL_DECL duk_bool_t duk_hobject_hasprop(duk_hthread *thr, duk_tval *tv_obj, duk_tval *tv_key)
#define DUK_HOBJECT_CLASS_DECENV
DUK_EXTERNAL void duk_push_uint(duk_context *ctx, duk_uint_t val)
#define DUK_HOBJECT_HAS_THREAD(h)
#define DUK_HCOMPILEDFUNCTION_GET_FUNCS(heap, h)
DUK_EXTERNAL void duk_push_undefined(duk_context *ctx)
DUK_INTERNAL_DECL duk_hcompiledfunction * duk_get_hcompiledfunction(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_E_SET_FLAGS(heap, h, i, f)
#define DUK_HOBJECT_SET_CONSTRUCTABLE(h)
#define DUK_PROPDESC_FLAGS_WC
#define DUK_HOBJECT_IS_DECENV(h)
#define DUK_PROPDESC_FLAG_WRITABLE
#define DUK_HOBJECT_SET_ENVRECCLOSED(h)
DUK_INTERNAL_DECL void duk_hobject_define_property_internal(duk_hthread *thr, duk_hobject *obj, duk_hstring *key, duk_small_uint_t flags)
#define DUK_HOBJECT_HAS_EXOTIC_PROXYOBJ(h)
#define DUK_HTHREAD_STRING_INT_CALLEE(thr)
DUK_INTERNAL_DECL void duk_xdef_prop_stridx_thrower(duk_context *ctx, duk_idx_t obj_index, duk_small_int_t stridx, duk_small_uint_t desc_flags)
#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_STRIDX_INT_VARENV
#define DUK_HEAPHDR_INCREF(thr, h)
DUK_INTERNAL_DECL duk_idx_t duk_push_compiledfunction(duk_context *ctx)
#define DUK_HOBJECT_HAS_NEWENV(h)
#define DUK_STRIDX_INT_PC2LINE
#define DUK_PROPDESC_FLAG_ENUMERABLE
#define DUK_HCOMPILEDFUNCTION_GET_DATA(heap, h)
#define DUK_HOBJECT_E_SET_VALUE_GETTER(heap, h, i, v)
#define DUK_HOBJECT_INCREF(thr, h)
#define DUK_ACT_GET_FUNC(act)
DUK_EXTERNAL void duk_pop(duk_context *ctx)
#define DUK_HOBJECT_SET_NAMEBINDING(h)
DUK_INTERNAL_DECL duk_hobject * duk_get_hobject(duk_context *ctx, duk_idx_t index)
DUK_INTERNAL_DECL void duk_push_hobject(duk_context *ctx, duk_hobject *h)
#define DUK_TVAL_SET_UNDEFINED_UPDREF
#define DUK_HOBJECT_HAS_ENVRECCLOSED(h)
#define DUK_TVAL_GET_NUMBER(tv)
#define DUK_HOBJECT_GET_CLASS_NUMBER(h)
#define DUK_HOBJECT_E_GET_FLAGS(heap, h, i)
#define DUK_STRIDX_PROTOTYPE
#define DUK_HOBJECT_E_GET_VALUE_GETTER(heap, h, i)
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)
DUK_INTERNAL_DECL void duk_push_hstring(duk_context *ctx, duk_hstring *h)
#define DUK_ERROR(thr, err, msg)
DUK_EXTERNAL duk_bool_t duk_is_string(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_HAS_EXTENSIBLE(h)
DUK_EXTERNAL const char * duk_require_string(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_HAS_STRICT(h)
#define DUK_STRIDX_INT_SOURCE
#define DUK_HCOMPILEDFUNCTION_GET_BYTECODE(heap, h)
#define DUK_HOBJECT_HAS_NOTAIL(h)
#define DUK_HOBJECT_SET_NEWENV(h)
#define DUK_TVAL_SET_STRING(tv, hptr)
#define DUK_PROPDESC_FLAGS_W
#define DUK_STRIDX_CALLER
#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)
#define DUK_HCOMPILEDFUNCTION_GET_CONSTS_END(heap, h)
DUK_INTERNAL_DECL duk_tval * duk_get_tval(duk_context *ctx, duk_idx_t index)
#define DUK_HOBJECT_HAS_NAMEBINDING(h)
DUK_INTERNAL_DECL void duk_xdef_prop(duk_context *ctx, duk_idx_t obj_index, duk_small_uint_t desc_flags)
#define DUK_ERR_REFERENCE_ERROR
DUK_INTERNAL duk_bool_t duk_js_getvar_envrec(duk_hthread *thr, duk_hobject *env, duk_hstring *name, duk_bool_t throw_flag)
DUK_INTERNAL void duk_js_init_activation_environment_records_delayed(duk_hthread *thr, duk_activation *act)
DUK_INTERNAL 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)
DUK_INTERNAL void duk_js_putvar_envrec(duk_hthread *thr, duk_hobject *env, duk_hstring *name, duk_tval *val, duk_bool_t strict)
DUK_INTERNAL duk_bool_t duk_js_delvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name)
DUK_INTERNAL void duk_js_putvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name, duk_tval *val, duk_bool_t strict)
DUK_INTERNAL duk_hobject * duk_create_activation_environment_record(duk_hthread *thr, duk_hobject *func, duk_size_t idx_bottom)
DUK_INTERNAL 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)
DUK_LOCAL duk_bool_t duk__getid_activation_regs(duk_hthread *thr, duk_hstring *name, duk_activation *act, duk__id_lookup_result *out)
DUK_LOCAL const duk_uint16_t duk__closure_copy_proplist[]
DUK_LOCAL duk_bool_t duk__getvar_helper(duk_hthread *thr, duk_hobject *env, duk_activation *act, duk_hstring *name, duk_bool_t throw_flag)
DUK_INTERNAL duk_bool_t duk_js_getvar_activation(duk_hthread *thr, duk_activation *act, duk_hstring *name, duk_bool_t throw_flag)
DUK_LOCAL duk_bool_t duk__delvar_helper(duk_hthread *thr, duk_hobject *env, duk_activation *act, duk_hstring *name)
DUK_LOCAL duk_bool_t duk__declvar_helper(duk_hthread *thr, duk_hobject *env, duk_hstring *name, duk_tval *val, duk_small_int_t prop_flags, duk_bool_t is_func_decl)
DUK_LOCAL void duk__inc_data_inner_refcounts(duk_hthread *thr, duk_hcompiledfunction *f)
DUK_LOCAL duk_bool_t duk__get_identifier_reference(duk_hthread *thr, duk_hobject *env, duk_hstring *name, duk_activation *act, duk_bool_t parents, duk__id_lookup_result *out)
DUK_LOCAL duk_bool_t duk__getid_open_decl_env_regs(duk_hthread *thr, duk_hstring *name, duk_hobject *env, duk__id_lookup_result *out)
DUK_LOCAL void duk__putvar_helper(duk_hthread *thr, duk_hobject *env, duk_activation *act, duk_hstring *name, duk_tval *val, duk_bool_t strict)
DUK_INTERNAL void duk_js_close_environment_record(duk_hthread *thr, duk_hobject *env, duk_hobject *func, duk_size_t regbase)
static const luaL_Reg funcs[]
duk_hobject * builtins[DUK_NUM_BUILTINS]