summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-22 15:39:06 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-22 15:39:06 -0800
commitf5beae2835377e452c95c5b64a90a75b97b3234e (patch)
tree9c5a35534f31ca8fd6f4b5d262ccaba869d2bb56 /src
parent45a011e1071ba511b3deee134219dd2f9eb6c8aa (diff)
downloadbinaryen-f5beae2835377e452c95c5b64a90a75b97b3234e.tar.gz
binaryen-f5beae2835377e452c95c5b64a90a75b97b3234e.tar.bz2
binaryen-f5beae2835377e452c95c5b64a90a75b97b3234e.zip
emit constants instead of callImport when there is a type necessary
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();
}
};