summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcheck.py4
-rw-r--r--src/passes/RemoveImports.cpp17
-rw-r--r--test/passes/lower-if-else.txt2
-rw-r--r--test/passes/remove-imports.txt16
-rw-r--r--test/passes/remove-imports.wast6
5 files changed, 32 insertions, 13 deletions
diff --git a/check.py b/check.py
index ef7a7fed4..77733a901 100755
--- a/check.py
+++ b/check.py
@@ -89,7 +89,9 @@ for t in sorted(os.listdir(os.path.join('test', 'passes'))):
if t.endswith('.wast'):
print '..', t
passname = os.path.basename(t).replace('.wast', '')
- actual, err = subprocess.Popen([os.path.join('bin', 'binaryen-shell'), '-print-before', '-print-after', '-' + passname, os.path.join('test', 'passes', t)], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
+ cmd = [os.path.join('bin', 'binaryen-shell'), '-print-before', '-print-after', '-' + passname, os.path.join('test', 'passes', t)]
+ print ' ', ' '.join(cmd)
+ actual, err = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
fail_if_not_identical(actual, open(os.path.join('test', 'passes', passname + '.txt')).read())
print '\n[ checking binaryen-shell testcases... ]\n'
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();
}
};
diff --git a/test/passes/lower-if-else.txt b/test/passes/lower-if-else.txt
index 2245f7230..27f2603df 100644
--- a/test/passes/lower-if-else.txt
+++ b/test/passes/lower-if-else.txt
@@ -1,4 +1,3 @@
-printing before:
(module
(memory 16777216 16777216)
(func $ifs
@@ -20,7 +19,6 @@ printing before:
)
)
)
-printing after:
(module
(memory 16777216 16777216)
(func $ifs
diff --git a/test/passes/remove-imports.txt b/test/passes/remove-imports.txt
index 07e47df5b..f28068a27 100644
--- a/test/passes/remove-imports.txt
+++ b/test/passes/remove-imports.txt
@@ -1,15 +1,23 @@
-printing before:
(module
(memory 1024 1024)
(import $waka "somewhere" "waka")
+ (import $waka-ret "somewhere" "waka-ret" (result i32))
+ (import $waka-ret-d "somewhere" "waka-ret-d" (result f64))
(func $nada
- (call_import $f64-to-int)
+ (block
+ (call_import $waka)
+ (call_import $waka-ret)
+ (call_import $waka-ret-d)
+ )
)
)
-printing after:
(module
(memory 1024 1024)
(func $nada
- (nop)
+ (block
+ (nop)
+ (i32.const 0)
+ (f64.const 0)
+ )
)
)
diff --git a/test/passes/remove-imports.wast b/test/passes/remove-imports.wast
index c6b79e9bf..00190a32d 100644
--- a/test/passes/remove-imports.wast
+++ b/test/passes/remove-imports.wast
@@ -1,7 +1,11 @@
(module
(memory 1024 1024)
(import $waka "somewhere" "waka")
+ (import $waka-ret "somewhere" "waka-ret" (result i32))
+ (import $waka-ret-d "somewhere" "waka-ret-d" (result f64))
(func $nada
- (call_import $f64-to-int)
+ (call_import $waka)
+ (call_import $waka-ret)
+ (call_import $waka-ret-d)
)
)