@@ -3611,9 +3611,8 @@ SwiftASTContext::GetCachedModule(const SourceModule &module) {
36113611 return nullptr ;
36123612}
36133613
3614- swift::ModuleDecl *
3615- SwiftASTContext::CreateModule (const SourceModule &module , Status &error,
3616- swift::ImplicitImportInfo importInfo) {
3614+ swift::ModuleDecl *SwiftASTContext::CreateModule (const SourceModule &module ,
3615+ Status &error) {
36173616 VALID_OR_RETURN (nullptr );
36183617 if (!module .path .size ()) {
36193618 error.SetErrorStringWithFormat (" invalid module name (empty)" );
@@ -3634,7 +3633,7 @@ SwiftASTContext::CreateModule(const SourceModule &module, Status &error,
36343633
36353634 swift::Identifier module_id (
36363635 ast->getIdentifier (module .path .front ().GetCString ()));
3637- auto *module_decl = swift::ModuleDecl::create (module_id, *ast, importInfo );
3636+ auto *module_decl = swift::ModuleDecl::create (module_id, *ast);
36383637 if (!module_decl) {
36393638 error.SetErrorStringWithFormat (" failed to create module for \" %s\" " ,
36403639 module .path .front ().GetCString ());
@@ -8356,12 +8355,14 @@ static void GetNameFromModule(swift::ModuleDecl *module, std::string &result) {
83568355 }
83578356}
83588357
8359- static swift::ModuleDecl *LoadOneModule (const SourceModule &module ,
8360- SwiftASTContext &swift_ast_context,
8361- lldb::StackFrameWP &stack_frame_wp,
8362- Status &error) {
8358+ static bool
8359+ LoadOneModule (const SourceModule &module , SwiftASTContext &swift_ast_context,
8360+ lldb::StackFrameWP &stack_frame_wp,
8361+ llvm::SmallVectorImpl<swift::SourceFile::ImportedModuleDesc>
8362+ &additional_imports,
8363+ Status &error) {
83638364 if (!module .path .size ())
8364- return nullptr ;
8365+ return false ;
83658366
83668367 error.Clear ();
83678368 ConstString toplevel = module .path .front ();
@@ -8400,7 +8401,7 @@ static swift::ModuleDecl *LoadOneModule(const SourceModule &module,
84008401 toplevel.AsCString (), error.AsCString ());
84018402
84028403 if (!swift_module || swift_ast_context.HasFatalErrors ()) {
8403- return nullptr ;
8404+ return false ;
84048405 }
84058406 }
84068407
@@ -8411,42 +8412,23 @@ static swift::ModuleDecl *LoadOneModule(const SourceModule &module,
84118412 LOG_PRINTF (LIBLLDB_LOG_EXPRESSIONS, " Imported module %s from {%s}" ,
84128413 module .path .front ().AsCString (), ss.GetData ());
84138414 }
8414- return swift_module;
8415- }
8416-
8417- bool SwiftASTContext::GetImplicitImports (
8418- SwiftASTContext &swift_ast_context, SymbolContext &sc,
8419- ExecutionContextScope &exe_scope, lldb::StackFrameWP &stack_frame_wp,
8420- llvm::SmallVectorImpl<swift::ModuleDecl *> &modules, Status &error) {
8421- if (!GetCompileUnitImports (swift_ast_context, sc, stack_frame_wp, modules,
8422- error)) {
8423- return false ;
8424- }
8425-
8426- auto *persistent_expression_state =
8427- sc.target_sp ->GetSwiftPersistentExpressionState (exe_scope);
84288415
8429- // Get the hand-loaded modules from the SwiftPersistentExpressionState.
8430- for (ConstString name : persistent_expression_state->GetHandLoadedModules ()) {
8431- SourceModule module_info;
8432- module_info.path .push_back (name);
8433- auto *module = LoadOneModule (module_info, swift_ast_context, stack_frame_wp,
8434- error);
8435- if (!module )
8436- return false ;
8437-
8438- modules.push_back (module );
8439- }
8416+ additional_imports.push_back (swift::SourceFile::ImportedModuleDesc (
8417+ std::make_pair (swift::ModuleDecl::AccessPathTy (), swift_module),
8418+ swift::SourceFile::ImportOptions ()));
84408419 return true ;
84418420}
84428421
8443- bool SwiftASTContext::CacheUserImports (SwiftASTContext &swift_ast_context,
8444- SymbolContext &sc,
8445- ExecutionContextScope &exe_scope,
8446- lldb::StackFrameWP &stack_frame_wp,
8447- swift::SourceFile &source_file,
8448- Status &error) {
8422+ bool SwiftASTContext::PerformUserImport (SwiftASTContext &swift_ast_context,
8423+ SymbolContext &sc,
8424+ ExecutionContextScope &exe_scope,
8425+ lldb::StackFrameWP &stack_frame_wp,
8426+ swift::SourceFile &source_file,
8427+ Status &error) {
84498428 llvm::SmallString<1 > m_description;
8429+ llvm::SmallVector<swift::SourceFile::ImportedModuleDesc, 2 >
8430+ additional_imports;
8431+
84508432 llvm::SmallVector<swift::ModuleDecl::ImportedModule, 2 > parsed_imports;
84518433
84528434 swift::ModuleDecl::ImportFilter import_filter;
@@ -8470,51 +8452,62 @@ bool SwiftASTContext::CacheUserImports(SwiftASTContext &swift_ast_context,
84708452 " Performing auto import on found module: %s.\n " ,
84718453 module_name.c_str ());
84728454 if (!LoadOneModule (module_info, swift_ast_context, stack_frame_wp,
8473- error))
8455+ additional_imports, error))
84748456 return false ;
84758457
84768458 // How do we tell we are in REPL or playground mode?
84778459 persistent_expression_state->AddHandLoadedModule (module_const_str);
84788460 }
84798461 }
84808462 }
8463+ // Finally get the hand-loaded modules from the
8464+ // SwiftPersistentExpressionState and load them into this context:
8465+ for (ConstString name : persistent_expression_state->GetHandLoadedModules ()) {
8466+ SourceModule module_info;
8467+ module_info.path .push_back (name);
8468+ if (!LoadOneModule (module_info, swift_ast_context, stack_frame_wp,
8469+ additional_imports, error))
8470+ return false ;
8471+ }
8472+
8473+ source_file.addImports (additional_imports);
84818474 return true ;
84828475}
84838476
8484- bool SwiftASTContext::GetCompileUnitImports (
8485- SwiftASTContext &swift_ast_context, SymbolContext &sc,
8486- lldb::StackFrameWP &stack_frame_wp,
8487- llvm::SmallVectorImpl<swift::ModuleDecl *> &modules, Status &error) {
8488- // Import the Swift standard library and its dependencies.
8477+ bool SwiftASTContext::PerformAutoImport (SwiftASTContext &swift_ast_context,
8478+ SymbolContext &sc,
8479+ lldb::StackFrameWP &stack_frame_wp,
8480+ swift::SourceFile *source_file,
8481+ Status &error) {
8482+ llvm::SmallVector<swift::SourceFile::ImportedModuleDesc, 2 >
8483+ additional_imports;
8484+
8485+ // Import the Swift standard library and its dependecies.
84898486 SourceModule swift_module;
84908487 swift_module.path .push_back (ConstString (" Swift" ));
8491- auto *stdlib =
8492- LoadOneModule (swift_module, swift_ast_context, stack_frame_wp, error);
8493- if (!stdlib)
8488+ if (!LoadOneModule (swift_module, swift_ast_context, stack_frame_wp,
8489+ additional_imports, error))
84948490 return false ;
84958491
8496- modules.push_back (stdlib);
8497-
84988492 CompileUnit *compile_unit = sc.comp_unit ;
8499- if (!compile_unit || compile_unit->GetLanguage () != lldb::eLanguageTypeSwift)
8500- return true ;
8501-
8502- for (const SourceModule &module : compile_unit->GetImportedModules ()) {
8503- // When building the Swift stdlib with debug info these will
8504- // show up in "Swift.o", but we already imported them and
8505- // manually importing them will fail.
8506- if (module .path .size () &&
8507- llvm::StringSwitch<bool >(module .path .front ().GetStringRef ())
8508- .Cases (" Swift" , " SwiftShims" , " Builtin" , true )
8509- .Default (false ))
8510- continue ;
8511-
8512- auto *loaded_module =
8513- LoadOneModule (module , swift_ast_context, stack_frame_wp, error);
8514- if (!loaded_module)
8515- return false ;
8493+ if (compile_unit && compile_unit->GetLanguage () == lldb::eLanguageTypeSwift)
8494+ for (const SourceModule &module : compile_unit->GetImportedModules ()) {
8495+ // When building the Swift stdlib with debug info these will
8496+ // show up in "Swift.o", but we already imported them and
8497+ // manually importing them will fail.
8498+ if (module .path .size () &&
8499+ llvm::StringSwitch<bool >(module .path .front ().GetStringRef ())
8500+ .Cases (" Swift" , " SwiftShims" , " Builtin" , true )
8501+ .Default (false ))
8502+ continue ;
85168503
8517- modules.push_back (loaded_module);
8518- }
8504+ if (!LoadOneModule (module , swift_ast_context, stack_frame_wp,
8505+ additional_imports, error))
8506+ return false ;
8507+ }
8508+ // source_file might be NULL outside of the expression parser, where
8509+ // we don't need to notify the source file of additional imports.
8510+ if (source_file)
8511+ source_file->addImports (additional_imports);
85198512 return true ;
85208513}
0 commit comments