diff options
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index 06c6f3648..6f41c3c87 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -4046,6 +4046,12 @@ BinaryConsts::ASTNodes WasmBinaryReader::readExpression(Expression*& curr) { visitCallRef(call); break; } + case BinaryConsts::ContNew: { + auto contNew = allocator.alloc<ContNew>(); + curr = contNew; + visitContNew(contNew); + break; + } case BinaryConsts::Resume: { visitResume((curr = allocator.alloc<Resume>())->cast<Resume>()); break; @@ -7762,6 +7768,20 @@ void WasmBinaryReader::visitRefAs(RefAs* curr, uint8_t code) { curr->finalize(); } +void WasmBinaryReader::visitContNew(ContNew* curr) { + BYN_TRACE("zz node: ContNew\n"); + + auto contTypeIndex = getU32LEB(); + curr->contType = getTypeByIndex(contTypeIndex); + if (!curr->contType.isContinuation()) { + throwError("non-continuation type in cont.new instruction " + + curr->contType.toString()); + } + + curr->func = popNonVoidExpression(); + curr->finalize(); +} + void WasmBinaryReader::visitResume(Resume* curr) { BYN_TRACE("zz node: Resume\n"); |