From: hongzhidao Date: Tue, 26 Feb 2019 02:11:53 +0000 (+0800) Subject: Improved parser syntax error. X-Git-Tag: 0.3.0~35 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=ac8df981a49b369ab15b648eb787be3cda564620;p=njs.git Improved parser syntax error. --- 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);