aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-08-06 22:17:10 +0000
committerDouglas Gregor <dgregor@apple.com>2009-08-06 22:17:10 +0000
commit657c1acfc47d5c315ce864f2089b692262532a17 (patch)
treef0ce0d126e63011ed80c14074c83418886737f2b
parentdac64a51e37a68ca095634aac47a5f14746555e6 (diff)
Minor refactoring to introduce a new transformation function,
TransformStmt, into the tree transformer. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@78347 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/TreeTransform.h19
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index 1f630b828f..c935f8118a 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -15,6 +15,7 @@
#include "Sema.h"
#include "clang/Sema/SemaDiagnostic.h"
+#include "clang/AST/Expr.h"
#include <algorithm>
namespace clang {
@@ -149,9 +150,16 @@ public:
/// other clients.
QualType AddTypeQualifiers(QualType T, unsigned CVRQualifiers);
- /// \brief Transform the given expression.
+ /// \brief Transform the given statement.
///
/// FIXME: At the moment, subclasses must override this.
+ Sema::OwningStmtResult TransformStmt(Stmt *S);
+
+ /// \brief Transform the given expression.
+ ///
+ /// By default, invokes the derived class's TransformStmt() and downcasts
+ /// the result. Subclasses may override this function to provide alternate
+ /// behavior.
Sema::OwningExprResult TransformExpr(Expr *E);
/// \brief Transform the given declaration, which is referenced from a type
@@ -468,6 +476,15 @@ public:
};
template<typename Derived>
+Sema::OwningExprResult TreeTransform<Derived>::TransformExpr(Expr *E) {
+ Sema::OwningStmtResult Result = getDerived().TransformStmt(E);
+ if (Result.isInvalid())
+ return SemaRef.ExprError();
+
+ return SemaRef.Owned(cast_or_null<Stmt>(Result.takeAs<Stmt>()));
+}
+
+template<typename Derived>
NestedNameSpecifier *
TreeTransform<Derived>::TransformNestedNameSpecifier(NestedNameSpecifier *NNS,
SourceRange Range) {