summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-binary.cpp
diff options
context:
space:
mode:
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"); }