diff options
Diffstat (limited to 'src/wasm-builder.h')
-rw-r--r-- | src/wasm-builder.h | 17 |
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: |