return NJS_TOKEN_ERROR;
}
- ret = njs_variable_reference(vm, parser, node, 0);
+ ret = njs_variable_reference(vm, parser, node, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
name->token = NJS_TOKEN_NAME;
- ret = njs_variable_reference(vm, parser, name, 0);
+ ret = njs_variable_reference(vm, parser, name, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
name->token = NJS_TOKEN_NAME;
- ret = njs_variable_reference(vm, parser, name, 0);
+ ret = njs_variable_reference(vm, parser, name, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
node->token = NJS_TOKEN_NAME;
- ret = njs_variable_reference(vm, parser, node, 0);
+ ret = njs_variable_reference(vm, parser, node, NJS_DECLARATION);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
break;
}
- ret = njs_variable_reference(vm, parser, node, 1);
+ ret = njs_variable_reference(vm, parser, node, NJS_REFERENCE);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
var->value.type = NJS_OBJECT;
var->value.data.truth = 1;
- ret = njs_variable_reference(vm, parser, node, 1);
+ ret = njs_variable_reference(vm, parser, node, NJS_REFERENCE);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
var->value.type = NJS_FUNCTION;
var->value.data.truth = 1;
- ret = njs_variable_reference(vm, parser, node, 1);
+ ret = njs_variable_reference(vm, parser, node, NJS_REFERENCE);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
struct njs_parser_node_s {
njs_token_t token:16;
- uint8_t ctor:1; /* 1 bit */
- uint8_t temporary; /* 1 bit */
- uint8_t reference; /* 1 bit */
+ uint8_t ctor:1;
+ njs_variable_reference_t reference:2;
+ uint8_t temporary; /* 1 bit */
uint32_t token_line;
uint32_t variable_name_hash;
njs_token_t njs_parser_token(njs_parser_t *parser);
nxt_int_t njs_parser_string_create(njs_vm_t *vm, njs_value_t *value);
njs_ret_t njs_variable_reference(njs_vm_t *vm, njs_parser_t *parser,
- njs_parser_node_t *node, nxt_bool_t reference);
+ njs_parser_node_t *node, njs_variable_reference_t reference);
njs_variable_t *njs_variable_get(njs_vm_t *vm, njs_parser_node_t *node);
njs_index_t njs_variable_typeof(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_ret_t
njs_variable_reference(njs_vm_t *vm, njs_parser_t *parser,
- njs_parser_node_t *node, nxt_bool_t reference)
+ njs_parser_node_t *node, njs_variable_reference_t reference)
{
njs_ret_t ret;
nxt_lvlhsh_query_t lhq;
}
var = njs_variable_get(vm, node);
+
if (nxt_slow_path(var == NULL)) {
- return NXT_ERROR;
+ if (node->reference != NJS_TYPEOF) {
+ return NXT_ERROR;
+ }
}
}
}
var->argument = index;
}
- if (node->reference && var->type <= NJS_VARIABLE_LET) {
+ if (node->reference != NJS_DECLARATION && var->type <= NJS_VARIABLE_LET) {
goto not_found;
}