aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-09 05:07:28 -0700
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-04-09 05:07:28 -0700
commite9d6a4042f5f46eed6fb88847fbcd008ff92b6cc (patch)
tree569842249f403fe9a6f6720d349b412301135d98 /src/js_parser.zig
parentc97cb4ec1eb91ece1b241bd86da794d53ae0053e (diff)
downloadbun-e9d6a4042f5f46eed6fb88847fbcd008ff92b6cc.tar.gz
bun-e9d6a4042f5f46eed6fb88847fbcd008ff92b6cc.tar.zst
bun-e9d6a4042f5f46eed6fb88847fbcd008ff92b6cc.zip
Fix another case with instantiation expressions
Related to #2203
Diffstat (limited to '')
-rw-r--r--src/js_parser.zig10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index afbc631b9..0b2eb4a05 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -12059,7 +12059,7 @@ fn NewParser_(
.optional_chain = optional_start,
}, left.loc);
},
- .t_less_than => {
+ .t_less_than, .t_less_than_less_than => {
// "a?.<T>()"
if (comptime !is_typescript_enabled) {
try p.lexer.expected(.t_identifier);
@@ -12440,6 +12440,14 @@ fn NewParser_(
left = p.newExpr(E.Binary{ .op = .bin_ge, .left = left, .right = try p.parseExpr(.compare) }, left.loc);
},
.t_less_than_less_than => {
+ // TypeScript allows type arguments to be specified with angle brackets
+ // inside an expression. Unlike in other languages, this unfortunately
+ // appears to require backtracking to parse.
+ if (is_typescript_enabled and p.trySkipTypeScriptTypeArgumentsWithBacktracking()) {
+ optional_chain = old_optional_chain;
+ continue;
+ }
+
if (level.gte(.shift)) {
return left;
}