diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 022dd04bc4f..3f9427ed7dd 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -620,13 +620,13 @@ class ModuleInstance { } Flow visitSelect(Select *curr) { NOTE_ENTER("Select"); - Flow condition = visit(curr->condition); - if (condition.breaking()) return condition; - NOTE_EVAL1(condition.value); Flow ifTrue = visit(curr->ifTrue); if (ifTrue.breaking()) return ifTrue; Flow ifFalse = visit(curr->ifFalse); if (ifFalse.breaking()) return ifFalse; + Flow condition = visit(curr->condition); + if (condition.breaking()) return condition; + NOTE_EVAL1(condition.value); return condition.value.geti32() ? ifTrue : ifFalse; // ;-) } Flow visitReturn(Return *curr) { diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 1c704ac7425..9736a1bb257 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -229,7 +229,7 @@ class SExpressionWasmBuilder { public: // Assumes control of and modifies the input. - SExpressionWasmBuilder(AllocatingModule& wasm, Element& module, std::function onError, bool debug=false) : wasm(wasm), allocator(wasm.allocator), onError(onError), debug(debug) { + SExpressionWasmBuilder(AllocatingModule& wasm, Element& module, std::function onError, bool debug=false) : wasm(wasm), allocator(wasm.allocator), onError(onError), importCounter(0), debug(debug) { assert(module[0]->str() == MODULE); functionCounter = 0; for (unsigned i = 1; i < module.size(); i++) { @@ -630,9 +630,9 @@ class SExpressionWasmBuilder { Expression* makeSelect(Element& s, WasmType type) { auto ret = allocator.alloc