< 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 >