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.c99
1 files changed, 50 insertions, 49 deletions
diff --git a/src/njs_vm.c b/src/njs_vm.c
index 008f9d04..19c50e48 100644
--- a/src/njs_vm.c
+++ b/src/njs_vm.c
@@ -54,7 +54,7 @@ njs_vm_create(njs_vm_opt_t *options)
return NULL;
}
- njs_lvlhsh_init(&vm->values_hash);
+ njs_flathsh_init(&vm->values_hash);
vm->options = *options;
@@ -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;
@@ -419,7 +414,7 @@ njs_vm_clone(njs_vm_t *vm, njs_external_ptr_t external)
nvm->shared_atom_count = vm->atom_id_generator;
- njs_lvlhsh_init(&nvm->atom_hash);
+ njs_flathsh_init(&nvm->atom_hash);
nvm->atom_hash_current = &nvm->atom_hash;
ret = njs_vm_runtime_init(nvm);
@@ -497,9 +492,9 @@ njs_vm_runtime_init(njs_vm_t *vm)
return NJS_ERROR;
}
- njs_lvlhsh_init(&vm->values_hash);
+ njs_flathsh_init(&vm->values_hash);
- njs_lvlhsh_init(&vm->modules_hash);
+ njs_flathsh_init(&vm->modules_hash);
njs_rbtree_init(&vm->global_symbols, njs_symbol_rbtree_cmp);
@@ -908,7 +903,8 @@ 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_flathsh_query_t lhq;
+ njs_object_prop_t *obj_prop;
+ njs_flathsh_query_t fhq;
ret = njs_atom_string_create(vm, &prop_name, var_name->start,
var_name->length);
@@ -916,21 +912,28 @@ 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;
- lhq.proto = &njs_object_hash_proto;
+ fhq.key_hash = prop_name.atom_id;
+ fhq.replace = 1;
+ fhq.pool = vm->mem_pool;
+ fhq.proto = &njs_object_hash_proto;
global = &vm->global_object;
hash = shared ? &global->shared_hash : &global->hash;
- ret = njs_flathsh_unique_insert(hash, &lhq);
+ ret = njs_flathsh_unique_insert(hash, &fhq);
if (njs_slow_path(ret != NJS_OK)) {
- njs_internal_error(vm, "lvlhsh insert failed");
+ njs_internal_error(vm, "flathsh insert failed");
return ret;
}
+ obj_prop = fhq.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);
}
@@ -1219,7 +1218,7 @@ njs_vm_object_alloc(njs_vm_t *vm, njs_value_t *retval, ...)
njs_value_t *name, *value;
njs_object_t *object;
njs_object_prop_t *prop;
- njs_flathsh_query_t lhq;
+ njs_flathsh_query_t fhq;
object = njs_object_alloc(vm);
if (njs_slow_path(object == NULL)) {
@@ -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,17 +1253,24 @@ 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;
- lhq.proto = &njs_object_hash_proto;
+ fhq.key_hash = name->atom_id;
+ fhq.replace = 0;
+ fhq.pool = vm->mem_pool;
+ fhq.proto = &njs_object_hash_proto;
- ret = njs_flathsh_unique_insert(&object->hash, &lhq);
+ ret = njs_flathsh_unique_insert(&object->hash, &fhq);
if (njs_slow_path(ret != NJS_OK)) {
njs_internal_error(vm, NULL);
goto done;
}
+
+ prop = fhq.value;
+
+ prop->type = NJS_PROPERTY;
+ prop->enumerable = 1;
+ prop->configurable = 1;
+ prop->writable = 1;
+ prop->u.value = *value;
}
ret = NJS_OK;
@@ -1636,14 +1637,14 @@ njs_vm_string_compare(njs_vm_t *vm, const njs_value_t *v1,
void *
-njs_lvlhsh_alloc(void *data, size_t size)
+njs_flathsh_proto_alloc(void *data, size_t size)
{
return njs_mp_align(data, NJS_MAX_ALIGNMENT, size);
}
void
-njs_lvlhsh_free(void *data, void *p, size_t size)
+njs_flathsh_proto_free(void *data, void *p, size_t size)
{
njs_mp_free(data, p);
}