@@ -35,13 +35,6 @@ class IncludeTreeActionController : public CallbackActionController {
35
35
Error initialize (CompilerInstance &ScanInstance,
36
36
CompilerInvocation &NewInvocation) override ;
37
37
38
- void enteredInclude (Preprocessor &PP, FileID FID) override ;
39
-
40
- void exitedInclude (Preprocessor &PP, FileID IncludedBy, FileID Include,
41
- SourceLocation ExitLoc) override ;
42
-
43
- void handleHasIncludeCheck (Preprocessor &PP, bool Result) override ;
44
-
45
38
const DepscanPrefixMapping *getPrefixMapping () override {
46
39
return &PrefixMapping;
47
40
}
@@ -60,6 +53,8 @@ class IncludeTreeActionController : public CallbackActionController {
60
53
CASOptions CASOpts;
61
54
DepscanPrefixMapping PrefixMapping;
62
55
llvm::PrefixMapper PrefixMapper;
56
+ // IncludeTreePPCallbacks keeps a pointer to the current builder, so use a
57
+ // pointer so the builder cannot move when resizing.
63
58
SmallVector<std::unique_ptr<IncludeTreeBuilder>> BuilderStack;
64
59
std::optional<cas::IncludeTreeRoot> IncludeTreeResult;
65
60
};
@@ -147,23 +142,22 @@ struct PPCallbacksDependencyCollector : public DependencyCollector {
147
142
};
148
143
149
144
struct IncludeTreePPCallbacks : public PPCallbacks {
150
- DependencyActionController &Controller ;
145
+ IncludeTreeBuilder &Builder ;
151
146
Preprocessor &PP;
152
147
153
148
public:
154
- IncludeTreePPCallbacks (DependencyActionController &Controller,
155
- Preprocessor &PP)
156
- : Controller(Controller), PP(PP) {}
149
+ IncludeTreePPCallbacks (IncludeTreeBuilder &Builder, Preprocessor &PP)
150
+ : Builder(Builder), PP(PP) {}
157
151
158
152
void LexedFileChanged (FileID FID, LexedFileChangeReason Reason,
159
153
SrcMgr::CharacteristicKind FileType, FileID PrevFID,
160
154
SourceLocation Loc) override {
161
155
switch (Reason) {
162
156
case LexedFileChangeReason::EnterFile:
163
- Controller .enteredInclude (PP, FID);
157
+ Builder .enteredInclude (PP, FID);
164
158
break ;
165
159
case LexedFileChangeReason::ExitFile: {
166
- Controller .exitedInclude (PP, FID, PrevFID, Loc);
160
+ Builder .exitedInclude (PP, FID, PrevFID, Loc);
167
161
break ;
168
162
}
169
163
}
@@ -172,7 +166,7 @@ struct IncludeTreePPCallbacks : public PPCallbacks {
172
166
void HasInclude (SourceLocation Loc, StringRef FileName, bool IsAngled,
173
167
OptionalFileEntryRef File,
174
168
SrcMgr::CharacteristicKind FileType) override {
175
- Controller .handleHasIncludeCheck (PP, File.has_value ());
169
+ Builder .handleHasIncludeCheck (PP, File.has_value ());
176
170
}
177
171
};
178
172
} // namespace
@@ -221,38 +215,22 @@ Error IncludeTreeActionController::initialize(
221
215
};
222
216
ensurePathRemapping ();
223
217
218
+ BuilderStack.push_back (
219
+ std::make_unique<IncludeTreeBuilder>(DB, PrefixMapper));
220
+
224
221
// Attach callbacks for the IncludeTree of the TU. The preprocessor
225
222
// does not exist yet, so we need to indirect this via DependencyCollector.
226
223
auto DC = std::make_shared<PPCallbacksDependencyCollector>(
227
- [this ](Preprocessor &PP) {
228
- return std::make_unique<IncludeTreePPCallbacks>(* this , PP);
224
+ [&Builder = current () ](Preprocessor &PP) {
225
+ return std::make_unique<IncludeTreePPCallbacks>(Builder , PP);
229
226
});
230
227
ScanInstance.addDependencyCollector (std::move (DC));
231
228
232
229
CASOpts = ScanInstance.getCASOpts ();
233
230
234
- BuilderStack.push_back (
235
- std::make_unique<IncludeTreeBuilder>(DB, PrefixMapper));
236
-
237
231
return Error::success ();
238
232
}
239
233
240
- void IncludeTreeActionController::enteredInclude (Preprocessor &PP, FileID FID) {
241
- current ().enteredInclude (PP, FID);
242
- }
243
-
244
- void IncludeTreeActionController::exitedInclude (Preprocessor &PP,
245
- FileID IncludedBy,
246
- FileID Include,
247
- SourceLocation ExitLoc) {
248
- current ().exitedInclude (PP, IncludedBy, Include, ExitLoc);
249
- }
250
-
251
- void IncludeTreeActionController::handleHasIncludeCheck (Preprocessor &PP,
252
- bool Result) {
253
- current ().handleHasIncludeCheck (PP, Result);
254
- }
255
-
256
234
Error IncludeTreeActionController::finalize (CompilerInstance &ScanInstance,
257
235
CompilerInvocation &NewInvocation) {
258
236
assert (!IncludeTreeResult);
0 commit comments