summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
authorDaniel Wirtz <dcode@dcode.io>2020-09-17 12:58:21 +0200
committerGitHub <noreply@github.com>2020-09-17 12:58:21 +0200
commit2841eddaabc7a5e24517e043a1aab8adc6d5c1e4 (patch)
tree17f8ed3d71237c4860fc07f7ba9bdc4d9691b76b /src/wasm/wasm-binary.cpp
parente1d74ef2acdd88f06b9e58f91f30bb56b9a26fe8 (diff)
downloadbinaryen-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.cpp44
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"); }