add a couple of enum values
[oota-llvm.git] / include / llvm / DerivedTypes.h
index fe180008da322689d3df23918b265c994dc6f4fe..e83679d04685e705690e04327c0e3b4240282f90 100644 (file)
@@ -1,13 +1,13 @@
 //===-- llvm/DerivedTypes.h - Classes for handling data types ---*- C++ -*-===//
-// 
+//
 //                     The LLVM Compiler Infrastructure
 //
 // This file was developed by the LLVM research group and is distributed under
 // the University of Illinois Open Source License. See LICENSE.TXT for details.
-// 
+//
 //===----------------------------------------------------------------------===//
 //
-// This file contains the declarations of classes that represent "derived 
+// This file contains the declarations of classes that represent "derived
 // types".  These are things like "arrays of x" or "structure of x, y, z" or
 // "method returning x taking (y,z) as parameters", etc...
 //
@@ -19,7 +19,6 @@
 #define LLVM_DERIVED_TYPES_H
 
 #include "llvm/Type.h"
-#include "llvm/Support/DataTypes.h"
 
 namespace llvm {
 
@@ -31,18 +30,11 @@ class StructValType;
 class PointerValType;
 class PackedValType;
 
-class DerivedType : public Type, public AbstractTypeUser {
-  // 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;
+class DerivedType : public Type {
   friend class Type;
 
 protected:
-  DerivedType(TypeID id) : Type("", id) {}
-  ~DerivedType() {
-    assert(AbstractTypeUsers.empty());
-  }
+  DerivedType(TypeID id) : Type(id) {}
 
   /// notifyUsesThatTypeBecameConcrete - Notify AbstractTypeUsers of this type
   /// that the current type has transitioned from being abstract to being
@@ -56,12 +48,6 @@ protected:
   ///
   void dropAllTypeUses();
 
-  void RefCountIsZero() const {
-    if (AbstractTypeUsers.empty())
-      delete this;
-  }
-
-  
 public:
 
   //===--------------------------------------------------------------------===//
@@ -69,22 +55,6 @@ public:
   // are managed by (add|remove)AbstractTypeUser. See comments in
   // AbstractTypeUser.h for more information.
 
-  /// addAbstractTypeUser - Notify an abstract type that there is a new user of
-  /// it.  This function is called primarily by the PATypeHandle class.
-  ///
-  void addAbstractTypeUser(AbstractTypeUser *U) const {
-    assert(isAbstract() && "addAbstractTypeUser: Current type not abstract!");
-    AbstractTypeUsers.push_back(U);
-  }
-
-  /// removeAbstractTypeUser - Notify an abstract type that a user of the class
-  /// no longer has a handle to the type.  This function is called primarily by
-  /// the PATypeHandle class.  When there are no users of the abstract type, it
-  /// is annihilated, because there is no way to get a reference to it ever
-  /// again.
-  ///
-  void removeAbstractTypeUser(AbstractTypeUser *U) const;
-
   /// refineAbstractTypeTo - This function is used to when it is discovered that
   /// the 'this' abstract type is actually equivalent to the NewType specified.
   /// This causes all users of 'this' to switch to reference the more concrete
@@ -112,12 +82,12 @@ class FunctionType : public DerivedType {
   const FunctionType &operator=(const FunctionType &);  // Do not implement
 protected:
   /// This should really be private, but it squelches a bogus warning
-  /// from GCC to make them protected:  warning: `class FunctionType' only 
+  /// from GCC to make them protected:  warning: `class FunctionType' only
   /// defines private constructors and has no friends
   ///
   /// Private ctor - Only can be created by a static member...
   ///
-  FunctionType(const Type *Result, const std::vector<const Type*> &Params, 
+  FunctionType(const Type *Result, const std::vector<const Type*> &Params,
                bool IsVarArgs);
 
 public:
@@ -141,12 +111,12 @@ public:
   /// getNumParams - Return the number of fixed parameters this function type
   /// requires.  This does not consider varargs.
   ///
-  unsigned getNumParams() const { return (unsigned)ContainedTys.size()-1; }
+  unsigned getNumParams() const { return unsigned(ContainedTys.size()-1); }
 
   // Implement the AbstractTypeUser interface.
   virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy);
   virtual void typeBecameConcrete(const DerivedType *AbsTy);
-  
+
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const FunctionType *T) { return true; }
   static inline bool classof(const Type *T) {
@@ -171,7 +141,7 @@ public:
   // Methods for support type inquiry through isa, cast, and dyn_cast:
   static inline bool classof(const CompositeType *T) { return true; }
   static inline bool classof(const Type *T) {
-    return T->getTypeID() == ArrayTyID || 
+    return T->getTypeID() == ArrayTyID ||
            T->getTypeID() == StructTyID ||
            T->getTypeID() == PointerTyID ||
            T->getTypeID() == PackedTyID;
@@ -188,7 +158,7 @@ class StructType : public CompositeType {
 
 protected:
   /// This should really be private, but it squelches a bogus warning
-  /// from GCC to make them protected:  warning: `class StructType' only 
+  /// from GCC to make them protected:  warning: `class StructType' only
   /// defines private constructors and has no friends
   ///
   /// Private ctor - Only can be created by a static member...
@@ -207,7 +177,7 @@ public:
   element_iterator element_end() const { return ContainedTys.end(); }
 
   // Random access to the elements
-  unsigned getNumElements() const { return (unsigned)ContainedTys.size(); }
+  unsigned getNumElements() const { return unsigned(ContainedTys.size()); }
   const Type *getElementType(unsigned N) const {
     assert(N < ContainedTys.size() && "Element number out of range!");
     return ContainedTys[N];
@@ -231,12 +201,12 @@ public:
 };
 
 
-/// SequentialType - This is the superclass of the array, pointer and packed 
+/// SequentialType - This is the superclass of the array, pointer and packed
 /// type classes.  All of these represent "arrays" in memory.  The array type
 /// represents a specifically sized array, pointer types are unsized/unknown
-/// size arrays, packed types represent specifically sized arrays that 
-/// allow for use of SIMD instructions.  SequentialType holds the common 
-/// features of all, which stem from the fact that all three lay their 
+/// size arrays, packed types represent specifically sized arrays that
+/// allow for use of SIMD instructions.  SequentialType holds the common
+/// features of all, which stem from the fact that all three lay their
 /// components out in memory identically.
 ///
 class SequentialType : public CompositeType {
@@ -280,7 +250,7 @@ class ArrayType : public SequentialType {
   const ArrayType &operator=(const ArrayType &);  // Do not implement
 protected:
   /// This should really be private, but it squelches a bogus warning
-  /// from GCC to make them protected:  warning: `class ArrayType' only 
+  /// from GCC to make them protected:  warning: `class ArrayType' only
   /// defines private constructors and has no friends
   ///
   /// Private ctor - Only can be created by a static member...
@@ -316,7 +286,7 @@ class PackedType : public SequentialType {
   const PackedType &operator=(const PackedType &);  // Do not implement
 protected:
   /// This should really be private, but it squelches a bogus warning
-  /// from GCC to make them protected:  warning: `class PackedType' only 
+  /// from GCC to make them protected:  warning: `class PackedType' only
   /// defines private constructors and has no friends
   ///
   /// Private ctor - Only can be created by a static member...
@@ -351,7 +321,7 @@ class PointerType : public SequentialType {
   const PointerType &operator=(const PointerType &);  // Do not implement
 protected:
   // This should really be private, but it squelches a bogus warning
-  // from GCC to make them protected:  warning: `class PointerType' only 
+  // from GCC to make them protected:  warning: `class PointerType' only
   // defines private constructors and has no friends
 
   // Private ctor - Only can be created by a static member...
@@ -380,7 +350,7 @@ class OpaqueType : public DerivedType {
   const OpaqueType &operator=(const OpaqueType &);  // DO NOT IMPLEMENT
 protected:
   /// This should really be private, but it squelches a bogus warning
-  /// from GCC to make them protected:  warning: `class OpaqueType' only 
+  /// from GCC to make them protected:  warning: `class OpaqueType' only
   /// defines private constructors and has no friends
   ///
   /// Private ctor - Only can be created by a static member...