Add an LLVMContext to Type, hardwired to the global context until Type uniquing is...
authorOwen Anderson <resistor@mac.com>
Wed, 15 Jul 2009 22:50:23 +0000 (22:50 +0000)
committerOwen Anderson <resistor@mac.com>
Wed, 15 Jul 2009 22:50:23 +0000 (22:50 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75853 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Type.h

index c311dbedc71cd56f5c34a9516cdf867e60dabb53..5e09a6122208000074a67ab81ab7ab4b0e2e0baa 100644 (file)
@@ -12,6 +12,7 @@
 #define LLVM_TYPE_H
 
 #include "llvm/AbstractTypeUser.h"
+#include "llvm/LLVMContext.h"
 #include "llvm/Support/Casting.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/System/Atomic.h"
@@ -106,6 +107,9 @@ private:
   ///
   mutable sys::cas_flag RefCount;
 
+  /// Context - This refers to the LLVMContext in which this type was uniqued.
+  LLVMContext &Context;
+
   const Type *getForwardedTypeInternal() const;
 
   // Some Type instances are allocated as arrays, some aren't. So we provide
@@ -114,7 +118,8 @@ private:
 
 protected:
   explicit Type(TypeID id) : ID(id), Abstract(false), SubclassData(0),
-                             RefCount(0), ForwardType(0), NumContainedTys(0),
+                             RefCount(0), Context(getGlobalContext()),
+                             ForwardType(0), NumContainedTys(0),
                              ContainedTys(0) {}
   virtual ~Type() {
     assert(AbstractTypeUsers.empty() && "Abstract types remain");
@@ -170,6 +175,9 @@ public:
   /// module).
   void dump(const Module *Context) const;
 
+  /// getContext - Fetch the LLVMContext in which this type was uniqued.
+  LLVMContext &getContext() const { return Context; }
+
   //===--------------------------------------------------------------------===//
   // Property accessors for dealing with types... Some of these virtual methods
   // are defined in private classes defined in Type.cpp for primitive types.