@@ -87,8 +87,8 @@ lldb::REPLSP SwiftREPL::CreateInstanceFromTarget(Status &err, Target &target,
8787 }
8888
8989 // Check that we can get a type system, or we aren't going anywhere:
90- auto type_system_or_err = target. GetScratchTypeSystemForLanguage (
91- eLanguageTypeSwift, true , repl_options ? repl_options : " " );
90+ auto type_system_or_err =
91+ target. GetScratchTypeSystemForLanguage ( eLanguageTypeSwift, true );
9292 if (!type_system_or_err) {
9393 llvm::consumeError (type_system_or_err.takeError ());
9494 err = Status::FromErrorString (" Could not construct an expression "
@@ -260,8 +260,8 @@ lldb::REPLSP SwiftREPL::CreateInstanceFromDebugger(Status &err,
260260 // Check that we can get a type system, or we aren't
261261 // going anywhere. Remember to pass in the repl_options
262262 // in case they set up framework paths we need, etc.
263- auto type_system_or_err = target_sp-> GetScratchTypeSystemForLanguage (
264- eLanguageTypeSwift, true , repl_options ? repl_options : " " );
263+ auto type_system_or_err =
264+ target_sp-> GetScratchTypeSystemForLanguage ( eLanguageTypeSwift, true );
265265 if (!type_system_or_err) {
266266 llvm::consumeError (type_system_or_err.takeError ());
267267 err = Status::FromErrorString (" Could not construct an expression "
@@ -301,14 +301,13 @@ SwiftREPL::SwiftREPL(Target &target) : REPL(target), m_swift_ast(nullptr) {}
301301SwiftREPL::~SwiftREPL () {}
302302
303303Status SwiftREPL::DoInitialization () {
304- if (m_compiler_options.empty ())
305- return Status ();
306-
307304 auto type_system_or_err =
308- m_target.GetScratchTypeSystemForLanguage (eLanguageTypeSwift, true ,
309- m_compiler_options.c_str ());
305+ m_target.GetScratchTypeSystemForLanguage (eLanguageTypeSwift, true );
310306 if (!type_system_or_err)
311307 return Status::FromError (type_system_or_err.takeError ());
308+ std::static_pointer_cast<TypeSystemSwiftTypeRefForExpressions>(
309+ *type_system_or_err)
310+ ->SetCompilerOptions (m_compiler_options.c_str ());
312311 return Status ();
313312}
314313
@@ -567,22 +566,29 @@ SwiftASTContextForExpressions *SwiftREPL::getSwiftASTContext() {
567566 // to fix this issue currently, so we need to work around it by making
568567 // our own copy of the AST and using this separate AST for completion.
569568 // ----------------------------------------------------------------------
570- if (!m_swift_ast) {
571- auto type_system_or_err =
572- m_target.GetScratchTypeSystemForLanguage (eLanguageTypeSwift);
573- if (!type_system_or_err) {
574- llvm::consumeError (type_system_or_err.takeError ());
575- return nullptr ;
576- }
577- auto *swift_ts =
578- llvm::dyn_cast_or_null<TypeSystemSwiftTypeRefForExpressions>(
579- type_system_or_err->get ());
580- auto *target_swift_ast =
581- llvm::dyn_cast_or_null<SwiftASTContextForExpressions>(
582- swift_ts->GetSwiftASTContext (SymbolContext (
583- m_target.shared_from_this (), m_target.GetExecutableModule ())));
584- m_swift_ast = target_swift_ast;
569+ if (m_swift_ast)
570+ return m_swift_ast;
571+
572+ auto type_system_or_err =
573+ m_target.GetScratchTypeSystemForLanguage (eLanguageTypeSwift, false );
574+ if (!type_system_or_err) {
575+ llvm::consumeError (type_system_or_err.takeError ());
576+ return nullptr ;
585577 }
578+ auto *swift_ts = llvm::dyn_cast_or_null<TypeSystemSwiftTypeRefForExpressions>(
579+ type_system_or_err->get ());
580+
581+ // Use the stdlib as symbol context to get a different one than the main REPL.
582+ SymbolContextList sc_list;
583+ m_target.GetImages ().FindSymbolsWithNameAndType (ConstString (" _swift_release" ),
584+ eSymbolTypeAny, sc_list);
585+ if (!sc_list.GetSize ())
586+ return nullptr ;
587+
588+ auto *target_swift_ast =
589+ llvm::dyn_cast_or_null<SwiftASTContextForExpressions>(
590+ swift_ts->GetSwiftASTContext (sc_list[0 ]));
591+ m_swift_ast = target_swift_ast;
586592 return m_swift_ast;
587593}
588594
0 commit comments