From: hongzhidao Date: Sat, 27 Apr 2019 01:04:24 +0000 (+0800) Subject: Improved njs_lexer_rollback(). X-Git-Tag: 0.3.2~37 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=3976d85373eb61eba14238bace4afe433ac7c208;p=njs.git Improved njs_lexer_rollback(). --- diff --git a/njs/njs_lexer.c b/njs/njs_lexer.c index 1998b03a..b05a60cd 100644 --- a/njs/njs_lexer.c +++ b/njs/njs_lexer.c @@ -307,11 +307,6 @@ njs_lexer_token(njs_vm_t *vm, njs_lexer_t *lexer) lexer->prev_start = lexer->start; - if (lexer->lexer_token != NULL) { - lexer->prev_token = lexer->lexer_token->token; - nxt_mp_free(vm->mem_pool, lexer->lexer_token); - } - if (nxt_queue_is_empty(&lexer->preread)) { lt = njs_lexer_token_push(vm, lexer); if (nxt_slow_path(lt == NULL)) { @@ -319,7 +314,14 @@ njs_lexer_token(njs_vm_t *vm, njs_lexer_t *lexer) } } - lexer->lexer_token = njs_lexer_token_pop(lexer); + lt = njs_lexer_token_pop(lexer); + + if (lexer->lexer_token != NULL && lexer->lexer_token != lt) { + lexer->prev_token = lexer->lexer_token->token; + nxt_mp_free(vm->mem_pool, lexer->lexer_token); + } + + lexer->lexer_token = lt; return njs_lexer_token_name_resolve(lexer, lexer->lexer_token); } diff --git a/njs/njs_lexer.h b/njs/njs_lexer.h index bf705cf2..03f9303a 100644 --- a/njs/njs_lexer.h +++ b/njs/njs_lexer.h @@ -264,7 +264,6 @@ void njs_lexer_keyword(njs_lexer_t *lexer, njs_lexer_token_t *lt); #define njs_lexer_rollback(lexer) \ do { \ nxt_queue_insert_head(&(lexer)->preread, &(lexer)->lexer_token->link); \ - (lexer)->lexer_token = NULL; \ } while (0) diff --git a/njs/test/njs_unit_test.c b/njs/test/njs_unit_test.c index ebe5dbc1..4640996c 100644 --- a/njs/test/njs_unit_test.c +++ b/njs/test/njs_unit_test.c @@ -2157,6 +2157,12 @@ static njs_unit_test_t njs_test[] = /* automatic semicolon insertion. */ + { nxt_string("(a\n--"), + nxt_string("SyntaxError: Unexpected token \"--\" in 2") }, + + { nxt_string("(a\n++"), + nxt_string("SyntaxError: Unexpected token \"++\" in 2") }, + { nxt_string("var x = 0, y = 2; x\n--\ny; [x,y]"), nxt_string("0,1") },