aboutsummaryrefslogtreecommitdiff
path: root/src/njs_vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/njs_vm.c')
-rw-r--r--src/njs_vm.c61
1 files changed, 31 insertions, 30 deletions
diff --git a/src/njs_vm.c b/src/njs_vm.c
index 008f9d04..e6aac927 100644
--- a/src/njs_vm.c
+++ b/src/njs_vm.c
@@ -310,7 +310,6 @@ njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name, u_char **start,
u_char *end)
{
njs_int_t ret;
- njs_arr_t *arr;
njs_mod_t *module;
njs_parser_t parser;
njs_vm_code_t *code;
@@ -366,10 +365,6 @@ njs_vm_compile_module(njs_vm_t *vm, njs_str_t *name, u_char **start,
lambda->start = generator.code_start;
lambda->nlocal = scope->items;
- arr = scope->declarations;
- lambda->declarations = (arr != NULL) ? arr->start : NULL;
- lambda->ndeclarations = (arr != NULL) ? arr->items : 0;
-
module->function.u.lambda = lambda;
return module;
@@ -908,6 +903,7 @@ njs_vm_bind2(njs_vm_t *vm, const njs_str_t *var_name, njs_object_prop_t *prop,
njs_value_t prop_name;
njs_object_t *global;
njs_flathsh_t *hash;
+ njs_object_prop_t *obj_prop;
njs_flathsh_query_t lhq;
ret = njs_atom_string_create(vm, &prop_name, var_name->start,
@@ -916,7 +912,6 @@ njs_vm_bind2(njs_vm_t *vm, const njs_str_t *var_name, njs_object_prop_t *prop,
return NJS_ERROR;
}
- lhq.value = prop;
lhq.key_hash = prop_name.atom_id;
lhq.replace = 1;
lhq.pool = vm->mem_pool;
@@ -931,6 +926,14 @@ njs_vm_bind2(njs_vm_t *vm, const njs_str_t *var_name, njs_object_prop_t *prop,
return ret;
}
+ obj_prop = lhq.value;
+
+ obj_prop->type = prop->type;
+ obj_prop->enumerable = prop->enumerable;
+ obj_prop->configurable = prop->configurable;
+ obj_prop->writable = prop->writable;
+ obj_prop->u.value = prop->u.value;
+
return NJS_OK;
}
@@ -939,14 +942,13 @@ njs_int_t
njs_vm_bind(njs_vm_t *vm, const njs_str_t *var_name, const njs_value_t *value,
njs_bool_t shared)
{
- njs_object_prop_t *prop;
+ njs_object_prop_t prop;
- prop = njs_object_prop_alloc(vm, value, 1);
- if (njs_slow_path(prop == NULL)) {
- return NJS_ERROR;
- }
+ njs_object_prop_init(&prop, NJS_PROPERTY,
+ NJS_OBJECT_PROP_VALUE_ECW);
+ *njs_prop_value(&prop) = *value;
- return njs_vm_bind2(vm, var_name, prop, shared);
+ return njs_vm_bind2(vm, var_name, &prop, shared);
}
@@ -955,21 +957,18 @@ njs_vm_bind_handler(njs_vm_t *vm, const njs_str_t *var_name,
njs_prop_handler_t handler, uint16_t magic16, uint32_t magic32,
njs_bool_t shared)
{
- njs_object_prop_t *prop;
+ njs_object_prop_t prop;
- prop = njs_object_prop_alloc(vm, &njs_value_invalid, 1);
- if (njs_slow_path(prop == NULL)) {
- return NJS_ERROR;
- }
+ njs_object_prop_init(&prop, NJS_PROPERTY_HANDLER,
+ NJS_OBJECT_PROP_VALUE_ECW);
- prop->type = NJS_PROPERTY_HANDLER;
- prop->u.value.type = NJS_INVALID;
- prop->u.value.data.truth = 1;
- njs_prop_magic16(prop) = magic16;
- njs_prop_magic32(prop) = magic32;
- njs_prop_handler(prop) = handler;
+ prop.u.value.type = NJS_INVALID;
+ prop.u.value.data.truth = 1;
+ njs_prop_magic16(&prop) = magic16;
+ njs_prop_magic32(&prop) = magic32;
+ njs_prop_handler(&prop) = handler;
- return njs_vm_bind2(vm, var_name, prop, shared);
+ return njs_vm_bind2(vm, var_name, &prop, shared);
}
@@ -1247,11 +1246,6 @@ njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval, ...)
goto done;
}
- prop = njs_object_prop_alloc(vm, value, 1);
- if (njs_slow_path(prop == NULL)) {
- goto done;
- }
-
if (name->atom_id == NJS_ATOM_STRING_unknown) {
ret = njs_atom_atomize_key(vm, name);
if (ret != NJS_OK) {
@@ -1259,7 +1253,6 @@ njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval, ...)
}
}
- lhq.value = prop;
lhq.key_hash = name->atom_id;
lhq.replace = 0;
lhq.pool = vm->mem_pool;
@@ -1270,6 +1263,14 @@ njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval, ...)
njs_internal_error(vm, NULL);
goto done;
}
+
+ prop = lhq.value;
+
+ prop->type = NJS_PROPERTY;
+ prop->enumerable = 1;
+ prop->configurable = 1;
+ prop->writable = 1;
+ prop->u.value = *value;
}
ret = NJS_OK;