1311 virtual bool interface_vs_oop(const Type *t) const; 1312 #endif 1313 #ifndef PRODUCT 1314 virtual void dump2( Dict &d, uint depth, outputStream *st ) const; // Specialized per-Type dumping 1315 #endif 1316 }; 1317 1318 //------------------------------TypeValueTypePtr------------------------------------- 1319 // Class of value type pointers 1320 class TypeValueTypePtr : public TypeOopPtr { 1321 TypeValueTypePtr(const TypeValueType* vt, PTR ptr, ciObject* o, Offset offset, int instance_id, const TypePtr* speculative, int inline_depth) 1322 : TypeOopPtr(ValueTypePtr, ptr, vt->value_klass(), true, o, offset, Offset::bottom, instance_id, speculative, inline_depth) { 1323 _vt = vt; 1324 } 1325 1326 const TypeValueType* _vt; // Value type we point to 1327 1328 public: 1329 // Make a pointer to a value type 1330 static const TypeValueTypePtr* make(const TypeValueType* vt, PTR ptr = TypePtr::BotPTR, ciObject* o = NULL, Offset offset = Offset(0), 1331 int instance_id = InstanceBot, const TypePtr* speculative = NULL, int inline_depth = InlineDepthBottom); 1332 // Make a pointer to a value type 1333 static const TypeValueTypePtr* make(PTR ptr, ciValueKlass* vk, ciObject* o = NULL) { return make(TypeValueType::make(vk), ptr, o); } 1334 // Make a pointer to a constant value type 1335 static const TypeValueTypePtr* make(ciObject* o) { return make(TypePtr::Constant, o->klass()->as_value_klass(), o); } 1336 1337 const TypeValueType* value_type() const { return _vt; } 1338 1339 virtual const TypePtr* add_offset(intptr_t offset) const; 1340 1341 virtual const Type* cast_to_ptr_type(PTR ptr) const; 1342 virtual const TypeOopPtr* cast_to_instance_id(int instance_id) const; 1343 1344 virtual bool eq(const Type* t) const; 1345 virtual int hash() const; // Type specific hashing 1346 virtual bool empty(void) const; // TRUE if type is vacuous 1347 1348 virtual const Type* xmeet_helper(const Type* t) const; 1349 virtual const Type* xdual() const; 1350 1351 static const TypeValueTypePtr* NOTNULL; 1352 1353 #ifndef PRODUCT 1354 virtual void dump2(Dict &d, uint depth, outputStream* st) const; // Specialized per-Type dumping 1355 #endif 1356 }; 1357 1358 //------------------------------TypeMetadataPtr------------------------------------- 1359 // Some kind of metadata, either Method*, MethodData* or CPCacheOop 1360 class TypeMetadataPtr : public TypePtr { 1361 protected: 1362 TypeMetadataPtr(PTR ptr, ciMetadata* metadata, Offset offset); 1363 // Do not allow interface-vs.-noninterface joins to collapse to top. 1364 virtual const Type *filter_helper(const Type *kills, bool include_speculative) const; 1365 public: 1366 virtual bool eq( const Type *t ) const; | 1311 virtual bool interface_vs_oop(const Type *t) const; 1312 #endif 1313 #ifndef PRODUCT 1314 virtual void dump2( Dict &d, uint depth, outputStream *st ) const; // Specialized per-Type dumping 1315 #endif 1316 }; 1317 1318 //------------------------------TypeValueTypePtr------------------------------------- 1319 // Class of value type pointers 1320 class TypeValueTypePtr : public TypeOopPtr { 1321 TypeValueTypePtr(const TypeValueType* vt, PTR ptr, ciObject* o, Offset offset, int instance_id, const TypePtr* speculative, int inline_depth) 1322 : TypeOopPtr(ValueTypePtr, ptr, vt->value_klass(), true, o, offset, Offset::bottom, instance_id, speculative, inline_depth) { 1323 _vt = vt; 1324 } 1325 1326 const TypeValueType* _vt; // Value type we point to 1327 1328 public: 1329 // Make a pointer to a value type 1330 static const TypeValueTypePtr* make(const TypeValueType* vt, PTR ptr = TypePtr::BotPTR, ciObject* o = NULL, Offset offset = Offset(0), 1331 int instance_id = InstanceBot, const TypePtr* speculative = NULL, int inline_depth = InlineDepthBottom, bool narrow = false); 1332 // Make a pointer to a value type 1333 static const TypeValueTypePtr* make(PTR ptr, ciValueKlass* vk, ciObject* o = NULL) { return make(TypeValueType::make(vk), ptr, o); } 1334 // Make a pointer to a constant value type 1335 static const TypeValueTypePtr* make(ciObject* o) { return make(TypePtr::Constant, o->klass()->as_value_klass(), o); } 1336 1337 const TypeValueType* value_type() const { return _vt; } 1338 1339 virtual const TypePtr* add_offset(intptr_t offset) const; 1340 1341 virtual const Type* cast_to_ptr_type(PTR ptr) const; 1342 virtual const TypeOopPtr* cast_to_instance_id(int instance_id) const; 1343 1344 virtual bool eq(const Type* t) const; 1345 virtual int hash() const; // Type specific hashing 1346 bool is__Value() const; 1347 1348 virtual const Type* xmeet_helper(const Type* t) const; 1349 virtual const Type* xdual() const; 1350 1351 static const TypeValueTypePtr* NOTNULL; 1352 1353 #ifndef PRODUCT 1354 virtual void dump2(Dict &d, uint depth, outputStream* st) const; // Specialized per-Type dumping 1355 #endif 1356 }; 1357 1358 //------------------------------TypeMetadataPtr------------------------------------- 1359 // Some kind of metadata, either Method*, MethodData* or CPCacheOop 1360 class TypeMetadataPtr : public TypePtr { 1361 protected: 1362 TypeMetadataPtr(PTR ptr, ciMetadata* metadata, Offset offset); 1363 // Do not allow interface-vs.-noninterface joins to collapse to top. 1364 virtual const Type *filter_helper(const Type *kills, bool include_speculative) const; 1365 public: 1366 virtual bool eq( const Type *t ) const; |