| compatmode(str, st), compatstatic(str, st), compatrefs(str, st) ⊦ compatmode(str, throw(r, mkclasstype(class)), st[_mode, throw(r, mkclasstype(class))]) ↔ class ≤ `java.lang.Throwable' .class ∧ r ≠ jvmref ∧ compat(str, refval(r), mkclasstype(class), st) |
⊦ compatmode(str, val, st) ↔ val = noval ∨ is_break_mode(val) ∨ val = return(noval, void_type) ∨ is_return_mode(val) ∧ compat(str, val .val, val .type, st) ∨ is_throw_mode(val) ∧ val .refval ≠ jvmref ∧ compat(str, refval(val .refval), val .type, st) ∧ is_subtype(str, val .type, mkclasstype(`java.lang.Throwable' .class))
compatmode(str, st), compatstatic(str, st), compatrefs(str, st) ⊦ throw(r, mkclasstype(class)) = noval ∨ is_break_mode(throw(r, mkclasstype(class))) ∨ throw(r, mkclasstype(class)) = return(noval, void_type) ∨ is_return_mode(throw(r, mkclasstype(class))) ∧ compat(str, throw(r, mkclasstype(class)) .val, throw(r, mkclasstype(class)) .type, st[_mode, throw(r, mkclasstype(class))]) ∨ is_throw_mode(throw(r, mkclasstype(class))) ∧ throw(r, mkclasstype(class)) .refval ≠ jvmref ∧ compat(str, refval(throw(r, mkclasstype(class)) .refval), throw(r, mkclasstype(class)) .type, st[_mode, throw(r, mkclasstype(class))]) ∧ is_subtype(str, throw(r, mkclasstype(class)) .type, mkclasstype(`java.lang.Throwable' .class)) ↔ class ≤ `java.lang.Throwable' .class ∧ r ≠ jvmref ∧ compat(str, refval(r), mkclasstype(class), st)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st[_mode, throw(r, mkclasstype(class))], throw(r, mkclasstype(class)), str)]]