summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorAnders Carlsson <andersca@mac.com>2009-05-15 20:26:03 +0000
committerAnders Carlsson <andersca@mac.com>2009-05-15 20:26:03 +0000
commit1f911dce221e8519e5e06e710122433da9935935 (patch)
tree246304f33670cf1cc22e634aa09270f415f30b98 /clang/lib
parent50574f53038bac63e66b2d56c9ffd46d72e5dd6d (diff)
downloadbcm5719-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.cpp12
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);
OpenPOWER on IntegriCloud