| r ≠ jvmref ∧ validref(str, r, mkclasstype(class), st) ∧ fs ' ∈ instfields(class) ∧ is_reftype(fs .type) → validref(str, st[r -- fs '] .refval, fs .type, st), st[jvmref -- sks0] = refval(r0), st[r -- _type] .type = mkclasstype(class), st[jvmref -- sks] = refval(r0), fits(jvmref, sks, st), fits(jvmref, sks0, st), validref(str, r, ty, st), fs ' ∈ instfields(class) ⊦ r = jvmref, sks0 = sks, sks0 = [], sks = [], r0 = jvmref, is_referencevalue(st[r -- fs ']) |
st[jvmref -- sks0] = refval(r0), st[r -- _type] .type = mkclasstype(class), st[jvmref -- sks] = refval(r0), fits(jvmref, sks, st), fits(jvmref, sks0, st), validref(str, r, ty, st), fs ' ∈ instfields(class) ⊦ r = jvmref, sks0 = sks, sks0 = [], sks = [], r0 = jvmref, is_referencevalue(st[r -- fs '])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ validref(str, jvmref, ty, st)], [CSIMPSEQ : ⊦ ¬ is_referencevalue(val) → val .refval = jvmref])]]