@@ -78,20 +78,22 @@ static fs::path getFilename(swift::ModuleDecl& module,
7878 return resolvePath (filename);
7979}
8080
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;
8585 if (lazyDeclaration) {
86- ret.push_back (const_cast <swift::Decl*>( lazyDeclaration) );
86+ ret.push_back (lazyDeclaration);
8787 return ret;
8888 }
8989 ret.push_back (&module );
90+ llvm::SmallVector<swift::Decl*> topLevelDecls;
9091 if (primaryFile) {
91- primaryFile->getTopLevelDecls (ret );
92+ primaryFile->getTopLevelDecls (topLevelDecls );
9293 } else {
93- module .getTopLevelDecls (ret );
94+ module .getTopLevelDecls (topLevelDecls );
9495 }
96+ ret.insert (ret.end (), topLevelDecls.data (), topLevelDecls.data () + topLevelDecls.size ());
9597 return ret;
9698}
9799
@@ -100,7 +102,7 @@ static TrapType getTrapType(swift::SourceFile* primaryFile, const swift::Decl* l
100102 return TrapType::source;
101103 }
102104 if (lazyDeclaration) {
103- return TrapType::lazy_declarations ;
105+ return TrapType::lazy_declaration ;
104106 }
105107 return TrapType::module ;
106108}
@@ -199,10 +201,12 @@ void codeql::extractSwiftFiles(SwiftExtractorState& state, swift::CompilerInstan
199201 continue ;
200202 }
201203 archiveFile (state.configuration , *sourceFile);
202- encounteredModules = extractDeclarations (state, compiler, *module , sourceFile, nullptr );
204+ encounteredModules =
205+ extractDeclarations (state, compiler, *module , sourceFile, /* lazy declaration*/ nullptr );
203206 }
204207 if (!isFromSourceFile) {
205- encounteredModules = extractDeclarations (state, compiler, *module , nullptr , nullptr );
208+ encounteredModules = extractDeclarations (state, compiler, *module , /* source file*/ nullptr ,
209+ /* lazy declaration*/ nullptr );
206210 }
207211 for (auto encountered : encounteredModules) {
208212 if (state.encounteredModules .count (encountered) == 0 ) {
@@ -214,23 +218,22 @@ void codeql::extractSwiftFiles(SwiftExtractorState& state, swift::CompilerInstan
214218}
215219
216220static 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 ));
221223 for (auto decl : worklist) {
222224 if (state.emittedDeclarations .count (decl)) {
223225 state.pendingDeclarations .erase (decl);
224226 }
225227 }
226228}
229+
227230static void extractLazy (SwiftExtractorState& state, swift::CompilerInstance& compiler) {
228231 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 ));
232234 for (auto pending : worklist) {
233- extractDeclarations (state, compiler, *pending->getModuleContext (), nullptr , pending);
235+ extractDeclarations (state, compiler, *pending->getModuleContext (), /* source file*/ nullptr ,
236+ pending);
234237 }
235238}
236239
0 commit comments