From 657c1acfc47d5c315ce864f2089b692262532a17 Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Thu, 6 Aug 2009 22:17:10 +0000 Subject: [PATCH] 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 --- lib/Sema/TreeTransform.h | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) 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 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 @@ -467,6 +475,15 @@ public: const IdentifierInfo &II); }; +template +Sema::OwningExprResult TreeTransform::TransformExpr(Expr *E) { + Sema::OwningStmtResult Result = getDerived().TransformStmt(E); + if (Result.isInvalid()) + return SemaRef.ExprError(); + + return SemaRef.Owned(cast_or_null(Result.takeAs())); +} + template NestedNameSpecifier * TreeTransform::TransformNestedNameSpecifier(NestedNameSpecifier *NNS, -- 2.40.0