diff options
Diffstat (limited to 'src/wasm/wasm-binary.cpp')
-rw-r--r-- | src/wasm/wasm-binary.cpp | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/src/wasm/wasm-binary.cpp b/src/wasm/wasm-binary.cpp index e2bb0075b..782979520 100644 --- a/src/wasm/wasm-binary.cpp +++ b/src/wasm/wasm-binary.cpp @@ -3846,15 +3846,12 @@ BinaryConsts::ASTNodes WasmBinaryBuilder::readExpression(Expression*& curr) { visitMemoryGrow(grow); break; } - case BinaryConsts::CallRefUnannotated: - visitCallRef((curr = allocator.alloc<CallRef>())->cast<CallRef>()); - break; case BinaryConsts::CallRef: case BinaryConsts::RetCallRef: { auto call = allocator.alloc<CallRef>(); call->isReturn = code == BinaryConsts::RetCallRef; curr = call; - visitCallRef(call, getTypeByIndex(getU32LEB())); + visitCallRef(call); break; } case BinaryConsts::AtomicPrefix: { @@ -6851,29 +6848,13 @@ void WasmBinaryBuilder::visitRethrow(Rethrow* curr) { curr->finalize(); } -void WasmBinaryBuilder::visitCallRef(CallRef* curr, - std::optional<HeapType> maybeType) { +void WasmBinaryBuilder::visitCallRef(CallRef* curr) { BYN_TRACE("zz node: CallRef\n"); curr->target = popNonVoidExpression(); - HeapType heapType; - if (maybeType) { - heapType = *maybeType; - if (!Type::isSubType(curr->target->type, Type(heapType, Nullable))) { - throwError("Call target has invalid type: " + - curr->target->type.toString()); - } - } else { - auto type = curr->target->type; - if (type == Type::unreachable) { - // If our input is unreachable, then we cannot even find out how many - // inputs we have, and just set ourselves to unreachable as well. - curr->finalize(type); - return; - } - if (!type.isRef()) { - throwError("Non-ref type for a call_ref: " + type.toString()); - } - heapType = type.getHeapType(); + HeapType heapType = getTypeByIndex(getU32LEB()); + if (!Type::isSubType(curr->target->type, Type(heapType, Nullable))) { + throwError("Call target has invalid type: " + + curr->target->type.toString()); } if (!heapType.isSignature()) { throwError("Invalid reference type for a call_ref: " + heapType.toString()); |