diff options
author | Chris Lattner <sabre@nondot.org> | 2001-09-09 21:00:23 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2001-09-09 21:00:23 +0000 |
commit | 78914e772f4988dd5e521b49e2e9b208fa1b02ab (patch) | |
tree | 9d50b707244312bad2e6567df1095d1ebc2db2aa /include | |
parent | bf2f0436595602fcc81ef8c644157417db43e1d7 (diff) | |
download | llvm-78914e772f4988dd5e521b49e2e9b208fa1b02ab.tar.gz llvm-78914e772f4988dd5e521b49e2e9b208fa1b02ab.tar.bz2 llvm-78914e772f4988dd5e521b49e2e9b208fa1b02ab.tar.xz |
Convert ConstRules to use annotations to clean it up.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@514 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/Support/Annotation.h | 8 | ||||
-rw-r--r-- | include/llvm/Annotation.h | 8 | ||||
-rw-r--r-- | include/llvm/ConstantHandling.h | 13 | ||||
-rw-r--r-- | include/llvm/Support/Annotation.h | 8 | ||||
-rw-r--r-- | include/llvm/Type.h | 12 |
5 files changed, 25 insertions, 24 deletions
diff --git a/include/Support/Annotation.h b/include/Support/Annotation.h index 43a379eee1..9919732692 100644 --- a/include/Support/Annotation.h +++ b/include/Support/Annotation.h @@ -161,12 +161,17 @@ public: // register an annotation handler // struct AnnotationManager { + typedef Annotation *(*Factory)(AnnotationID, const Annotable *, void*); + //===--------------------------------------------------------------------===// // Basic ID <-> Name map functionality static AnnotationID getID (const string &Name); // Name -> ID static const string &getName(AnnotationID ID); // ID -> Name + // getID - Name -> ID + registration of a factory function for demand driven + // annotation support. + static AnnotationID getID (const string &Name, Factory Fact, void *Data=0); //===--------------------------------------------------------------------===// // Annotation creation on demand support... @@ -175,8 +180,7 @@ struct AnnotationManager { // function used to create an annotation on demand if it is needed by the // Annotable::getOrCreateAnnotation method. // - static void registerAnnotationFactory(AnnotationID ID, - Annotation *(*Func)(AnnotationID, const Annotable *, void *), + static void registerAnnotationFactory(AnnotationID ID, Factory Func, void *ExtraData = 0); // createAnnotation - Create an annotation of the specified ID for the diff --git a/include/llvm/Annotation.h b/include/llvm/Annotation.h index 43a379eee1..9919732692 100644 --- a/include/llvm/Annotation.h +++ b/include/llvm/Annotation.h @@ -161,12 +161,17 @@ public: // register an annotation handler // struct AnnotationManager { + typedef Annotation *(*Factory)(AnnotationID, const Annotable *, void*); + //===--------------------------------------------------------------------===// // Basic ID <-> Name map functionality static AnnotationID getID (const string &Name); // Name -> ID static const string &getName(AnnotationID ID); // ID -> Name + // getID - Name -> ID + registration of a factory function for demand driven + // annotation support. + static AnnotationID getID (const string &Name, Factory Fact, void *Data=0); //===--------------------------------------------------------------------===// // Annotation creation on demand support... @@ -175,8 +180,7 @@ struct AnnotationManager { // function used to create an annotation on demand if it is needed by the // Annotable::getOrCreateAnnotation method. // - static void registerAnnotationFactory(AnnotationID ID, - Annotation *(*Func)(AnnotationID, const Annotable *, void *), + static void registerAnnotationFactory(AnnotationID ID, Factory Func, void *ExtraData = 0); // createAnnotation - Create an annotation of the specified ID for the diff --git a/include/llvm/ConstantHandling.h b/include/llvm/ConstantHandling.h index 453c3e88b1..cbb9789fb0 100644 --- a/include/llvm/ConstantHandling.h +++ b/include/llvm/ConstantHandling.h @@ -58,10 +58,12 @@ inline ConstPoolBool *operator!=(const ConstPoolVal &V1, // Implement all other operators indirectly through TypeRules system //===----------------------------------------------------------------------===// -class ConstRules { +class ConstRules : public Annotation { protected: - inline ConstRules() {} // Can only be subclassed... + inline ConstRules() : Annotation(AID) {} // Can only be subclassed... public: + static AnnotationID AID; // AnnotationID for this class + // Unary Operators... virtual ConstPoolVal *not(const ConstPoolVal *V) const = 0; @@ -110,12 +112,11 @@ public: // we just want to make sure to hit the cache instead of doing it indirectly, // if possible... // - static inline const ConstRules *get(const ConstPoolVal &V) { - const ConstRules *Result = V.getType()->getConstRules(); - return Result ? Result : find(V.getType()); + static inline ConstRules *get(const ConstPoolVal &V) { + return (ConstRules*)V.getType()->getOrCreateAnnotation(AID); } private : - static const ConstRules *find(const Type *Ty); + static Annotation *find(AnnotationID AID, const Annotable *Ty, void *); ConstRules(const ConstRules &); // Do not implement ConstRules &operator=(const ConstRules &); // Do not implement diff --git a/include/llvm/Support/Annotation.h b/include/llvm/Support/Annotation.h index 43a379eee1..9919732692 100644 --- a/include/llvm/Support/Annotation.h +++ b/include/llvm/Support/Annotation.h @@ -161,12 +161,17 @@ public: // register an annotation handler // struct AnnotationManager { + typedef Annotation *(*Factory)(AnnotationID, const Annotable *, void*); + //===--------------------------------------------------------------------===// // Basic ID <-> Name map functionality static AnnotationID getID (const string &Name); // Name -> ID static const string &getName(AnnotationID ID); // ID -> Name + // getID - Name -> ID + registration of a factory function for demand driven + // annotation support. + static AnnotationID getID (const string &Name, Factory Fact, void *Data=0); //===--------------------------------------------------------------------===// // Annotation creation on demand support... @@ -175,8 +180,7 @@ struct AnnotationManager { // function used to create an annotation on demand if it is needed by the // Annotable::getOrCreateAnnotation method. // - static void registerAnnotationFactory(AnnotationID ID, - Annotation *(*Func)(AnnotationID, const Annotable *, void *), + static void registerAnnotationFactory(AnnotationID ID, Factory Func, void *ExtraData = 0); // createAnnotation - Create an annotation of the specified ID for the diff --git a/include/llvm/Type.h b/include/llvm/Type.h index 0f8e6a115e..d5f57cba04 100644 --- a/include/llvm/Type.h +++ b/include/llvm/Type.h @@ -28,9 +28,6 @@ #include "llvm/Value.h" -namespace opt { - class ConstRules; -} class DerivedType; class MethodType; class ArrayType; @@ -78,9 +75,6 @@ private: bool Abstract; // True if type contains an OpaqueType bool Recursive; // True if the type is recursive - // ConstRulesImpl - See Opt/ConstantHandling.h for more info - mutable const opt::ConstRules *ConstRulesImpl; - protected: // ctor is protected, so only subclasses can create Type objects... Type(const string &Name, PrimitiveID id); @@ -175,12 +169,6 @@ public: static const Type *getPrimitiveType(PrimitiveID IDNumber); static const Type *getUniqueIDType(unsigned UID); - // Methods for dealing with constants uniformly. See Opt/ConstantHandling.h - // for more info on this... - // - inline const opt::ConstRules *getConstRules() const { return ConstRulesImpl; } - inline void setConstRules(const opt::ConstRules *R) const { ConstRulesImpl=R;} - //===--------------------------------------------------------------------===// // These are the builtin types that are always available... // |