diff options
author | Jonas Devlieghere <jonas@devlieghere.com> | 2019-03-09 00:10:52 +0000 |
---|---|---|
committer | Jonas Devlieghere <jonas@devlieghere.com> | 2019-03-09 00:10:52 +0000 |
commit | c5bfa3dafb3e7ccc871734a96b7a9188868d925a (patch) | |
tree | 9c5d2d797435bdfbdfad48f8f8be1f36725ae4d0 | |
parent | cee6c47a62c4d043c00eed860dc3900ad180b067 (diff) | |
download | llvm-c5bfa3dafb3e7ccc871734a96b7a9188868d925a.zip llvm-c5bfa3dafb3e7ccc871734a96b7a9188868d925a.tar.gz llvm-c5bfa3dafb3e7ccc871734a96b7a9188868d925a.tar.bz2 |
Break cycle lldb/Commands [3->] lldb/Expression [1->] lldb/Commands
Inspired by Zachary's mail on lldb-dev, this seemed like low hanging
fruit. This patch breaks the circular dependency between commands and
expression.
Differential revision: https://reviews.llvm.org/D59158
llvm-svn: 355762
-rw-r--r-- | lldb/include/lldb/Expression/REPL.h | 10 | ||||
-rw-r--r-- | lldb/source/Commands/CommandObjectExpression.cpp | 26 | ||||
-rw-r--r-- | lldb/source/Expression/REPL.cpp | 16 |
3 files changed, 31 insertions, 21 deletions
diff --git a/lldb/include/lldb/Expression/REPL.h b/lldb/include/lldb/Expression/REPL.h index 3a3cb2f..5c88d8a 100644 --- a/lldb/include/lldb/Expression/REPL.h +++ b/lldb/include/lldb/Expression/REPL.h @@ -11,9 +11,10 @@ #include <string> -#include "lldb/../../source/Commands/CommandObjectExpression.h" +#include "lldb/Core/IOHandler.h" #include "lldb/Interpreter/OptionGroupFormat.h" #include "lldb/Interpreter/OptionGroupValueObjectDisplay.h" +#include "lldb/Target/Target.h" namespace lldb_private { @@ -68,9 +69,8 @@ public: m_varobj_options = options; } - void - SetCommandOptions(const CommandObjectExpression::CommandOptions &options) { - m_command_options = options; + void SetEvaluateOptions(const EvaluateExpressionOptions &options) { + m_expr_options = options; } void SetCompilerOptions(const char *options) { @@ -145,7 +145,7 @@ protected: OptionGroupFormat m_format_options = OptionGroupFormat(lldb::eFormatDefault); OptionGroupValueObjectDisplay m_varobj_options; - CommandObjectExpression::CommandOptions m_command_options; + EvaluateExpressionOptions m_expr_options; std::string m_compiler_options; bool m_enable_auto_indent = true; diff --git a/lldb/source/Commands/CommandObjectExpression.cpp b/lldb/source/Commands/CommandObjectExpression.cpp index 948a874..d59b781 100644 --- a/lldb/source/Commands/CommandObjectExpression.cpp +++ b/lldb/source/Commands/CommandObjectExpression.cpp @@ -571,6 +571,29 @@ void CommandObjectExpression::GetMultilineExpression() { debugger.PushIOHandler(io_handler_sp); } +static EvaluateExpressionOptions +GetExprOptions(ExecutionContext &ctx, + CommandObjectExpression::CommandOptions command_options) { + command_options.OptionParsingStarting(&ctx); + + // Default certain settings for REPL regardless of the global settings. + command_options.unwind_on_error = false; + command_options.ignore_breakpoints = false; + command_options.debug = false; + + EvaluateExpressionOptions expr_options; + expr_options.SetUnwindOnError(command_options.unwind_on_error); + expr_options.SetIgnoreBreakpoints(command_options.ignore_breakpoints); + expr_options.SetTryAllThreads(command_options.try_all_threads); + + if (command_options.timeout > 0) + expr_options.SetTimeout(std::chrono::microseconds(command_options.timeout)); + else + expr_options.SetTimeout(llvm::None); + + return expr_options; +} + bool CommandObjectExpression::DoExecute(llvm::StringRef command, CommandReturnObject &result) { m_fixed_expression.clear(); @@ -626,7 +649,8 @@ bool CommandObjectExpression::DoExecute(llvm::StringRef command, if (repl_sp) { if (initialize) { - repl_sp->SetCommandOptions(m_command_options); + repl_sp->SetEvaluateOptions( + GetExprOptions(exe_ctx, m_command_options)); repl_sp->SetFormatOptions(m_format_options); repl_sp->SetValueObjectDisplayOptions(m_varobj_options); } diff --git a/lldb/source/Expression/REPL.cpp b/lldb/source/Expression/REPL.cpp index 8bc74e4..b3f4307 100644 --- a/lldb/source/Expression/REPL.cpp +++ b/lldb/source/Expression/REPL.cpp @@ -15,7 +15,6 @@ #include "lldb/Host/HostInfo.h" #include "lldb/Interpreter/CommandInterpreter.h" #include "lldb/Interpreter/CommandReturnObject.h" -#include "lldb/Target/Target.h" #include "lldb/Target/Thread.h" #include "lldb/Utility/AnsiTerminal.h" @@ -29,12 +28,6 @@ REPL::REPL(LLVMCastKind kind, Target &target) : m_target(target), m_kind(kind) { auto exe_ctx = debugger.GetCommandInterpreter().GetExecutionContext(); m_format_options.OptionParsingStarting(&exe_ctx); m_varobj_options.OptionParsingStarting(&exe_ctx); - m_command_options.OptionParsingStarting(&exe_ctx); - - // Default certain settings for REPL regardless of the global settings. - m_command_options.unwind_on_error = false; - m_command_options.ignore_breakpoints = false; - m_command_options.debug = false; } REPL::~REPL() = default; @@ -276,22 +269,15 @@ void REPL::IOHandlerInputComplete(IOHandler &io_handler, std::string &code) { const bool colorize_err = error_sp->GetFile().GetIsTerminalWithColors(); - EvaluateExpressionOptions expr_options; + EvaluateExpressionOptions expr_options = m_expr_options; expr_options.SetCoerceToId(m_varobj_options.use_objc); - expr_options.SetUnwindOnError(m_command_options.unwind_on_error); - expr_options.SetIgnoreBreakpoints(m_command_options.ignore_breakpoints); expr_options.SetKeepInMemory(true); expr_options.SetUseDynamic(m_varobj_options.use_dynamic); - expr_options.SetTryAllThreads(m_command_options.try_all_threads); expr_options.SetGenerateDebugInfo(true); expr_options.SetREPLEnabled(true); expr_options.SetColorizeErrors(colorize_err); expr_options.SetPoundLine(m_repl_source_path.c_str(), m_code.GetSize() + 1); - if (m_command_options.timeout > 0) - expr_options.SetTimeout(std::chrono::microseconds(m_command_options.timeout)); - else - expr_options.SetTimeout(llvm::None); expr_options.SetLanguage(GetLanguage()); |