aboutsummaryrefslogtreecommitdiff
path: root/lib/Basic/SourceManager.cpp
diff options
context:
space:
mode:
authorDouglas Gregor <dgregor@apple.com>2009-04-13 15:31:25 +0000
committerDouglas Gregor <dgregor@apple.com>2009-04-13 15:31:25 +0000
commitd4f77aa7c276be49aee5e59ef509cb91e26aa79f (patch)
tree2acd80810b944b0321f32ea58924943bba275e5b /lib/Basic/SourceManager.cpp
parent841b53c5021152fa930e517d66e02e97ae47c34b (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.cpp97
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.