if (nxt_fast_path(token > NJS_TOKEN_ILLEGAL)) {
- if (parser->node != last) {
- /*
- * The statement is not empty block, not just semicolon,
- * and not variables declaration without initialization.
- */
+ if (parser->node != NULL) {
+ /* The statement is not empty block or just semicolon. */
+
node = njs_parser_node_alloc(vm);
if (nxt_slow_path(node == NULL)) {
return NJS_TOKEN_ERROR;
node->left = last;
node->right = parser->node;
parser->node = node;
+
+ while (token == NJS_TOKEN_SEMICOLON
+ || token == NJS_TOKEN_LINE_END)
+ {
+ token = njs_parser_token(parser);
+ if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
+ break;
+ }
+ }
}
} else if (vm->exception == NULL) {
njs_parser_statement(njs_vm_t *vm, njs_parser_t *parser,
njs_token_t token)
{
+ parser->node = NULL;
+
switch (token) {
case NJS_TOKEN_FUNCTION:
return njs_parser_throw_statement(vm, parser);
case NJS_TOKEN_SEMICOLON:
- parser->node = NULL;
return njs_parser_token(parser);
case NJS_TOKEN_OPEN_BRACE:
return token;
}
- parser->node = NULL;
-
ret = njs_parser_scope_begin(vm, parser, NJS_SCOPE_BLOCK);
if (nxt_slow_path(ret != NXT_OK)) {
return NJS_TOKEN_ERROR;
}
+ parser->node = NULL;
+
while (token != NJS_TOKEN_CLOSE_BRACE) {
token = njs_parser_statement_chain(vm, parser, token);
if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) {
switch (token) {
case NJS_TOKEN_SEMICOLON:
+ return njs_parser_token(parser);
+
case NJS_TOKEN_CLOSE_BRACE:
case NJS_TOKEN_END:
return token;