diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2015-03-24 15:07:53 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2015-03-24 15:07:53 +0000 |
commit | f4cb2be05a51c6ee3aaf3939d729fe63bb81960f (patch) | |
tree | 702c257367a532ecfa454eaafea11497f8f8943f /clang/include | |
parent | 667ef229202b29c4a31e3693a815adf8729f4fd1 (diff) | |
download | bcm5719-llvm-f4cb2be05a51c6ee3aaf3939d729fe63bb81960f.tar.gz bcm5719-llvm-f4cb2be05a51c6ee3aaf3939d729fe63bb81960f.zip |
Track the source location of the dot or arrow operator in a MemberExpr.
Patch by Joe Ranieri!
llvm-svn: 233085
Diffstat (limited to 'clang/include')
-rw-r--r-- | clang/include/clang/AST/Expr.h | 55 |
1 files changed, 29 insertions, 26 deletions
diff --git a/clang/include/clang/AST/Expr.h b/clang/include/clang/AST/Expr.h index c8f121bc193..097605fa25d 100644 --- a/clang/include/clang/AST/Expr.h +++ b/clang/include/clang/AST/Expr.h @@ -2325,6 +2325,9 @@ class MemberExpr : public Expr { /// MemberLoc - This is the location of the member name. SourceLocation MemberLoc; + /// This is the location of the -> or . in the expression. + SourceLocation OperatorLoc; + /// IsArrow - True if this is "X->F", false if this is "X.F". bool IsArrow : 1; @@ -2359,18 +2362,16 @@ class MemberExpr : public Expr { } public: - MemberExpr(Expr *base, bool isarrow, ValueDecl *memberdecl, - const DeclarationNameInfo &NameInfo, QualType ty, - ExprValueKind VK, ExprObjectKind OK) - : Expr(MemberExprClass, ty, VK, OK, - base->isTypeDependent(), - base->isValueDependent(), - base->isInstantiationDependent(), - base->containsUnexpandedParameterPack()), - Base(base), MemberDecl(memberdecl), MemberDNLoc(NameInfo.getInfo()), - MemberLoc(NameInfo.getLoc()), IsArrow(isarrow), - HasQualifierOrFoundDecl(false), HasTemplateKWAndArgsInfo(false), - HadMultipleCandidates(false) { + MemberExpr(Expr *base, bool isarrow, SourceLocation operatorloc, + ValueDecl *memberdecl, const DeclarationNameInfo &NameInfo, + QualType ty, ExprValueKind VK, ExprObjectKind OK) + : Expr(MemberExprClass, ty, VK, OK, base->isTypeDependent(), + base->isValueDependent(), base->isInstantiationDependent(), + base->containsUnexpandedParameterPack()), + Base(base), MemberDecl(memberdecl), MemberDNLoc(NameInfo.getInfo()), + MemberLoc(NameInfo.getLoc()), OperatorLoc(operatorloc), + IsArrow(isarrow), HasQualifierOrFoundDecl(false), + HasTemplateKWAndArgsInfo(false), HadMultipleCandidates(false) { assert(memberdecl->getDeclName() == NameInfo.getName()); } @@ -2378,25 +2379,25 @@ public: // the member name can not provide additional syntactic info // (i.e., source locations for C++ operator names or type source info // for constructors, destructors and conversion operators). - MemberExpr(Expr *base, bool isarrow, ValueDecl *memberdecl, - SourceLocation l, QualType ty, + MemberExpr(Expr *base, bool isarrow, SourceLocation operatorloc, + ValueDecl *memberdecl, SourceLocation l, QualType ty, ExprValueKind VK, ExprObjectKind OK) - : Expr(MemberExprClass, ty, VK, OK, - base->isTypeDependent(), base->isValueDependent(), - base->isInstantiationDependent(), - base->containsUnexpandedParameterPack()), - Base(base), MemberDecl(memberdecl), MemberDNLoc(), MemberLoc(l), - IsArrow(isarrow), - HasQualifierOrFoundDecl(false), HasTemplateKWAndArgsInfo(false), - HadMultipleCandidates(false) {} + : Expr(MemberExprClass, ty, VK, OK, base->isTypeDependent(), + base->isValueDependent(), base->isInstantiationDependent(), + base->containsUnexpandedParameterPack()), + Base(base), MemberDecl(memberdecl), MemberDNLoc(), MemberLoc(l), + OperatorLoc(operatorloc), IsArrow(isarrow), + HasQualifierOrFoundDecl(false), HasTemplateKWAndArgsInfo(false), + HadMultipleCandidates(false) {} static MemberExpr *Create(const ASTContext &C, Expr *base, bool isarrow, + SourceLocation OperatorLoc, NestedNameSpecifierLoc QualifierLoc, - SourceLocation TemplateKWLoc, - ValueDecl *memberdecl, DeclAccessPair founddecl, + SourceLocation TemplateKWLoc, ValueDecl *memberdecl, + DeclAccessPair founddecl, DeclarationNameInfo MemberNameInfo, - const TemplateArgumentListInfo *targs, - QualType ty, ExprValueKind VK, ExprObjectKind OK); + const TemplateArgumentListInfo *targs, QualType ty, + ExprValueKind VK, ExprObjectKind OK); void setBase(Expr *E) { Base = E; } Expr *getBase() const { return cast<Expr>(Base); } @@ -2540,6 +2541,8 @@ public: MemberLoc, MemberDNLoc); } + SourceLocation getOperatorLoc() const LLVM_READONLY { return OperatorLoc; } + bool isArrow() const { return IsArrow; } void setArrow(bool A) { IsArrow = A; } |