diff options
Diffstat (limited to 'src/ir/module-splitting.cpp')
-rw-r--r-- | src/ir/module-splitting.cpp | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/src/ir/module-splitting.cpp b/src/ir/module-splitting.cpp index d6dca8994..9c5c66641 100644 --- a/src/ir/module-splitting.cpp +++ b/src/ir/module-splitting.cpp @@ -272,6 +272,9 @@ struct ModuleSplitter { // names. std::map<Name, Name> exportedPrimaryFuncs; + // Map placeholder indices to the names of the functions they replace. + std::map<size_t, Name> placeholderMap; + // Initialization helpers static std::unique_ptr<Module> initSecondary(const Module& primary); static std::pair<std::set<Name>, std::set<Name>> @@ -483,6 +486,7 @@ void ModuleSplitter::setupTablePatching() { // `importNamespace`.`index`. forEachElement(primary, [&](Name, Name, Index index, Name& elem) { if (secondaryFuncs.count(elem)) { + placeholderMap[index] = elem; auto* secondaryFunc = secondary.getFunction(elem); replacedElems[index] = secondaryFunc; auto placeholder = std::make_unique<Function>(); @@ -655,8 +659,9 @@ void ModuleSplitter::shareImportableItems() { } // anonymous namespace -std::unique_ptr<Module> splitFunctions(Module& primary, const Config& config) { - return std::move(ModuleSplitter(primary, config).secondaryPtr); +Results splitFunctions(Module& primary, const Config& config) { + ModuleSplitter split(primary, config); + return {std::move(split.secondaryPtr), std::move(split.placeholderMap)}; } } // namespace ModuleSplitting |