| is_arraytype(st[r0 -- _type] .type), validref(str, r2, st[r0 -- _type] .type .type, st), disjoint(str, r ' + r2 ', st), hasSharing(r, st[r0 -- i ', refval(r2)]), r2 = jvmref → is_reftype(st[r0 -- _type] .type .type) ⊦ r = r2, r0 = jvmref, hasSharing(r, st), hasSharing(r2, st), junkref(str, r, st) |
st[r0 -- _type] .type = mkarraytype(ty), is_arraytype(st[r0 -- _type] .type), validref(str, r2, ty, st), disjoint(str, r ' + r2 ', st), hasSharing(r, st[r0 -- i ', refval(r2)]), r2 = jvmref → is_reftype(ty) ⊦ r = r2, r0 = jvmref, hasSharing(r, st), hasSharing(r2, st), junkref(str, r, st)
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ is_arraytype(ty) → ( ty0 = ty .type ↔ ty = mkarraytype(ty0))])], [EXTRATERMS : (st[r0 -- _type] .type, ty)]]