summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-10-29 17:19:55 -0700
committerAlon Zakai <alonzakai@gmail.com>2015-10-29 17:19:55 -0700
commit4d319b84d83ad3168ee798c52071e4b4b831e042 (patch)
tree992a4d5724d142353b3bf6f13806fb953ff4c511
parent19abe35b2c6d191e14170c993e757cee786867cb (diff)
downloadbinaryen-4d319b84d83ad3168ee798c52071e4b4b831e042.tar.gz
binaryen-4d319b84d83ad3168ee798c52071e4b4b831e042.tar.bz2
binaryen-4d319b84d83ad3168ee798c52071e4b4b831e042.zip
use Nop
-rw-r--r--src/asm2wasm.cpp9
-rw-r--r--src/wasm.h2
-rw-r--r--test/emcc_hello_world.wast12
3 files changed, 11 insertions, 12 deletions
diff --git a/src/asm2wasm.cpp b/src/asm2wasm.cpp
index e3fb23c4f..28ff7d563 100644
--- a/src/asm2wasm.cpp
+++ b/src/asm2wasm.cpp
@@ -77,6 +77,7 @@ struct WasmWalker {
virtual Expression* walkCompare(Compare *curr) { return curr; };
virtual Expression* walkConvert(Convert *curr) { return curr; };
virtual Expression* walkHost(Host *curr) { return curr; };
+ virtual Expression* walkNop(Nop *curr) { return curr; };
// children-first
Expression *walk(Expression *curr) {
@@ -181,6 +182,10 @@ struct WasmWalker {
}
return walkHost(cast);
}
+ if (Nop *cast = dynamic_cast<Nop*>(curr)) {
+ return walkNop(cast);
+ }
+ abort();
}
void startWalk(Function *func) {
@@ -1040,9 +1045,7 @@ Function* Asm2WasmModule::processFunction(Ref ast) {
return ret;
} else if (what == SWITCH) {
// XXX switch is still in flux in the spec repo, just emit a placeholder
- auto ret = allocator.alloc<Block>();
- ret->var = IString("SWITCH_PLACEHOLDER");
- return ret;
+ return allocator.alloc<Nop>();
#if 0
IString name = getNextId("switch");
breakStack.push_back(name);
diff --git a/src/wasm.h b/src/wasm.h
index ff273e5c0..6aa568210 100644
--- a/src/wasm.h
+++ b/src/wasm.h
@@ -251,7 +251,7 @@ typedef std::vector<Expression*> ExpressionList; // TODO: optimize
class Nop : public Expression {
std::ostream& print(std::ostream &o, unsigned indent) override {
- o << "nop";
+ printMinorOpening(o, "nop") << ')';
return o;
}
};
diff --git a/test/emcc_hello_world.wast b/test/emcc_hello_world.wast
index c965c94f0..410a3b2b5 100644
--- a/test/emcc_hello_world.wast
+++ b/test/emcc_hello_world.wast
@@ -424,8 +424,7 @@
(i32.const 2047)
)
)
- (block $SWITCH_PLACEHOLDER
- )
+ (nop)
(break $topmost
(convert sint32toDouble
(get_local $$retval$0)
@@ -6049,8 +6048,7 @@
)
(loop $label$break$L9 $label$continue$L9
(block
- (block $SWITCH_PLACEHOLDER
- )
+ (nop)
(set_local $$incdec$ptr
(i32.add
(get_local $$incdec$ptr169274)
@@ -7911,8 +7909,7 @@
)
)
(block $label$break$L75
- (block $SWITCH_PLACEHOLDER
- )
+ (nop)
)
(block $label$break$L308
(if
@@ -9442,8 +9439,7 @@
(i32.const 0)
)
(block $do-once$0
- (block $SWITCH_PLACEHOLDER
- )
+ (nop)
)
)
)