Author: Jonas Devlieghere Date: 2019-12-21T17:11:12-08:00 New Revision: bbf70c046789f4403a9c02fc5558708ef19073cf
URL: https://github.com/llvm/llvm-project/commit/bbf70c046789f4403a9c02fc5558708ef19073cf DIFF: https://github.com/llvm/llvm-project/commit/bbf70c046789f4403a9c02fc5558708ef19073cf.diff LOG: [lldb/Core] Support asking the debugger for a specific script interpreter Rather than holding on to one script interpreter, it should be possible to request a script interpreter for a specific scripting language. The GetScriptInterpreter method now takes an optional scripting language argument. (NFC) Added: Modified: lldb/include/lldb/Core/Debugger.h lldb/source/Core/Debugger.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Core/Debugger.h b/lldb/include/lldb/Core/Debugger.h index b2f696c22834..a8048427c8f1 100644 --- a/lldb/include/lldb/Core/Debugger.h +++ b/lldb/include/lldb/Core/Debugger.h @@ -151,7 +151,9 @@ class Debugger : public std::enable_shared_from_this<Debugger>, return *m_command_interpreter_up; } - ScriptInterpreter *GetScriptInterpreter(bool can_create = true); + ScriptInterpreter * + GetScriptInterpreter(bool can_create = true, + llvm::Optional<lldb::ScriptLanguage> language = {}); lldb::ListenerSP GetListener() { return m_listener_sp; } @@ -396,8 +398,9 @@ class Debugger : public std::enable_shared_from_this<Debugger>, // source file cache. std::unique_ptr<CommandInterpreter> m_command_interpreter_up; - lldb::ScriptInterpreterSP m_script_interpreter_sp; std::recursive_mutex m_script_interpreter_mutex; + std::array<lldb::ScriptInterpreterSP, lldb::eScriptLanguageUnknown> + m_script_interpreters; IOHandlerStack m_input_reader_stack; llvm::StringMap<std::weak_ptr<llvm::raw_ostream>> m_log_streams; diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index 18397d00dcaa..c4619776c11c 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -708,8 +708,8 @@ Debugger::Debugger(lldb::LogOutputCallback log_callback, void *baton) m_source_manager_up(), m_source_file_cache(), m_command_interpreter_up( std::make_unique<CommandInterpreter>(*this, false)), - m_script_interpreter_sp(), m_input_reader_stack(), m_instance_name(), - m_loaded_plugins(), m_event_handler_thread(), m_io_handler_thread(), + 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]; @@ -1198,17 +1198,21 @@ bool Debugger::EnableLog(llvm::StringRef channel, error_stream); } -ScriptInterpreter *Debugger::GetScriptInterpreter(bool can_create) { +ScriptInterpreter * +Debugger::GetScriptInterpreter(bool can_create, + llvm::Optional<lldb::ScriptLanguage> language) { std::lock_guard<std::recursive_mutex> locker(m_script_interpreter_mutex); + lldb::ScriptLanguage script_language = + language ? *language : GetScriptLanguage(); - if (!m_script_interpreter_sp) { + if (!m_script_interpreters[script_language]) { if (!can_create) return nullptr; - m_script_interpreter_sp = PluginManager::GetScriptInterpreterForLanguage( - GetScriptLanguage(), *this); + m_script_interpreters[script_language] = + PluginManager::GetScriptInterpreterForLanguage(script_language, *this); } - return m_script_interpreter_sp.get(); + return m_script_interpreters[script_language].get(); } SourceManager &Debugger::GetSourceManager() { _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits