919 static const TypeRawPtr *make( address bits );
920
921 // Return a 'ptr' version of this type
922 virtual const Type *cast_to_ptr_type(PTR ptr) const;
923
924 virtual intptr_t get_con() const;
925
926 virtual const TypePtr *add_offset( intptr_t offset ) const;
927
928 virtual const Type *xmeet( const Type *t ) const;
929 virtual const Type *xdual() const; // Compute dual right now.
930 // Convenience common pre-built types.
931 static const TypeRawPtr *BOTTOM;
932 static const TypeRawPtr *NOTNULL;
933 #ifndef PRODUCT
934 virtual void dump2( Dict &d, uint depth, outputStream *st ) const;
935 #endif
936 };
937
938 //------------------------------TypeOopPtr-------------------------------------
939 // Some kind of oop (Java pointer), either klass or instance or array.
940 class TypeOopPtr : public TypePtr {
941 protected:
942 TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, bool xk, ciObject* o, int offset, int instance_id,
943 const TypePtr* speculative, int inline_depth);
944 public:
945 virtual bool eq( const Type *t ) const;
946 virtual int hash() const; // Type specific hashing
947 virtual bool singleton(void) const; // TRUE if type is a singleton
948 enum {
949 InstanceTop = -1, // undefined instance
950 InstanceBot = 0 // any possible instance
951 };
952 protected:
953
954 // Oop is NULL, unless this is a constant oop.
955 ciObject* _const_oop; // Constant oop
956 // If _klass is NULL, then so is _sig. This is an unloaded klass.
957 ciKlass* _klass; // Klass object
958 // Does the type exclude subclasses of the klass? (Inexact == polymorphic.)
959 bool _klass_is_exact;
|
919 static const TypeRawPtr *make( address bits );
920
921 // Return a 'ptr' version of this type
922 virtual const Type *cast_to_ptr_type(PTR ptr) const;
923
924 virtual intptr_t get_con() const;
925
926 virtual const TypePtr *add_offset( intptr_t offset ) const;
927
928 virtual const Type *xmeet( const Type *t ) const;
929 virtual const Type *xdual() const; // Compute dual right now.
930 // Convenience common pre-built types.
931 static const TypeRawPtr *BOTTOM;
932 static const TypeRawPtr *NOTNULL;
933 #ifndef PRODUCT
934 virtual void dump2( Dict &d, uint depth, outputStream *st ) const;
935 #endif
936 };
937
938 //------------------------------TypeOopPtr-------------------------------------
939 // Some kind of oop (Java pointer), either instance or array.
940 class TypeOopPtr : public TypePtr {
941 protected:
942 TypeOopPtr(TYPES t, PTR ptr, ciKlass* k, bool xk, ciObject* o, int offset, int instance_id,
943 const TypePtr* speculative, int inline_depth);
944 public:
945 virtual bool eq( const Type *t ) const;
946 virtual int hash() const; // Type specific hashing
947 virtual bool singleton(void) const; // TRUE if type is a singleton
948 enum {
949 InstanceTop = -1, // undefined instance
950 InstanceBot = 0 // any possible instance
951 };
952 protected:
953
954 // Oop is NULL, unless this is a constant oop.
955 ciObject* _const_oop; // Constant oop
956 // If _klass is NULL, then so is _sig. This is an unloaded klass.
957 ciKlass* _klass; // Klass object
958 // Does the type exclude subclasses of the klass? (Inexact == polymorphic.)
959 bool _klass_is_exact;
|