aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-01 22:18:16 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2022-03-01 22:18:16 -0800
commit7b4f239d33f2c9641350ce32cede2141e3075c72 (patch)
tree9eca3fce49c2b232e653b3a88d57f544b3aefb15
parent80d4faa8ab26d04da35e3a1debf86137e78f41b6 (diff)
downloadbun-7b4f239d33f2c9641350ce32cede2141e3075c72.tar.gz
bun-7b4f239d33f2c9641350ce32cede2141e3075c72.tar.zst
bun-7b4f239d33f2c9641350ce32cede2141e3075c72.zip
[JS Parser] Fix bug with `super` from adding class static blocks
-rw-r--r--src/js_parser/js_parser.zig13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig
index 358ae165a..8b28c8eee 100644
--- a/src/js_parser/js_parser.zig
+++ b/src/js_parser/js_parser.zig
@@ -8566,7 +8566,7 @@ fn NewParser_(
try p.declareBinding(Symbol.Kind.hoisted, &arg.binding, &opts);
}
- // The ability to call "super()" is inherited by arrow functions
+ // The ability to use "this" and "super()" is inherited by arrow functions
data.allow_super_call = p.fn_or_arrow_data_parse.allow_super_call;
data.allow_super_property = p.fn_or_arrow_data_parse.allow_super_property;
data.is_this_disallowed = p.fn_or_arrow_data_parse.is_this_disallowed;
@@ -9241,7 +9241,17 @@ fn NewParser_(
}
try p.lexer.next();
+
+ // "this" and "super" property access is allowed in field initializers
+ const old_is_this_disallowed = p.fn_or_arrow_data_parse.is_this_disallowed;
+ const old_allow_super_property = p.fn_or_arrow_data_parse.allow_super_property;
+ p.fn_or_arrow_data_parse.is_this_disallowed = false;
+ p.fn_or_arrow_data_parse.allow_super_property = true;
+
initializer = try p.parseExpr(.comma);
+
+ p.fn_or_arrow_data_parse.is_this_disallowed = old_is_this_disallowed;
+ p.fn_or_arrow_data_parse.allow_super_property = old_allow_super_property;
}
// Special-case private identifiers
@@ -9317,6 +9327,7 @@ fn NewParser_(
.allow_await = if (opts.is_async) AwaitOrYield.allow_expr else AwaitOrYield.allow_ident,
.allow_yield = if (opts.is_generator) AwaitOrYield.allow_expr else AwaitOrYield.allow_ident,
.allow_super_call = opts.class_has_extends and is_constructor,
+ .allow_super_property = true,
.allow_ts_decorators = opts.allow_ts_decorators,
.is_constructor = is_constructor,