Skip to content

Commit e227a8f

Browse files
committed
[lldb] Update for removal of ModuleDecl::addFile
This requires plumbing `PopulateFilesFn` through `SwiftASTContext::CreateModule`.
1 parent 93a0c7d commit e227a8f

File tree

5 files changed

+45
-27
lines changed

5 files changed

+45
-27
lines changed

lldb/source/Plugins/ExpressionParser/Swift/SwiftExpressionParser.cpp

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1295,19 +1295,21 @@ SwiftExpressionParser::ParseAndImport(
12951295
return make_error<SwiftASTContextError>();
12961296

12971297
auto module_id = ast_context->getIdentifier(expr_name_buf);
1298-
module = swift::ModuleDecl::create(module_id, **ast_context, importInfo);
1299-
1300-
swift::SourceFileKind source_file_kind = swift::SourceFileKind::Library;
1301-
if (playground || repl) {
1302-
source_file_kind = swift::SourceFileKind::Main;
1303-
}
1298+
module = swift::ModuleDecl::create(
1299+
module_id, **ast_context, importInfo,
1300+
[&](swift::ModuleDecl *module, auto addFile) {
1301+
swift::SourceFileKind source_file_kind = swift::SourceFileKind::Library;
1302+
if (playground || repl) {
1303+
source_file_kind = swift::SourceFileKind::Main;
1304+
}
13041305

1305-
// Create the source file. Note, we disable delayed parsing for the
1306-
// swift expression parser.
1307-
source_file = new (**ast_context) swift::SourceFile(
1308-
*module, source_file_kind, buffer_id,
1309-
swift::SourceFile::ParsingFlags::DisableDelayedBodies);
1310-
module->addFile(*source_file);
1306+
// Create the source file. Note, we disable delayed parsing for the
1307+
// swift expression parser.
1308+
source_file = new (**ast_context) swift::SourceFile(
1309+
*module, source_file_kind, buffer_id,
1310+
swift::SourceFile::ParsingFlags::DisableDelayedBodies);
1311+
addFile(source_file);
1312+
});
13111313
}
13121314
// Swift Modules that rely on shared libraries (not frameworks)
13131315
// don't record the link information in the swiftmodule file, so we

lldb/source/Plugins/ExpressionParser/Swift/SwiftREPL.cpp

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -608,18 +608,22 @@ void SwiftREPL::CompleteCode(const std::string &current_code,
608608
if (!repl_module) {
609609
swift::ImplicitImportInfo importInfo;
610610
importInfo.StdlibKind = swift::ImplicitStdlibKind::Stdlib;
611+
611612
auto repl_module_or_err = swift_ast->CreateModule(
612-
completion_module_info.path.back().GetString(), importInfo);
613+
completion_module_info.path.back().GetString(), importInfo,
614+
[&](swift::ModuleDecl *repl_module, auto addFile) {
615+
auto bufferID = (*ast)->SourceMgr.addMemBufferCopy("// swift repl\n");
616+
swift::SourceFile *repl_source_file = new (**ast) swift::SourceFile(
617+
*repl_module, swift::SourceFileKind::Main, bufferID);
618+
addFile(repl_source_file);
619+
});
613620
if (!repl_module_or_err) {
614621
llvm::consumeError(repl_module_or_err.takeError());
615622
return;
616623
}
617624
repl_module = &*repl_module_or_err;
618-
auto bufferID = (*ast)->SourceMgr.addMemBufferCopy("// swift repl\n");
619-
swift::SourceFile *repl_source_file = new (**ast)
620-
swift::SourceFile(*repl_module, swift::SourceFileKind::Main, bufferID);
621-
repl_module->addFile(*repl_source_file);
622-
swift::performImportResolution(*repl_source_file);
625+
626+
swift::performImportResolution(repl_module);
623627
m_completion_module_initialized = true;
624628
}
625629
if (repl_module) {

lldb/source/Plugins/LanguageRuntime/Swift/SwiftLanguageRuntime.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1477,8 +1477,7 @@ void SwiftLanguageRuntime::RegisterGlobalError(Target &target, ConstString name,
14771477
module_info.path.push_back(ConstString(module_name));
14781478

14791479
swift::ModuleDecl *module_decl = nullptr;
1480-
auto module_decl_or_err = swift_ast_ctx->CreateModule(module_name,
1481-
/*importInfo*/ {});
1480+
auto module_decl_or_err = swift_ast_ctx->CreateEmptyModule(module_name);
14821481
if (!module_decl_or_err)
14831482
llvm::consumeError(module_decl_or_err.takeError());
14841483
else

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.cpp

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3834,8 +3834,14 @@ swift::ModuleDecl *SwiftASTContext::GetCachedModule(std::string module_name) {
38343834
}
38353835

38363836
llvm::Expected<swift::ModuleDecl &>
3837-
SwiftASTContext::CreateModule(std::string module_name,
3838-
swift::ImplicitImportInfo importInfo) {
3837+
SwiftASTContext::CreateEmptyModule(std::string module_name) {
3838+
return CreateModule(module_name, /*importInfo*/ {},
3839+
/*populateFiles*/ [](auto, auto) {});
3840+
}
3841+
3842+
llvm::Expected<swift::ModuleDecl &> SwiftASTContext::CreateModule(
3843+
std::string module_name, swift::ImplicitImportInfo importInfo,
3844+
swift::ModuleDecl::PopulateFilesFn populateFiles) {
38393845
VALID_OR_RETURN(llvm::createStringError("no context"));
38403846
if (module_name.empty())
38413847
return llvm::createStringError("invalid module name (empty)");
@@ -3849,7 +3855,8 @@ SwiftASTContext::CreateModule(std::string module_name,
38493855
return llvm::createStringError("invalid swift AST (nullptr)");
38503856

38513857
swift::Identifier module_id(ast->getIdentifier(module_name));
3852-
auto *module_decl = swift::ModuleDecl::create(module_id, **ast, importInfo);
3858+
auto *module_decl =
3859+
swift::ModuleDecl::create(module_id, **ast, importInfo, populateFiles);
38533860
if (!module_decl)
38543861
return llvm::createStringError("failed to create module for \"{0}\"",
38553862
module_name.c_str());
@@ -5130,9 +5137,8 @@ swift::ModuleDecl *SwiftASTContext::GetScratchModule() {
51305137

51315138
if (m_scratch_module == nullptr) {
51325139
ThreadSafeASTContext ast_ctx = GetASTContext();
5133-
m_scratch_module = swift::ModuleDecl::create(
5134-
GetASTContext()->getIdentifier("__lldb_scratch_module"),
5135-
**ast_ctx);
5140+
m_scratch_module = swift::ModuleDecl::createEmpty(
5141+
GetASTContext()->getIdentifier("__lldb_scratch_module"), **ast_ctx);
51365142
}
51375143
return m_scratch_module;
51385144
}

lldb/source/Plugins/TypeSystem/Swift/SwiftASTContext.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -311,12 +311,19 @@ class SwiftASTContext : public TypeSystemSwift {
311311
/// \return the ExtraArgs of the ClangImporterOptions.
312312
const std::vector<std::string> &GetClangArguments();
313313

314+
/// Attempt to create an empty Swift module.
315+
llvm::Expected<swift::ModuleDecl &>
316+
CreateEmptyModule(std::string module_name);
317+
314318
/// Attempt to create a Swift module.
315319
///
316320
/// \param importInfo Information about which modules should be implicitly
317321
/// imported by each file of the module.
322+
/// \param populateFiles A function which populates the files for the module.
323+
/// Once called, the module's list of files may not change.
318324
llvm::Expected<swift::ModuleDecl &>
319-
CreateModule(std::string module_name, swift::ImplicitImportInfo importInfo);
325+
CreateModule(std::string module_name, swift::ImplicitImportInfo importInfo,
326+
swift::ModuleDecl::PopulateFilesFn populateFiles);
320327

321328
// This function should only be called when all search paths
322329
// for all items in a swift::ASTContext have been setup to

0 commit comments

Comments
 (0)