diff options
author | 2023-05-31 23:51:32 -0700 | |
---|---|---|
committer | 2023-05-31 23:51:32 -0700 | |
commit | 689434e012a47b9be897f6d90d6aa211b13dfc19 (patch) | |
tree | 5ef260d1638bd98730ada0af044670e7f4299fbb | |
parent | a73a4d1e0b8566e5d21162e86fcfd6375be52548 (diff) | |
download | bun-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.zig | 25 |
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) { |