forked from OSchip/llvm-project
Pseudo-revirtualize CallExpr::getSourceRange by making it follow the
logic from CXXMemberCallExpr and by making it check for CXXOperatorCallExpr in order to defer. This is not really an awesome solution, but I don't have a better idea. llvm-svn: 126114
This commit is contained in:
parent
e9dab636df
commit
701417a0ac
|
@ -1843,9 +1843,7 @@ public:
|
|||
SourceLocation getRParenLoc() const { return RParenLoc; }
|
||||
void setRParenLoc(SourceLocation L) { RParenLoc = L; }
|
||||
|
||||
SourceRange getSourceRange() const {
|
||||
return SourceRange(getCallee()->getLocStart(), RParenLoc);
|
||||
}
|
||||
SourceRange getSourceRange() const;
|
||||
|
||||
static bool classof(const Stmt *T) {
|
||||
return T->getStmtClass() >= firstCallExprConstant &&
|
||||
|
|
|
@ -108,8 +108,6 @@ public:
|
|||
/// FIXME: Returns 0 for member pointer call exprs.
|
||||
CXXRecordDecl *getRecordDecl();
|
||||
|
||||
SourceRange getSourceRange() const;
|
||||
|
||||
static bool classof(const Stmt *T) {
|
||||
return T->getStmtClass() == CXXMemberCallExprClass;
|
||||
}
|
||||
|
|
|
@ -836,6 +836,19 @@ QualType CallExpr::getCallReturnType() const {
|
|||
return FnType->getResultType();
|
||||
}
|
||||
|
||||
SourceRange CallExpr::getSourceRange() const {
|
||||
if (isa<CXXOperatorCallExpr>(this))
|
||||
return cast<CXXOperatorCallExpr>(this)->getSourceRange();
|
||||
|
||||
SourceLocation begin = getCallee()->getLocStart();
|
||||
if (begin.isInvalid() && getNumArgs() > 0)
|
||||
begin = getArg(0)->getLocStart();
|
||||
SourceLocation end = getRParenLoc();
|
||||
if (end.isInvalid() && getNumArgs() > 0)
|
||||
end = getArg(getNumArgs() - 1)->getLocEnd();
|
||||
return SourceRange(begin, end);
|
||||
}
|
||||
|
||||
OffsetOfExpr *OffsetOfExpr::Create(ASTContext &C, QualType type,
|
||||
SourceLocation OperatorLoc,
|
||||
TypeSourceInfo *tsi,
|
||||
|
|
|
@ -335,6 +335,9 @@ DependentScopeDeclRefExpr::CreateEmpty(ASTContext &C,
|
|||
}
|
||||
|
||||
SourceRange CXXConstructExpr::getSourceRange() const {
|
||||
if (isa<CXXTemporaryObjectExpr>(this))
|
||||
return cast<CXXTemporaryObjectExpr>(this)->getSourceRange();
|
||||
|
||||
if (ParenRange.isValid())
|
||||
return SourceRange(Loc, ParenRange.getEnd());
|
||||
|
||||
|
@ -397,13 +400,6 @@ CXXRecordDecl *CXXMemberCallExpr::getRecordDecl() {
|
|||
return ThisArg->getType()->getAsCXXRecordDecl();
|
||||
}
|
||||
|
||||
SourceRange CXXMemberCallExpr::getSourceRange() const {
|
||||
SourceLocation LocStart = getCallee()->getLocStart();
|
||||
if (LocStart.isInvalid() && getNumArgs() > 0)
|
||||
LocStart = getArg(0)->getLocStart();
|
||||
return SourceRange(LocStart, getRParenLoc());
|
||||
}
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Named casts
|
||||
|
|
Loading…
Reference in New Issue