From 4ce1643c94c3446d40f91a4259a03c2ef236c57d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Fri, 7 Sep 2001 16:25:23 +0000 Subject: [PATCH] * Values are AbstactTypeUsers to support abstract types * SetName now takes extra parameter to support naming types and constants without handles llvm-svn: 428 --- llvm/include/llvm/Value.h | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/llvm/include/llvm/Value.h b/llvm/include/llvm/Value.h index 85c5e76ae820..889551d0cda9 100644 --- a/llvm/include/llvm/Value.h +++ b/llvm/include/llvm/Value.h @@ -10,6 +10,7 @@ #include #include "llvm/Annotation.h" +#include "llvm/AbstractTypeUser.h" class User; class Type; @@ -19,6 +20,7 @@ class Instruction; class BasicBlock; class Method; class Module; +class SymbolTable; template class ValueHolder; @@ -26,7 +28,8 @@ template // Value Class //===----------------------------------------------------------------------===// -class Value : public Annotable { // Value's are annotable +class Value : public Annotable, // Values are annotable + public AbstractTypeUser { // Values use potentially abstract types public: enum ValueTy { TypeVal, // This is an instance of Type @@ -42,7 +45,7 @@ public: private: list Uses; string Name; - const Type *Ty; + PATypeHandle Ty; ValueTy VTy; Value(const Value &); // Do not implement @@ -57,7 +60,7 @@ public: // All values can potentially be named... inline bool hasName() const { return Name != ""; } inline const string &getName() const { return Name; } - virtual void setName(const string &name) { Name = name; } + virtual void setName(const string &name, SymbolTable * = 0) { Name = name; } // Methods for determining the subtype of this Value. The getValueType() // method returns the type of the value directly. The cast*() methods are @@ -118,6 +121,12 @@ public: // void replaceAllUsesWith(Value *D); + // refineAbstractType - This function is implemented because we use + // potentially abstract types, and these types may be resolved to more + // concrete types after we are constructed. + // + virtual void refineAbstractType(const DerivedType *OldTy, const Type *NewTy); + //---------------------------------------------------------------------- // Methods for handling the list of uses of this DEF. //