summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/passes/RemoveImports.cpp17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/passes/RemoveImports.cpp b/src/passes/RemoveImports.cpp
index 07465f9d6..06865a8f9 100644
--- a/src/passes/RemoveImports.cpp
+++ b/src/passes/RemoveImports.cpp
@@ -13,20 +13,27 @@ namespace wasm {
struct RemoveImports : public Pass {
MixedArena* allocator;
+ std::map<Name, Import*> importsMap;
void prepare(PassRunner* runner, Module *module) override {
allocator = runner->allocator;
+ importsMap = module->importsMap;
}
void visitCallImport(CallImport *curr) override {
- replaceCurrent(allocator->alloc<Nop>());
+ WasmType type = importsMap[curr->target]->type.result;
+ if (type == none) {
+ replaceCurrent(allocator->alloc<Nop>());
+ } else {
+ Literal nopLiteral;
+ nopLiteral.type = type;
+ replaceCurrent(allocator->alloc<Const>()->set(nopLiteral));
+ }
}
void visitModule(Module *curr) {
- auto imports = curr->imports;
- for (auto import : imports) {
- curr->removeImport(import->name);
- }
+ curr->importsMap.clear();
+ curr->imports.clear();
}
};