diff options
author | Chris Lattner <sabre@nondot.org> | 2009-02-03 22:13:05 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2009-02-03 22:13:05 +0000 |
commit | 6e0e1f49a54c430d51cadf37e38131bac6bfa86b (patch) | |
tree | d5949ce7ab3f59c2e2275fc52899606a09a5b434 /clang/lib/Basic/SourceManager.cpp | |
parent | 2032cadd0ff0b5851c7222a6bc927141b8a9a259 (diff) | |
download | bcm5719-llvm-6e0e1f49a54c430d51cadf37e38131bac6bfa86b.tar.gz bcm5719-llvm-6e0e1f49a54c430d51cadf37e38131bac6bfa86b.zip |
more plumbing for #line propagation. Use happy bit #3
out of FileInfo :)
llvm-svn: 63672
Diffstat (limited to 'clang/lib/Basic/SourceManager.cpp')
-rw-r--r-- | clang/lib/Basic/SourceManager.cpp | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/clang/lib/Basic/SourceManager.cpp b/clang/lib/Basic/SourceManager.cpp index ce9efb034a9..02568d373fe 100644 --- a/clang/lib/Basic/SourceManager.cpp +++ b/clang/lib/Basic/SourceManager.cpp @@ -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); } |