src/share/classes/jdk/internal/org/objectweb/asm/Frame.java
Print this page
*** 1453,1472 ****
// element types of u and t
v = (t & DIM) | OBJECT
| cw.getMergedType(t & BASE_VALUE, u & BASE_VALUE);
} else {
// if u and t are array types, but not with the same element
! // type, merge(u,t)=java/lang/Object
! v = OBJECT | cw.addType("java/lang/Object");
}
} else if ((t & BASE_KIND) == OBJECT || (t & DIM) != 0) {
// if t is any other reference or array type, the merged type
! // is Object, or min(dim(u), dim(t)) | java/lang/Object is u
! // and t have different array dimensions
! int tdim = t & DIM;
! int udim = u & DIM;
! v = (udim != tdim ? Math.min(tdim, udim) : 0) | OBJECT
| cw.addType("java/lang/Object");
} else {
// if t is any other type, merge(u,t)=TOP
v = TOP;
}
--- 1453,1476 ----
// element types of u and t
v = (t & DIM) | OBJECT
| cw.getMergedType(t & BASE_VALUE, u & BASE_VALUE);
} else {
// if u and t are array types, but not with the same element
! // type, merge(u,t) = dim(u) - 1 | java/lang/Object
! int vdim = ELEMENT_OF + (u & DIM);
! v = vdim | OBJECT | cw.addType("java/lang/Object");
}
} else if ((t & BASE_KIND) == OBJECT || (t & DIM) != 0) {
// if t is any other reference or array type, the merged type
! // is min(udim, tdim) | java/lang/Object, where udim is the
! // array dimension of u, minus 1 if u is an array type with a
! // primitive element type (and similarly for tdim).
! int tdim = (((t & DIM) == 0 || (t & BASE_KIND) == OBJECT) ? 0
! : ELEMENT_OF) + (t & DIM);
! int udim = (((u & DIM) == 0 || (u & BASE_KIND) == OBJECT) ? 0
! : ELEMENT_OF) + (u & DIM);
! v = Math.min(tdim, udim) | OBJECT
| cw.addType("java/lang/Object");
} else {
// if t is any other type, merge(u,t)=TOP
v = TOP;
}