in left-hand side expressions.
}
if (lvalue->state == NJS_VARIABLE_FIRST_ASSIGNMENT) {
- lvalue->lvalue = NJS_LVALUE_ASSIGNED;
value = njs_variable_value(parser, lvalue->index);
*value = expr->u.value;
node->index = expr->index;
dest = node->dest;
if (dest != NULL && dest->index != NJS_INDEX_NONE) {
- dest->lvalue = NJS_LVALUE_ASSIGNED;
-
return dest->index;
}
if (node->left == NULL) {
/* Assign empty object directly to variable */
- dest->lvalue = NJS_LVALUE_ASSIGNED;
return index;
}
}
break;
}
- node->lvalue = NJS_LVALUE_ENABLED;
node->u.variable = var;
}
}
}
name->token = NJS_TOKEN_NAME;
- name->lvalue = NJS_LVALUE_ENABLED;
name->u.variable = var;
if (first) {
}
parser->code_size += sizeof(njs_vmcode_object_copy_t);
- node->lvalue = NJS_LVALUE_ENABLED;
node->u.variable = var;
break;
struct njs_parser_node_s {
njs_token_t token:8;
njs_variable_node_state_t state:8; /* 2 bits */
- njs_lvalue_state_t lvalue:2; /* 2 bits */
uint8_t ctor:1; /* 1 bit */
uint8_t temporary; /* 1 bit */
uint32_t token_line;
node = parser->node;
- if (node->lvalue == NJS_LVALUE_NONE) {
+ if (parser->node->token != NJS_TOKEN_NAME) {
return njs_parser_invalid_lvalue(vm, parser, "assignment");
}
node = parser->node;
- if (node->lvalue == NJS_LVALUE_NONE) {
+ if (parser->node->token != NJS_TOKEN_NAME
+ && parser->node->token != NJS_TOKEN_PROPERTY)
+ {
return njs_parser_invalid_lvalue(vm, parser, "assignment");
}
return next;
}
- if (parser->node->lvalue == NJS_LVALUE_NONE) {
+ if (parser->node->token != NJS_TOKEN_NAME
+ && parser->node->token != NJS_TOKEN_PROPERTY)
+ {
return njs_parser_invalid_lvalue(vm, parser, "prefix operation");
}
return token;
}
- if (parser->node->lvalue == NJS_LVALUE_NONE) {
+ if (parser->node->token != NJS_TOKEN_NAME
+ && parser->node->token != NJS_TOKEN_PROPERTY)
+ {
return njs_parser_invalid_lvalue(vm, parser, "postfix operation");
}
}
node->token = NJS_TOKEN_PROPERTY;
- node->lvalue = NJS_LVALUE_ENABLED;
node->u.operation = njs_vmcode_property_get;
node->left = parser->node;
{ nxt_string("var f = 1; function f() {}"),
nxt_string("SyntaxError: Duplicate declaration \"f\" in 1") },
- { nxt_string("function f() {} var f = 1; f"),
- nxt_string("1") },
+ { nxt_string("f() = 1"),
+ nxt_string("ReferenceError: Invalid left-hand side in assignment in 1") },
+
+ { nxt_string("f.a() = 1"),
+ nxt_string("ReferenceError: Invalid left-hand side in assignment in 1") },
+
+ { nxt_string("++f()"),
+ nxt_string("ReferenceError: Invalid left-hand side in prefix operation in 1") },
+
+ { nxt_string("f()++"),
+ nxt_string("ReferenceError: Invalid left-hand side in postfix operation in 1") },
/* Numbers. */