diff options
Diffstat (limited to 'src/type-checker.cc')
-rw-r--r-- | src/type-checker.cc | 17 |
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; } |