diff options
author | Steve Naroff <snaroff@apple.com> | 2009-04-24 20:03:17 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2009-04-24 20:03:17 +0000 |
commit | 83d63c78810556d26b62ac4cbae2eda6cdd2570c (patch) | |
tree | 7444231d9436acad4d523469ba2b027355c4ad2f /lib/Frontend/PCHReader.cpp | |
parent | ff11cd148b66fb4dfb4eef5b9f8c711ab80bd634 (diff) |
Add PCH support for #import.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69987 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHReader.cpp')
-rw-r--r-- | lib/Frontend/PCHReader.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/Frontend/PCHReader.cpp b/lib/Frontend/PCHReader.cpp index d97cf810ba..62d0ba4f9f 100644 --- a/lib/Frontend/PCHReader.cpp +++ b/lib/Frontend/PCHReader.cpp @@ -23,6 +23,7 @@ #include "clang/AST/Type.h" #include "clang/Lex/MacroInfo.h" #include "clang/Lex/Preprocessor.h" +#include "clang/Lex/HeaderSearch.h" #include "clang/Basic/OnDiskHashTable.h" #include "clang/Basic/SourceManager.h" #include "clang/Basic/SourceManagerInternals.h" @@ -1444,6 +1445,7 @@ void PCHReader::ReadMacroRecord(uint64_t Offset) { RecordData Record; llvm::SmallVector<IdentifierInfo*, 16> MacroArgs; MacroInfo *Macro = 0; + while (true) { unsigned Code = Stream.ReadCode(); switch (Code) { @@ -1536,7 +1538,9 @@ void PCHReader::ReadMacroRecord(uint64_t Offset) { Macro->AddTokenToBody(Tok); break; } - } + case pch::PP_HEADER_FILE_INFO: + break; // Already processed by ReadPreprocessorBlock(). + } } } @@ -1545,6 +1549,7 @@ bool PCHReader::ReadPreprocessorBlock() { return Error("Malformed preprocessor block record"); RecordData Record; + unsigned NumHeaderInfos = 0; while (true) { unsigned Code = Stream.ReadCode(); switch (Code) { @@ -1581,8 +1586,16 @@ bool PCHReader::ReadPreprocessorBlock() { case pch::PP_MACRO_OBJECT_LIKE: case pch::PP_MACRO_FUNCTION_LIKE: case pch::PP_TOKEN: - // Once we've hit a macro definition or a token, we're done. - return false; + break; + case pch::PP_HEADER_FILE_INFO: { + HeaderFileInfo HFI; + HFI.isImport = Record[0]; + HFI.DirInfo = Record[1]; + HFI.NumIncludes = Record[2]; + HFI.ControllingMacro = DecodeIdentifierInfo(Record[3]); + PP.getHeaderSearchInfo().setHeaderFileInfoForUID(HFI, NumHeaderInfos++); + break; + } } } } |