summaryrefslogtreecommitdiff
path: root/src/passes/RemoveImports.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/passes/RemoveImports.cpp')
-rw-r--r--src/passes/RemoveImports.cpp23
1 files changed, 13 insertions, 10 deletions
diff --git a/src/passes/RemoveImports.cpp b/src/passes/RemoveImports.cpp
index 116cd3296..e70cbb3ac 100644
--- a/src/passes/RemoveImports.cpp
+++ b/src/passes/RemoveImports.cpp
@@ -22,14 +22,19 @@
// look at all the rest of the code).
//
-#include <wasm.h>
-#include <pass.h>
+#include "wasm.h"
+#include "pass.h"
+#include "ir/module-utils.h"
namespace wasm {
struct RemoveImports : public WalkerPass<PostWalker<RemoveImports>> {
- void visitCallImport(CallImport *curr) {
- Type type = getModule()->getFunctionType(getModule()->getImport(curr->target)->functionType)->result;
+ void visitCall(Call *curr) {
+ auto* func = getModule()->getFunction(curr->target);
+ if (!func->imported()) {
+ return;
+ }
+ Type type = getModule()->getFunctionType(func->type)->result;
if (type == none) {
replaceCurrent(getModule()->allocator.alloc<Nop>());
} else {
@@ -41,13 +46,11 @@ struct RemoveImports : public WalkerPass<PostWalker<RemoveImports>> {
void visitModule(Module *curr) {
std::vector<Name> names;
- for (auto& import : curr->imports) {
- if (import->kind == ExternalKind::Function) {
- names.push_back(import->name);
- }
- }
+ ModuleUtils::iterImportedFunctions(*curr, [&](Function* func) {
+ names.push_back(func->name);
+ });
for (auto& name : names) {
- curr->removeImport(name);
+ curr->removeFunction(name);
}
}
};