diff options
Diffstat (limited to 'src/type-checker.cc')
-rw-r--r-- | src/type-checker.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/type-checker.cc b/src/type-checker.cc index 3b90bdc3..e5c56e9c 100644 --- a/src/type-checker.cc +++ b/src/type-checker.cc @@ -384,6 +384,20 @@ Result TypeChecker::OnBrIf(Index depth) { return result; } +Result TypeChecker::OnBrOnExn(Index depth, const TypeVector& types) { + Result result = PopAndCheck1Type(Type::ExceptRef, "br_on_exn"); + Label* label; + CHECK_RESULT(GetLabel(depth, &label)); + if (Failed(CheckTypes(types, label->br_types()))) { + PrintError("br_on_exn has inconsistent types: expected %s, got %s", + TypesToString(label->br_types()).c_str(), + TypesToString(types).c_str()); + result = Result::Error; + } + PushType(Type::ExceptRef); + return result; +} + Result TypeChecker::BeginBrTable() { br_table_sig_ = nullptr; return PopAndCheck1Type(Type::I32, "br_table"); |