add some comments, add a dyn_cast method.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67992 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2009-03-29 07:03:30 +00:00
parent f341a47d10
commit 3a9fe06bfe

View File

@ -78,18 +78,34 @@ namespace llvm {
Val.setInt(1);
}
/// isNull - Return true if the pointer help in the union is null,
/// regardless of which type it is.
bool isNull() const { return Val.getPointer() == 0; }
/// is<T>() return true if the Union currently holds the type matching T.
template<typename T>
int is() const {
return Val.getInt() == ::llvm::getPointerUnionTypeNum<PT1, PT2>((T*)0);
}
/// get<T>() - Return the value of the specified pointer type. If the
/// specified pointer type is incorrect, assert.
template<typename T>
T get() const {
assert(is<T>() && "Invalid accessor called");
return static_cast<T>(Val.getPointer());
}
/// dyn_cast<T>() - If the current value is of the specified pointer type,
/// return it, otherwise return null.
template<typename T>
T dyn_cast() const {
if (is<T>()) return static_cast<T>(Val.getPointer());
return T();
}
/// Assignment operators - Allow assigning into this union from either
/// pointer type, setting the discriminator to remember what it came from.
const PointerUnion &operator=(const PT1 &RHS) {
Val.setPointer(RHS);
Val.setInt(0);