From d4f77aa7c276be49aee5e59ef509cb91e26aa79f Mon Sep 17 00:00:00 2001 From: Douglas Gregor Date: Mon, 13 Apr 2009 15:31:25 +0000 Subject: 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 --- lib/Basic/SourceManager.cpp | 97 +-------------------------------------------- 1 file changed, 1 insertion(+), 96 deletions(-) (limited to 'lib/Basic/SourceManager.cpp') 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 FilenameIDs; - std::vector*> 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 > 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. -- cgit v1.2.3-18-g5258