@@ -78,20 +78,22 @@ static fs::path getFilename(swift::ModuleDecl& module,
78
78
return resolvePath (filename);
79
79
}
80
80
81
- static llvm::SmallVector<swift::Decl*> getTopLevelDecls (swift::ModuleDecl& module ,
82
- swift::SourceFile* primaryFile,
83
- const swift::Decl* lazyDeclaration) {
84
- llvm::SmallVector<swift::Decl*> ret;
81
+ static llvm::SmallVector<const swift::Decl*> getTopLevelDecls (swift::ModuleDecl& module ,
82
+ swift::SourceFile* primaryFile,
83
+ const swift::Decl* lazyDeclaration) {
84
+ llvm::SmallVector<const swift::Decl*> ret;
85
85
if (lazyDeclaration) {
86
- ret.push_back (const_cast <swift::Decl*>( lazyDeclaration) );
86
+ ret.push_back (lazyDeclaration);
87
87
return ret;
88
88
}
89
89
ret.push_back (&module );
90
+ llvm::SmallVector<swift::Decl*> topLevelDecls;
90
91
if (primaryFile) {
91
- primaryFile->getTopLevelDecls (ret );
92
+ primaryFile->getTopLevelDecls (topLevelDecls );
92
93
} else {
93
- module .getTopLevelDecls (ret );
94
+ module .getTopLevelDecls (topLevelDecls );
94
95
}
96
+ ret.insert (ret.end (), topLevelDecls.data (), topLevelDecls.data () + topLevelDecls.size ());
95
97
return ret;
96
98
}
97
99
@@ -100,7 +102,7 @@ static TrapType getTrapType(swift::SourceFile* primaryFile, const swift::Decl* l
100
102
return TrapType::source;
101
103
}
102
104
if (lazyDeclaration) {
103
- return TrapType::lazy_declarations ;
105
+ return TrapType::lazy_declaration ;
104
106
}
105
107
return TrapType::module ;
106
108
}
@@ -199,10 +201,12 @@ void codeql::extractSwiftFiles(SwiftExtractorState& state, swift::CompilerInstan
199
201
continue ;
200
202
}
201
203
archiveFile (state.configuration , *sourceFile);
202
- encounteredModules = extractDeclarations (state, compiler, *module , sourceFile, nullptr );
204
+ encounteredModules =
205
+ extractDeclarations (state, compiler, *module , sourceFile, /* lazy declaration*/ nullptr );
203
206
}
204
207
if (!isFromSourceFile) {
205
- encounteredModules = extractDeclarations (state, compiler, *module , nullptr , nullptr );
208
+ encounteredModules = extractDeclarations (state, compiler, *module , /* source file*/ nullptr ,
209
+ /* lazy declaration*/ nullptr );
206
210
}
207
211
for (auto encountered : encounteredModules) {
208
212
if (state.encounteredModules .count (encountered) == 0 ) {
@@ -214,23 +218,22 @@ void codeql::extractSwiftFiles(SwiftExtractorState& state, swift::CompilerInstan
214
218
}
215
219
216
220
static void cleanupPendingDeclarations (SwiftExtractorState& state) {
217
- std::vector<const swift::Decl*> worklist;
218
- std::copy (std::begin (state.pendingDeclarations ), std::end (state.pendingDeclarations ),
219
- std::back_inserter (worklist));
220
-
221
+ std::vector<const swift::Decl*> worklist (std::begin (state.pendingDeclarations ),
222
+ std::end (state.pendingDeclarations ));
221
223
for (auto decl : worklist) {
222
224
if (state.emittedDeclarations .count (decl)) {
223
225
state.pendingDeclarations .erase (decl);
224
226
}
225
227
}
226
228
}
229
+
227
230
static void extractLazy (SwiftExtractorState& state, swift::CompilerInstance& compiler) {
228
231
cleanupPendingDeclarations (state);
229
- std::vector<const swift::Decl*> worklist;
230
- std::copy (std::begin (state.pendingDeclarations ), std::end (state.pendingDeclarations ),
231
- std::back_inserter (worklist));
232
+ std::vector<const swift::Decl*> worklist (std::begin (state.pendingDeclarations ),
233
+ std::end (state.pendingDeclarations ));
232
234
for (auto pending : worklist) {
233
- extractDeclarations (state, compiler, *pending->getModuleContext (), nullptr , pending);
235
+ extractDeclarations (state, compiler, *pending->getModuleContext (), /* source file*/ nullptr ,
236
+ pending);
234
237
}
235
238
}
236
239
0 commit comments