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 | 766b0bbe61d7005e869b635a42621b517f1898d5 (patch) | |
tree | 3a8d2beee3c821c972180b517b2afa9b0b27a9cd /clang/lib | |
parent | e6b39f5ca3628d406b66e2bf495f8f8fcedcb028 (diff) | |
download | bcm5719-llvm-766b0bbe61d7005e869b635a42621b517f1898d5.tar.gz bcm5719-llvm-766b0bbe61d7005e869b635a42621b517f1898d5.zip |
Minor refactoring to introduce a new transformation function,
TransformStmt, into the tree transformer.
llvm-svn: 78347
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/TreeTransform.h | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/clang/lib/Sema/TreeTransform.h b/clang/lib/Sema/TreeTransform.h index 1f630b828fb..c935f8118ac 100644 --- a/clang/lib/Sema/TreeTransform.h +++ b/clang/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) { |