Swift: only consider Builting and __ObjC declarations as lazy

This commit is contained in:
Alex Denisov
2023-03-02 15:59:14 +01:00
parent 276fec39fc
commit ffcb382705
3 changed files with 15 additions and 5 deletions

View File

@@ -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);
}

View File

@@ -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) {

View File

@@ -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;
}