if (lvalue->token == NJS_TOKEN_NAME) {
- index = njs_variable_index(vm, lvalue);
- if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
- return NXT_ERROR;
+ ret = njs_generate_variable(vm, generator, lvalue);
+ if (nxt_slow_path(ret != NXT_OK)) {
+ return ret;
}
- lvalue->index = index;
-
expr->dest = lvalue;
ret = njs_generator(vm, generator, expr);
lvalue = node->left;
if (lvalue->token == NJS_TOKEN_NAME) {
+
ret = njs_generate_variable(vm, generator, lvalue);
if (nxt_slow_path(ret != NXT_OK)) {
return ret;
return NULL;
}
+ if (njs_is_null(&var->value)) {
+
+ switch (type) {
+
+ case NJS_VARIABLE_VAR:
+ var->value = njs_value_undefined;
+ break;
+
+ default:
+ break;
+ }
+ }
+
node = njs_parser_node_new(vm, parser, NJS_TOKEN_NAME);
if (nxt_slow_path(node == NULL)) {
return NULL;
init = parser->node;
if (init->token == NJS_TOKEN_FOR_IN) {
- return token;
+ goto done;
}
} else {
init = parser->node;
if (init->token == NJS_TOKEN_IN) {
- return njs_parser_for_in_statement(vm, parser, &name, token);
+ token = njs_parser_for_in_statement(vm, parser, &name, token);
+ if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
+ return token;
+ }
+
+ goto done;
}
}
}
parser->node = node;
+done:
+
return token;
}
nxt_uint_t scope_index;
njs_index_t index;
njs_variable_t *var;
- const njs_value_t *default_value;
njs_variable_reference_t *vr;
vr = &node->u.reference;
var->argument = index;
}
- if (vr->type != NJS_DECLARATION && var->type <= NJS_VARIABLE_LET) {
- goto not_found;
- }
-
- default_value = njs_is_object(&var->value) ? &var->value :
- &njs_value_undefined;
-
- index = njs_scope_next_index(vm, vr->scope, scope_index, default_value);
+ index = njs_scope_next_index(vm, vr->scope, scope_index, &var->value);
if (nxt_slow_path(index == NJS_INDEX_ERROR)) {
return NULL;