From f78f4854a4e474a08023841f4714f0cd3774126b Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 23 Sep 2021 21:45:15 -0700 Subject: Handle more edgecases in our CJS2ESM conversion code --- src/js_parser/js_parser.zig | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/js_parser/js_parser.zig') diff --git a/src/js_parser/js_parser.zig b/src/js_parser/js_parser.zig index b548416cc..1de8c4656 100644 --- a/src/js_parser/js_parser.zig +++ b/src/js_parser/js_parser.zig @@ -12453,6 +12453,7 @@ pub fn NewParser( switch (s2.data) { .s_function => |func| { var name: string = ""; + const had_name = func.func.name != null; if (func.func.name) |func_loc| { name = p.loadNameFromRef(func_loc.ref.?); } else { @@ -12465,7 +12466,15 @@ pub fn NewParser( if (p.options.enable_bundling) { var export_default_args = p.allocator.alloc(Expr, 2) catch unreachable; export_default_args[0] = p.e(E.Identifier{ .ref = p.exports_ref }, s2.loc); - export_default_args[1] = p.e(E.Function{ .func = func.func }, s2.loc); + + if (had_name) { + export_default_args[1] = p.e(E.Identifier{ .ref = func.func.name.?.ref.? }, s2.loc); + stmts.ensureUnusedCapacity(2) catch unreachable; + + stmts.appendAssumeCapacity(s2); + } else { + export_default_args[1] = p.e(E.Function{ .func = func.func }, s2.loc); + } stmts.append(p.s(S.SExpr{ .value = p.callRuntime(s2.loc, "__exportDefault", export_default_args) }, s2.loc)) catch unreachable; return; @@ -12481,10 +12490,26 @@ pub fn NewParser( }, .s_class => |class| { var shadow_ref = p.visitClass(s2.loc, &class.class); + if (p.options.enable_bundling) { var export_default_args = p.allocator.alloc(Expr, 2) catch unreachable; export_default_args[0] = p.e(E.Identifier{ .ref = p.exports_ref }, s2.loc); - export_default_args[1] = p.e(class.class, s2.loc); + + const class_name_ref = brk: { + if (class.class.class_name) |class_name_ref| { + if (class_name_ref.ref) |ref| { + break :brk ref; + } + } + break :brk null; + }; + if (class_name_ref) |ref| { + stmts.ensureUnusedCapacity(2) catch unreachable; + stmts.appendAssumeCapacity(s2); + export_default_args[1] = p.e(E.Identifier{ .ref = ref }, s2.loc); + } else { + export_default_args[1] = p.e(class.class, s2.loc); + } stmts.append(p.s(S.SExpr{ .value = p.callRuntime(s2.loc, "__exportDefault", export_default_args) }, s2.loc)) catch unreachable; return; -- cgit v1.2.3