]> granicus.if.org Git - clang/commitdiff
Add a sugared version of ASTOwningResult::take,
authorGabor Greif <ggreif@gmail.com>
Wed, 18 Mar 2009 23:44:22 +0000 (23:44 +0000)
committerGabor Greif <ggreif@gmail.com>
Wed, 18 Mar 2009 23:44:22 +0000 (23:44 +0000)
that does a downcast. It is named takeAs<T>().
The plain-pointer version is also added, but
that side seems to be seriously bitrotten.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67258 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Parse/Ownership.h

index 9665576a0504d5c32b5100b40a98e0441e7980d7..ce0707e9bf027163f66708164b456411331fc725 100644 (file)
@@ -204,8 +204,8 @@ namespace clang
     /// when recovering from errors. These are in ActionBase because the smart
     /// pointers need access to them.
     virtual void DeleteExpr(ExprTy *E) {}
-    virtual void DeleteStmt(StmtTy *E) {}
-    virtual void DeleteTemplateParams(TemplateParamsTy *E) {}
+    virtual void DeleteStmt(StmtTy *S) {}
+    virtual void DeleteTemplateParams(TemplateParamsTy *P) {}
   };
 
   /// ASTDestroyer - The type of an AST node destruction function pointer.
@@ -383,6 +383,12 @@ namespace clang
       return tmp;
     }
 
+    /// Take outside ownership of the raw pointer and cast it down.
+    template<typename T>
+    T *takeAs() {
+      return static_cast<T*>(take());
+    }
+
     /// Alias for interface familiarity with unique_ptr.
     void * release() { return take(); }
 
@@ -443,6 +449,12 @@ namespace clang
       return Result.get();
     }
 
+    /// Take outside ownership of the raw pointer and cast it down.
+    template<typename T>
+    T *takeAs() {
+      return static_cast<T*>(take());
+    }
+
     /// Alias for interface familiarity with unique_ptr.
     void * release() { return take(); }