diff options
author | Alon Zakai <alonzakai@gmail.com> | 2016-04-21 18:37:48 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2016-04-21 18:37:48 -0700 |
commit | c24d8add1582e6c9caa6c8951d7bcc5c3d64b8c9 (patch) | |
tree | 78cebc955305d182727f2e98e7dd29eba8d0e290 /src | |
parent | cae6b923c96655c1b81cbe821e9b838e87ae7313 (diff) | |
download | binaryen-c24d8add1582e6c9caa6c8951d7bcc5c3d64b8c9.tar.gz binaryen-c24d8add1582e6c9caa6c8951d7bcc5c3d64b8c9.tar.bz2 binaryen-c24d8add1582e6c9caa6c8951d7bcc5c3d64b8c9.zip |
function toplevels is a list
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-binary.h | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 3c2833069..01ccfdd3c 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -1456,9 +1456,7 @@ public: assert(breakStack.empty()); assert(expressionStack.empty()); depth = 0; - processExpressions(); - assert(expressionStack.size() == 1); - func->body = popExpression(); + func->body = getMaybeBlock(); assert(depth == 0); assert(breakStack.empty()); assert(expressionStack.empty()); @@ -1682,7 +1680,9 @@ public: auto start = expressionStack.size(); processExpressions(); size_t end = expressionStack.size(); - // TODO: optimize case of 1 expression and 0 breaks in this scope + if (start - end == 1) { + return popExpression(); + } auto* block = allocator.alloc<Block>(); for (size_t i = start; i < end; i++) { block->list.push_back(expressionStack[i]); @@ -1695,9 +1695,9 @@ public: Expression* getBlock() { Name label = getNextLabel(); breakStack.push_back(label); - auto* block = getMaybeBlock()->cast<Block>(); // TODO: when getMaybeBlock is optimized, blockify only when needed + auto* block = Builder(wasm).blockify(getMaybeBlock()); breakStack.pop_back(); - block->name = label; + block->cast<Block>()->name = label; return block; } |