@@ -64,8 +64,19 @@ static std::string getTrapFilename(swift::ModuleDecl& module, swift::SourceFile*
6464 return filename;
6565}
6666
67+ static llvm::SmallVector<swift::Decl*> getTopLevelDecls (swift::ModuleDecl& module ,
68+ swift::SourceFile* primaryFile = nullptr ) {
69+ llvm::SmallVector<swift::Decl*> ret;
70+ ret.push_back (&module );
71+ if (primaryFile) {
72+ primaryFile->getTopLevelDecls (ret);
73+ } else {
74+ module .getTopLevelDecls (ret);
75+ }
76+ return ret;
77+ }
78+
6779static void extractDeclarations (const SwiftExtractorConfiguration& config,
68- llvm::ArrayRef<swift::Decl*> topLevelDecls,
6980 swift::CompilerInstance& compiler,
7081 swift::ModuleDecl& module ,
7182 swift::SourceFile* primaryFile = nullptr ) {
@@ -119,6 +130,7 @@ static void extractDeclarations(const SwiftExtractorConfiguration& config,
119130 trap.emit (LocationsTrap{unknownLocationLabel, unknownFileLabel});
120131
121132 SwiftVisitor visitor (compiler.getSourceMgr (), arena, trap, module , primaryFile);
133+ auto topLevelDecls = getTopLevelDecls (module , primaryFile);
122134 for (auto decl : topLevelDecls) {
123135 visitor.extract (decl);
124136 }
@@ -203,18 +215,15 @@ void codeql::extractSwiftFiles(const SwiftExtractorConfiguration& config,
203215 // user code twice: once during the module build in a form of a source file, and then as
204216 // a pre-built module during building of the dependent source files.
205217 if (module ->isSystemModule () || module ->isBuiltinModule ()) {
206- llvm::SmallVector<swift::Decl*> decls;
207- module ->getTopLevelDecls (decls);
208- // TODO: pass ModuleDecl directly when we have module extraction in place?
209- extractDeclarations (config, decls, compiler, *module );
218+ extractDeclarations (config, compiler, *module );
210219 } else {
211220 for (auto file : module ->getFiles ()) {
212221 auto sourceFile = llvm::dyn_cast<swift::SourceFile>(file);
213222 if (!sourceFile || inputFiles.count (sourceFile->getFilename ().str ()) == 0 ) {
214223 continue ;
215224 }
216225 archiveFile (config, *sourceFile);
217- extractDeclarations (config, sourceFile-> getTopLevelDecls (), compiler, *module , sourceFile);
226+ extractDeclarations (config, compiler, *module , sourceFile);
218227 }
219228 }
220229 }
0 commit comments