summaryrefslogtreecommitdiff
path: root/src/wasm/wasm-stack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm/wasm-stack.cpp')
-rw-r--r--src/wasm/wasm-stack.cpp19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/wasm/wasm-stack.cpp b/src/wasm/wasm-stack.cpp
index ee457da69..7a4dd3983 100644
--- a/src/wasm/wasm-stack.cpp
+++ b/src/wasm/wasm-stack.cpp
@@ -2045,22 +2045,25 @@ void BinaryInstWriter::visitBrOn(BrOn* curr) {
o << U32LEB(getBreakIndex(curr->name));
return;
case BrOnCast:
- case BrOnCastFail: {
o << int8_t(BinaryConsts::GCPrefix);
- if (curr->op == BrOnCast) {
+ if (curr->castType.isNullable()) {
+ o << U32LEB(BinaryConsts::BrOnCastNull);
+ } else {
o << U32LEB(BinaryConsts::BrOnCast);
+ }
+ o << U32LEB(getBreakIndex(curr->name));
+ parent.writeHeapType(curr->castType.getHeapType());
+ return;
+ case BrOnCastFail:
+ o << int8_t(BinaryConsts::GCPrefix);
+ if (curr->castType.isNullable()) {
+ o << U32LEB(BinaryConsts::BrOnCastFailNull);
} else {
o << U32LEB(BinaryConsts::BrOnCastFail);
}
- assert(curr->ref->type.isRef());
- uint8_t flags = (curr->ref->type.isNullable() ? 1 : 0) |
- (curr->castType.isNullable() ? 2 : 0);
- o << flags;
o << U32LEB(getBreakIndex(curr->name));
- parent.writeHeapType(curr->ref->type.getHeapType());
parent.writeHeapType(curr->castType.getHeapType());
return;
- }
}
WASM_UNREACHABLE("invalid br_on_*");
}