diff options
author | Anders Carlsson <andersca@mac.com> | 2009-05-15 20:26:03 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2009-05-15 20:26:03 +0000 |
commit | 1f911dce221e8519e5e06e710122433da9935935 (patch) | |
tree | 246304f33670cf1cc22e634aa09270f415f30b98 /clang/lib | |
parent | 50574f53038bac63e66b2d56c9ffd46d72e5dd6d (diff) | |
download | bcm5719-llvm-1f911dce221e8519e5e06e710122433da9935935.tar.gz bcm5719-llvm-1f911dce221e8519e5e06e710122433da9935935.zip |
Instantiation support for 'this'
llvm-svn: 71886
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaTemplateInstantiateExpr.cpp | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp index 3926397dc2f..c2007c6e3b3 100644 --- a/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp +++ b/clang/lib/Sema/SemaTemplateInstantiateExpr.cpp @@ -47,6 +47,7 @@ namespace { OwningExprResult VisitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *E); OwningExprResult VisitCXXTemporaryObjectExpr(CXXTemporaryObjectExpr *E); OwningExprResult VisitImplicitCastExpr(ImplicitCastExpr *E); + OwningExprResult VisitCXXThisExpr(CXXThisExpr *E); // Base case. I'm supposed to ignore this. Sema::OwningExprResult VisitStmt(Stmt *S) { @@ -418,6 +419,17 @@ Sema::OwningExprResult TemplateExprInstantiator::VisitImplicitCastExpr( return SemaRef.Owned(ICE); } +Sema::OwningExprResult +TemplateExprInstantiator::VisitCXXThisExpr(CXXThisExpr *E) { + QualType ThisType = + cast<CXXMethodDecl>(SemaRef.CurContext)->getThisType(SemaRef.Context); + + CXXThisExpr *TE = + new (SemaRef.Context) CXXThisExpr(E->getLocStart(), ThisType); + + return SemaRef.Owned(TE); +} + Sema::OwningExprResult Sema::InstantiateExpr(Expr *E, const TemplateArgumentList &TemplateArgs) { TemplateExprInstantiator Instantiator(*this, TemplateArgs); |