summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2021-05-04 18:12:14 +0200
committerJo-Philipp Wich <jo@mein.io>2021-05-04 18:15:56 +0200
commitf0a987503cb55f438a79c6d14058b23c5b801a0c (patch)
treeb0434fb24956f79b191eef431f4ad7b67e4879d5
parent16604331c185d7597b53709cc09a072a2652415e (diff)
compiler: properly handle keyword in parenthesized property access expression
Due to the special code path parsing the leading label portion of a parenthesized expression, keywords following a property access operator (TK_DOT, `.`) weren't properly handled, emitting a syntax error when an otherwise valid expression such as `value.default` was being parsed as first sub expression of a parenthesized expression. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--compiler.c4
-rw-r--r--tests/custom/03_bugs/21_compiler_parenthesized_prop_keyword17
2 files changed, 21 insertions, 0 deletions
diff --git a/compiler.c b/compiler.c
index 00079fd..ee6b073 100644
--- a/compiler.c
+++ b/compiler.c
@@ -1193,6 +1193,10 @@ uc_compiler_compile_paren(uc_compiler *compiler, bool assignable)
uc_compiler_parse_advance(compiler);
}
+ /* If we encouter a dot, treat potential subsequent keyword as label */
+ if (uc_compiler_parse_check(compiler, TK_DOT))
+ compiler->parser->lex.no_keyword = true;
+
break;
}
}
diff --git a/tests/custom/03_bugs/21_compiler_parenthesized_prop_keyword b/tests/custom/03_bugs/21_compiler_parenthesized_prop_keyword
new file mode 100644
index 0000000..472b2af
--- /dev/null
+++ b/tests/custom/03_bugs/21_compiler_parenthesized_prop_keyword
@@ -0,0 +1,17 @@
+When compiling a parenthesized property access expression, the compiler
+didn't instruct the lexer to treat a potential subsequent keyword as label,
+leading to an incorrect syntax error exception.
+
+-- Expect stdout --
+true
+true
+-- End --
+
+-- Testcase --
+{%
+ let x = { default: true };
+
+ print(x.default, "\n"); // this was okay
+ print((x.default), "\n"); // this failed
+%}
+-- End --