From ac8df981a49b369ab15b648eb787be3cda564620 Mon Sep 17 00:00:00 2001 From: hongzhidao Date: Tue, 26 Feb 2019 10:11:53 +0800 Subject: [PATCH] Improved parser syntax error. --- njs/njs_parser.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/njs/njs_parser.c b/njs/njs_parser.c index 04a537a0..d8249ba7 100644 --- a/njs/njs_parser.c +++ b/njs/njs_parser.c @@ -278,30 +278,28 @@ njs_parser_statement_chain(njs_vm_t *vm, njs_parser_t *parser, token = njs_parser_statement(vm, parser, token); - if (nxt_fast_path(token > NJS_TOKEN_ILLEGAL)) { + if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { + return njs_parser_unexpected_token(vm, parser, token); + } - if (parser->node != NULL) { - /* The statement is not empty block or just semicolon. */ + if (parser->node != NULL) { + /* The statement is not empty block or just semicolon. */ - node = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT); - if (nxt_slow_path(node == NULL)) { - return NJS_TOKEN_ERROR; - } + node = njs_parser_node_new(vm, parser, NJS_TOKEN_STATEMENT); + if (nxt_slow_path(node == NULL)) { + return NJS_TOKEN_ERROR; + } - node->left = last; - node->right = parser->node; - *dest = node; + node->left = last; + node->right = parser->node; + *dest = node; - while (token == NJS_TOKEN_SEMICOLON) { - token = njs_parser_token(parser); - if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { - break; - } + while (token == NJS_TOKEN_SEMICOLON) { + token = njs_parser_token(parser); + if (nxt_slow_path(token <= NJS_TOKEN_ILLEGAL)) { + break; } } - - } else if (!njs_is_error(&vm->retval)) { - (void) njs_parser_unexpected_token(vm, parser, token); } return token; @@ -2830,6 +2828,10 @@ njs_parser_lexer_error(njs_vm_t *vm, njs_parser_t *parser, { va_list args; + if (njs_is_error(&vm->retval)) { + return; + } + va_start(args, fmt); njs_parser_scope_error(vm, parser->scope, type, parser->lexer->line, fmt, args); -- 2.47.3