diff options
author | 2023-04-17 01:18:05 -0700 | |
---|---|---|
committer | 2023-04-17 01:18:05 -0700 | |
commit | 07b4b4ced01a13073b41eea8e8a1fbae4a63d343 (patch) | |
tree | 0d4918f6f15768e657bc759dd0b28900b25d6589 | |
parent | e624dd6d4dec1c717d2edfa49558c2a9fc0ef8fe (diff) | |
download | bun-07b4b4ced01a13073b41eea8e8a1fbae4a63d343.tar.gz bun-07b4b4ced01a13073b41eea8e8a1fbae4a63d343.tar.zst bun-07b4b4ced01a13073b41eea8e8a1fbae4a63d343.zip |
Don't record named exports for deoptimized CJS
-rw-r--r-- | src/js_parser.zig | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/js_parser.zig b/src/js_parser.zig index 496e7116e..e443d30b2 100644 --- a/src/js_parser.zig +++ b/src/js_parser.zig @@ -3267,15 +3267,15 @@ pub const Parser = struct { var exports_kind = js_ast.ExportsKind.none; const exports_ref_usage_count = p.symbols.items[p.exports_ref.innerIndex()].use_count_estimate; const uses_exports_ref = exports_ref_usage_count > 0; - const uses_module_ref = p.symbols.items[p.module_ref.innerIndex()].use_count_estimate > 0; - - var wrapper_expr: ?Expr = null; - if (uses_exports_ref and p.commonjs_named_exports.count() > 0) { p.deoptimizeCommonJSNamedExports(); } - if (p.commonjs_named_exports_deoptimized and p.commonjs_named_exports.count() > 0) { + const uses_module_ref = p.symbols.items[p.module_ref.innerIndex()].use_count_estimate > 0; + + var wrapper_expr: ?Expr = null; + + if (p.isDeoptimizedCommonJS()) { exports_kind = .cjs; } else if (p.esm_export_keyword.len > 0 or p.top_level_await_keyword.len > 0) { exports_kind = .esm; @@ -5522,11 +5522,15 @@ fn NewParser_( "Multiple exports with the same name \"{s}\"", .{std.mem.trim(u8, alias, "\"'")}, ); - } else { + } else if (!p.isDeoptimizedCommonJS()) { try p.named_exports.put(alias, js_ast.NamedExport{ .alias_loc = loc, .ref = ref }); } } + fn isDeoptimizedCommonJS(p: *P) bool { + return p.commonjs_named_exports_deoptimized and p.commonjs_named_exports.count() > 0; + } + pub fn recordUsage(p: *P, ref: Ref) void { if (p.is_revisit_for_substitution) return; // The use count stored in the symbol is used for generating symbol names |