aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}