add a PPCallback handler for a skipped #include, patch by
Zhanyong Wan! llvm-svn: 101813
This commit is contained in:
parent
561fa8490e
commit
72286d6129
|
@ -44,6 +44,14 @@ public:
|
|||
SrcMgr::CharacteristicKind FileType) {
|
||||
}
|
||||
|
||||
/// FileSkipped - This callback is invoked whenever a source file is
|
||||
/// skipped as the result of header guard optimization. ParentFile
|
||||
/// is the file that #includes the skipped file. FilenameTok is the
|
||||
/// token in ParentFile that indicates the skipped file.
|
||||
virtual void FileSkipped(const FileEntry &ParentFile,
|
||||
const Token &FilenameTok,
|
||||
SrcMgr::CharacteristicKind FileType) {
|
||||
}
|
||||
|
||||
/// EndOfMainFile - This callback is invoked when the end of the main file is
|
||||
/// reach, no subsequent callbacks will be made.
|
||||
|
@ -96,6 +104,13 @@ public:
|
|||
Second->FileChanged(Loc, Reason, FileType);
|
||||
}
|
||||
|
||||
virtual void FileSkipped(const FileEntry &ParentFile,
|
||||
const Token &FilenameTok,
|
||||
SrcMgr::CharacteristicKind FileType) {
|
||||
First->FileSkipped(ParentFile, FilenameTok, FileType);
|
||||
Second->FileSkipped(ParentFile, FilenameTok, FileType);
|
||||
}
|
||||
|
||||
virtual void EndOfMainFile() {
|
||||
First->EndOfMainFile();
|
||||
Second->EndOfMainFile();
|
||||
|
|
|
@ -1088,11 +1088,6 @@ void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
|
|||
return;
|
||||
}
|
||||
|
||||
// Ask HeaderInfo if we should enter this #include file. If not, #including
|
||||
// this file will have no effect.
|
||||
if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport))
|
||||
return;
|
||||
|
||||
// The #included file will be considered to be a system header if either it is
|
||||
// in a system include directory, or if the #includer is a system include
|
||||
// header.
|
||||
|
@ -1100,6 +1095,15 @@ void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
|
|||
std::max(HeaderInfo.getFileDirFlavor(File),
|
||||
SourceMgr.getFileCharacteristic(FilenameTok.getLocation()));
|
||||
|
||||
// Ask HeaderInfo if we should enter this #include file. If not, #including
|
||||
// this file will have no effect.
|
||||
if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport)) {
|
||||
if (Callbacks) {
|
||||
Callbacks->FileSkipped(*File, FilenameTok, FileCharacter);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Look up the file, create a File ID for it.
|
||||
FileID FID = SourceMgr.createFileID(File, FilenameTok.getLocation(),
|
||||
FileCharacter);
|
||||
|
@ -1667,4 +1671,3 @@ void Preprocessor::HandleElifDirective(Token &ElifToken) {
|
|||
return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
|
||||
/*FoundElse*/CI.FoundElse);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue