summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGabor Greif <ggreif@gmail.com>2009-03-18 23:44:22 +0000
committerGabor Greif <ggreif@gmail.com>2009-03-18 23:44:22 +0000
commit6afd73391eee9fc8b657eb1c55c65da6f1a4b8a4 (patch)
tree4c52e7dd91d2fd93012650e39f8d50ab50de0d7a
parent7ef5ed6c16e29495b853002a89509e69bc3146af (diff)
downloadbcm5719-llvm-6afd73391eee9fc8b657eb1c55c65da6f1a4b8a4.tar.gz
bcm5719-llvm-6afd73391eee9fc8b657eb1c55c65da6f1a4b8a4.zip
Add a sugared version of ASTOwningResult::take,
that does a downcast. It is named takeAs<T>(). The plain-pointer version is also added, but that side seems to be seriously bitrotten. llvm-svn: 67258
-rw-r--r--clang/include/clang/Parse/Ownership.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/clang/include/clang/Parse/Ownership.h b/clang/include/clang/Parse/Ownership.h
index 9665576a050..ce0707e9bf0 100644
--- a/clang/include/clang/Parse/Ownership.h
+++ b/clang/include/clang/Parse/Ownership.h
@@ -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(); }
OpenPOWER on IntegriCloud