diff options
-rw-r--r-- | src/js_lexer.zig | 1 | ||||
-rw-r--r-- | src/js_parser.zig | 6 | ||||
-rw-r--r-- | test/transpiler/transpiler.test.js | 7 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/js_lexer.zig b/src/js_lexer.zig index e8b852d0d..a0ad75c7b 100644 --- a/src/js_lexer.zig +++ b/src/js_lexer.zig @@ -1793,6 +1793,7 @@ fn NewLexer_( } }; + lexer.did_panic = true; try lexer.addRangeError(lexer.range(), "Unexpected {s}", .{found}, true); } diff --git a/src/js_parser.zig b/src/js_parser.zig index d20c1a868..2d00654c9 100644 --- a/src/js_parser.zig +++ b/src/js_parser.zig @@ -11633,7 +11633,11 @@ fn NewParser_( error.Backtrack => { backtrack = true; }, - else => {}, + else => { + if (p.lexer.did_panic) { + backtrack = true; + } + }, } if (comptime FnReturnType == anyerror!bool or FnReturnType == anyerror!void) // we are not using the value diff --git a/test/transpiler/transpiler.test.js b/test/transpiler/transpiler.test.js index 3040a9913..f83c00296 100644 --- a/test/transpiler/transpiler.test.js +++ b/test/transpiler/transpiler.test.js @@ -106,6 +106,13 @@ describe("Bun.Transpiler", () => { ts.expectPrinted_("import Foo = Baz.Bar;\nexport default Foo;", "const Foo = Baz.Bar;\nexport default Foo"); }); + it("ternary should parse correctly when parsing typescript fails", () => { + ts.expectPrinted_( + "var c = Math.random() ? ({ ...{} }) : ({ ...{} })", + "var c = Math.random() ? { ...{} } : { ...{} }", + ); + }); + it.todo("instantiation expressions", async () => { const exp = ts.expectPrinted_; const err = ts.expectParseError; |