From c24d8add1582e6c9caa6c8951d7bcc5c3d64b8c9 Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 21 Apr 2016 18:37:48 -0700 Subject: function toplevels is a list --- src/wasm-binary.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/wasm-binary.h') 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(); 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(); // TODO: when getMaybeBlock is optimized, blockify only when needed + auto* block = Builder(wasm).blockify(getMaybeBlock()); breakStack.pop_back(); - block->name = label; + block->cast()->name = label; return block; } -- cgit v1.2.3