return token;
}
- token = njs_parser_conditional_expression(vm, parser, token);
+ token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
propref->right = node;
parser->code_size += sizeof(njs_vmcode_3addr_t);
- token = njs_parser_conditional_expression(vm, parser, token);
+ token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
};
-static njs_token_t njs_parser_assignment_expression(njs_vm_t *vm,
+static njs_token_t njs_parser_any_expression(njs_vm_t *vm,
njs_parser_t *parser, const njs_parser_expression_t *expr,
njs_token_t token);
+static njs_token_t njs_parser_conditional_expression(njs_vm_t *vm,
+ njs_parser_t *parser, njs_token_t token);
static njs_token_t njs_parser_binary_expression(njs_vm_t *vm,
njs_parser_t *parser, const njs_parser_expression_t *expr,
njs_token_t token);
static const njs_parser_expression_t
njs_parser_comma_expression =
{
- njs_parser_assignment_expression,
+ njs_parser_any_expression,
NULL,
1, {
{ NJS_TOKEN_COMMA, NULL, 0 },
static njs_token_t
-njs_parser_assignment_expression(njs_vm_t *vm, njs_parser_t *parser,
+njs_parser_any_expression(njs_vm_t *vm, njs_parser_t *parser,
const njs_parser_expression_t *expr, njs_token_t token)
+{
+ return njs_parser_assignment_expression(vm, parser, token);
+}
+
+
+njs_token_t
+njs_parser_assignment_expression(njs_vm_t *vm, njs_parser_t *parser,
+ njs_token_t token)
{
size_t size;
njs_parser_node_t *node, *pending;
return token;
}
- token = njs_parser_assignment_expression(vm, parser, NULL, token);
+ token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
cond->right = node;
node->token = NJS_TOKEN_BRANCHING;
- token = njs_parser_assignment_expression(vm, parser, NULL, token);
+ token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
return token;
}
- token = njs_parser_assignment_expression(vm, parser, NULL, token);
+ token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
break;
}
- token = njs_parser_assignment_expression(vm, parser, NULL, token);
+ token = njs_parser_assignment_expression(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
return token;
}
{ nxt_string("a = 1; a.b++; a.b"),
nxt_string("TypeError") },
+ { nxt_string("var n = 1, o = { p: n += 1 }; o.p"),
+ nxt_string("2") },
+
{ nxt_string("a = {}; a.b = {}; a.b.c = 1; a.b['c']"),
nxt_string("1") },
{ nxt_string("a = [ 1, 2, 3 ]; a[0] + a[1] + a[2]"),
nxt_string("6") },
+ { nxt_string("var n = 1, a = [ n += 1 ]; a"),
+ nxt_string("2") },
+
{ nxt_string("a = [ 1, 2; 3 ]; a[0] + a[1] + a[2]"),
nxt_string("SyntaxError: Unexpected token \";\" in 1") },