Skip to content

Commit b00efbb

Browse files
Use njs_atom_atomize(), atoms not used yet.
1 parent 78fd258 commit b00efbb

File tree

11 files changed

+217
-50
lines changed

11 files changed

+217
-50
lines changed

src/njs_extern.c

Lines changed: 13 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -66,50 +66,7 @@ njs_external_add(njs_vm_t *vm, njs_arr_t *protos,
6666
prop->enumerable = external->enumerable;
6767

6868
if (external->flags & NJS_EXTERN_SYMBOL) {
69-
switch (external->name.symbol) {
70-
case NJS_SYMBOL_ASYNC_ITERATOR:
71-
prop->name = njs_atom.vw_asyncIterator;
72-
break;
73-
case NJS_SYMBOL_HAS_INSTANCE:
74-
prop->name = njs_atom.vw_hasInstance;
75-
break;
76-
case NJS_SYMBOL_IS_CONCAT_SPREADABLE:
77-
prop->name = njs_atom.vw_isConcatSpreadable;
78-
break;
79-
case NJS_SYMBOL_ITERATOR:
80-
prop->name = njs_atom.vw_iterator;
81-
break;
82-
case NJS_SYMBOL_MATCH:
83-
prop->name = njs_atom.vw_match;
84-
break;
85-
case NJS_SYMBOL_MATCH_ALL:
86-
prop->name = njs_atom.vw_matchAll;
87-
break;
88-
case NJS_SYMBOL_REPLACE:
89-
prop->name = njs_atom.vw_replace;
90-
break;
91-
case NJS_SYMBOL_SEARCH:
92-
prop->name = njs_atom.vw_search;
93-
break;
94-
case NJS_SYMBOL_SPECIES:
95-
prop->name = njs_atom.vw_species;
96-
break;
97-
case NJS_SYMBOL_SPLIT:
98-
prop->name = njs_atom.vw_split;
99-
break;
100-
case NJS_SYMBOL_TO_PRIMITIVE:
101-
prop->name = njs_atom.vw_toPrimitive;
102-
break;
103-
case NJS_SYMBOL_TO_STRING_TAG:
104-
prop->name = njs_atom.vw_toStringTag;
105-
break;
106-
case NJS_SYMBOL_UNSCOPABLES:
107-
prop->name = njs_atom.vw_unscopables;
108-
break;
109-
default:
110-
return NJS_ERROR;
111-
};
112-
69+
njs_set_symbol(&prop->name, external->name.symbol, NULL);
11370
lhq.key_hash = external->name.symbol;
11471

11572
} else {
@@ -120,10 +77,17 @@ njs_external_add(njs_vm_t *vm, njs_arr_t *protos,
12077
return NJS_ERROR;
12178
}
12279

80+
ret = njs_atom_atomize_key(vm, &prop->name);
81+
if (ret != NJS_OK) {
82+
return ret;
83+
}
84+
12385
lhq.key = external->name.string;
12486
lhq.key_hash = njs_djb_hash(lhq.key.start, lhq.key.length);
12587
}
12688

89+
90+
12791
lhq.value = prop;
12892

12993
switch (external->flags & NJS_EXTERN_TYPE_MASK) {
@@ -275,6 +239,11 @@ njs_external_prop_handler(njs_vm_t *vm, njs_object_prop_t *self,
275239
prop->configurable = self->configurable;
276240
prop->enumerable = self->enumerable;
277241

242+
ret = njs_atom_atomize_key(vm, &prop->name);
243+
if (ret != NJS_OK) {
244+
return ret;
245+
}
246+
278247
lhq.value = prop;
279248
njs_string_get(&self->name, &lhq.key);
280249
lhq.key_hash = njs_prop_magic32(self);

src/njs_function.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,13 @@ njs_function_name_set(njs_vm_t *vm, njs_function_t *function,
174174

175175
prop->configurable = 1;
176176

177+
if (!prop->name.atom_id) {
178+
ret = njs_atom_atomize_key(vm, &prop->name);
179+
if (ret != NJS_OK) {
180+
return NJS_ERROR;
181+
}
182+
}
183+
177184
lhq.key_hash = NJS_NAME_HASH;
178185
lhq.key = njs_str_value("name");
179186
lhq.replace = 0;
@@ -917,6 +924,13 @@ njs_function_property_prototype_set(njs_vm_t *vm, njs_lvlhsh_t *hash,
917924

918925
prop->writable = 1;
919926

927+
if (!prop->name.atom_id) {
928+
ret = njs_atom_atomize_key(vm, &prop->name);
929+
if (ret != NJS_OK) {
930+
return NULL;
931+
}
932+
}
933+
920934
lhq.value = prop;
921935
lhq.key_hash = NJS_PROTOTYPE_HASH;
922936
lhq.key = njs_str_value("prototype");

src/njs_generator.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5369,6 +5369,7 @@ static njs_int_t
53695369
njs_generate_global_reference(njs_vm_t *vm, njs_generator_t *generator,
53705370
njs_parser_node_t *node, njs_bool_t exception)
53715371
{
5372+
njs_int_t ret;
53725373
njs_index_t index;
53735374
njs_value_t property;
53745375
njs_vmcode_prop_get_t *prop_get;
@@ -5391,6 +5392,11 @@ njs_generate_global_reference(njs_vm_t *vm, njs_generator_t *generator,
53915392

53925393
property = *((njs_value_t *)node->u.reference.unique_id);
53935394

5395+
ret = njs_atom_atomize_key(vm, &property);
5396+
if (njs_slow_path(ret != NJS_OK)) {
5397+
return NJS_ERROR;
5398+
}
5399+
53945400
prop_get->property = njs_scope_global_index(vm, &property,
53955401
generator->runtime);
53965402
if (njs_slow_path(prop_get->property == NJS_INDEX_ERROR)) {

src/njs_json.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -400,6 +400,15 @@ njs_json_parse_object(njs_json_parse_ctx_t *ctx, njs_value_t *value,
400400
goto memory_error;
401401
}
402402

403+
prop->name.atom_id = 0;
404+
405+
if (!prop->name.atom_id) {
406+
ret = njs_atom_atomize_key(ctx->vm, &prop->name);
407+
if (ret != NJS_OK) {
408+
return NULL;
409+
}
410+
}
411+
403412
njs_string_get(&prop_name, &lhq.key);
404413
lhq.key_hash = njs_djb_hash(lhq.key.start, lhq.key.length);
405414
lhq.value = prop;

src/njs_object.c

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ njs_object_hash_create(njs_vm_t *vm, njs_lvlhsh_t *hash,
146146

147147
prop->name = *prop->pname;
148148
if (prop->type != NJS_ACCESSOR) {
149-
prop->u.value = *prop->u.pvalue;
149+
prop->u.value = *prop->u.pvalue;
150150
}
151151
}
152152

@@ -1352,6 +1352,13 @@ njs_object_define_property(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
13521352
value = njs_argument(args, 1);
13531353
name = njs_lvalue_arg(&lvalue, args, nargs, 2);
13541354

1355+
if (!name->atom_id) {
1356+
ret = njs_atom_atomize_key(vm, name);
1357+
if (ret != NJS_OK) {
1358+
return NJS_ERROR;
1359+
}
1360+
}
1361+
13551362
ret = njs_object_prop_define(vm, value, name, desc,
13561363
NJS_OBJECT_PROP_DESCRIPTOR, 0);
13571364
if (njs_slow_path(ret != NJS_OK)) {
@@ -1415,6 +1422,13 @@ njs_object_define_properties(njs_vm_t *vm, njs_value_t *args, njs_uint_t nargs,
14151422
goto done;
14161423
}
14171424

1425+
if (!(&keys->start[i])->atom_id) {
1426+
ret = njs_atom_atomize_key(vm, &keys->start[i]);
1427+
if (ret != NJS_OK) {
1428+
goto done;
1429+
}
1430+
}
1431+
14181432
ret = njs_object_prop_define(vm, value, &keys->start[i], &desc,
14191433
NJS_OBJECT_PROP_DESCRIPTOR, 0);
14201434
if (njs_slow_path(ret != NJS_OK)) {
@@ -1494,6 +1508,15 @@ njs_object_get_own_property_descriptors(njs_vm_t *vm, njs_value_t *args,
14941508

14951509
for (i = 0; i < length; i++) {
14961510
key = &names->start[i];
1511+
if (!key->atom_id) {
1512+
1513+
ret = njs_atom_atomize_key(vm, key);
1514+
if (ret != NJS_OK) {
1515+
ret = NJS_ERROR;
1516+
goto done;
1517+
}
1518+
}
1519+
14971520
ret = njs_object_prop_descriptor(vm, &descriptor, value, key);
14981521
if (njs_slow_path(ret != NJS_OK)) {
14991522
ret = NJS_ERROR;
@@ -1975,6 +1998,13 @@ njs_property_prototype_create(njs_vm_t *vm, njs_lvlhsh_t *hash,
19751998
return NULL;
19761999
}
19772000

2001+
if (!prop->name.atom_id) {
2002+
ret = njs_atom_atomize_key(vm, &prop->name);
2003+
if (ret != NJS_OK) {
2004+
return NULL;
2005+
}
2006+
}
2007+
19782008
njs_set_type_object(njs_prop_value(prop), prototype, prototype->type);
19792009

19802010
lhq.value = prop;
@@ -2234,6 +2264,13 @@ njs_property_constructor_set(njs_vm_t *vm, njs_lvlhsh_t *hash,
22342264
njs_value_assign(njs_prop_value(prop), constructor);
22352265
prop->enumerable = 0;
22362266

2267+
if (!prop->name.atom_id) {
2268+
ret = njs_atom_atomize_key(vm, &prop->name);
2269+
if (ret != NJS_OK) {
2270+
return NULL;
2271+
}
2272+
}
2273+
22372274
lhq.value = prop;
22382275
lhq.key_hash = NJS_CONSTRUCTOR_HASH;
22392276
lhq.key = njs_str_value("constructor");

src/njs_object_prop.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,13 @@ njs_object_property_add(njs_vm_t *vm, njs_value_t *object, njs_value_t *key,
163163
return NULL;
164164
}
165165

166+
if (!prop->name.atom_id) {
167+
ret = njs_atom_atomize_key(vm, &prop->name);
168+
if (ret != NJS_OK) {
169+
return NULL;
170+
}
171+
}
172+
166173
lhq.proto = &njs_object_hash_proto;
167174
njs_string_get(&key_value, &lhq.key);
168175
lhq.key_hash = njs_djb_hash(lhq.key.start, lhq.key.length);
@@ -332,6 +339,13 @@ njs_object_prop_define(njs_vm_t *vm, njs_value_t *object,
332339

333340
} else {
334341

342+
if (!prop->name.atom_id) {
343+
ret = njs_atom_atomize_key(vm, &prop->name);
344+
if (ret != NJS_OK) {
345+
return NJS_ERROR;
346+
}
347+
}
348+
335349
if ((flags & NJS_OBJECT_PROP_CREATE)) {
336350
ret = njs_primitive_value_to_key(vm, &pq.key, name);
337351
if (njs_slow_path(ret != NJS_OK)) {
@@ -1096,6 +1110,13 @@ njs_object_prop_init(njs_vm_t *vm, const njs_object_init_t* init,
10961110
prop->type = NJS_PROPERTY;
10971111
njs_set_object(njs_prop_value(prop), object);
10981112

1113+
if (!prop->name.atom_id) {
1114+
ret = njs_atom_atomize_key(vm, &prop->name);
1115+
if (ret != NJS_OK) {
1116+
return ret;
1117+
}
1118+
}
1119+
10991120
lhq.proto = &njs_object_hash_proto;
11001121
njs_string_get(&prop->name, &lhq.key);
11011122
lhq.key_hash = njs_djb_hash(lhq.key.start, lhq.key.length);

src/njs_parser.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ njs_parser(njs_vm_t *vm, njs_parser_t *parser)
570570
parser->ret = NJS_OK;
571571
}
572572

573-
parser->undefined_id = (uintptr_t) &njs_atom.vs_undefined; //??? do we need this field?
573+
parser->undefined_id = (uintptr_t) &njs_atom.vs_undefined;
574574

575575
njs_queue_init(&parser->stack);
576576

@@ -6677,7 +6677,7 @@ njs_parser_labelled_statement_after(njs_parser_t *parser,
66776677
njs_lexer_token_t *token, njs_queue_link_t *current)
66786678
{
66796679
njs_int_t ret;
6680-
njs_str_t str; //?? remove it
6680+
njs_str_t str;
66816681
uintptr_t unique_id;
66826682
njs_parser_node_t *node;
66836683
const njs_value_t *entry;
@@ -8680,6 +8680,7 @@ njs_parser_string_create(njs_vm_t *vm, njs_lexer_token_t *token,
86808680
njs_value_t *value)
86818681
{
86828682
size_t length;
8683+
njs_int_t ret;
86838684
njs_str_t dst;
86848685

86858686
length = njs_decode_utf8_length(&token->text, &dst.length);
@@ -8695,6 +8696,11 @@ njs_parser_string_create(njs_vm_t *vm, njs_lexer_token_t *token,
86958696
dst.length);
86968697
}
86978698

8699+
ret = njs_atom_atomize_key(vm, value);
8700+
if (njs_slow_path(ret != NJS_OK)) {
8701+
return NJS_TOKEN_ERROR;
8702+
}
8703+
86988704
return NJS_OK;
86998705
}
87008706

@@ -8939,6 +8945,11 @@ njs_parser_escape_string_create(njs_parser_t *parser, njs_lexer_token_t *token,
89398945
njs_string_utf8_offset_map_init(start, size);
89408946
}
89418947

8948+
ret = njs_atom_atomize_key(parser->vm, value);
8949+
if (njs_slow_path(ret != NJS_OK)) {
8950+
return NJS_TOKEN_ERROR;
8951+
}
8952+
89428953
return NJS_TOKEN_STRING;
89438954
}
89448955

src/njs_regexp.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1120,6 +1120,11 @@ njs_regexp_exec_result(njs_vm_t *vm, njs_value_t *r, njs_utf8_t utf8,
11201120
goto fail;
11211121
}
11221122

1123+
ret = njs_atom_atomize_key(vm, &prop->name);
1124+
if (njs_slow_path(ret != NJS_OK)) {
1125+
goto fail;
1126+
}
1127+
11231128
prop = njs_object_prop_alloc(vm, &name,
11241129
&array->start[group->capture], 1);
11251130
if (njs_slow_path(prop == NULL)) {

0 commit comments

Comments
 (0)