summaryrefslogtreecommitdiff
path: root/src/type-checker.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/type-checker.cc')
-rw-r--r--src/type-checker.cc17
1 files changed, 15 insertions, 2 deletions
diff --git a/src/type-checker.cc b/src/type-checker.cc
index b823ce81..5526640a 100644
--- a/src/type-checker.cc
+++ b/src/type-checker.cc
@@ -670,8 +670,21 @@ Result TypeChecker::OnRefNullExpr(Type type) {
return Result::Ok;
}
-Result TypeChecker::OnRefIsNullExpr(Type type) {
- Result result = PopAndCheck1Type(type, "ref.is_null");
+Result TypeChecker::OnRefIsNullExpr() {
+ Type type;
+ Result result = PeekType(0, &type);
+ if (!type.IsRef()) {
+ TypeVector actual;
+ if (Succeeded(result)) {
+ actual.push_back(type);
+ }
+ std::string message =
+ "type mismatch in ref.is_null, expected reference but got " +
+ TypesToString(actual);
+ PrintError("%s", message.c_str());
+ result = Result::Error;
+ }
+ result |= DropTypes(1);
PushType(Type::I32);
return result;
}