JDevlieghere created this revision. JDevlieghere added a reviewer: jingham. Herald added a project: LLDB.
This is part two of the change started in r359330. This patch moves the ownership of the script interpreter from the command interpreter into the debugger. I would've preferred to remove the lazy initialization, however the fact that the scripting language is set after the debugger is created makes that tricky. So for now this does exactly the same thing as when it was under the command interpreter. The result is that this patch is fully NFC. Repository: rLLDB LLDB https://reviews.llvm.org/D61211 Files: lldb/include/lldb/Core/Debugger.h lldb/include/lldb/Interpreter/CommandInterpreter.h lldb/include/lldb/Interpreter/CommandObject.h lldb/source/API/SBBreakpoint.cpp lldb/source/API/SBBreakpointLocation.cpp lldb/source/API/SBBreakpointName.cpp lldb/source/API/SBTypeCategory.cpp lldb/source/Breakpoint/BreakpointOptions.cpp lldb/source/Breakpoint/BreakpointResolverScripted.cpp lldb/source/Commands/CommandObjectBreakpointCommand.cpp lldb/source/Commands/CommandObjectCommands.cpp lldb/source/Commands/CommandObjectFrame.cpp lldb/source/Commands/CommandObjectThread.cpp lldb/source/Commands/CommandObjectType.cpp lldb/source/Commands/CommandObjectWatchpointCommand.cpp lldb/source/Core/Debugger.cpp lldb/source/Core/FormatEntity.cpp lldb/source/Core/Module.cpp lldb/source/DataFormatters/TypeSummary.cpp lldb/source/DataFormatters/TypeSynthetic.cpp lldb/source/Interpreter/CommandInterpreter.cpp lldb/source/Interpreter/CommandObject.cpp lldb/source/Interpreter/CommandObjectScript.cpp lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp lldb/source/Target/Target.cpp lldb/source/Target/ThreadPlanPython.cpp
Index: lldb/source/Target/ThreadPlanPython.cpp =================================================================== --- lldb/source/Target/ThreadPlanPython.cpp +++ lldb/source/Target/ThreadPlanPython.cpp @@ -60,7 +60,6 @@ ScriptInterpreter *script_interp = m_thread.GetProcess() ->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); if (script_interp) { m_implementation_sp = script_interp->CreateScriptedThreadPlan( @@ -80,7 +79,6 @@ ScriptInterpreter *script_interp = m_thread.GetProcess() ->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); if (script_interp) { bool script_error; @@ -104,7 +102,6 @@ ScriptInterpreter *script_interp = m_thread.GetProcess() ->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); if (script_interp) { bool script_error; @@ -128,7 +125,6 @@ ScriptInterpreter *script_interp = m_thread.GetProcess() ->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); if (script_interp) { bool script_error; @@ -167,7 +163,6 @@ ScriptInterpreter *script_interp = m_thread.GetProcess() ->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); if (script_interp) { bool script_error; Index: lldb/source/Target/Target.cpp =================================================================== --- lldb/source/Target/Target.cpp +++ lldb/source/Target/Target.cpp @@ -615,13 +615,10 @@ StructuredDataImpl *extra_args_impl = new StructuredDataImpl(); if (extra_args_sp) extra_args_impl->SetObjectSP(extra_args_sp); - - BreakpointResolverSP resolver_sp(new - BreakpointResolverScripted(nullptr, class_name, - depth, - extra_args_impl, - *GetDebugger().GetCommandInterpreter() - .GetScriptInterpreter())); + + BreakpointResolverSP resolver_sp(new BreakpointResolverScripted( + nullptr, class_name, depth, extra_args_impl, + *GetDebugger().GetScriptInterpreter())); return CreateBreakpoint(filter_sp, resolver_sp, internal, false, true); } Index: lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp =================================================================== --- lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp +++ lldb/source/Plugins/ScriptInterpreter/Python/ScriptInterpreterPython.cpp @@ -1285,9 +1285,8 @@ std::string oneliner("return "); oneliner += function_name; oneliner += "(frame, bp_loc, internal_dict)"; - m_debugger.GetCommandInterpreter() - .GetScriptInterpreter() - ->SetBreakpointCommandCallback(bp_options, oneliner.c_str()); + m_debugger.GetScriptInterpreter()->SetBreakpointCommandCallback( + bp_options, oneliner.c_str()); } Status ScriptInterpreterPythonImpl::SetBreakpointCommandCallback( @@ -1862,8 +1861,7 @@ return StructuredData::ObjectSP(); Debugger &debugger = thread_plan_sp->GetTarget().GetDebugger(); - ScriptInterpreter *script_interpreter = - debugger.GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter(); ScriptInterpreterPythonImpl *python_interpreter = static_cast<ScriptInterpreterPythonImpl *>(script_interpreter); @@ -1967,8 +1965,7 @@ return StructuredData::GenericSP(); Debugger &debugger = bkpt_sp->GetTarget().GetDebugger(); - ScriptInterpreter *script_interpreter = - debugger.GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter(); ScriptInterpreterPythonImpl *python_interpreter = static_cast<ScriptInterpreterPythonImpl *>(script_interpreter); @@ -2083,8 +2080,7 @@ return StructuredData::ObjectSP(); Debugger &debugger = target->GetDebugger(); - ScriptInterpreter *script_interpreter = - debugger.GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter(); ScriptInterpreterPythonImpl *python_interpreter = (ScriptInterpreterPythonImpl *)script_interpreter; @@ -2262,8 +2258,7 @@ return true; Debugger &debugger = target->GetDebugger(); - ScriptInterpreter *script_interpreter = - debugger.GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter(); ScriptInterpreterPythonImpl *python_interpreter = (ScriptInterpreterPythonImpl *)script_interpreter; @@ -2313,8 +2308,7 @@ return true; Debugger &debugger = target->GetDebugger(); - ScriptInterpreter *script_interpreter = - debugger.GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter(); ScriptInterpreterPythonImpl *python_interpreter = (ScriptInterpreterPythonImpl *)script_interpreter; Index: lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp =================================================================== --- lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -377,7 +377,7 @@ bool ProcessGDBRemote::ParsePythonTargetDefinition( const FileSpec &target_definition_fspec) { ScriptInterpreter *interpreter = - GetTarget().GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + GetTarget().GetDebugger().GetScriptInterpreter(); Status error; StructuredData::ObjectSP module_object_sp( interpreter->LoadPluginModule(target_definition_fspec, error)); Index: lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp =================================================================== --- lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp +++ lldb/source/Plugins/Platform/MacOSX/PlatformDarwin.cpp @@ -105,7 +105,7 @@ std::replace(module_basename.begin(), module_basename.end(), '-', '_'); ScriptInterpreter *script_interpreter = - target->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + target->GetDebugger().GetScriptInterpreter(); if (script_interpreter && script_interpreter->IsReservedWord( module_basename.c_str())) { Index: lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp =================================================================== --- lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp +++ lldb/source/Plugins/OperatingSystem/Python/OperatingSystemPython.cpp @@ -81,8 +81,7 @@ TargetSP target_sp = process->CalculateTarget(); if (!target_sp) return; - m_interpreter = - target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + m_interpreter = target_sp->GetDebugger().GetScriptInterpreter(); if (m_interpreter) { std::string os_plugin_class_name( Index: lldb/source/Interpreter/CommandObjectScript.cpp =================================================================== --- lldb/source/Interpreter/CommandObjectScript.cpp +++ lldb/source/Interpreter/CommandObjectScript.cpp @@ -50,7 +50,7 @@ return false; } - ScriptInterpreter *script_interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = GetDebugger().GetScriptInterpreter(); if (script_interpreter == nullptr) { result.AppendError("no script interpreter"); Index: lldb/source/Interpreter/CommandObject.cpp =================================================================== --- lldb/source/Interpreter/CommandObject.cpp +++ lldb/source/Interpreter/CommandObject.cpp @@ -49,6 +49,8 @@ CommandObject::~CommandObject() {} +Debugger &CommandObject::GetDebugger() { return m_interpreter.GetDebugger(); } + llvm::StringRef CommandObject::GetHelp() { return m_cmd_help_short; } llvm::StringRef CommandObject::GetHelpLong() { return m_cmd_help_long; } Index: lldb/source/Interpreter/CommandInterpreter.cpp =================================================================== --- lldb/source/Interpreter/CommandInterpreter.cpp +++ lldb/source/Interpreter/CommandInterpreter.cpp @@ -130,7 +130,7 @@ IOHandlerDelegate(IOHandlerDelegate::Completion::LLDBCommand), m_debugger(debugger), m_synchronous_execution(synchronous_execution), m_skip_lldbinit_files(false), m_skip_app_init_files(false), - m_script_interpreter_sp(), m_command_io_handler_sp(), m_comment_char('#'), + m_command_io_handler_sp(), m_comment_char('#'), m_batch_command_mode(false), m_truncation_warning(eNoTruncation), m_command_source_depth(0), m_num_errors(0), m_quit_requested(false), m_stopped_for_crash(false) { @@ -433,9 +433,6 @@ void CommandInterpreter::Clear() { m_command_io_handler_sp.reset(); - - if (m_script_interpreter_sp) - m_script_interpreter_sp->Clear(); } const char *CommandInterpreter::ProcessEmbeddedScriptCommands(const char *arg) { @@ -2498,18 +2495,6 @@ debugger.SetAsyncExecution(old_async_execution); } -ScriptInterpreter *CommandInterpreter::GetScriptInterpreter(bool can_create) { - std::lock_guard<std::recursive_mutex> locker(m_script_interpreter_mutex); - if (!m_script_interpreter_sp) { - if (!can_create) - return nullptr; - lldb::ScriptLanguage script_lang = GetDebugger().GetScriptLanguage(); - m_script_interpreter_sp = - PluginManager::GetScriptInterpreterForLanguage(script_lang, m_debugger); - } - return m_script_interpreter_sp.get(); -} - bool CommandInterpreter::GetSynchronous() { return m_synchronous_execution; } void CommandInterpreter::SetSynchronous(bool value) { @@ -2884,7 +2869,8 @@ } } - ScriptInterpreter *script_interpreter = GetScriptInterpreter(false); + ScriptInterpreter *script_interpreter = + m_debugger.GetScriptInterpreter(false); if (script_interpreter) { if (script_interpreter->Interrupt()) return true; Index: lldb/source/DataFormatters/TypeSynthetic.cpp =================================================================== --- lldb/source/DataFormatters/TypeSynthetic.cpp +++ lldb/source/DataFormatters/TypeSynthetic.cpp @@ -137,8 +137,7 @@ if (!target_sp) return; - m_interpreter = - target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + m_interpreter = target_sp->GetDebugger().GetScriptInterpreter(); if (m_interpreter != NULL) m_wrapper_sp = m_interpreter->CreateSyntheticScriptedProvider( Index: lldb/source/DataFormatters/TypeSummary.cpp =================================================================== --- lldb/source/DataFormatters/TypeSummary.cpp +++ lldb/source/DataFormatters/TypeSummary.cpp @@ -177,7 +177,7 @@ } ScriptInterpreter *script_interpreter = - target_sp->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + target_sp->GetDebugger().GetScriptInterpreter(); if (!script_interpreter) { retval.assign("error: no ScriptInterpreter"); Index: lldb/source/Core/Module.cpp =================================================================== --- lldb/source/Core/Module.cpp +++ lldb/source/Core/Module.cpp @@ -1545,8 +1545,7 @@ const uint32_t num_specs = file_specs.GetSize(); if (num_specs) { - ScriptInterpreter *script_interpreter = - debugger.GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *script_interpreter = debugger.GetScriptInterpreter(); if (script_interpreter) { for (uint32_t i = 0; i < num_specs; ++i) { FileSpec scripting_fspec(file_specs.GetFileSpecAtIndex(i)); Index: lldb/source/Core/FormatEntity.cpp =================================================================== --- lldb/source/Core/FormatEntity.cpp +++ lldb/source/Core/FormatEntity.cpp @@ -410,7 +410,7 @@ if (target) { ScriptInterpreter *script_interpreter = - target->GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + target->GetDebugger().GetScriptInterpreter(); if (script_interpreter) { Status error; std::string script_output; Index: lldb/source/Core/Debugger.cpp =================================================================== --- lldb/source/Core/Debugger.cpp +++ lldb/source/Core/Debugger.cpp @@ -767,8 +767,8 @@ m_source_manager_up(), m_source_file_cache(), m_command_interpreter_up( llvm::make_unique<CommandInterpreter>(*this, false)), - m_input_reader_stack(), m_instance_name(), m_loaded_plugins(), - m_event_handler_thread(), m_io_handler_thread(), + m_script_interpreter_sp(), m_input_reader_stack(), m_instance_name(), + m_loaded_plugins(), m_event_handler_thread(), m_io_handler_thread(), m_sync_broadcaster(nullptr, "lldb.debugger.sync"), m_forward_listener_sp(), m_clear_once() { char instance_cstr[256]; @@ -905,12 +905,10 @@ if (!out_file.IsValid()) out_file.SetStream(stdout, false); - // do not create the ScriptInterpreter just for setting the output file - // handle as the constructor will know how to do the right thing on its own - const bool can_create = false; - ScriptInterpreter *script_interpreter = - GetCommandInterpreter().GetScriptInterpreter(can_create); - if (script_interpreter) + // Do not create the ScriptInterpreter just for setting the output file + // handle as the constructor will know how to do the right thing on its own. + if (ScriptInterpreter *script_interpreter = + GetScriptInterpreter(/*can_create=*/false)) script_interpreter->ResetOutputFileHandle(fh); } @@ -1288,6 +1286,19 @@ error_stream); } +ScriptInterpreter *Debugger::GetScriptInterpreter(bool can_create) { + std::lock_guard<std::recursive_mutex> locker(m_script_interpreter_mutex); + + if (!m_script_interpreter_sp) { + if (!can_create) + return nullptr; + m_script_interpreter_sp = PluginManager::GetScriptInterpreterForLanguage( + GetScriptLanguage(), *this); + } + + return m_script_interpreter_sp.get(); +} + SourceManager &Debugger::GetSourceManager() { if (!m_source_manager_up) m_source_manager_up = llvm::make_unique<SourceManager>(shared_from_this()); Index: lldb/source/Commands/CommandObjectWatchpointCommand.cpp =================================================================== --- lldb/source/Commands/CommandObjectWatchpointCommand.cpp +++ lldb/source/Commands/CommandObjectWatchpointCommand.cpp @@ -442,7 +442,7 @@ if (m_options.m_use_script_language) { // Special handling for one-liner specified inline. if (m_options.m_use_one_liner) { - m_interpreter.GetScriptInterpreter()->SetWatchpointCommandCallback( + GetDebugger().GetScriptInterpreter()->SetWatchpointCommandCallback( wp_options, m_options.m_one_liner.c_str()); } // Special handling for using a Python function by name instead of @@ -452,10 +452,11 @@ else if (!m_options.m_function_name.empty()) { std::string oneliner(m_options.m_function_name); oneliner += "(frame, wp, internal_dict)"; - m_interpreter.GetScriptInterpreter()->SetWatchpointCommandCallback( + GetDebugger().GetScriptInterpreter()->SetWatchpointCommandCallback( wp_options, oneliner.c_str()); } else { - m_interpreter.GetScriptInterpreter() + GetDebugger() + .GetScriptInterpreter() ->CollectDataForWatchpointCommandCallback(wp_options, result); } } else { Index: lldb/source/Commands/CommandObjectType.cpp =================================================================== --- lldb/source/Commands/CommandObjectType.cpp +++ lldb/source/Commands/CommandObjectType.cpp @@ -180,7 +180,7 @@ StreamFileSP error_sp = io_handler.GetErrorStreamFile(); #ifndef LLDB_DISABLE_PYTHON - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter) { StringList lines; lines.SplitIntoLines(data); @@ -192,7 +192,7 @@ options_ptr); // this will ensure that we get rid of the pointer // when going out of scope - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter) { std::string funct_name_str; if (interpreter->GenerateTypeScriptFunction(lines, @@ -425,7 +425,7 @@ StreamFileSP error_sp = io_handler.GetErrorStreamFile(); #ifndef LLDB_DISABLE_PYTHON - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter) { StringList lines; lines.SplitIntoLines(data); @@ -437,7 +437,7 @@ options_ptr); // this will ensure that we get rid of the pointer // when going out of scope - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter) { std::string class_name_str; if (interpreter->GenerateTypeSynthClass(lines, class_name_str)) { @@ -1346,7 +1346,7 @@ script_format = std::make_shared<ScriptSummaryFormat>( m_options.m_flags, funct_name, code.c_str()); - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter && !interpreter->CheckObjectExists(funct_name)) result.AppendWarningWithFormat( @@ -1356,7 +1356,7 @@ } else if (!m_options.m_python_script .empty()) // we have a quick 1-line script, just use it { - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (!interpreter) { result.AppendError("script interpreter missing - unable to generate " "function wrapper.\n"); @@ -2357,7 +2357,7 @@ entry.reset(impl); - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter && !interpreter->CheckObjectExists(impl->GetPythonClassName())) Index: lldb/source/Commands/CommandObjectThread.cpp =================================================================== --- lldb/source/Commands/CommandObjectThread.cpp +++ lldb/source/Commands/CommandObjectThread.cpp @@ -612,7 +612,7 @@ result.AppendErrorWithFormat("empty class name for scripted step."); result.SetStatus(eReturnStatusFailed); return false; - } else if (!m_interpreter.GetScriptInterpreter()->CheckObjectExists( + } else if (!GetDebugger().GetScriptInterpreter()->CheckObjectExists( m_options.m_class_name.c_str())) { result.AppendErrorWithFormat( "class for scripted step: \"%s\" does not exist.", Index: lldb/source/Commands/CommandObjectFrame.cpp =================================================================== --- lldb/source/Commands/CommandObjectFrame.cpp +++ lldb/source/Commands/CommandObjectFrame.cpp @@ -890,7 +890,7 @@ return false; } - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter && !interpreter->CheckObjectExists(m_options.m_class_name.c_str())) { Index: lldb/source/Commands/CommandObjectCommands.cpp =================================================================== --- lldb/source/Commands/CommandObjectCommands.cpp +++ lldb/source/Commands/CommandObjectCommands.cpp @@ -1246,7 +1246,7 @@ if (m_fetched_help_long) return CommandObjectRaw::GetHelpLong(); - ScriptInterpreter *scripter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *scripter = GetDebugger().GetScriptInterpreter(); if (!scripter) return CommandObjectRaw::GetHelpLong(); @@ -1261,7 +1261,7 @@ protected: bool DoExecute(llvm::StringRef raw_command_line, CommandReturnObject &result) override { - ScriptInterpreter *scripter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *scripter = GetDebugger().GetScriptInterpreter(); Status error; @@ -1304,7 +1304,7 @@ StreamString stream; stream.Printf("For more information run 'help %s'", name.c_str()); SetHelp(stream.GetString()); - if (ScriptInterpreter *scripter = m_interpreter.GetScriptInterpreter()) + if (ScriptInterpreter *scripter = GetDebugger().GetScriptInterpreter()) GetFlags().Set(scripter->GetFlagsForCommandObject(cmd_obj_sp)); } @@ -1319,7 +1319,7 @@ llvm::StringRef GetHelp() override { if (m_fetched_help_short) return CommandObjectRaw::GetHelp(); - ScriptInterpreter *scripter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *scripter = GetDebugger().GetScriptInterpreter(); if (!scripter) return CommandObjectRaw::GetHelp(); std::string docstring; @@ -1335,7 +1335,7 @@ if (m_fetched_help_long) return CommandObjectRaw::GetHelpLong(); - ScriptInterpreter *scripter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *scripter = GetDebugger().GetScriptInterpreter(); if (!scripter) return CommandObjectRaw::GetHelpLong(); @@ -1350,7 +1350,7 @@ protected: bool DoExecute(llvm::StringRef raw_command_line, CommandReturnObject &result) override { - ScriptInterpreter *scripter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *scripter = GetDebugger().GetScriptInterpreter(); Status error; @@ -1489,7 +1489,7 @@ // won't stomp on each other (wrt to execution contents, options, and // more) m_exe_ctx.Clear(); - if (m_interpreter.GetScriptInterpreter()->LoadScriptingModule( + if (GetDebugger().GetScriptInterpreter()->LoadScriptingModule( entry.c_str(), m_options.m_allow_reload, init_session, error)) { result.SetStatus(eReturnStatusSuccessFinishNoResult); } else { @@ -1630,7 +1630,7 @@ std::string &data) override { StreamFileSP error_sp = io_handler.GetErrorStreamFile(); - ScriptInterpreter *interpreter = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (interpreter) { StringList lines; @@ -1715,8 +1715,7 @@ } } } else { - ScriptInterpreter *interpreter = - GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *interpreter = GetDebugger().GetScriptInterpreter(); if (!interpreter) { result.AppendError("cannot find ScriptInterpreter"); result.SetStatus(eReturnStatusFailed); Index: lldb/source/Commands/CommandObjectBreakpointCommand.cpp =================================================================== --- lldb/source/Commands/CommandObjectBreakpointCommand.cpp +++ lldb/source/Commands/CommandObjectBreakpointCommand.cpp @@ -422,7 +422,7 @@ // to set or collect command callback. Otherwise, call the methods // associated with this object. if (m_options.m_use_script_language) { - ScriptInterpreter *script_interp = m_interpreter.GetScriptInterpreter(); + ScriptInterpreter *script_interp = GetDebugger().GetScriptInterpreter(); // Special handling for one-liner specified inline. if (m_options.m_use_one_liner) { script_interp->SetBreakpointCommandCallback( Index: lldb/source/Breakpoint/BreakpointResolverScripted.cpp =================================================================== --- lldb/source/Breakpoint/BreakpointResolverScripted.cpp +++ lldb/source/Breakpoint/BreakpointResolverScripted.cpp @@ -46,7 +46,6 @@ if (m_breakpoint) { TargetSP target_sp = m_breakpoint->GetTargetSP(); ScriptInterpreter *script_interp = target_sp->GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); if (!script_interp) return; @@ -105,7 +104,6 @@ } ScriptInterpreter *script_interp = bkpt->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter(); return new BreakpointResolverScripted(bkpt, class_name, depth, args_data_impl, *script_interp); @@ -122,8 +120,7 @@ } ScriptInterpreter *BreakpointResolverScripted::GetScriptInterpreter() { - return m_breakpoint->GetTarget().GetDebugger().GetCommandInterpreter() - .GetScriptInterpreter(); + return m_breakpoint->GetTarget().GetDebugger().GetScriptInterpreter(); } Searcher::CallbackReturn Index: lldb/source/Breakpoint/BreakpointOptions.cpp =================================================================== --- lldb/source/Breakpoint/BreakpointOptions.cpp +++ lldb/source/Breakpoint/BreakpointOptions.cpp @@ -316,8 +316,7 @@ if (cmd_data_up->interpreter == eScriptLanguageNone) bp_options->SetCommandDataCallback(cmd_data_up); else { - ScriptInterpreter *interp = - target.GetDebugger().GetCommandInterpreter().GetScriptInterpreter(); + ScriptInterpreter *interp = target.GetDebugger().GetScriptInterpreter(); if (!interp) { error.SetErrorStringWithFormat( "Can't set script commands - no script interpreter"); Index: lldb/source/API/SBTypeCategory.cpp =================================================================== --- lldb/source/API/SBTypeCategory.cpp +++ lldb/source/API/SBTypeCategory.cpp @@ -425,7 +425,7 @@ DebuggerSP debugger_sp = lldb_private::Debugger::GetDebuggerAtIndex(j); if (debugger_sp) { ScriptInterpreter *interpreter_ptr = - debugger_sp->GetCommandInterpreter().GetScriptInterpreter(); + debugger_sp->GetScriptInterpreter(); if (interpreter_ptr) { std::string output; if (interpreter_ptr->GenerateTypeScriptFunction(input, output, @@ -549,7 +549,7 @@ DebuggerSP debugger_sp = lldb_private::Debugger::GetDebuggerAtIndex(j); if (debugger_sp) { ScriptInterpreter *interpreter_ptr = - debugger_sp->GetCommandInterpreter().GetScriptInterpreter(); + debugger_sp->GetScriptInterpreter(); if (interpreter_ptr) { std::string output; if (interpreter_ptr->GenerateTypeSynthClass(input, output, Index: lldb/source/API/SBBreakpointName.cpp =================================================================== --- lldb/source/API/SBBreakpointName.cpp +++ lldb/source/API/SBBreakpointName.cpp @@ -579,7 +579,6 @@ BreakpointOptions &bp_options = bp_name->GetOptions(); m_impl_up->GetTarget() ->GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter() ->SetBreakpointCommandCallbackFunction(&bp_options, callback_function_name); @@ -603,7 +602,6 @@ Status error = m_impl_up->GetTarget() ->GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter() ->SetBreakpointCommandCallback(&bp_options, callback_body_text); sb_error.SetError(error); Index: lldb/source/API/SBBreakpointLocation.cpp =================================================================== --- lldb/source/API/SBBreakpointLocation.cpp +++ lldb/source/API/SBBreakpointLocation.cpp @@ -220,7 +220,6 @@ loc_sp->GetBreakpoint() .GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter() ->SetBreakpointCommandCallbackFunction(bp_options, callback_function_name); @@ -243,7 +242,6 @@ loc_sp->GetBreakpoint() .GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter() ->SetBreakpointCommandCallback(bp_options, callback_body_text); sb_error.SetError(error); Index: lldb/source/API/SBBreakpoint.cpp =================================================================== --- lldb/source/API/SBBreakpoint.cpp +++ lldb/source/API/SBBreakpoint.cpp @@ -602,7 +602,6 @@ BreakpointOptions *bp_options = bkpt_sp->GetOptions(); bkpt_sp->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter() ->SetBreakpointCommandCallbackFunction(bp_options, callback_function_name); @@ -623,7 +622,6 @@ Status error = bkpt_sp->GetTarget() .GetDebugger() - .GetCommandInterpreter() .GetScriptInterpreter() ->SetBreakpointCommandCallback(bp_options, callback_body_text); sb_error.SetError(error); Index: lldb/include/lldb/Interpreter/CommandObject.h =================================================================== --- lldb/include/lldb/Interpreter/CommandObject.h +++ lldb/include/lldb/Interpreter/CommandObject.h @@ -121,6 +121,7 @@ GetArgumentDescriptionAsCString(const lldb::CommandArgumentType arg_type); CommandInterpreter &GetCommandInterpreter() { return m_interpreter; } + Debugger &GetDebugger(); virtual llvm::StringRef GetHelp(); Index: lldb/include/lldb/Interpreter/CommandInterpreter.h =================================================================== --- lldb/include/lldb/Interpreter/CommandInterpreter.h +++ lldb/include/lldb/Interpreter/CommandInterpreter.h @@ -386,10 +386,6 @@ int GetOptionArgumentPosition(const char *in_string); - ScriptInterpreter *GetScriptInterpreter(bool can_create = true); - - void SetScriptInterpreter(); - void SkipLLDBInitFiles(bool skip_lldbinit_files) { m_skip_lldbinit_files = skip_lldbinit_files; } @@ -573,8 +569,6 @@ CommandHistory m_command_history; std::string m_repeat_command; // Stores the command that will be executed for // an empty command string. - lldb::ScriptInterpreterSP m_script_interpreter_sp; - std::recursive_mutex m_script_interpreter_mutex; lldb::IOHandlerSP m_command_io_handler_sp; char m_comment_char; bool m_batch_command_mode; Index: lldb/include/lldb/Core/Debugger.h =================================================================== --- lldb/include/lldb/Core/Debugger.h +++ lldb/include/lldb/Core/Debugger.h @@ -154,6 +154,8 @@ return *m_command_interpreter_up; } + ScriptInterpreter *GetScriptInterpreter(bool can_create = true); + lldb::ListenerSP GetListener() { return m_listener_sp; } // This returns the Debugger's scratch source manager. It won't be able to @@ -395,6 +397,9 @@ // source file cache. std::unique_ptr<CommandInterpreter> m_command_interpreter_up; + lldb::ScriptInterpreterSP m_script_interpreter_sp; + std::recursive_mutex m_script_interpreter_mutex; + IOHandlerStack m_input_reader_stack; llvm::StringMap<std::weak_ptr<llvm::raw_ostream>> m_log_streams; std::shared_ptr<llvm::raw_ostream> m_log_callback_stream_sp;
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits