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
diff --git a/include/llvm/ADT/PointerUnion.h b/include/llvm/ADT/PointerUnion.h
index 7a4de65..01272b8 100644
--- a/include/llvm/ADT/PointerUnion.h
+++ b/include/llvm/ADT/PointerUnion.h
@@ -78,18 +78,34 @@
       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);