summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/passes/RemoveImports.cpp36
-rw-r--r--test/passes/remove-imports.txt15
-rw-r--r--test/passes/remove-imports.wast7
3 files changed, 58 insertions, 0 deletions
diff --git a/src/passes/RemoveImports.cpp b/src/passes/RemoveImports.cpp
new file mode 100644
index 000000000..07465f9d6
--- /dev/null
+++ b/src/passes/RemoveImports.cpp
@@ -0,0 +1,36 @@
+//
+// Removeds imports, and replaces them with nops. This is useful
+// for running a module through the reference interpreter, which
+// does not validate imports for a JS environment (by removing
+// imports, we can at least get the reference interpreter to
+// look at all the rest of the code).
+//
+
+#include <wasm.h>
+#include <pass.h>
+
+namespace wasm {
+
+struct RemoveImports : public Pass {
+ MixedArena* allocator;
+
+ void prepare(PassRunner* runner, Module *module) override {
+ allocator = runner->allocator;
+ }
+
+ void visitCallImport(CallImport *curr) override {
+ replaceCurrent(allocator->alloc<Nop>());
+ }
+
+ void visitModule(Module *curr) {
+ auto imports = curr->imports;
+ for (auto import : imports) {
+ curr->removeImport(import->name);
+ }
+ }
+};
+
+static RegisterPass<RemoveImports> registerPass("remove-imports", "removes imports and replaces them with nops");
+
+} // namespace wasm
+
diff --git a/test/passes/remove-imports.txt b/test/passes/remove-imports.txt
new file mode 100644
index 000000000..07e47df5b
--- /dev/null
+++ b/test/passes/remove-imports.txt
@@ -0,0 +1,15 @@
+printing before:
+(module
+ (memory 1024 1024)
+ (import $waka "somewhere" "waka")
+ (func $nada
+ (call_import $f64-to-int)
+ )
+)
+printing after:
+(module
+ (memory 1024 1024)
+ (func $nada
+ (nop)
+ )
+)
diff --git a/test/passes/remove-imports.wast b/test/passes/remove-imports.wast
new file mode 100644
index 000000000..c6b79e9bf
--- /dev/null
+++ b/test/passes/remove-imports.wast
@@ -0,0 +1,7 @@
+(module
+ (memory 1024 1024)
+ (import $waka "somewhere" "waka")
+ (func $nada
+ (call_import $f64-to-int)
+ )
+)