]> git.kaiwu.me - njs.git/commitdiff
Parser: remove the use_lhs parser flag
authorDmitry Volyntsev <xeioex@nginx.com>
Tue, 1 Sep 2026 01:32:50 +0000 (18:32 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Fri, 4 Sep 2026 20:56:37 +0000 (13:56 -0700)
Previously, use_lhs told njs_parser_exponentiation_expression() to skip the
unary part and njs_parser_assignment_expression() to skip the arrow check, so
that an expression could resume from an already parsed left-hand side.

The fix is to remove it: its only writer went with the speculative "for"
initializer parse.

src/njs_parser.c
src/njs_parser.h

index ccb86ea011d8245e4152c11d6b70988be22cb759..0ee41ef6f289ec4c58d0fd0895740d90fa51e9b9 100644 (file)
@@ -560,8 +560,6 @@ njs_parser_init(njs_vm_t *vm, njs_parser_t *parser, njs_parser_scope_t *scope,
     lexer = &parser->lexer0;
     parser->lexer = lexer;
 
-    parser->use_lhs = 0;
-
     return njs_lexer_init(vm, lexer, file, start, end);
 }
 
@@ -3913,17 +3911,11 @@ njs_parser_exponentiation_expression(njs_parser_t *parser,
 {
     parser->target = NULL;
 
-    if (parser->use_lhs == 0) {
-        njs_parser_next(parser, njs_parser_unary_expression);
+    njs_parser_next(parser, njs_parser_unary_expression);
 
-        /* For UpdateExpression, see njs_parser_unary_expression_after. */
+    /* For UpdateExpression, see njs_parser_unary_expression_after. */
 
-        return NJS_OK;
-    } else {
-        parser->use_lhs = 0;
-
-        return njs_parser_update_expression_post(parser, token, current);
-    }
+    return NJS_OK;
 }
 
 
@@ -4576,16 +4568,14 @@ njs_parser_assignment_expression(njs_parser_t *parser,
 {
     njs_int_t  ret;
 
-    if (!parser->use_lhs) {
-        ret = njs_parser_match_arrow_expression(parser, token);
-        if (ret == NJS_OK) {
-            njs_parser_next(parser, njs_parser_arrow_function);
+    ret = njs_parser_match_arrow_expression(parser, token);
+    if (ret == NJS_OK) {
+        njs_parser_next(parser, njs_parser_arrow_function);
 
-            return NJS_OK;
+        return NJS_OK;
 
-        } else if (ret == NJS_ERROR) {
-            return NJS_ERROR;
-        }
+    } else if (ret == NJS_ERROR) {
+        return NJS_ERROR;
     }
 
     njs_parser_next(parser, njs_parser_conditional_expression);
index d21fcf6aae8f4dcb37eb6aac7e2dd457b178f1c2..d3ae85bbae797d4fd8f213b376f3e56ecf5a60c0 100644 (file)
@@ -82,8 +82,6 @@ struct njs_parser_s {
     /* The ECMAScript [In] grammar parameter. */
     uint8_t                         allow_in;
 
-    uint8_t                         use_lhs;
-
     uint8_t                         module;
 
     njs_str_t                       file;