2064 field_array[pos++] = Type::HALF;
2065 break;
2066 case T_DOUBLE:
2067 field_array[pos++] = Type::DOUBLE;
2068 field_array[pos++] = Type::HALF;
2069 break;
2070 case T_OBJECT:
2071 case T_ARRAY:
2072 case T_FLOAT:
2073 case T_INT:
2074 field_array[pos++] = get_const_type(type);
2075 break;
2076 case T_BOOLEAN:
2077 case T_CHAR:
2078 case T_BYTE:
2079 case T_SHORT:
2080 field_array[pos++] = TypeInt::INT;
2081 break;
2082 case T_VALUETYPE: {
2083 assert(type->is_valuetype(), "inconsistent type");
2084 assert(type != ciEnv::current()->___Value_klass(), "unsupported");
2085 if (vt_fields_as_args) {
2086 ciValueKlass* vk = (ciValueKlass*)type;
2087 collect_value_fields(vk, field_array, pos);
2088 } else {
2089 field_array[pos++] = get_const_type(type);
2090 }
2091 break;
2092 }
2093 default:
2094 ShouldNotReachHere();
2095 }
2096 i++;
2097 }
2098 assert(pos == TypeFunc::Parms + arg_cnt + vt_extra, "wrong number of arguments");
2099
2100 return (TypeTuple*)(new TypeTuple(TypeFunc::Parms + arg_cnt + vt_extra, field_array))->hashcons();
2101 }
2102
2103 const TypeTuple *TypeTuple::make( uint cnt, const Type **fields ) {
2104 return (TypeTuple*)(new TypeTuple(cnt,fields))->hashcons();
2105 }
|
2064 field_array[pos++] = Type::HALF;
2065 break;
2066 case T_DOUBLE:
2067 field_array[pos++] = Type::DOUBLE;
2068 field_array[pos++] = Type::HALF;
2069 break;
2070 case T_OBJECT:
2071 case T_ARRAY:
2072 case T_FLOAT:
2073 case T_INT:
2074 field_array[pos++] = get_const_type(type);
2075 break;
2076 case T_BOOLEAN:
2077 case T_CHAR:
2078 case T_BYTE:
2079 case T_SHORT:
2080 field_array[pos++] = TypeInt::INT;
2081 break;
2082 case T_VALUETYPE: {
2083 assert(type->is_valuetype(), "inconsistent type");
2084 if (vt_fields_as_args && type != ciEnv::current()->___Value_klass()) {
2085 ciValueKlass* vk = (ciValueKlass*)type;
2086 collect_value_fields(vk, field_array, pos);
2087 } else {
2088 field_array[pos++] = get_const_type(type);
2089 }
2090 break;
2091 }
2092 default:
2093 ShouldNotReachHere();
2094 }
2095 i++;
2096 }
2097 assert(pos == TypeFunc::Parms + arg_cnt + vt_extra, "wrong number of arguments");
2098
2099 return (TypeTuple*)(new TypeTuple(TypeFunc::Parms + arg_cnt + vt_extra, field_array))->hashcons();
2100 }
2101
2102 const TypeTuple *TypeTuple::make( uint cnt, const Type **fields ) {
2103 return (TypeTuple*)(new TypeTuple(cnt,fields))->hashcons();
2104 }
|