forked from OSchip/llvm-project
add a new SourceManager::getInstantiationRange helper method.
llvm-svn: 64606
This commit is contained in:
parent
641f1eab77
commit
f52c0b261c
|
@ -425,8 +425,8 @@ public:
|
|||
return SourceLocation::getFileLoc(FileOffset);
|
||||
}
|
||||
|
||||
/// Given a SourceLocation object, return the instantiation location
|
||||
/// referenced by the ID.
|
||||
/// getInstantiationLoc - Given a SourceLocation object, return the
|
||||
/// instantiation location referenced by the ID.
|
||||
SourceLocation getInstantiationLoc(SourceLocation Loc) const {
|
||||
// Handle the non-mapped case inline, defer to out of line code to handle
|
||||
// instantiations.
|
||||
|
@ -439,6 +439,12 @@ public:
|
|||
std::pair<SourceLocation,SourceLocation>
|
||||
getImmediateInstantiationRange(SourceLocation Loc) const;
|
||||
|
||||
/// getInstantiationRange - Given a SourceLocation object, return the
|
||||
/// range of tokens covered by the instantiation in the ultimate file.
|
||||
std::pair<SourceLocation,SourceLocation>
|
||||
getInstantiationRange(SourceLocation Loc) const;
|
||||
|
||||
|
||||
/// getSpellingLoc - Given a SourceLocation object, return the spelling
|
||||
/// location referenced by the ID. This is the place where the characters
|
||||
/// that make up the lexed token can be found.
|
||||
|
|
|
@ -606,6 +606,24 @@ SourceManager::getImmediateInstantiationRange(SourceLocation Loc) const {
|
|||
return II.getInstantiationLocRange();
|
||||
}
|
||||
|
||||
/// getInstantiationRange - Given a SourceLocation object, return the
|
||||
/// range of tokens covered by the instantiation in the ultimate file.
|
||||
std::pair<SourceLocation,SourceLocation>
|
||||
SourceManager::getInstantiationRange(SourceLocation Loc) const {
|
||||
if (Loc.isFileID()) return std::make_pair(Loc, Loc);
|
||||
|
||||
std::pair<SourceLocation,SourceLocation> Res =
|
||||
getImmediateInstantiationRange(Loc);
|
||||
|
||||
// Fully resolve the start and end locations to their ultimate instantiation
|
||||
// points.
|
||||
while (!Res.first.isFileID())
|
||||
Res.first = getImmediateInstantiationRange(Res.first).first;
|
||||
while (!Res.second.isFileID())
|
||||
Res.second = getImmediateInstantiationRange(Res.second).second;
|
||||
return Res;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
|
|
@ -471,9 +471,7 @@ void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
|
|||
// can matter for a function-like macro that expands to contain __LINE__.
|
||||
// Skip down through instantiation points until we find a file loc for the
|
||||
// end of the instantiation history.
|
||||
while (!Loc.isFileID())
|
||||
Loc = SourceMgr.getImmediateInstantiationRange(Loc).second;
|
||||
|
||||
Loc = SourceMgr.getInstantiationRange(Loc).second;
|
||||
PresumedLoc PLoc = SourceMgr.getPresumedLoc(Loc);
|
||||
|
||||
// __LINE__ expands to a simple numeric value. Add a space after it so that
|
||||
|
|
Loading…
Reference in New Issue