diff options
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index f1c6eeb7c..d15ac493f 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -679,6 +679,8 @@ void WasmBinaryWriter::writeFeaturesSection() { return BinaryConsts::UserSections::SignExtFeature; case FeatureSet::ExceptionHandling: return BinaryConsts::UserSections::ExceptionHandlingFeature; + case FeatureSet::TailCall: + return BinaryConsts::UserSections::TailCallFeature; default: WASM_UNREACHABLE(); } @@ -2162,6 +2164,8 @@ void WasmBinaryBuilder::readFeatures(size_t payloadLen) { wasm.features.setSignExt(); } else if (name == BinaryConsts::UserSections::SIMD128Feature) { wasm.features.setSIMD(); + } else if (name == BinaryConsts::UserSections::TailCallFeature) { + wasm.features.setTailCall(); } } } @@ -2210,6 +2214,20 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) { visitCallIndirect( (curr = allocator.alloc<CallIndirect>())->cast<CallIndirect>()); break; + case BinaryConsts::RetCallFunction: { + auto call = allocator.alloc<Call>(); + call->isReturn = true; + curr = call; + visitCall(call); + break; + } + case BinaryConsts::RetCallIndirect: { + auto call = allocator.alloc<CallIndirect>(); + call->isReturn = true; + curr = call; + visitCallIndirect(call); + break; + } case BinaryConsts::LocalGet: visitLocalGet((curr = allocator.alloc<LocalGet>())->cast<LocalGet>()); break; |