diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-20 20:47:48 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-20 20:47:48 -0800 |
commit | 1f84970eab7c99122e50d475c4328ef1e76b7d53 (patch) | |
tree | 52e8a548e65a18bfe533a39a6785428a73fb0f31 /src/asm2wasm.h | |
parent | 02d9f159c96f46730c6a2f472521b11ec537a26c (diff) | |
download | binaryen-1f84970eab7c99122e50d475c4328ef1e76b7d53.tar.gz binaryen-1f84970eab7c99122e50d475c4328ef1e76b7d53.tar.bz2 binaryen-1f84970eab7c99122e50d475c4328ef1e76b7d53.zip |
handle labels on blocks in asm2wasm
Diffstat (limited to 'src/asm2wasm.h')
-rw-r--r-- | src/asm2wasm.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/asm2wasm.h b/src/asm2wasm.h index 014658eb5..5f18a5811 100644 --- a/src/asm2wasm.h +++ b/src/asm2wasm.h @@ -1150,7 +1150,24 @@ Function* Asm2WasmBuilder::processFunction(Ref ast) { ret->value = !!ast[1] ? process(ast[1]) : nullptr; return ret; } else if (what == BLOCK) { - return processStatements(ast[1], 0); + Name name; + if (parentLabel.is()) { + name = getBreakLabelName(parentLabel); + parentLabel = IString(); + } + auto ret = processStatements(ast[1], 0); + if (name.is()) { + Block* block = ret->dyn_cast<Block>(); + if (block && block->name.isNull()) { + block->name = name; + } else { + block = allocator.alloc<Block>(); + block->name = name; + block->list.push_back(ret); + ret = block; + } + } + return ret; } else if (what == BREAK) { auto ret = allocator.alloc<Break>(); assert(breakStack.size() > 0); |