aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dylan Conway <35280289+dylan-conway@users.noreply.github.com> 2023-05-31 23:51:32 -0700
committerGravatar GitHub <noreply@github.com> 2023-05-31 23:51:32 -0700
commit689434e012a47b9be897f6d90d6aa211b13dfc19 (patch)
tree5ef260d1638bd98730ada0af044670e7f4299fbb
parenta73a4d1e0b8566e5d21162e86fcfd6375be52548 (diff)
downloadbun-689434e012a47b9be897f6d90d6aa211b13dfc19.tar.gz
bun-689434e012a47b9be897f6d90d6aa211b13dfc19.tar.zst
bun-689434e012a47b9be897f6d90d6aa211b13dfc19.zip
don't rewrite `module.exports` if assign target is `update` or `replace` (#3147)bun-v0.6.6
* don't rewrite `module.exports` if assign target is `update` or `replace` * missing `is_delete_target`, check de-opt before rewriting
-rw-r--r--src/js_parser.zig25
1 files changed, 16 insertions, 9 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig
index a9cd4379c..afec299d9 100644
--- a/src/js_parser.zig
+++ b/src/js_parser.zig
@@ -16156,6 +16156,7 @@ fn NewParser_(
.{
.is_call_target = is_call_target,
.assign_target = in.assign_target,
+ .is_delete_target = is_delete_target,
// .is_template_tag = p.template_tag != null,
},
)) |_expr| {
@@ -17438,14 +17439,6 @@ fn NewParser_(
p.recordUsage(p.require_ref);
return p.newExpr(E.Identifier{ .ref = p.require_ref }, name_loc);
} else if (!p.commonjs_named_exports_deoptimized and strings.eqlComptime(name, "exports")) {
- // Deoptimizations:
- // delete module.exports
- // module.exports();
-
- if (identifier_opts.is_call_target or identifier_opts.is_delete_target or identifier_opts.assign_target == .update) {
- p.deoptimizeCommonJSNamedExports();
- return null;
- }
// Detect if we are doing
//
@@ -17453,7 +17446,13 @@ fn NewParser_(
// foo: "bar"
// }
//
- if (identifier_opts.assign_target == .replace and
+ // Note that it cannot be any of these:
+ //
+ // module.exports += { };
+ // delete module.exports = {};
+ // module.exports()
+ if (!(identifier_opts.is_call_target or identifier_opts.is_delete_target) and
+ identifier_opts.assign_target == .replace and
p.stmt_expr_value == .e_binary and
p.stmt_expr_value.e_binary.op == .bin_assign)
{
@@ -17596,6 +17595,14 @@ fn NewParser_(
return p.newExpr(E.Missing{}, name_loc);
}
+ // Deoptimizations:
+ // delete module.exports
+ // module.exports();
+ if (identifier_opts.is_call_target or identifier_opts.is_delete_target or identifier_opts.assign_target != .none) {
+ p.deoptimizeCommonJSNamedExports();
+ return null;
+ }
+
// rewrite `module.exports` to `exports`
return p.newExpr(E.Identifier{ .ref = p.exports_ref }, name_loc);
} else if (p.options.bundle and strings.eqlComptime(name, "id") and identifier_opts.assign_target == .none) {