summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm2asm.h11
-rw-r--r--test/unit.2asm.js8
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)));
}