diff options
author | Daniel Wirtz <dcode@dcode.io> | 2020-09-17 12:58:21 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-17 12:58:21 +0200 |
commit | 2841eddaabc7a5e24517e043a1aab8adc6d5c1e4 (patch) | |
tree | 17f8ed3d71237c4860fc07f7ba9bdc4d9691b76b /src/wasm/wasm-binary.cpp | |
parent | e1d74ef2acdd88f06b9e58f91f30bb56b9a26fe8 (diff) | |
download | binaryen-2841eddaabc7a5e24517e043a1aab8adc6d5c1e4.tar.gz binaryen-2841eddaabc7a5e24517e043a1aab8adc6d5c1e4.tar.bz2 binaryen-2841eddaabc7a5e24517e043a1aab8adc6d5c1e4.zip |
Refactor Host expression to MemorySize and MemoryGrow (#3137)
Aligns the internal representations of `memory.size` and `memory.grow` with other more recent memory instructions by removing the legacy `Host` expression class and adding separate expression classes for `MemorySize` and `MemoryGrow`. Simplifies related APIs, but is also a breaking API change.
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 2910bb383..e958dca6e 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -2452,6 +2452,14 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) { case BinaryConsts::BrOnExn: visitBrOnExn((curr = allocator.alloc<BrOnExn>())->cast<BrOnExn>()); break; + case BinaryConsts::MemorySize: + visitMemorySize( + (curr = allocator.alloc<MemorySize>())->cast<MemorySize>()); + break; + case BinaryConsts::MemoryGrow: + visitMemoryGrow( + (curr = allocator.alloc<MemoryGrow>())->cast<MemoryGrow>()); + break; case BinaryConsts::AtomicPrefix: { code = static_cast<uint8_t>(getU32LEB()); if (maybeVisitLoad(curr, code, /*isAtomic=*/true)) { @@ -2551,9 +2559,6 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) { if (maybeVisitStore(curr, code, /*isAtomic=*/false)) { break; } - if (maybeVisitHost(curr, code)) { - break; - } throwError("bad node code " + std::to_string(code)); break; } @@ -4763,32 +4768,23 @@ void WasmBinaryBuilder::visitReturn(Return* curr) { curr->finalize(); } -bool WasmBinaryBuilder::maybeVisitHost(Expression*& out, uint8_t code) { - Host* curr; - switch (code) { - case BinaryConsts::MemorySize: { - curr = allocator.alloc<Host>(); - curr->op = MemorySize; - break; - } - case BinaryConsts::MemoryGrow: { - curr = allocator.alloc<Host>(); - curr->op = MemoryGrow; - curr->operands.resize(1); - curr->operands[0] = popNonVoidExpression(); - break; - } - default: - return false; +void WasmBinaryBuilder::visitMemorySize(MemorySize* curr) { + BYN_TRACE("zz node: MemorySize\n"); + auto reserved = getU32LEB(); + if (reserved != 0) { + throwError("Invalid reserved field on memory.size"); } - BYN_TRACE("zz node: Host\n"); + curr->finalize(); +} + +void WasmBinaryBuilder::visitMemoryGrow(MemoryGrow* curr) { + BYN_TRACE("zz node: MemoryGrow\n"); + curr->delta = popNonVoidExpression(); auto reserved = getU32LEB(); if (reserved != 0) { - throwError("Invalid reserved field on memory.grow/memory.size"); + throwError("Invalid reserved field on memory.grow"); } curr->finalize(); - out = curr; - return true; } void WasmBinaryBuilder::visitNop(Nop* curr) { BYN_TRACE("zz node: Nop\n"); } |