diff options
author | Douglas Gregor <dgregor@apple.com> | 2009-04-13 15:31:25 +0000 |
---|---|---|
committer | Douglas Gregor <dgregor@apple.com> | 2009-04-13 15:31:25 +0000 |
commit | d4f77aa7c276be49aee5e59ef509cb91e26aa79f (patch) | |
tree | 2acd80810b944b0321f32ea58924943bba275e5b /lib/Basic/SourceManager.cpp | |
parent | 841b53c5021152fa930e517d66e02e97ae47c34b (diff) |
Factor the internals of SourceManager (specially, LineTableInfo) into a separate Internals header. No functionality change
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68960 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Basic/SourceManager.cpp')
-rw-r--r-- | lib/Basic/SourceManager.cpp | 97 |
1 files changed, 1 insertions, 96 deletions
diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index 2c667811a1..d3fbeeb1bb 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "clang/Basic/SourceManager.h" +#include "clang/Basic/SourceManagerInternals.h" #include "clang/Basic/FileManager.h" #include "llvm/Support/Compiler.h" #include "llvm/Support/MemoryBuffer.h" @@ -57,102 +58,6 @@ const llvm::MemoryBuffer *ContentCache::getBuffer() const { return Buffer; } -//===----------------------------------------------------------------------===// -// Line Table Implementation -//===----------------------------------------------------------------------===// - -namespace clang { -struct LineEntry { - /// FileOffset - The offset in this file that the line entry occurs at. - unsigned FileOffset; - - /// LineNo - The presumed line number of this line entry: #line 4. - unsigned LineNo; - - /// FilenameID - The ID of the filename identified by this line entry: - /// #line 4 "foo.c". This is -1 if not specified. - int FilenameID; - - /// Flags - Set the 0 if no flags, 1 if a system header, - SrcMgr::CharacteristicKind FileKind; - - /// IncludeOffset - This is the offset of the virtual include stack location, - /// which is manipulated by GNU linemarker directives. If this is 0 then - /// there is no virtual #includer. - unsigned IncludeOffset; - - static LineEntry get(unsigned Offs, unsigned Line, int Filename, - SrcMgr::CharacteristicKind FileKind, - unsigned IncludeOffset) { - LineEntry E; - E.FileOffset = Offs; - E.LineNo = Line; - E.FilenameID = Filename; - E.FileKind = FileKind; - E.IncludeOffset = IncludeOffset; - return E; - } -}; - -// needed for FindNearestLineEntry (upper_bound of LineEntry) -inline bool operator<(const LineEntry &lhs, const LineEntry &rhs) { - // FIXME: should check the other field? - return lhs.FileOffset < rhs.FileOffset; -} - -inline bool operator<(const LineEntry &E, unsigned Offset) { - return E.FileOffset < Offset; -} - -inline bool operator<(unsigned Offset, const LineEntry &E) { - return Offset < E.FileOffset; -} - -/// LineTableInfo - This class is used to hold and unique data used to -/// represent #line information. -class LineTableInfo { - /// FilenameIDs - This map is used to assign unique IDs to filenames in - /// #line directives. This allows us to unique the filenames that - /// frequently reoccur and reference them with indices. FilenameIDs holds - /// the mapping from string -> ID, and FilenamesByID holds the mapping of ID - /// to string. - llvm::StringMap<unsigned, llvm::BumpPtrAllocator> FilenameIDs; - std::vector<llvm::StringMapEntry<unsigned>*> FilenamesByID; - - /// LineEntries - This is a map from FileIDs to a list of line entries (sorted - /// by the offset they occur in the file. - std::map<unsigned, std::vector<LineEntry> > LineEntries; -public: - LineTableInfo() { - } - - void clear() { - FilenameIDs.clear(); - FilenamesByID.clear(); - LineEntries.clear(); - } - - ~LineTableInfo() {} - - unsigned getLineTableFilenameID(const char *Ptr, unsigned Len); - const char *getFilename(unsigned ID) const { - assert(ID < FilenamesByID.size() && "Invalid FilenameID"); - return FilenamesByID[ID]->getKeyData(); - } - - void AddLineNote(unsigned FID, unsigned Offset, - unsigned LineNo, int FilenameID); - void AddLineNote(unsigned FID, unsigned Offset, - unsigned LineNo, int FilenameID, - unsigned EntryExit, SrcMgr::CharacteristicKind FileKind); - - - /// FindNearestLineEntry - Find the line entry nearest to FID that is before - /// it. If there is no line entry before Offset in FID, return null. - const LineEntry *FindNearestLineEntry(unsigned FID, unsigned Offset); -}; -} // namespace clang - unsigned LineTableInfo::getLineTableFilenameID(const char *Ptr, unsigned Len) { // Look up the filename in the string table, returning the pre-existing value // if it exists. |