aboutsummaryrefslogtreecommitdiff
path: root/src/js_parser.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-26 19:17:59 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-26 19:18:35 -0800
commit7169bbbb9c9a24bfd7b7926d5f45dfe4ef3ff759 (patch)
tree19262c21e6741c92123dbf0f1730f5d72b03dd40 /src/js_parser.zig
parent6d0660613548869feb97a299f3aee7b718025802 (diff)
downloadbun-7169bbbb9c9a24bfd7b7926d5f45dfe4ef3ff759.tar.gz
bun-7169bbbb9c9a24bfd7b7926d5f45dfe4ef3ff759.tar.zst
bun-7169bbbb9c9a24bfd7b7926d5f45dfe4ef3ff759.zip
Fixes #1907
Diffstat (limited to 'src/js_parser.zig')
-rw-r--r--src/js_parser.zig22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index ab9c9bec6..4159faada 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -2184,6 +2184,7 @@ const PropertyOpts = struct {
is_class: bool = false,
class_has_extends: bool = false,
allow_ts_decorators: bool = false,
+ is_ts_abstract: bool = false,
ts_decorators: []Expr = &[_]Expr{},
has_argument_decorators: bool = false,
};
@@ -10218,7 +10219,26 @@ fn NewParser_(
return try p.parseProperty(kind, opts, null);
}
},
- .p_private, .p_protected, .p_public, .p_readonly, .p_abstract, .p_declare, .p_override => {
+ .p_declare => {
+ // skip declare keyword entirely
+ // https://github.com/oven-sh/bun/issues/1907
+ if (opts.is_class and is_typescript_enabled and strings.eqlComptime(raw, "declare")) {
+ const scope_index = p.scopes_in_order.items.len;
+ _ = try p.parseProperty(kind, opts, null);
+ p.discardScopesUpTo(scope_index);
+ return null;
+ }
+ },
+ .p_abstract => {
+ if (opts.is_class and is_typescript_enabled and !opts.is_ts_abstract and strings.eqlComptime(raw, "abstract")) {
+ opts.is_ts_abstract = true;
+ const scope_index = p.scopes_in_order.items.len;
+ _ = try p.parseProperty(kind, opts, null);
+ p.discardScopesUpTo(scope_index);
+ return null;
+ }
+ },
+ .p_private, .p_protected, .p_public, .p_readonly, .p_override => {
// Skip over TypeScript keywords
if (opts.is_class and is_typescript_enabled and (js_lexer.PropertyModifierKeyword.List.get(raw) orelse .p_static) == keyword) {
return try p.parseProperty(kind, opts, null);