more plumbing for #line propagation. Use happy bit #3

out of FileInfo :)

llvm-svn: 63672
This commit is contained in:
Chris Lattner 2009-02-03 22:13:05 +00:00
parent 2032cadd0f
commit 6e0e1f49a5
2 changed files with 31 additions and 1 deletions

View File

@ -161,6 +161,16 @@ namespace SrcMgr {
CharacteristicKind getFileCharacteristic() const {
return (CharacteristicKind)(Data & 3);
}
/// hasLineDirectives - Return true if this FileID has #line directives in
/// it.
bool hasLineDirectives() const { return (Data & 4) != 0; }
/// setHasLineDirectives - Set the flag that indicates that this FileID has
/// line table entries associated with it.
void setHasLineDirectives() {
Data |= 4;
}
};
/// InstantiationInfo - Each InstantiationInfo encodes the Instantiation

View File

@ -84,7 +84,8 @@ public:
~LineTableInfo() {}
unsigned getLineTableFilenameID(const char *Ptr, unsigned Len);
void AddLineNote(FileID FID, unsigned Offset,
unsigned LineNo, int FilenameID);
};
} // namespace clang
@ -105,6 +106,16 @@ unsigned LineTableInfo::getLineTableFilenameID(const char *Ptr, unsigned Len) {
return FilenamesByID.size()-1;
}
/// AddLineNote - Add a line note to the line table that indicates that there
/// is a #line at the specified FID/Offset location which changes the presumed
/// location to LineNo/FilenameID.
void LineTableInfo::AddLineNote(FileID FID, unsigned Offset,
unsigned LineNo, int FilenameID) {
}
/// getLineTableFilenameID - Return the uniqued ID for the specified filename.
///
unsigned SourceManager::getLineTableFilenameID(const char *Ptr, unsigned Len) {
@ -119,7 +130,16 @@ unsigned SourceManager::getLineTableFilenameID(const char *Ptr, unsigned Len) {
/// unspecified.
void SourceManager::AddLineNote(SourceLocation Loc, unsigned LineNo,
int FilenameID) {
std::pair<FileID, unsigned> LocInfo = getDecomposedInstantiationLoc(Loc);
const SrcMgr::FileInfo &FileInfo = getSLocEntry(LocInfo.first).getFile();
// Remember that this file has #line directives now if it doesn't already.
const_cast<SrcMgr::FileInfo&>(FileInfo).setHasLineDirectives();
if (LineTable == 0)
LineTable = new LineTableInfo();
LineTable->AddLineNote(LocInfo.first, LocInfo.second, LineNo, FilenameID);
}