diff options
author | Jo-Philipp Wich <jo@mein.io> | 2021-03-12 13:04:50 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2021-03-12 13:10:08 +0100 |
commit | 647c6a7927c5c6ef2941ba1dc3c1d40c2c7d7f34 (patch) | |
tree | 7fc91985bb60a9d5bc17d57442e13dd67052031d | |
parent | f2b6b24975a3e8ad7e8bfb16d2449ba8e3d2536a (diff) |
compiler: fix parsing of arrow functions with single expression body
Ensure that an arrow function body expression is parsed with P_ASSIGN
precedence to not greedily consume comma expressions.
This ensures that an expression like
() => 1, 2
is parsed as function [() => 1], integer [2] and not as
function [() => 1, 2].
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | compiler.c | 2 | ||||
-rw-r--r-- | tests/03_bugs/08_compiler_arrow_fn_expressions | 15 |
2 files changed, 16 insertions, 1 deletions
@@ -1118,7 +1118,7 @@ uc_compiler_compile_arrowfn(uc_compiler *compiler, json_object *args, bool resta } } else { - uc_compiler_compile_expression(&fncompiler); + uc_compiler_parse_precedence(&fncompiler, P_ASSIGN); uc_compiler_emit_insn(&fncompiler, 0, I_RETURN); } diff --git a/tests/03_bugs/08_compiler_arrow_fn_expressions b/tests/03_bugs/08_compiler_arrow_fn_expressions new file mode 100644 index 0000000..5cd8960 --- /dev/null +++ b/tests/03_bugs/08_compiler_arrow_fn_expressions @@ -0,0 +1,15 @@ +Arrow functions with single expression bodies were parsed with a wrong +precedence level, causing comma expressions to be greedily consumed. + +-- Testcase -- +{% + print({ + a: () => 1, + b: () => 2 + }, "\n"); +%} +-- End -- + +-- Expect stdout -- +{ "a": "() => { ... }", "b": "() => { ... }" } +-- End -- |