diff options
Diffstat (limited to 'src/wasm/wasm-emscripten.cpp')
-rw-r--r-- | src/wasm/wasm-emscripten.cpp | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp index 8f0d4f9c8..96263f527 100644 --- a/src/wasm/wasm-emscripten.cpp +++ b/src/wasm/wasm-emscripten.cpp @@ -374,6 +374,7 @@ static AsmConstWalker fixEmAsmConstsAndReturnWalker(Module& wasm, struct EmJsWalker : public PostWalker<EmJsWalker> { Module& wasm; std::vector<Address> segmentOffsets; // segment index => address offset + std::vector<Export> toRemove; std::map<std::string, std::string> codeByName; @@ -387,6 +388,7 @@ struct EmJsWalker : public PostWalker<EmJsWalker> { if (!curr->name.startsWith(EM_JS_PREFIX.str)) { return; } + toRemove.push_back(*curr); auto* func = wasm.getFunction(curr->value); auto funcName = std::string(curr->name.stripPrefix(EM_JS_PREFIX.str)); // An EM_JS has a single const in the body. Typically it is just returned, @@ -407,15 +409,9 @@ EmJsWalker fixEmJsFuncsAndReturnWalker(Module& wasm) { EmJsWalker walker(wasm); walker.walkModule(&wasm); - std::vector<Name> toRemove; - for (auto& func : wasm.functions) { - if (func->name.startsWith(EM_JS_PREFIX.str)) { - toRemove.push_back(func->name); - } - } - for (auto funcName : toRemove) { - wasm.removeFunction(funcName); - wasm.removeExport(funcName); + for (const Export& exp : walker.toRemove) { + wasm.removeExport(exp.name); + wasm.removeFunction(exp.value); } return walker; } |