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.cc14
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");