From a655ad26e5a625fdea7db9b203fca404845af416 Mon Sep 17 00:00:00 2001 From: pfg Date: Fri, 13 Dec 2024 19:48:08 -0800 Subject: [PATCH] RELEASE_AND_RETURN & fix indirect checking --- src/analyze_transpiled_module.zig | 10 ++++++---- src/bun.js/bindings/BunAnalyzeTranspiledModule.cpp | 5 ++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/analyze_transpiled_module.zig b/src/analyze_transpiled_module.zig index faf544d853..5de82aafdb 100644 --- a/src/analyze_transpiled_module.zig +++ b/src/analyze_transpiled_module.zig @@ -77,16 +77,18 @@ pub const ModuleInfo = struct { /// find any exports marked as 'local' that are actually 'indirect' and fix them pub fn fixupIndirectExports(self: *ModuleInfo) !void { - var local_name_to_module_name = std.AutoArrayHashMap(StringID, StringID).init(self.strings.allocator); + var local_name_to_module_name = std.AutoArrayHashMap(StringID, *ImportInfo).init(self.strings.allocator); defer local_name_to_module_name.deinit(); for (self.imports.items) |*ip| { - try local_name_to_module_name.put(ip.local_name, ip.module_name); + try local_name_to_module_name.put(ip.local_name, ip); } for (self.exports.items) |*xp| { if (xp.* == .local) { - if (local_name_to_module_name.get(xp.local.local_name)) |im| { - xp.* = .{ .indirect = .{ .export_name = xp.local.export_name, .import_name = xp.local.local_name, .module_name = im } }; + if (local_name_to_module_name.get(xp.local.local_name)) |ip| { + if (ip.kind == .single) { + xp.* = .{ .indirect = .{ .export_name = xp.local.export_name, .import_name = ip.import_name, .module_name = ip.module_name } }; + } } } } diff --git a/src/bun.js/bindings/BunAnalyzeTranspiledModule.cpp b/src/bun.js/bindings/BunAnalyzeTranspiledModule.cpp index ba8085eb93..e28229db2f 100644 --- a/src/bun.js/bindings/BunAnalyzeTranspiledModule.cpp +++ b/src/bun.js/bindings/BunAnalyzeTranspiledModule.cpp @@ -218,12 +218,11 @@ extern "C" EncodedJSValue Bun__analyzeTranspiledModule(JSGlobalObject* globalObj dumpRecordInfo(moduleRecord); zig_log_cstr("\n \x1b[91m\x1b(B\x1b[m", ""); - scope.release(); if (compare) { - return fallbackParse(globalObject, moduleKey, sourceCode, promise, moduleRecord); + RELEASE_AND_RETURN(scope, fallbackParse(globalObject, moduleKey, sourceCode, promise, moduleRecord)); } else { promise->fulfillWithNonPromise(globalObject, moduleRecord); - return JSValue::encode(promise); + RELEASE_AND_RETURN(scope, JSValue::encode(promise)); } } static EncodedJSValue fallbackParse(JSGlobalObject* globalObject, const Identifier& moduleKey, const SourceCode& sourceCode, JSInternalPromise* promise, JSModuleRecord* resultValue)