mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-14 11:32:34 +00:00
Add simplify_type specializations to allow WeakVH, AssertingVH, and
CallbackVH to participate in dyn_cast, isa, etc. without needing an explicit conversion. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71087 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
5dcf50bd03
commit
0ec4146db7
@ -126,8 +126,19 @@ public:
|
|||||||
operator Value*() const {
|
operator Value*() const {
|
||||||
return getValPtr();
|
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
|
/// 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
|
/// 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
|
/// useful for catching dangling pointer bugs and other things which can be
|
||||||
@ -188,6 +199,18 @@ public:
|
|||||||
ValueTy &operator*() const { return *getValPtr(); }
|
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
|
/// 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
|
/// 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
|
/// 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) {}
|
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
|
} // End llvm namespace
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user