summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2009-02-03 22:13:05 +0000
committerChris Lattner <sabre@nondot.org>2009-02-03 22:13:05 +0000
commit6e0e1f49a54c430d51cadf37e38131bac6bfa86b (patch)
treed5949ce7ab3f59c2e2275fc52899606a09a5b434 /clang/lib/Basic/SourceManager.cpp
parent2032cadd0ff0b5851c7222a6bc927141b8a9a259 (diff)
downloadbcm5719-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.cpp22
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);
}
OpenPOWER on IntegriCloud