mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Swift: only consider Builting and __ObjC declarations as lazy
This commit is contained in:
@@ -224,13 +224,11 @@ static void cleanupPendingDeclarations(SwiftExtractorState& state) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void extractLazy(SwiftExtractorState& state, swift::CompilerInstance& compiler) {
|
||||
cleanupPendingDeclarations(state);
|
||||
std::vector<const swift::Decl*> worklist;
|
||||
std::copy(std::begin(state.pendingDeclarations), std::end(state.pendingDeclarations),
|
||||
std::back_inserter(worklist));
|
||||
|
||||
for (auto pending : worklist) {
|
||||
extractDeclarations(state, compiler, *pending->getModuleContext(), nullptr, pending);
|
||||
}
|
||||
|
||||
@@ -60,8 +60,18 @@ class SwiftDispatcher {
|
||||
return std::move(encounteredModules);
|
||||
}
|
||||
|
||||
void extractedDeclaration(const swift::Decl* decl) { state.emittedDeclarations.insert(decl); }
|
||||
void skippedDeclaration(const swift::Decl* decl) { state.pendingDeclarations.insert(decl); }
|
||||
void extractedDeclaration(const swift::Decl* decl) {
|
||||
swift::ModuleDecl* module = decl->getModuleContext();
|
||||
if (module->isBuiltinModule() || module->getName().str() == "__ObjC") {
|
||||
state.emittedDeclarations.insert(decl);
|
||||
}
|
||||
}
|
||||
void skippedDeclaration(const swift::Decl* decl) {
|
||||
swift::ModuleDecl* module = decl->getModuleContext();
|
||||
if (module->isBuiltinModule() || module->getName().str() == "__ObjC") {
|
||||
state.pendingDeclarations.insert(decl);
|
||||
}
|
||||
}
|
||||
|
||||
template <typename Entry>
|
||||
void emit(Entry&& entry) {
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
#include <swift/AST/Decl.h>
|
||||
#include <swift/AST/ASTMangler.h>
|
||||
#include <swift/AST/Module.h>
|
||||
|
||||
#include "swift/extractor/translators/TranslatorBase.h"
|
||||
#include "swift/extractor/trap/generated/decl/TrapClasses.h"
|
||||
@@ -73,8 +74,9 @@ class DeclTranslator : public AstTranslatorBase<DeclTranslator> {
|
||||
dispatcher.extractedDeclaration(&decl);
|
||||
entry.emplace(id);
|
||||
fillDecl(decl, *entry);
|
||||
} else {
|
||||
dispatcher.skippedDeclaration(&decl);
|
||||
}
|
||||
dispatcher.skippedDeclaration(&decl);
|
||||
return entry;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user