diff options
-rw-r--r-- | src/wasm2asm.h | 11 | ||||
-rw-r--r-- | test/unit.2asm.js | 8 |
2 files changed, 12 insertions, 7 deletions
diff --git a/src/wasm2asm.h b/src/wasm2asm.h index 3fd743dcf..8f4c54de3 100644 --- a/src/wasm2asm.h +++ b/src/wasm2asm.h @@ -448,8 +448,15 @@ Ref Wasm2AsmBuilder::processFunctionBody(Expression* curr, IString result) { size_t size = curr->list.size(); int noResults = result == NO_RESULT ? size : size-1; for (size_t i = 0; i < noResults; i++) { - // TODO: flatten out, if we receive a block, just insert the elements - ret[1]->push_back(ValueBuilder::makeStatement(visit(curr->list[i], NO_RESULT))); + // add to our return block. if we receive a block, can just flatten it out here + Ref ast = ValueBuilder::makeStatement(visit(curr->list[i], NO_RESULT)); + if (ast[0] == BLOCK) { + for (int j = 0; j < ast[1]->size(); j++) { + ret[1]->push_back(ast[1][j]); + } + } else { + ret[1]->push_back(ast); + } } if (result != NO_RESULT) { ret[1]->push_back(ValueBuilder::makeStatement( diff --git a/test/unit.2asm.js b/test/unit.2asm.js index 210462773..ffc03b240 100644 --- a/test/unit.2asm.js +++ b/test/unit.2asm.js @@ -132,11 +132,9 @@ function asmFunc() { function abs() { var x = 0, y = 0.0, z = Math_fround(0), asm2wasm_i32_temp = 0, wasm2asm_i32$3 = 0, wasm2asm_i32$2 = 0, wasm2asm_i32$1 = 0, wasm2asm_i32$0 = 0; { - { - asm2wasm_i32_temp = 0; - wasm2asm_i32$0 = (wasm2asm_i32$1 = (asm2wasm_i32_temp | 0) < (0 | 0), wasm2asm_i32$2 = 0 - asm2wasm_i32_temp | 0, wasm2asm_i32$3 = asm2wasm_i32_temp, wasm2asm_i32$1 ? wasm2asm_i32$2 : wasm2asm_i32$3); - x = wasm2asm_i32$0; - } + asm2wasm_i32_temp = 0; + wasm2asm_i32$0 = (wasm2asm_i32$1 = (asm2wasm_i32_temp | 0) < (0 | 0), wasm2asm_i32$2 = 0 - asm2wasm_i32_temp | 0, wasm2asm_i32$3 = asm2wasm_i32_temp, wasm2asm_i32$1 ? wasm2asm_i32$2 : wasm2asm_i32$3); + x = wasm2asm_i32$0; y = Math_abs(0.0); z = Math_fround(Math_abs(Math_fround(0))); } |