[cfe-commits] r152410 - in /cfe/trunk: include/clang/AST/Expr.h lib/AST/Expr.cpp
Daniel Dunbar
daniel at zuster.org
Fri Mar 9 07:39:15 PST 2012
Author: ddunbar
Date: Fri Mar 9 09:39:15 2012
New Revision: 152410
URL: http://llvm.org/viewvc/llvm-project?rev=152410&view=rev
Log:
[AST] Add {DeclRefExpr,MemberExpr,ImplicitCastExpr}::{getLocStart,getLocEnd} methods.
- There are probably a lot more of these worth adding, but these are a start at hitting some of the exprs for which getSourceRange().getBegin() is a poor substitute for getLocStart().
Modified:
cfe/trunk/include/clang/AST/Expr.h
cfe/trunk/lib/AST/Expr.cpp
Modified: cfe/trunk/include/clang/AST/Expr.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Expr.h?rev=152410&r1=152409&r2=152410&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Expr.h (original)
+++ cfe/trunk/include/clang/AST/Expr.h Fri Mar 9 09:39:15 2012
@@ -868,6 +868,8 @@
SourceLocation getLocation() const { return Loc; }
void setLocation(SourceLocation L) { Loc = L; }
SourceRange getSourceRange() const;
+ SourceLocation getLocStart() const;
+ SourceLocation getLocEnd() const;
/// \brief Determine whether this declaration reference was preceded by a
/// C++ nested-name-specifier, e.g., \c N::foo.
@@ -2392,6 +2394,8 @@
void setMemberLoc(SourceLocation L) { MemberLoc = L; }
SourceRange getSourceRange() const;
+ SourceLocation getLocStart() const;
+ SourceLocation getLocEnd() const;
SourceLocation getExprLoc() const { return MemberLoc; }
@@ -2626,6 +2630,12 @@
SourceRange getSourceRange() const {
return getSubExpr()->getSourceRange();
}
+ SourceLocation getLocStart() const {
+ return getSubExpr()->getLocStart();
+ }
+ SourceLocation getLocEnd() const {
+ return getSubExpr()->getLocEnd();
+ }
static bool classof(const Stmt *T) {
return T->getStmtClass() == ImplicitCastExprClass;
Modified: cfe/trunk/lib/AST/Expr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Expr.cpp?rev=152410&r1=152409&r2=152410&view=diff
==============================================================================
--- cfe/trunk/lib/AST/Expr.cpp (original)
+++ cfe/trunk/lib/AST/Expr.cpp Fri Mar 9 09:39:15 2012
@@ -360,6 +360,16 @@
R.setEnd(getRAngleLoc());
return R;
}
+SourceLocation DeclRefExpr::getLocStart() const {
+ if (hasQualifier())
+ return getQualifierLoc().getBeginLoc();
+ return getNameInfo().getLocStart();
+}
+SourceLocation DeclRefExpr::getLocEnd() const {
+ if (hasExplicitTemplateArgs())
+ return getRAngleLoc();
+ return getNameInfo().getLocEnd();
+}
// FIXME: Maybe this should use DeclPrinter with a special "print predefined
// expr" policy instead.
@@ -1016,24 +1026,26 @@
}
SourceRange MemberExpr::getSourceRange() const {
- SourceLocation StartLoc;
+ return SourceRange(getLocStart(), getLocEnd());
+}
+SourceLocation MemberExpr::getLocStart() const {
if (isImplicitAccess()) {
if (hasQualifier())
- StartLoc = getQualifierLoc().getBeginLoc();
- else
- StartLoc = MemberLoc;
- } else {
- // FIXME: We don't want this to happen. Rather, we should be able to
- // detect all kinds of implicit accesses more cleanly.
- StartLoc = getBase()->getLocStart();
- if (StartLoc.isInvalid())
- StartLoc = MemberLoc;
+ return getQualifierLoc().getBeginLoc();
+ return MemberLoc;
}
- SourceLocation EndLoc = hasExplicitTemplateArgs()
- ? getRAngleLoc() : getMemberNameInfo().getEndLoc();
-
- return SourceRange(StartLoc, EndLoc);
+ // FIXME: We don't want this to happen. Rather, we should be able to
+ // detect all kinds of implicit accesses more cleanly.
+ SourceLocation BaseStartLoc = getBase()->getLocStart();
+ if (BaseStartLoc.isValid())
+ return BaseStartLoc;
+ return MemberLoc;
+}
+SourceLocation MemberExpr::getLocEnd() const {
+ if (hasExplicitTemplateArgs())
+ return getRAngleLoc();
+ return getMemberNameInfo().getEndLoc();
}
void CastExpr::CheckCastConsistency() const {
More information about the cfe-commits
mailing list