< prev index next >

src/share/vm/opto/type.cpp

Print this page




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 }


< prev index next >