diff options
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) { |