- /// Types can become nonabstract later, if they are refined.
- ///
- inline void setAbstract(bool Val) { Abstract = Val; }
-
- unsigned getRefCount() const { return RefCount; }
-
- /// ForwardType - This field is used to implement the union find scheme for
- /// abstract types. When types are refined to other types, this field is set
- /// to the more refined type. Only abstract types can be forwarded.
- mutable const Type *ForwardType;
-
- /// ContainedTys - The list of types contained by this one. For example, this
- /// includes the arguments of a function type, the elements of the structure,
- /// the pointee of a pointer, etc. Note that keeping this vector in the Type
- /// class wastes some space for types that do not contain anything (such as
- /// primitive types). However, keeping it here allows the subtype_* members
- /// to be implemented MUCH more efficiently, and dynamically very few types do
- /// not contain any elements (most are derived).
- std::vector<PATypeHandle> ContainedTys;
-
- /// AbstractTypeUsers - Implement a list of the users that need to be notified
- /// if I am a type, and I get resolved into a more concrete type.
- ///
- mutable std::vector<AbstractTypeUser *> AbstractTypeUsers;
-public:
- void print(llvm_ostream &O) const {
- if (O.stream()) print(*O.stream());
- }
- void print(std::ostream &O) const;
+ /// NumContainedTys - Keeps track of how many Type*'s there are in the
+ /// ContainedTys list.
+ unsigned NumContainedTys;
+
+ /// ContainedTys - A pointer to the array of Types contained by this Type.
+ /// For example, this includes the arguments of a function type, the elements
+ /// of a structure, the pointee of a pointer, the element type of an array,
+ /// etc. This pointer may be 0 for types that don't contain other types
+ /// (Integer, Double, Float).
+ Type * const *ContainedTys;