697 // Creates a type given a klass. Correctly handles multi-dimensional arrays
698 // Respects UseUniqueSubclasses.
699 // If the klass is final, the resulting type will be exact.
700 static const TypeOopPtr* make_from_klass(ciKlass* klass) {
701 return make_from_klass_common(klass, true, false);
702 }
703 // Same as before, but will produce an exact type, even if
704 // the klass is not final, as long as it has exactly one implementation.
705 static const TypeOopPtr* make_from_klass_unique(ciKlass* klass) {
706 return make_from_klass_common(klass, true, true);
707 }
708 // Same as before, but does not respects UseUniqueSubclasses.
709 // Use this only for creating array element types.
710 static const TypeOopPtr* make_from_klass_raw(ciKlass* klass) {
711 return make_from_klass_common(klass, false, false);
712 }
713 // Creates a singleton type given an object.
714 static const TypeOopPtr* make_from_constant(ciObject* o);
715
716 // Make a generic (unclassed) pointer to an oop.
717 static const TypeOopPtr* make(PTR ptr, int offset);
718
719 ciObject* const_oop() const { return _const_oop; }
720 virtual ciKlass* klass() const { return _klass; }
721 bool klass_is_exact() const { return _klass_is_exact; }
722
723 // Returns true if this pointer points at memory which contains a
724 // compressed oop references.
725 bool is_ptr_to_narrowoop_nv() const { return _is_ptr_to_narrowoop; }
726
727 bool is_known_instance() const { return _instance_id > 0; }
728 int instance_id() const { return _instance_id; }
729 bool is_known_instance_field() const { return is_known_instance() && _offset >= 0; }
730
731 virtual intptr_t get_con() const;
732
733 virtual const Type *cast_to_ptr_type(PTR ptr) const;
734
735 virtual const Type *cast_to_exactness(bool klass_is_exact) const;
736
737 virtual const TypeOopPtr *cast_to_instance_id(int instance_id) const;
|
697 // Creates a type given a klass. Correctly handles multi-dimensional arrays
698 // Respects UseUniqueSubclasses.
699 // If the klass is final, the resulting type will be exact.
700 static const TypeOopPtr* make_from_klass(ciKlass* klass) {
701 return make_from_klass_common(klass, true, false);
702 }
703 // Same as before, but will produce an exact type, even if
704 // the klass is not final, as long as it has exactly one implementation.
705 static const TypeOopPtr* make_from_klass_unique(ciKlass* klass) {
706 return make_from_klass_common(klass, true, true);
707 }
708 // Same as before, but does not respects UseUniqueSubclasses.
709 // Use this only for creating array element types.
710 static const TypeOopPtr* make_from_klass_raw(ciKlass* klass) {
711 return make_from_klass_common(klass, false, false);
712 }
713 // Creates a singleton type given an object.
714 static const TypeOopPtr* make_from_constant(ciObject* o);
715
716 // Make a generic (unclassed) pointer to an oop.
717 static const TypeOopPtr* make(PTR ptr, int offset, int instance_id = InstanceBot);
718
719 ciObject* const_oop() const { return _const_oop; }
720 virtual ciKlass* klass() const { return _klass; }
721 bool klass_is_exact() const { return _klass_is_exact; }
722
723 // Returns true if this pointer points at memory which contains a
724 // compressed oop references.
725 bool is_ptr_to_narrowoop_nv() const { return _is_ptr_to_narrowoop; }
726
727 bool is_known_instance() const { return _instance_id > 0; }
728 int instance_id() const { return _instance_id; }
729 bool is_known_instance_field() const { return is_known_instance() && _offset >= 0; }
730
731 virtual intptr_t get_con() const;
732
733 virtual const Type *cast_to_ptr_type(PTR ptr) const;
734
735 virtual const Type *cast_to_exactness(bool klass_is_exact) const;
736
737 virtual const TypeOopPtr *cast_to_instance_id(int instance_id) const;
|