njs_parser_next(parser, njs_parser_expression);
- return njs_parser_after(parser, current, NULL, 1,
+ return njs_parser_after(parser, current, NULL, 0,
njs_parser_close_parenthesis);
default:
{
njs_parser_node_t *node;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_lexer_consume_token(parser->lexer, 1);
- return njs_parser_after(parser, current, node, 0, after);
+ return njs_parser_after(parser, current, node, 1, after);
}
njs_lexer_consume_token(parser->lexer, 1);
njs_parser_next(parser, njs_parser_left_hand_side_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_update_expression_unary);
}
njs_parser_update_expression_unary(njs_parser_t *parser,
njs_lexer_token_t *token, njs_queue_link_t *current)
{
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (!njs_parser_is_lvalue(parser->node)) {
njs_parser_ref_error(parser,
"Invalid left-hand side in prefix operation");
njs_lexer_consume_token(parser->lexer, 1);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_unary_expression_next);
}
njs_token_type_t type;
njs_parser_node_t *node;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
type = parser->target->token_type;
node = parser->node;
{
njs_parser_node_t *node;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_parser_next(parser, njs_parser_exponentiation_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_exponentiation_expression_match);
}
njs_parser_node_t *node;
njs_vmcode_operation_t operation;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_parser_next(parser, njs_parser_exponentiation_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_multiplicative_expression_match);
}
njs_parser_node_t *node;
njs_vmcode_operation_t operation;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_parser_next(parser, njs_parser_multiplicative_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_additive_expression_match);
}
njs_parser_node_t *node;
njs_vmcode_operation_t operation;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_parser_next(parser, njs_parser_additive_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_shift_expression_match);
}
njs_parser_node_t *node;
njs_vmcode_operation_t operation;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_parser_next(parser, njs_parser_shift_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_relational_expression_match);
}
njs_parser_node_t *node;
njs_vmcode_operation_t operation;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
if (parser->target != NULL) {
parser->target->right = parser->node;
parser->target->right->dest = parser->target;
njs_parser_next(parser, njs_parser_relational_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_equality_expression_match);
}
njs_token_type_t type;
njs_parser_node_t *node;
- if (parser->ret != NJS_OK) {
- return njs_parser_failed(parser);
- }
-
node = parser->node;
if (parser->target != NULL) {
njs_lexer_consume_token(parser->lexer, 1);
njs_parser_next(parser, njs_parser_bitwise_OR_expression);
- return njs_parser_after(parser, current, node, 0,
+ return njs_parser_after(parser, current, node, 1,
njs_parser_coalesce_expression);
}
njs_parser_next(parser, njs_parser_statement_list);
- return njs_parser_after(parser, current, target, 1,
+ return njs_parser_after(parser, current, target, 0,
njs_parser_block_statement_close_brace);
}
{
njs_parser_node_t *node;
+ if (parser->ret != NJS_OK) {
+ return njs_parser_failed(parser);
+ }
+
if (token->type != NJS_TOKEN_CLOSE_BRACE) {
return njs_parser_failed(parser);
}
njs_queue_link_t *current)
{
if (parser->ret != NJS_OK) {
- parser->node = parser->target;
+ if (token->type != NJS_TOKEN_CLOSE_BRACE) {
+ parser->node = parser->target;
+ return njs_parser_stack_pop(parser);
+ }
+
+ return njs_parser_failed(parser);
+ }
+
+ if (token->type == NJS_TOKEN_CLOSE_BRACE) {
return njs_parser_stack_pop(parser);
}
{ njs_str("{{}{1>>}"),
njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}{r=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}{var a = }"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}T=>}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a = b +}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a = b -}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a = b *}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a = b /}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a = b %}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a = b++}"),
+ njs_str("ReferenceError: \"a\" is not defined in 1") },
+
+ { njs_str("{{}a = b--}"),
+ njs_str("ReferenceError: \"a\" is not defined in 1") },
+
+ { njs_str("{{}a =}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a +=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a -=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a *=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a /=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a %=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a ===}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a ==}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a !=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a !==}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a >}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a <}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a <=}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a &&}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a ||}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a ??}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a &}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a |}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a ^}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a <<}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}a >>}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}new}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}delete}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}void}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{}typeof}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 1") },
+
+ { njs_str("{{} ({a: 1, b: {}\n}\n})\n}"),
+ njs_str("SyntaxError: Unexpected token \"}\" in 3") },
};