< prev index next >

src/share/vm/opto/type.hpp

Print this page




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;


< prev index next >