diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-08-06 22:17:10 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-08-06 22:17:10 +0000 |
commit | 657c1acfc47d5c315ce864f2089b692262532a17 (patch) | |
tree | f0ce0d126e63011ed80c14074c83418886737f2b | |
parent | dac64a51e37a68ca095634aac47a5f14746555e6 (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.h | 19 |
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) { |