]> granicus.if.org Git - clang/commit
Revamp the SourceManager to separate the representation of parsed
authorDouglas Gregor <dgregor@apple.com>
Tue, 19 Jul 2011 16:10:42 +0000 (16:10 +0000)
committerDouglas Gregor <dgregor@apple.com>
Tue, 19 Jul 2011 16:10:42 +0000 (16:10 +0000)
commitf62d43d2afe1960755a1b5813cae1e5983bcac1b
tree9e09cd7b4c741d5b46c9784d9dc13d9e3c9d7f6f
parent0c8e5a0f70cbdb800d939c1807d05f380b2854d4
Revamp the SourceManager to separate the representation of parsed
source locations from source locations loaded from an AST/PCH file.

Previously, loading an AST/PCH file involved carefully pre-allocating
space at the beginning of the source manager for the source locations
and FileIDs that correspond to the prefix, and then appending the
source locations/FileIDs used for parsing the remaining translation
unit. This design forced us into loading PCH files early, as a prefix,
whic has become a rather significant limitation.

This patch splits the SourceManager space into two parts: for source
location "addresses", the lower values (growing upward) are used to
describe parsed code, while upper values (growing downward) are used
for source locations loaded from AST/PCH files. Similarly, positive
FileIDs are used to describe parsed code while negative FileIDs are
used to file/macro locations loaded from AST/PCH files. As a result,
we can load PCH/AST files even during parsing, making various
improvemnts in the future possible, e.g., teaching #include <foo.h> to
look for and load <foo.h.gch> if it happens to be already available.

This patch was originally written by Sebastian Redl, then brought
forward to the modern age by Jonathan Turner, and finally
polished/finished by me to be committed.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@135484 91177308-0d34-0410-b5e6-96231b3b80d8
22 files changed:
include/clang/Basic/Diagnostic.h
include/clang/Basic/SourceLocation.h
include/clang/Basic/SourceManager.h
include/clang/Basic/SourceManagerInternals.h
include/clang/Frontend/ASTUnit.h
include/clang/Frontend/CompilerInstance.h
include/clang/Serialization/ASTBitCodes.h
include/clang/Serialization/ASTReader.h
include/clang/Serialization/ContinuousRangeMap.h [new file with mode: 0644]
lib/Basic/Diagnostic.cpp
lib/Basic/SourceManager.cpp
lib/Frontend/ASTUnit.cpp
lib/Frontend/CompilerInstance.cpp
lib/Frontend/FrontendAction.cpp
lib/Lex/Lexer.cpp
lib/Lex/TokenLexer.cpp
lib/Serialization/ASTReader.cpp
lib/Serialization/ASTWriter.cpp
test/Index/Inputs/preamble_macro_template.h [new file with mode: 0644]
test/Index/preamble_macro_template.cpp [new file with mode: 0644]
test/PCH/reinclude.cpp
tools/libclang/CIndexInclusionStack.cpp