diff options
-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) { |