Skip to content

Commit fc7482e

Browse files
authored
[lldb-dap] Return a std::optional<bool> from GetBoolean (NFC) (#129818)
Return a std::optional<bool> from GetBoolean so you can distinguish between the value not being present and it being explicitly set to true or false. All existing uses are replaced by calling `value_or(fail_value`). Motivated by #129753
1 parent 0655292 commit fc7482e

11 files changed

+43
-36
lines changed

lldb/tools/lldb-dap/DAP.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ bool DAP::HandleObject(const llvm::json::Object &object) {
787787
response_handler = std::make_unique<UnknownResponseHandler>("", id);
788788

789789
// Result should be given, use null if not.
790-
if (GetBoolean(object, "success", false)) {
790+
if (GetBoolean(object, "success").value_or(false)) {
791791
llvm::json::Value Result = nullptr;
792792
if (auto *B = object.get("body")) {
793793
Result = std::move(*B);

lldb/tools/lldb-dap/Handler/AttachRequestHandler.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ void AttachRequestHandler::operator()(const llvm::json::Object &request) const {
6161
GetString(arguments, "gdb-remote-hostname", "localhost");
6262
if (pid != LLDB_INVALID_PROCESS_ID)
6363
attach_info.SetProcessID(pid);
64-
const auto wait_for = GetBoolean(arguments, "waitFor", false);
64+
const auto wait_for = GetBoolean(arguments, "waitFor").value_or(false);
6565
attach_info.SetWaitForLaunch(wait_for, false /*async*/);
6666
dap.init_commands = GetStrings(arguments, "initCommands");
6767
dap.pre_run_commands = GetStrings(arguments, "preRunCommands");
@@ -71,16 +71,17 @@ void AttachRequestHandler::operator()(const llvm::json::Object &request) const {
7171
auto attachCommands = GetStrings(arguments, "attachCommands");
7272
llvm::StringRef core_file = GetString(arguments, "coreFile");
7373
const uint64_t timeout_seconds = GetUnsigned(arguments, "timeout", 30);
74-
dap.stop_at_entry =
75-
core_file.empty() ? GetBoolean(arguments, "stopOnEntry", false) : true;
74+
dap.stop_at_entry = core_file.empty()
75+
? GetBoolean(arguments, "stopOnEntry").value_or(false)
76+
: true;
7677
dap.post_run_commands = GetStrings(arguments, "postRunCommands");
7778
const llvm::StringRef debuggerRoot = GetString(arguments, "debuggerRoot");
7879
dap.enable_auto_variable_summaries =
79-
GetBoolean(arguments, "enableAutoVariableSummaries", false);
80+
GetBoolean(arguments, "enableAutoVariableSummaries").value_or(false);
8081
dap.enable_synthetic_child_debugging =
81-
GetBoolean(arguments, "enableSyntheticChildDebugging", false);
82+
GetBoolean(arguments, "enableSyntheticChildDebugging").value_or(false);
8283
dap.display_extended_backtrace =
83-
GetBoolean(arguments, "displayExtendedBacktrace", false);
84+
GetBoolean(arguments, "displayExtendedBacktrace").value_or(false);
8485
dap.command_escape_prefix = GetString(arguments, "commandEscapePrefix", "`");
8586
dap.SetFrameFormat(GetString(arguments, "customFrameFormat"));
8687
dap.SetThreadFormat(GetString(arguments, "customThreadFormat"));

lldb/tools/lldb-dap/Handler/DisassembleRequestHandler.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ void DisassembleRequestHandler::operator()(
123123
return;
124124
}
125125

126-
const bool resolveSymbols = GetBoolean(arguments, "resolveSymbols", false);
126+
const bool resolveSymbols =
127+
GetBoolean(arguments, "resolveSymbols").value_or(false);
127128
llvm::json::Array instructions;
128129
const auto num_insts = insts.GetSize();
129130
for (size_t i = 0; i < num_insts; ++i) {

lldb/tools/lldb-dap/Handler/DisconnectRequestHandler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ void DisconnectRequestHandler::operator()(
6464
const auto *arguments = request.getObject("arguments");
6565

6666
bool defaultTerminateDebuggee = dap.is_attach ? false : true;
67-
bool terminateDebuggee =
68-
GetBoolean(arguments, "terminateDebuggee", defaultTerminateDebuggee);
67+
bool terminateDebuggee = GetBoolean(arguments, "terminateDebuggee")
68+
.value_or(defaultTerminateDebuggee);
6969

7070
lldb::SBError error = dap.Disconnect(terminateDebuggee);
7171
if (error.Fail())

lldb/tools/lldb-dap/Handler/InitializeRequestHandler.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,8 @@ void InitializeRequestHandler::operator()(
258258
// sourceInitFile option is not from formal DAP specification. It is only
259259
// used by unit tests to prevent sourcing .lldbinit files from environment
260260
// which may affect the outcome of tests.
261-
bool source_init_file = GetBoolean(arguments, "sourceInitFile", true);
261+
bool source_init_file =
262+
GetBoolean(arguments, "sourceInitFile").value_or(true);
262263

263264
// Do not source init files until in/out/err are configured.
264265
dap.debugger = lldb::SBDebugger::Create(false);
@@ -300,7 +301,7 @@ void InitializeRequestHandler::operator()(
300301
dap.PopulateExceptionBreakpoints();
301302
auto cmd = dap.debugger.GetCommandInterpreter().AddMultiwordCommand(
302303
"lldb-dap", "Commands for managing lldb-dap.");
303-
if (GetBoolean(arguments, "supportsStartDebuggingRequest", false)) {
304+
if (GetBoolean(arguments, "supportsStartDebuggingRequest").value_or(false)) {
304305
cmd.AddCommand(
305306
"start-debugging", new StartDebuggingRequestHandler(dap),
306307
"Sends a startDebugging request from the debug adapter to the client "

lldb/tools/lldb-dap/Handler/LaunchRequestHandler.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,14 @@ void LaunchRequestHandler::operator()(const llvm::json::Object &request) const {
6060
dap.exit_commands = GetStrings(arguments, "exitCommands");
6161
dap.terminate_commands = GetStrings(arguments, "terminateCommands");
6262
dap.post_run_commands = GetStrings(arguments, "postRunCommands");
63-
dap.stop_at_entry = GetBoolean(arguments, "stopOnEntry", false);
63+
dap.stop_at_entry = GetBoolean(arguments, "stopOnEntry").value_or(false);
6464
const llvm::StringRef debuggerRoot = GetString(arguments, "debuggerRoot");
6565
dap.enable_auto_variable_summaries =
66-
GetBoolean(arguments, "enableAutoVariableSummaries", false);
66+
GetBoolean(arguments, "enableAutoVariableSummaries").value_or(false);
6767
dap.enable_synthetic_child_debugging =
68-
GetBoolean(arguments, "enableSyntheticChildDebugging", false);
68+
GetBoolean(arguments, "enableSyntheticChildDebugging").value_or(false);
6969
dap.display_extended_backtrace =
70-
GetBoolean(arguments, "displayExtendedBacktrace", false);
70+
GetBoolean(arguments, "displayExtendedBacktrace").value_or(false);
7171
dap.command_escape_prefix = GetString(arguments, "commandEscapePrefix", "`");
7272
dap.SetFrameFormat(GetString(arguments, "customFrameFormat"));
7373
dap.SetThreadFormat(GetString(arguments, "customThreadFormat"));

lldb/tools/lldb-dap/Handler/RequestHandler.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -173,19 +173,20 @@ RequestHandler::LaunchProcess(const llvm::json::Object &request) const {
173173

174174
auto flags = launch_info.GetLaunchFlags();
175175

176-
if (GetBoolean(arguments, "disableASLR", true))
176+
if (GetBoolean(arguments, "disableASLR").value_or(true))
177177
flags |= lldb::eLaunchFlagDisableASLR;
178-
if (GetBoolean(arguments, "disableSTDIO", false))
178+
if (GetBoolean(arguments, "disableSTDIO").value_or(false))
179179
flags |= lldb::eLaunchFlagDisableSTDIO;
180-
if (GetBoolean(arguments, "shellExpandArguments", false))
180+
if (GetBoolean(arguments, "shellExpandArguments").value_or(false))
181181
flags |= lldb::eLaunchFlagShellExpandArguments;
182-
const bool detachOnError = GetBoolean(arguments, "detachOnError", false);
182+
const bool detachOnError =
183+
GetBoolean(arguments, "detachOnError").value_or(false);
183184
launch_info.SetDetachOnError(detachOnError);
184185
launch_info.SetLaunchFlags(flags | lldb::eLaunchFlagDebug |
185186
lldb::eLaunchFlagStopAtEntry);
186187
const uint64_t timeout_seconds = GetUnsigned(arguments, "timeout", 30);
187188

188-
if (GetBoolean(arguments, "runInTerminal", false)) {
189+
if (GetBoolean(arguments, "runInTerminal").value_or(false)) {
189190
if (llvm::Error err = RunInTerminal(dap, request, timeout_seconds))
190191
error.SetErrorString(llvm::toString(std::move(err)).c_str());
191192
} else if (launchCommands.empty()) {

lldb/tools/lldb-dap/Handler/StepInRequestHandler.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,8 @@ void StepInRequestHandler::operator()(const llvm::json::Object &request) const {
7474
if (it != dap.step_in_targets.end())
7575
step_in_target = it->second;
7676

77-
const bool single_thread = GetBoolean(arguments, "singleThread", false);
77+
const bool single_thread =
78+
GetBoolean(arguments, "singleThread").value_or(false);
7879
lldb::RunMode run_mode =
7980
single_thread ? lldb::eOnlyThisThread : lldb::eOnlyDuringStepping;
8081
lldb::SBThread thread = dap.GetLLDBThread(*arguments);

lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ void VariablesRequestHandler::operator()(
9999
bool hex = false;
100100
const auto *format = arguments->getObject("format");
101101
if (format)
102-
hex = GetBoolean(format, "hex", false);
102+
hex = GetBoolean(format, "hex").value_or(false);
103103

104104
if (lldb::SBValueList *top_scope =
105105
dap.variables.GetTopLevelScope(variablesReference)) {

lldb/tools/lldb-dap/JSONUtils.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -100,20 +100,20 @@ uint64_t GetUnsigned(const llvm::json::Object *obj, llvm::StringRef key,
100100
return GetUnsigned(*obj, key, fail_value);
101101
}
102102

103-
bool GetBoolean(const llvm::json::Object &obj, llvm::StringRef key,
104-
bool fail_value) {
103+
std::optional<bool> GetBoolean(const llvm::json::Object &obj,
104+
llvm::StringRef key) {
105105
if (auto value = obj.getBoolean(key))
106106
return *value;
107107
if (auto value = obj.getInteger(key))
108108
return *value != 0;
109-
return fail_value;
109+
return std::nullopt;
110110
}
111111

112-
bool GetBoolean(const llvm::json::Object *obj, llvm::StringRef key,
113-
bool fail_value) {
114-
if (obj == nullptr)
115-
return fail_value;
116-
return GetBoolean(*obj, key, fail_value);
112+
std::optional<bool> GetBoolean(const llvm::json::Object *obj,
113+
llvm::StringRef key) {
114+
if (obj != nullptr)
115+
return GetBoolean(*obj, key);
116+
return std::nullopt;
117117
}
118118

119119
int64_t GetSigned(const llvm::json::Object &obj, llvm::StringRef key,

lldb/tools/lldb-dap/JSONUtils.h

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,13 +102,15 @@ uint64_t GetUnsigned(const llvm::json::Object *obj, llvm::StringRef key,
102102
/// The key to use when extracting the value
103103
///
104104
/// \return
105-
/// The boolean value for the specified \a key, or \a fail_value
105+
/// The boolean value for the specified \a key, or std::nullopt
106106
/// if there is no key that matches or if the value is not a
107107
/// boolean value of an integer.
108-
bool GetBoolean(const llvm::json::Object &obj, llvm::StringRef key,
109-
bool fail_value);
110-
bool GetBoolean(const llvm::json::Object *obj, llvm::StringRef key,
111-
bool fail_value);
108+
/// @{
109+
std::optional<bool> GetBoolean(const llvm::json::Object &obj,
110+
llvm::StringRef key);
111+
std::optional<bool> GetBoolean(const llvm::json::Object *obj,
112+
llvm::StringRef key);
113+
/// @}
112114

113115
/// Extract the signed integer for the specified key from the
114116
/// specified object.

0 commit comments

Comments
 (0)