| junkrefs(str, r ' + refs0, st[r -- _type] .type, st[r0 -- mkfs(class, ty0, fieldvar) ', refval(r1)]), ty ≤ ty0, is_reftype(ty0), r1 = jvmref ∨ st[r1 -- _type] .type ≤ ty ∧ ¬ junkref(str, r1, st) ⊦ r = jvmref, ty0 = void_type, junkref(str, r, st), mkfs(class, ty0, fieldvar) ' ≠ _length ∧ r1 ≠ jvmref ∧ st[r1 -- _type] .type ≤ ty0 ∧ ¬ junkref(str, r1, st) |
junkrefs(str, r ' + refs0, st[r -- _type] .type, st[r0 -- mkfs(class, ty0, fieldvar) ', refval(r1)]), ty ≤ ty0, is_reftype(ty0), r1 = jvmref ∨ st[r1 -- _type] .type ≤ ty ∧ ¬ junkref(str, r1, st) ⊦ r1 ≠ jvmref, r = jvmref, ty0 = void_type, junkref(str, r, st), mkfs(class, ty0, fieldvar) ' ≠ _length ∧ r1 ≠ jvmref ∧ st[r1 -- _type] .type ≤ ty0 ∧ ¬ junkref(str, r1, st)
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ ty ≤ ty0 ∧ ty0 ≤ ty1 → ty ≤ ty1], [CSIMPFORWARD : ⊦ mkfs(class1, ty, fieldvar) ' = _length → class1 = `*Array*' .class ∧ ty = int_type ∧ fieldvar = `length' .field], [CSIMPSEQ : ⊦ mkfs (`*Array*' .class, int_type, `length' .field) ' = _length], [CSIMPSEQ : ⊦ int_type ≠ void_type], [CSIMPSEQ : ⊦ ty ≤ int_type ↔ ty = int_type], [CSIMPSEQ : ⊦ ¬ is_reftype(int_type)])], [EXTRAFMAS : (r1 ≠ jvmref)]]