9 #ifndef LLVM_CLANG_TOOLING_EXPANDMODULARHEADERSPPCALLBACKS_H_
10 #define LLVM_CLANG_TOOLING_EXPANDMODULARHEADERSPPCALLBACKS_H_
12 #include "clang/Lex/PPCallbacks.h"
13 #include "clang/Lex/Preprocessor.h"
14 #include "llvm/ADT/DenseSet.h"
18 class OverlayFileSystem;
24 class CompilerInstance;
26 namespace serialization {
46 CompilerInstance *Compiler,
47 IntrusiveRefCntPtr<llvm::vfs::OverlayFileSystem> OverlayFS);
61 void handleModuleFile(serialization::ModuleFile *MF);
62 void parseToLocation(SourceLocation
Loc);
65 void FileChanged(SourceLocation
Loc, FileChangeReason Reason,
66 SrcMgr::CharacteristicKind FileType,
67 FileID PrevFID)
override;
69 void InclusionDirective(SourceLocation DirectiveLoc,
70 const Token &IncludeToken, StringRef IncludedFilename,
71 bool IsAngled, CharSourceRange FilenameRange,
72 const FileEntry *IncludedFile, StringRef SearchPath,
73 StringRef RelativePath,
const Module *Imported,
74 SrcMgr::CharacteristicKind FileType)
override;
76 void EndOfMainFile()
override;
81 void Ident(SourceLocation
Loc, StringRef)
override;
82 void PragmaDirective(SourceLocation
Loc, PragmaIntroducerKind)
override;
83 void PragmaComment(SourceLocation
Loc,
const IdentifierInfo *,
85 void PragmaDetectMismatch(SourceLocation
Loc, StringRef, StringRef)
override;
86 void PragmaDebug(SourceLocation
Loc, StringRef)
override;
87 void PragmaMessage(SourceLocation
Loc, StringRef, PragmaMessageKind,
89 void PragmaDiagnosticPush(SourceLocation
Loc, StringRef)
override;
90 void PragmaDiagnosticPop(SourceLocation
Loc, StringRef)
override;
91 void PragmaDiagnostic(SourceLocation
Loc, StringRef, diag::Severity,
93 void HasInclude(SourceLocation
Loc, StringRef,
bool, Optional<FileEntryRef> ,
94 SrcMgr::CharacteristicKind)
override;
95 void PragmaOpenCLExtension(SourceLocation NameLoc,
const IdentifierInfo *,
96 SourceLocation StateLoc,
unsigned)
override;
97 void PragmaWarning(SourceLocation
Loc, StringRef, ArrayRef<int>)
override;
98 void PragmaWarningPush(SourceLocation
Loc,
int)
override;
99 void PragmaWarningPop(SourceLocation
Loc)
override;
100 void PragmaAssumeNonNullBegin(SourceLocation
Loc)
override;
101 void PragmaAssumeNonNullEnd(SourceLocation
Loc)
override;
102 void MacroExpands(
const Token &MacroNameTok,
const MacroDefinition &,
103 SourceRange
Range,
const MacroArgs *)
override;
104 void MacroDefined(
const Token &MacroNameTok,
105 const MacroDirective *
MD)
override;
106 void MacroUndefined(
const Token &,
const MacroDefinition &,
107 const MacroDirective *Undef)
override;
108 void Defined(
const Token &MacroNameTok,
const MacroDefinition &,
109 SourceRange
Range)
override;
110 void SourceRangeSkipped(SourceRange
Range, SourceLocation EndifLoc)
override;
111 void If(SourceLocation
Loc, SourceRange, ConditionValueKind)
override;
112 void Elif(SourceLocation
Loc, SourceRange, ConditionValueKind,
113 SourceLocation)
override;
114 void Ifdef(SourceLocation
Loc,
const Token &,
115 const MacroDefinition &)
override;
116 void Ifndef(SourceLocation
Loc,
const Token &,
117 const MacroDefinition &)
override;
118 void Else(SourceLocation
Loc, SourceLocation)
override;
119 void Endif(SourceLocation
Loc, SourceLocation)
override;
121 std::unique_ptr<FileRecorder> Recorder;
123 llvm::DenseSet<serialization::ModuleFile *> VisitedModules;
125 CompilerInstance &Compiler;
127 llvm::IntrusiveRefCntPtr<llvm::vfs::InMemoryFileSystem> InMemoryFs;
129 SourceManager &Sources;
130 DiagnosticsEngine
Diags;
131 LangOptions LangOpts;
132 TrivialModuleLoader ModuleLoader;
134 std::unique_ptr<HeaderSearch> HeaderInfo;
135 std::unique_ptr<Preprocessor>
PP;
136 bool EnteredMainFile =
false;
137 bool StartedLexing =
false;
144 #endif // LLVM_CLANG_TOOLING_EXPANDMODULARHEADERSPPCALLBACKS_H_