summaryrefslogtreecommitdiff
path: root/src/wasm-builder.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/wasm-builder.h')
-rw-r--r--src/wasm-builder.h17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/wasm-builder.h b/src/wasm-builder.h
index 4e94da090..1ce3a507c 100644
--- a/src/wasm-builder.h
+++ b/src/wasm-builder.h
@@ -528,9 +528,9 @@ public:
ret->finalize();
return ret;
}
- RefNull* makeRefNull() {
+ RefNull* makeRefNull(Type type) {
auto* ret = allocator.alloc<RefNull>();
- ret->finalize();
+ ret->finalize(type);
return ret;
}
RefIsNull* makeRefIsNull(Expression* value) {
@@ -624,13 +624,15 @@ public:
Expression* makeConstantExpression(Literal value) {
TODO_SINGLE_COMPOUND(value.type);
switch (value.type.getBasic()) {
- case Type::nullref:
- return makeRefNull();
case Type::funcref:
- if (value.getFunc()[0] != 0) {
+ if (!value.isNull()) {
return makeRefFunc(value.getFunc());
}
- return makeRefNull();
+ return makeRefNull(value.type);
+ case Type::externref:
+ case Type::exnref: // TODO: ExceptionPackage?
+ assert(value.isNull());
+ return makeRefNull(value.type);
default:
assert(value.type.isNumber());
return makeConst(value);
@@ -822,9 +824,8 @@ public:
}
case Type::funcref:
case Type::externref:
- case Type::nullref:
case Type::exnref:
- return ExpressionManipulator::refNull(curr);
+ return ExpressionManipulator::refNull(curr, curr->type);
case Type::none:
return ExpressionManipulator::nop(curr);
case Type::unreachable: