Skip to content

Commit

Permalink
Break cycle lldb/Commands [3->] lldb/Expression [1->] lldb/Commands
Browse files Browse the repository at this point in the history
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
  • Loading branch information
JDevlieghere committed Mar 9, 2019
1 parent cee6c47 commit c5bfa3d
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 21 deletions.
10 changes: 5 additions & 5 deletions lldb/include/lldb/Expression/REPL.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {

Expand Down Expand Up @@ -68,9 +69,8 @@ class REPL : public IOHandlerDelegate {
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) {
Expand Down Expand Up @@ -145,7 +145,7 @@ class REPL : public IOHandlerDelegate {

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;
Expand Down
26 changes: 25 additions & 1 deletion lldb/source/Commands/CommandObjectExpression.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down Expand Up @@ -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);
}
Expand Down
16 changes: 1 addition & 15 deletions lldb/source/Expression/REPL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"

Expand All @@ -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;
Expand Down Expand Up @@ -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());

Expand Down

0 comments on commit c5bfa3d

Please sign in to comment.