diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-10-29 17:19:55 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-10-29 17:19:55 -0700 |
commit | 4d319b84d83ad3168ee798c52071e4b4b831e042 (patch) | |
tree | 992a4d5724d142353b3bf6f13806fb953ff4c511 | |
parent | 19abe35b2c6d191e14170c993e757cee786867cb (diff) | |
download | binaryen-4d319b84d83ad3168ee798c52071e4b4b831e042.tar.gz binaryen-4d319b84d83ad3168ee798c52071e4b4b831e042.tar.bz2 binaryen-4d319b84d83ad3168ee798c52071e4b4b831e042.zip |
use Nop
-rw-r--r-- | src/asm2wasm.cpp | 9 | ||||
-rw-r--r-- | src/wasm.h | 2 | ||||
-rw-r--r-- | test/emcc_hello_world.wast | 12 |
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) ) ) ) |