summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wasm/wasm-emscripten.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/wasm/wasm-emscripten.cpp b/src/wasm/wasm-emscripten.cpp
index c70069e76..580510ecb 100644
--- a/src/wasm/wasm-emscripten.cpp
+++ b/src/wasm/wasm-emscripten.cpp
@@ -724,6 +724,12 @@ std::string EmscriptenGlueGenerator::generateEmscriptenMetadata(
meta << "]";
}
+ // Avoid adding duplicate imports to `declares' or `invokeFuncs`. Even
+ // though we might import the same function multiple times (i.e. with
+ // different sigs) we only need to list is in the metadata once.
+ std::set<std::string> declares;
+ std::set<std::string> invokeFuncs;
+
// We use the `base` rather than the `name` of the imports here and below
// becasue this is the externally visible name that the embedder (JS) will
// see.
@@ -735,7 +741,8 @@ std::string EmscriptenGlueGenerator::generateEmscriptenMetadata(
!import->base.startsWith(EMSCRIPTEN_ASM_CONST.str) &&
!import->base.startsWith("invoke_") &&
!import->base.startsWith("jsCall_")) {
- meta << maybeComma() << '"' << import->base.str << '"';
+ if (declares.insert(import->base.str).second)
+ meta << maybeComma() << '"' << import->base.str << '"';
}
}
meta << "]";
@@ -769,7 +776,8 @@ std::string EmscriptenGlueGenerator::generateEmscriptenMetadata(
commaFirst = true;
for (const auto& import : wasm.imports) {
if (import->base.startsWith("invoke_")) {
- meta << maybeComma() << '"' << import->base.str << '"';
+ if (invokeFuncs.insert(import->base.str).second)
+ meta << maybeComma() << '"' << import->base.str << '"';
}
}
meta << "]";