diff options
| author | Dan Gohman <gohman@apple.com> | 2009-05-06 17:12:48 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2009-05-06 17:12:48 +0000 |
| commit | f35c5a5fac4548317b1645e1dac5778c6c69d1ba (patch) | |
| tree | 85e360953494b6464c4a2760c22576f50778b2d2 /llvm/include | |
| parent | 49518d8f549d90b8d48024c7b5e9d45841794289 (diff) | |
| download | bcm5719-llvm-f35c5a5fac4548317b1645e1dac5778c6c69d1ba.tar.gz bcm5719-llvm-f35c5a5fac4548317b1645e1dac5778c6c69d1ba.zip | |
Add simplify_type specializations to allow WeakVH, AssertingVH, and
CallbackVH to participate in dyn_cast, isa, etc. without needing
an explicit conversion.
llvm-svn: 71087
Diffstat (limited to 'llvm/include')
| -rw-r--r-- | llvm/include/llvm/Support/ValueHandle.h | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/llvm/include/llvm/Support/ValueHandle.h b/llvm/include/llvm/Support/ValueHandle.h index 5c6fb74c1f5..a97a5e88142 100644 --- a/llvm/include/llvm/Support/ValueHandle.h +++ b/llvm/include/llvm/Support/ValueHandle.h @@ -126,8 +126,19 @@ public: operator Value*() const { return getValPtr(); } -}; - +}; + +// Specialize simplify_type to allow WeakVH to participate in +// dyn_cast, isa, etc. +template<typename From> struct simplify_type; +template<> struct simplify_type<const WeakVH> { + typedef Value* SimpleType; + static SimpleType getSimplifiedValue(const WeakVH &WVH) { + return static_cast<Value *>(WVH); + } +}; +template<> struct simplify_type<WeakVH> : public simplify_type<const WeakVH> {}; + /// AssertingVH - This is a Value Handle that points to a value and asserts out /// if the value is destroyed while the handle is still live. This is very /// useful for catching dangling pointer bugs and other things which can be @@ -188,6 +199,18 @@ public: ValueTy &operator*() const { return *getValPtr(); } }; +// Specialize simplify_type to allow AssertingVH to participate in +// dyn_cast, isa, etc. +template<typename From> struct simplify_type; +template<> struct simplify_type<const AssertingVH<Value> > { + typedef Value* SimpleType; + static SimpleType getSimplifiedValue(const AssertingVH<Value> &AVH) { + return static_cast<Value *>(AVH); + } +}; +template<> struct simplify_type<AssertingVH<Value> > + : public simplify_type<const AssertingVH<Value> > {}; + /// CallbackVH - This is a value handle that allows subclasses to define /// callbacks that run when the underlying Value has RAUW called on it or is /// destroyed. This class can be used as the key of a map, as long as the user @@ -232,6 +255,18 @@ public: virtual void allUsesReplacedWith(Value *new_value) {} }; +// Specialize simplify_type to allow CallbackVH to participate in +// dyn_cast, isa, etc. +template<typename From> struct simplify_type; +template<> struct simplify_type<const CallbackVH> { + typedef Value* SimpleType; + static SimpleType getSimplifiedValue(const CallbackVH &CVH) { + return static_cast<Value *>(CVH); + } +}; +template<> struct simplify_type<CallbackVH> + : public simplify_type<const CallbackVH> {}; + } // End llvm namespace #endif |

