if (name.length == 0) {
njs_atom_to_value(vm, &expr->u.value.data.u.lambda->name,
- node->left->u.reference.atom_id);
+ node->left->u.atom_id);
}
}
if (prop->token_type == NJS_TOKEN_STRING
|| (prop->token_type == NJS_TOKEN_NUMBER
- && prop->u.value.atom_id != NJS_ATOM_STRING_unknown))
+ && prop->u.atom_id != NJS_ATOM_STRING_unknown))
{
opcode = NJS_VMCODE_PROPERTY_ATOM_SET;
prop_set->value = node_dst->index;
prop_set->object = njs_scope_global_this_index();
- njs_atom_to_value(vm, &property,node_dst->u.reference.atom_id);
+ njs_atom_to_value(vm, &property, node_dst->u.atom_id);
prop_set->property = njs_scope_global_index(vm, &property,
generator->runtime);
{
if (node->token_type == NJS_TOKEN_STRING
|| (node->token_type == NJS_TOKEN_NUMBER
- && node->u.value.atom_id != NJS_ATOM_STRING_unknown))
+ && node->u.atom_id != NJS_ATOM_STRING_unknown))
{
return NJS_VMCODE_PROPERTY_ATOM_GET;
}
{
if (node->token_type == NJS_TOKEN_STRING
|| (node->token_type == NJS_TOKEN_NUMBER
- && node->u.value.atom_id != NJS_ATOM_STRING_unknown))
+ && node->u.atom_id != NJS_ATOM_STRING_unknown))
{
return NJS_VMCODE_PROPERTY_ATOM_SET;
}
if (node->u.operation == NJS_VMCODE_PROPERTY_GET
&& (right->token_type == NJS_TOKEN_STRING
|| (right->token_type == NJS_TOKEN_NUMBER
- && right->u.value.atom_id != NJS_ATOM_STRING_unknown)))
+ && right->u.atom_id != NJS_ATOM_STRING_unknown)))
{
opcode = NJS_VMCODE_PROPERTY_ATOM_GET;
if (prop->token_type == NJS_TOKEN_STRING
|| (prop->token_type == NJS_TOKEN_NUMBER
- && prop->u.value.atom_id != NJS_ATOM_STRING_unknown))
+ && prop->u.atom_id != NJS_ATOM_STRING_unknown))
{
opcode = NJS_VMCODE_PROPERTY_ATOM_GET;
lambda = njs_variable_lambda(var);
- njs_atom_to_value(vm, &lambda->name, node->u.reference.atom_id);
+ njs_atom_to_value(vm, &lambda->name, node->u.atom_id);
njs_string_get(vm, &lambda->name, &name);
ret = njs_generate_function_scope(vm, generator, lambda, node, &name);
return NJS_ERROR;
}
- njs_atom_to_value(vm, &property, node->u.reference.atom_id);
+ njs_atom_to_value(vm, &property, node->u.atom_id);
prop_get->property = njs_scope_global_index(vm, &property,
generator->runtime);
ref_err->type = NJS_OBJ_TYPE_REF_ERROR;
- njs_atom_string_get(vm, node->u.reference.atom_id, &entry);
+ njs_atom_string_get(vm, node->u.atom_id, &entry);
return njs_name_copy(vm, &ref_err->u.name, &entry);
}
if (njs_number_is_integer_index(token->number)
&& token->number < 0x80000000)
{
- node->u.value.atom_id = njs_number_atom((uint32_t) token->number);
+ node->u.atom_id = njs_number_atom((uint32_t) token->number);
}
node->token_line = token->line;
return NJS_ERROR;
}
- node->u.value.atom_id = token->atom_id;
-
node->token_line = token->line;
parser->node = node;
case NJS_TOKEN_NULL:
njs_thread_log_debug("JS: null");
+ node->u.atom_id = token->atom_id;
break;
case NJS_TOKEN_THIS:
njs_int_t
njs_parser_variable_reference(njs_parser_t *parser, njs_parser_scope_t *scope,
- njs_parser_node_t *node, uintptr_t atom_id)
+ njs_parser_node_t *node, uint32_t atom_id)
{
njs_rbtree_node_t *rb_node;
- njs_variable_reference_t *vr;
njs_parser_rbtree_node_t parse_node, *rb_parse_node;
- vr = &node->u.reference;
-
- vr->atom_id = atom_id;
+ node->u.atom_id = atom_id;
parse_node.key = atom_id;
njs_arr_t *items;
uint32_t length;
} array;
+ /* Only reference and value payloads share this field. */
+ uint32_t atom_id;
njs_variable_reference_t reference;
njs_value_t value;
uintptr_t label;
njs_variable_t *njs_variable_resolve(njs_vm_t *vm, njs_parser_node_t *node);
njs_index_t njs_variable_index(njs_vm_t *vm, njs_parser_node_t *node);
njs_int_t njs_parser_variable_reference(njs_parser_t *parser,
- njs_parser_scope_t *scope, njs_parser_node_t *node, uintptr_t atom_id);
+ njs_parser_scope_t *scope, njs_parser_node_t *node, uint32_t atom_id);
njs_token_type_t njs_parser_unexpected_token(njs_vm_t *vm, njs_parser_t *parser,
njs_str_t *name, njs_token_type_t type);
njs_int_t njs_parser_string_create(njs_vm_t *vm, njs_lexer_token_t *token,
njs_variable_t *
njs_variable_resolve(njs_vm_t *vm, njs_parser_node_t *node)
{
- njs_rbtree_node_t *rb_node;
- njs_parser_scope_t *scope;
- njs_variable_node_t var_node;
- njs_variable_reference_t *ref;
+ njs_rbtree_node_t *rb_node;
+ njs_parser_scope_t *scope;
+ njs_variable_node_t var_node;
- ref = &node->u.reference;
scope = node->scope;
- var_node.key = ref->atom_id;
+ var_node.key = node->u.atom_id;
do {
rb_node = njs_rbtree_find(&scope->variables, &var_node.node);
closure = njs_variable_closure_test(node->scope, ref->variable->scope);
- ref_node.key = ref->atom_id;
+ ref_node.key = node->u.atom_id;
rb_node = njs_rbtree_find(&scope->references, &ref_node.node);
if (njs_slow_path(rb_node == NULL)) {