njs_object_prop_t *
-njs_object_prop_alloc(njs_vm_t *vm, const njs_value_t *name)
+njs_object_prop_alloc(njs_vm_t *vm, const njs_value_t *name,
+ const njs_value_t *value, uint8_t attributes)
{
njs_object_prop_t *prop;
sizeof(njs_object_prop_t));
if (nxt_fast_path(prop != NULL)) {
- prop->value = njs_value_void;
+ /* GC: retain. */
+ prop->value = *value;
/* GC: retain. */
prop->name = *name;
prop->type = NJS_PROPERTY;
- prop->enumerable = 1;
- prop->writable = 1;
- prop->configurable = 1;
+ prop->enumerable = attributes;
+ prop->writable = attributes;
+ prop->configurable = attributes;
}
return prop;
ret = nxt_lvlhsh_find(&object->hash, &lhq);
if (ret != NXT_OK) {
- prop = njs_object_prop_alloc(vm, name);
+ prop = njs_object_prop_alloc(vm, name, &njs_value_void, 0);
if (nxt_slow_path(prop == NULL)) {
return NXT_ERROR;
}
- prop->configurable = 0;
- prop->enumerable = 0;
- prop->writable = 0;
-
lhq.value = prop;
} else {
static const njs_value_t prototype_string = njs_string("prototype");
- prop = njs_object_prop_alloc(vm, &prototype_string);
+ prop = njs_object_prop_alloc(vm, &prototype_string, &njs_value_void, 0);
if (nxt_slow_path(prop == NULL)) {
return NULL;
}
prop->value.type = prototype->type;
prop->value.data.truth = 1;
- prop->enumerable = 0;
- prop->writable = 0;
- prop->configurable = 0;
-
lhq.value = prop;
lhq.key_hash = NJS_PROTOTYPE_HASH;
lhq.key = nxt_string_value("prototype");
static const njs_value_t constructor_string = njs_string("constructor");
- prop = njs_object_prop_alloc(vm, &constructor_string);
+ prop = njs_object_prop_alloc(vm, &constructor_string, constructor, 1);
if (nxt_slow_path(prop == NULL)) {
return NULL;
}
const njs_object_prop_t *prop, nxt_uint_t n);
njs_ret_t njs_object_constructor(njs_vm_t *vm, njs_value_t *args,
nxt_uint_t nargs, njs_index_t unused);
-njs_object_prop_t *njs_object_prop_alloc(njs_vm_t *vm, const njs_value_t *name);
+njs_object_prop_t *njs_object_prop_alloc(njs_vm_t *vm, const njs_value_t *name,
+ const njs_value_t *value, uint8_t attributes);
njs_ret_t njs_primitive_prototype_get_proto(njs_vm_t *vm, njs_value_t *value);
njs_ret_t njs_object_prototype_create(njs_vm_t *vm, njs_value_t *value);
njs_value_t *njs_property_prototype_create(njs_vm_t *vm, nxt_lvlhsh_t *hash,
}
}
- prop = njs_object_prop_alloc(vm, &njs_string_index);
+ prop = njs_object_prop_alloc(vm, &njs_string_index, &njs_value_void, 1);
if (nxt_slow_path(prop == NULL)) {
goto fail;
}
goto fail;
}
- prop = njs_object_prop_alloc(vm, &njs_string_input);
+ prop = njs_object_prop_alloc(vm, &njs_string_input, ®exp->string, 1);
if (nxt_slow_path(prop == NULL)) {
goto fail;
}
- njs_string_copy(&prop->value, ®exp->string);
-
lhq.key_hash = NJS_INPUT_HASH;
lhq.key = nxt_string_value("input");
lhq.value = prop;