aboutsummaryrefslogtreecommitdiff
path: root/lib/Sema/TreeTransform.h
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-08-31 23:41:50 +0000
committerDouglas Gregor <dgregor@apple.com>2009-08-31 23:41:50 +0000
commit83f6faf37d9bf58986bedc9bc0ea897a56b4dbad (patch)
tree66c6f0270874fe1b36d0be3a6b555fd8b7349695 /lib/Sema/TreeTransform.h
parentab88d97734f1260402a0c6a8f6b77bed7ed4e295 (diff)
Eliminate CXXAdornedMemberExpr entirely. Instead, optionally allocate
space within the MemberExpr for the nested-name-specifier and its source range. We'll do the same thing with explicitly-specified template arguments, assuming I don't flip-flop again. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80642 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Sema/TreeTransform.h')
-rw-r--r--lib/Sema/TreeTransform.h88
1 files changed, 24 insertions, 64 deletions
diff --git a/lib/Sema/TreeTransform.h b/lib/Sema/TreeTransform.h
index 8cb57d904f..3879b39e6e 100644
--- a/lib/Sema/TreeTransform.h
+++ b/lib/Sema/TreeTransform.h
@@ -835,13 +835,23 @@ public:
/// By default, performs semantic analysis to build the new expression.
/// Subclasses may override this routine to provide different behavior.
OwningExprResult RebuildMemberExpr(ExprArg Base, SourceLocation OpLoc,
- bool isArrow, SourceLocation MemberLoc,
+ bool isArrow,
+ NestedNameSpecifier *Qualifier,
+ SourceRange QualifierRange,
+ SourceLocation MemberLoc,
NamedDecl *Member) {
+ CXXScopeSpec SS;
+ if (Qualifier) {
+ SS.setRange(QualifierRange);
+ SS.setScopeRep(Qualifier);
+ }
+
return getSema().BuildMemberReferenceExpr(/*Scope=*/0, move(Base), OpLoc,
isArrow? tok::arrow : tok::period,
MemberLoc,
Member->getDeclName(),
- /*FIXME?*/Sema::DeclPtrTy::make((Decl*)0));
+ /*FIXME?*/Sema::DeclPtrTy::make((Decl*)0),
+ &SS);
}
/// \brief Build a new binary operator expression.
@@ -1421,30 +1431,6 @@ public:
RParenLoc);
}
- /// \brief Build a new qualified member access expression.
- ///
- /// By default, performs semantic analysis to build the new expression.
- /// Subclasses may override this routine to provide different behavior.
- OwningExprResult RebuildCXXAdornedMemberExpr(ExprArg Base,
- SourceLocation OpLoc,
- bool isArrow,
- NestedNameSpecifier *Qualifier,
- SourceRange QualifierRange,
- SourceLocation MemberLoc,
- NamedDecl *Member) {
- CXXScopeSpec SS;
- if (Qualifier) {
- SS.setRange(QualifierRange);
- SS.setScopeRep(Qualifier);
- }
- return getSema().BuildMemberReferenceExpr(/*Scope=*/0, move(Base), OpLoc,
- isArrow? tok::arrow : tok::period,
- MemberLoc,
- Member->getDeclName(),
- /*FIXME?*/Sema::DeclPtrTy::make((Decl*)0),
- &SS);
- }
-
/// \brief Build a new member reference expression.
///
/// By default, performs semantic analysis to build the new expression.
@@ -2973,6 +2959,15 @@ TreeTransform<Derived>::TransformMemberExpr(MemberExpr *E) {
if (Base.isInvalid())
return SemaRef.ExprError();
+ NestedNameSpecifier *Qualifier = 0;
+ if (E->hasQualifier()) {
+ Qualifier
+ = getDerived().TransformNestedNameSpecifier(E->getQualifier(),
+ E->getQualifierRange());
+ if (Qualifier == 0);
+ return SemaRef.ExprError();
+ }
+
NamedDecl *Member
= cast_or_null<NamedDecl>(getDerived().TransformDecl(E->getMemberDecl()));
if (!Member)
@@ -2980,6 +2975,7 @@ TreeTransform<Derived>::TransformMemberExpr(MemberExpr *E) {
if (!getDerived().AlwaysRebuild() &&
Base.get() == E->getBase() &&
+ Qualifier == E->getQualifier() &&
Member == E->getMemberDecl())
return SemaRef.Owned(E->Retain());
@@ -2989,6 +2985,8 @@ TreeTransform<Derived>::TransformMemberExpr(MemberExpr *E) {
return getDerived().RebuildMemberExpr(move(Base), FakeOperatorLoc,
E->isArrow(),
+ Qualifier,
+ E->getQualifierRange(),
E->getMemberLoc(),
Member);
}
@@ -4016,45 +4014,7 @@ TreeTransform<Derived>::TransformCXXUnresolvedConstructExpr(
FakeCommaLocs.data(),
E->getRParenLoc());
}
-
-template<typename Derived>
-Sema::OwningExprResult
-TreeTransform<Derived>::TransformCXXAdornedMemberExpr(
- CXXAdornedMemberExpr *E) {
- OwningExprResult Base = getDerived().TransformExpr(E->getBase());
- if (Base.isInvalid())
- return SemaRef.ExprError();
-
- NamedDecl *Member
- = cast_or_null<NamedDecl>(getDerived().TransformDecl(E->getMemberDecl()));
- if (!Member)
- return SemaRef.ExprError();
- NestedNameSpecifier *Qualifier
- = getDerived().TransformNestedNameSpecifier(E->getQualifier(),
- E->getQualifierRange());
- if (Qualifier == 0 && E->getQualifier() != 0)
- return SemaRef.ExprError();
-
- if (!getDerived().AlwaysRebuild() &&
- Base.get() == E->getBase() &&
- Member == E->getMemberDecl() &&
- Qualifier == E->getQualifier())
- return SemaRef.Owned(E->Retain());
-
- // FIXME: Bogus source location for the operator
- SourceLocation FakeOperatorLoc
- = SemaRef.PP.getLocForEndOfToken(E->getBase()->getSourceRange().getEnd());
-
- return getDerived().RebuildCXXAdornedMemberExpr(move(Base),
- FakeOperatorLoc,
- E->isArrow(),
- Qualifier,
- E->getQualifierRange(),
- E->getMemberLoc(),
- Member);
-}
-
template<typename Derived>
Sema::OwningExprResult
TreeTransform<Derived>::TransformCXXUnresolvedMemberExpr(