< prev index next >
src/share/vm/opto/type.cpp
Print this page
rev 10518 : Tobias' flattened array
rev 10544 : call to __Value methods can't pass fields as arguments
*** 1889,1905 ****
uint pos = TypeFunc::Parms;
const Type **field_array;
if (recv != NULL) {
arg_cnt++;
! if (vt_fields_as_args && recv->is_valuetype()) {
ciValueKlass* vk = (ciValueKlass*)recv;
vt_extra += vk->value_arg_slots()-1;
}
field_array = fields(arg_cnt + vt_extra);
// Use get_const_type here because it respects UseUniqueSubclasses:
! if (vt_fields_as_args && recv->is_valuetype()) {
ciValueKlass* vk = (ciValueKlass*)recv;
collect_value_fields(vk, field_array, pos);
} else {
field_array[pos++] = get_const_type(recv)->join_speculative(TypePtr::NOTNULL);
}
--- 1889,1907 ----
uint pos = TypeFunc::Parms;
const Type **field_array;
if (recv != NULL) {
arg_cnt++;
! bool vt_fields_for_recv = vt_fields_as_args && recv->is_valuetype() &&
! recv != ciEnv::current()->___Value_klass();
! if (vt_fields_for_recv) {
ciValueKlass* vk = (ciValueKlass*)recv;
vt_extra += vk->value_arg_slots()-1;
}
field_array = fields(arg_cnt + vt_extra);
// Use get_const_type here because it respects UseUniqueSubclasses:
! if (vt_fields_for_recv) {
ciValueKlass* vk = (ciValueKlass*)recv;
collect_value_fields(vk, field_array, pos);
} else {
field_array[pos++] = get_const_type(recv)->join_speculative(TypePtr::NOTNULL);
}
*** 1930,1939 ****
--- 1932,1942 ----
case T_INT:
field_array[pos++] = get_const_type(type);
break;
case T_VALUETYPE: {
assert(type->is_valuetype(), "inconsistent type");
+ assert(type != ciEnv::current()->___Value_klass(), "unsupported");
if (vt_fields_as_args) {
ciValueKlass* vk = (ciValueKlass*)type;
collect_value_fields(vk, field_array, pos);
} else {
field_array[pos++] = get_const_type(type);
< prev index next >