| st[refs0 .last -- _type] .type = mkclasstype(class), validrefs(str, st[refs0 .last -- fs '] .refval ' + refs0, mkclasstype(`java.lang.Object' .class), st), fs ' ∈ instfields(class) ⊦ refs0 = [], refs0 .last = jvmref, hasSharing(refs0 .last, st) |
st[refs0 .last -- fs '] = refval(r) ∧ is_referencevalue(st[refs0 .last -- fs ']), st[refs0 .last -- _type] .type = mkclasstype(class), validrefs(str, r ' + refs0, mkclasstype(`java.lang.Object' .class), st), fs ' ∈ instfields(class) ⊦ refs0 = [], refs0 .last = jvmref, hasSharing(refs0 .last, st)
[[CONCRETESIMPRULES : ([CSIMPNAMEDSEQ : valuefuns, , refval-xtra, ⊦ ¬ is_referencevalue(val) → val .refval = jvmref], [CSIMPNAMEDSEQ : cyclic, , validrefs-null-02, ⊦ validrefs (str, jvmref ' + refs, ty, st) ↔ refs = []], [CSIMPNAMEDSEQ : list, references, a, ⊦ (refs + refs0) + refs1 = refs + refs0 + refs1], [CSIMPELIM : is_referencevalue(val) ⊦ r = val .refval ↔ val = refval(r)])], [EXTRATERMS : (st[refs0 .last -- fs '], r)]]