From 308047d3a5dc226ab49758253e4a2e4a69c6e43d Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Wed, 9 Sep 2009 00:23:06 +0000 Subject: Initial stab at implement dependent member references to member templates, e.g., x.template get We can now parse these, represent them within an UnresolvedMemberExpr expression, then instantiate that expression node in simple cases. This allows us to stumble through parsing LLVM's Casting.h. llvm-svn: 81300 --- clang/lib/Sema/SemaExpr.cpp | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) (limited to 'clang/lib/Sema/SemaExpr.cpp') diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index 17708346ab8..2644c1d6f75 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -2029,14 +2029,17 @@ Sema::BuildMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc, FirstQualifierInScope = FindFirstQualifierInScope(S, Qualifier); } - return Owned(new (Context) CXXUnresolvedMemberExpr(Context, - BaseExpr, true, - OpLoc, - Qualifier, + return Owned(CXXUnresolvedMemberExpr::Create(Context, BaseExpr, true, + OpLoc, Qualifier, SS? SS->getRange() : SourceRange(), - FirstQualifierInScope, - MemberName, - MemberLoc)); + FirstQualifierInScope, + MemberName, + MemberLoc, + HasExplicitTemplateArgs, + LAngleLoc, + ExplicitTemplateArgs, + NumExplicitTemplateArgs, + RAngleLoc)); } else if (const PointerType *PT = BaseType->getAs()) BaseType = PT->getPointeeType(); @@ -2067,14 +2070,19 @@ Sema::BuildMemberReferenceExpr(Scope *S, ExprArg Base, SourceLocation OpLoc, FirstQualifierInScope = FindFirstQualifierInScope(S, Qualifier); } - return Owned(new (Context) CXXUnresolvedMemberExpr(Context, - BaseExpr, false, - OpLoc, - Qualifier, + return Owned(CXXUnresolvedMemberExpr::Create(Context, + BaseExpr, false, + OpLoc, + Qualifier, SS? SS->getRange() : SourceRange(), - FirstQualifierInScope, - MemberName, - MemberLoc)); + FirstQualifierInScope, + MemberName, + MemberLoc, + HasExplicitTemplateArgs, + LAngleLoc, + ExplicitTemplateArgs, + NumExplicitTemplateArgs, + RAngleLoc)); } } } -- cgit v1.2.3