| _mode ∈ st, compatstatic(str, st), compatrefs(str, st), compat(str, val, ty, st), is_throw_mode(st[_mode]), compat(str, refval(st[_mode] .refval), st[_mode] .type, st), is_subtype(str, st[_mode] .type, mkclasstype(`java.lang.Throwable' .class)) ⊦ st[_mode] = return(noval, void_type), st[_mode] = noval, mkfs(class, ty, fieldvar) ' = _length, ty = void_type, st[_mode] .refval = jvmref, compat(str, st[_mode] .val, st[_mode] .type, st), compat(str, refval(st[_mode] .refval), st[_mode] .type, st[r -- mkfs(class, ty, fieldvar) ', val]) |
st[_mode] = throw(r0, ty0), _mode ∈ st, compatstatic(str, st), compatrefs(str, st), compat(str, val, ty, st), is_throw_mode(st[_mode]), compat(str, refval(r0), ty0, st), is_subtype(str, ty0, mkclasstype(`java.lang.Throwable' .class)) ⊦ st[_mode] = return(noval, void_type), st[_mode] = noval, mkfs(class, ty, fieldvar) ' = _length, ty = void_type, r0 = jvmref, compat(str, st[_mode] .val, ty0, st), compat(str, refval(r0), ty0, st[r -- mkfs(class, ty, fieldvar) ', val])
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ is_throw_mode(val) → ( r = val .refval ∧ ty = val .type ↔ val = throw(r, ty))])], [EXTRATERMS : (st[_mode], r0, ty0)]]