llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Jonas Devlieghere (JDevlieghere) <details> <summary>Changes</summary> Replace Get{Signed,Unsigned} with GetInteger<T> and return std::optional so you can distinguish between the value not being present and it being explicitly set to the previous fail_value. All existing uses are replaced by calling value_or(fail_value). Continuation of #<!-- -->129818 --- Patch is 20.25 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/129823.diff 18 Files Affected: - (modified) lldb/tools/lldb-dap/DAP.cpp (+5-3) - (modified) lldb/tools/lldb-dap/Handler/AttachRequestHandler.cpp (+4-3) - (modified) lldb/tools/lldb-dap/Handler/BreakpointLocationsHandler.cpp (+7-5) - (modified) lldb/tools/lldb-dap/Handler/CompletionsHandler.cpp (+3-2) - (modified) lldb/tools/lldb-dap/Handler/DataBreakpointInfoRequestHandler.cpp (+1-1) - (modified) lldb/tools/lldb-dap/Handler/DisassembleRequestHandler.cpp (+3-2) - (modified) lldb/tools/lldb-dap/Handler/LocationsRequestHandler.cpp (+2-1) - (modified) lldb/tools/lldb-dap/Handler/ReadMemoryRequestHandler.cpp (+3-2) - (modified) lldb/tools/lldb-dap/Handler/RequestHandler.cpp (+2-1) - (modified) lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp (+3-2) - (modified) lldb/tools/lldb-dap/Handler/SourceRequestHandler.cpp (+4-2) - (modified) lldb/tools/lldb-dap/Handler/StackTraceRequestHandler.cpp (+3-2) - (modified) lldb/tools/lldb-dap/Handler/StepInRequestHandler.cpp (+2-1) - (modified) lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp (+3-3) - (modified) lldb/tools/lldb-dap/InstructionBreakpoint.cpp (+1-1) - (modified) lldb/tools/lldb-dap/JSONUtils.cpp (+1-31) - (modified) lldb/tools/lldb-dap/JSONUtils.h (+19-27) - (modified) lldb/tools/lldb-dap/SourceBreakpoint.cpp (+2-2) ``````````diff diff --git a/lldb/tools/lldb-dap/DAP.cpp b/lldb/tools/lldb-dap/DAP.cpp index 3dc9d6f5ca0a4..32e94ff9f2bb6 100644 --- a/lldb/tools/lldb-dap/DAP.cpp +++ b/lldb/tools/lldb-dap/DAP.cpp @@ -526,12 +526,14 @@ ExceptionBreakpoint *DAP::GetExceptionBPFromStopReason(lldb::SBThread &thread) { } lldb::SBThread DAP::GetLLDBThread(const llvm::json::Object &arguments) { - auto tid = GetSigned(arguments, "threadId", LLDB_INVALID_THREAD_ID); + auto tid = GetInteger<int64_t>(arguments, "threadId") + .value_or(LLDB_INVALID_THREAD_ID); return target.GetProcess().GetThreadByID(tid); } lldb::SBFrame DAP::GetLLDBFrame(const llvm::json::Object &arguments) { - const uint64_t frame_id = GetUnsigned(arguments, "frameId", UINT64_MAX); + const uint64_t frame_id = + GetInteger<uint64_t>(arguments, "frameId").value_or(UINT64_MAX); lldb::SBProcess process = target.GetProcess(); // Upper 32 bits is the thread index ID lldb::SBThread thread = @@ -771,7 +773,7 @@ bool DAP::HandleObject(const llvm::json::Object &object) { } if (packet_type == "response") { - auto id = GetSigned(object, "request_seq", 0); + auto id = GetInteger<int64_t>(object, "request_seq").value_or(0); std::unique_ptr<ResponseHandler> response_handler; { diff --git a/lldb/tools/lldb-dap/Handler/AttachRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/AttachRequestHandler.cpp index 8b203e0392066..4c0970bf941e8 100644 --- a/lldb/tools/lldb-dap/Handler/AttachRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/AttachRequestHandler.cpp @@ -54,9 +54,9 @@ void AttachRequestHandler::operator()(const llvm::json::Object &request) const { const int invalid_port = 0; const auto *arguments = request.getObject("arguments"); const lldb::pid_t pid = - GetUnsigned(arguments, "pid", LLDB_INVALID_PROCESS_ID); + GetInteger<uint64_t>(arguments, "pid").value_or(LLDB_INVALID_PROCESS_ID); const auto gdb_remote_port = - GetUnsigned(arguments, "gdb-remote-port", invalid_port); + GetInteger<uint64_t>(arguments, "gdb-remote-port").value_or(invalid_port); const auto gdb_remote_hostname = GetString(arguments, "gdb-remote-hostname", "localhost"); if (pid != LLDB_INVALID_PROCESS_ID) @@ -70,7 +70,8 @@ void AttachRequestHandler::operator()(const llvm::json::Object &request) const { dap.terminate_commands = GetStrings(arguments, "terminateCommands"); auto attachCommands = GetStrings(arguments, "attachCommands"); llvm::StringRef core_file = GetString(arguments, "coreFile"); - const uint64_t timeout_seconds = GetUnsigned(arguments, "timeout", 30); + const auto timeout_seconds = + GetInteger<uint64_t>(arguments, "timeout").value_or(30); dap.stop_at_entry = core_file.empty() ? GetBoolean(arguments, "stopOnEntry", false) : true; dap.post_run_commands = GetStrings(arguments, "postRunCommands"); diff --git a/lldb/tools/lldb-dap/Handler/BreakpointLocationsHandler.cpp b/lldb/tools/lldb-dap/Handler/BreakpointLocationsHandler.cpp index 1b5c8ba307dcb..468dacfe6737e 100644 --- a/lldb/tools/lldb-dap/Handler/BreakpointLocationsHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/BreakpointLocationsHandler.cpp @@ -131,11 +131,13 @@ void BreakpointLocationsRequestHandler::operator()( auto *arguments = request.getObject("arguments"); auto *source = arguments->getObject("source"); std::string path = GetString(source, "path").str(); - uint64_t start_line = GetUnsigned(arguments, "line", 0); - uint64_t start_column = GetUnsigned(arguments, "column", 0); - uint64_t end_line = GetUnsigned(arguments, "endLine", start_line); - uint64_t end_column = - GetUnsigned(arguments, "endColumn", std::numeric_limits<uint64_t>::max()); + const auto start_line = GetInteger<uint64_t>(arguments, "line").value_or(0); + const auto start_column = + GetInteger<uint64_t>(arguments, "column").value_or(0); + const auto end_line = + GetInteger<uint64_t>(arguments, "endLine").value_or(start_line); + const auto end_column = GetInteger<uint64_t>(arguments, "endColumn") + .value_or(std::numeric_limits<uint64_t>::max()); lldb::SBFileSpec file_spec(path.c_str(), true); lldb::SBSymbolContextList compile_units = diff --git a/lldb/tools/lldb-dap/Handler/CompletionsHandler.cpp b/lldb/tools/lldb-dap/Handler/CompletionsHandler.cpp index 09b73054ca62f..bfe2e734ecff6 100644 --- a/lldb/tools/lldb-dap/Handler/CompletionsHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/CompletionsHandler.cpp @@ -143,8 +143,9 @@ void CompletionsRequestHandler::operator()( } std::string text = GetString(arguments, "text").str(); - auto original_column = GetSigned(arguments, "column", text.size()); - auto original_line = GetSigned(arguments, "line", 1); + auto original_column = + GetInteger<int64_t>(arguments, "column").value_or(text.size()); + auto original_line = GetInteger<int64_t>(arguments, "line").value_or(1); auto offset = original_column - 1; if (original_line > 1) { llvm::SmallVector<::llvm::StringRef, 2> lines; diff --git a/lldb/tools/lldb-dap/Handler/DataBreakpointInfoRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/DataBreakpointInfoRequestHandler.cpp index 64829b93c783d..7443db18331c5 100644 --- a/lldb/tools/lldb-dap/Handler/DataBreakpointInfoRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/DataBreakpointInfoRequestHandler.cpp @@ -116,7 +116,7 @@ void DataBreakpointInfoRequestHandler::operator()( llvm::json::Array accessTypes{"read", "write", "readWrite"}; const auto *arguments = request.getObject("arguments"); const auto variablesReference = - GetUnsigned(arguments, "variablesReference", 0); + GetInteger<uint64_t>(arguments, "variablesReference").value_or(0); llvm::StringRef name = GetString(arguments, "name"); lldb::SBFrame frame = dap.GetLLDBFrame(*arguments); lldb::SBValue variable = dap.variables.FindVariable(variablesReference, name); diff --git a/lldb/tools/lldb-dap/Handler/DisassembleRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/DisassembleRequestHandler.cpp index 4c2690d32d3b2..2135a569a814b 100644 --- a/lldb/tools/lldb-dap/Handler/DisassembleRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/DisassembleRequestHandler.cpp @@ -104,7 +104,7 @@ void DisassembleRequestHandler::operator()( } lldb::addr_t addr_ptr = *addr_opt; - addr_ptr += GetSigned(arguments, "instructionOffset", 0); + addr_ptr += GetInteger<int64_t>(arguments, "instructionOffset").value_or(0); lldb::SBAddress addr(addr_ptr, dap.target); if (!addr.IsValid()) { response["success"] = false; @@ -113,7 +113,8 @@ void DisassembleRequestHandler::operator()( return; } - const auto inst_count = GetUnsigned(arguments, "instructionCount", 0); + const auto inst_count = + GetInteger<int64_t>(arguments, "instructionCount").value_or(0); lldb::SBInstructionList insts = dap.target.ReadInstructions(addr, inst_count); if (!insts.IsValid()) { diff --git a/lldb/tools/lldb-dap/Handler/LocationsRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/LocationsRequestHandler.cpp index fa763f3ffe931..15109d4b8e589 100644 --- a/lldb/tools/lldb-dap/Handler/LocationsRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/LocationsRequestHandler.cpp @@ -97,7 +97,8 @@ void LocationsRequestHandler::operator()( FillResponse(request, response); auto *arguments = request.getObject("arguments"); - uint64_t location_id = GetUnsigned(arguments, "locationReference", 0); + const auto location_id = + GetInteger<uint64_t>(arguments, "locationReference").value_or(0); // We use the lowest bit to distinguish between value location and declaration // location auto [var_ref, is_value_location] = UnpackLocation(location_id); diff --git a/lldb/tools/lldb-dap/Handler/ReadMemoryRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/ReadMemoryRequestHandler.cpp index bc8158f9d3079..919aecd9c68dd 100644 --- a/lldb/tools/lldb-dap/Handler/ReadMemoryRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/ReadMemoryRequestHandler.cpp @@ -108,8 +108,9 @@ void ReadMemoryRequestHandler::operator()( return; } lldb::addr_t addr_int = *addr_opt; - addr_int += GetSigned(arguments, "offset", 0); - const uint64_t count_requested = GetUnsigned(arguments, "count", 0); + addr_int += GetInteger<uint64_t>(arguments, "offset").value_or(0); + const uint64_t count_requested = + GetInteger<uint64_t>(arguments, "count").value_or(0); // We also need support reading 0 bytes // VS Code sends those requests to check if a `memoryReference` diff --git a/lldb/tools/lldb-dap/Handler/RequestHandler.cpp b/lldb/tools/lldb-dap/Handler/RequestHandler.cpp index 606ada90ce2e5..c0d98a3bc8188 100644 --- a/lldb/tools/lldb-dap/Handler/RequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/RequestHandler.cpp @@ -183,7 +183,8 @@ RequestHandler::LaunchProcess(const llvm::json::Object &request) const { launch_info.SetDetachOnError(detachOnError); launch_info.SetLaunchFlags(flags | lldb::eLaunchFlagDebug | lldb::eLaunchFlagStopAtEntry); - const uint64_t timeout_seconds = GetUnsigned(arguments, "timeout", 30); + const auto timeout_seconds = + GetInteger<uint64_t>(arguments, "timeout").value_or(30); if (GetBoolean(arguments, "runInTerminal", false)) { if (llvm::Error err = RunInTerminal(dap, request, timeout_seconds)) diff --git a/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp index 3a271bc1a1db5..7d2f13f0a327e 100644 --- a/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/SetVariableRequestHandler.cpp @@ -115,7 +115,7 @@ void SetVariableRequestHandler::operator()( const auto *arguments = request.getObject("arguments"); // This is a reference to the containing variable/scope const auto variablesReference = - GetUnsigned(arguments, "variablesReference", 0); + GetInteger<uint64_t>(arguments, "variablesReference").value_or(0); llvm::StringRef name = GetString(arguments, "name"); const auto value = GetString(arguments, "value"); @@ -133,7 +133,8 @@ void SetVariableRequestHandler::operator()( // the name of the variable. We could have two shadowed variables with the // same name in "Locals" or "Globals". In our case the "id" absolute index // of the variable within the dap.variables list. - const auto id_value = GetUnsigned(arguments, "id", UINT64_MAX); + const auto id_value = + GetInteger<uint64_t>(arguments, "id").value_or(UINT64_MAX); if (id_value != UINT64_MAX) { variable = dap.variables.GetVariable(id_value); } else { diff --git a/lldb/tools/lldb-dap/Handler/SourceRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/SourceRequestHandler.cpp index 6b587b19aa6f2..493543b395fd1 100644 --- a/lldb/tools/lldb-dap/Handler/SourceRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/SourceRequestHandler.cpp @@ -85,8 +85,10 @@ void SourceRequestHandler::operator()(const llvm::json::Object &request) const { const auto *arguments = request.getObject("arguments"); const auto *source = arguments->getObject("source"); llvm::json::Object body; - int64_t source_ref = GetUnsigned( - source, "sourceReference", GetUnsigned(arguments, "sourceReference", 0)); + const auto source_ref = + GetInteger<uint64_t>(source, "sourceReference") + .value_or( + GetInteger<uint64_t>(arguments, "sourceReference").value_or(0)); if (source_ref) { lldb::SBProcess process = dap.target.GetProcess(); diff --git a/lldb/tools/lldb-dap/Handler/StackTraceRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/StackTraceRequestHandler.cpp index e5ba939134d25..220be0f99be6b 100644 --- a/lldb/tools/lldb-dap/Handler/StackTraceRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/StackTraceRequestHandler.cpp @@ -179,8 +179,9 @@ void StackTraceRequestHandler::operator()( llvm::json::Object body; if (thread.IsValid()) { - const auto start_frame = GetUnsigned(arguments, "startFrame", 0); - const auto levels = GetUnsigned(arguments, "levels", 0); + const auto start_frame = + GetInteger<uint64_t>(arguments, "startFrame").value_or(0); + const auto levels = GetInteger<uint64_t>(arguments, "levels").value_or(0); int64_t offset = 0; bool reached_end_of_stack = FillStackFrames(dap, thread, stack_frames, offset, start_frame, diff --git a/lldb/tools/lldb-dap/Handler/StepInRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/StepInRequestHandler.cpp index 98fa74a3044d9..0d42b96760be4 100644 --- a/lldb/tools/lldb-dap/Handler/StepInRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/StepInRequestHandler.cpp @@ -69,7 +69,8 @@ void StepInRequestHandler::operator()(const llvm::json::Object &request) const { const auto *arguments = request.getObject("arguments"); std::string step_in_target; - uint64_t target_id = GetUnsigned(arguments, "targetId", 0); + const auto target_id = + GetInteger<uint64_t>(arguments, "targetId").value_or(0); auto it = dap.step_in_targets.find(target_id); if (it != dap.step_in_targets.end()) step_in_target = it->second; diff --git a/lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp index d096c4220914a..b66b09bc42558 100644 --- a/lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/VariablesRequestHandler.cpp @@ -93,9 +93,9 @@ void VariablesRequestHandler::operator()( llvm::json::Array variables; const auto *arguments = request.getObject("arguments"); const auto variablesReference = - GetUnsigned(arguments, "variablesReference", 0); - const int64_t start = GetSigned(arguments, "start", 0); - const int64_t count = GetSigned(arguments, "count", 0); + GetInteger<uint64_t>(arguments, "variablesReference").value_or(0); + const auto start = GetInteger<int64_t>(arguments, "start").value_or(0); + const auto count = GetInteger<int64_t>(arguments, "count").value_or(0); bool hex = false; const auto *format = arguments->getObject("format"); if (format) diff --git a/lldb/tools/lldb-dap/InstructionBreakpoint.cpp b/lldb/tools/lldb-dap/InstructionBreakpoint.cpp index 37daa8f0bdd5f..a008b633c165b 100644 --- a/lldb/tools/lldb-dap/InstructionBreakpoint.cpp +++ b/lldb/tools/lldb-dap/InstructionBreakpoint.cpp @@ -20,7 +20,7 @@ namespace lldb_dap { InstructionBreakpoint::InstructionBreakpoint(DAP &d, const llvm::json::Object &obj) : Breakpoint(d, obj), instructionAddressReference(LLDB_INVALID_ADDRESS), - offset(GetSigned(obj, "offset", 0)) { + offset(GetInteger<int64_t>(obj, "offset").value_or(0)) { GetString(obj, "instructionReference") .getAsInteger(0, instructionAddressReference); instructionAddressReference += offset; diff --git a/lldb/tools/lldb-dap/JSONUtils.cpp b/lldb/tools/lldb-dap/JSONUtils.cpp index 9dec4ca1df49a..8e50a10cbbefa 100644 --- a/lldb/tools/lldb-dap/JSONUtils.cpp +++ b/lldb/tools/lldb-dap/JSONUtils.cpp @@ -84,22 +84,6 @@ llvm::StringRef GetString(const llvm::json::Object *obj, llvm::StringRef key, return GetString(*obj, key, defaultValue); } -// Gets an unsigned integer from a JSON object using the key, or returns the -// specified fail value. -uint64_t GetUnsigned(const llvm::json::Object &obj, llvm::StringRef key, - uint64_t fail_value) { - if (auto value = obj.getInteger(key)) - return (uint64_t)*value; - return fail_value; -} - -uint64_t GetUnsigned(const llvm::json::Object *obj, llvm::StringRef key, - uint64_t fail_value) { - if (obj == nullptr) - return fail_value; - return GetUnsigned(*obj, key, fail_value); -} - bool GetBoolean(const llvm::json::Object &obj, llvm::StringRef key, bool fail_value) { if (auto value = obj.getBoolean(key)) @@ -116,20 +100,6 @@ bool GetBoolean(const llvm::json::Object *obj, llvm::StringRef key, return GetBoolean(*obj, key, fail_value); } -int64_t GetSigned(const llvm::json::Object &obj, llvm::StringRef key, - int64_t fail_value) { - if (auto value = obj.getInteger(key)) - return *value; - return fail_value; -} - -int64_t GetSigned(const llvm::json::Object *obj, llvm::StringRef key, - int64_t fail_value) { - if (obj == nullptr) - return fail_value; - return GetSigned(*obj, key, fail_value); -} - bool ObjectContainsKey(const llvm::json::Object &obj, llvm::StringRef key) { return obj.find(key) != obj.end(); } @@ -280,7 +250,7 @@ void FillResponse(const llvm::json::Object &request, response.try_emplace("type", "response"); response.try_emplace("seq", (int64_t)0); EmplaceSafeString(response, "command", GetString(request, "command")); - const int64_t seq = GetSigned(request, "seq", 0); + const auto seq = GetInteger<int64_t>(request, "seq").value_or(0); response.try_emplace("request_seq", seq); response.try_emplace("success", true); } diff --git a/lldb/tools/lldb-dap/JSONUtils.h b/lldb/tools/lldb-dap/JSONUtils.h index 55d2360e0a224..3db4e01439d9f 100644 --- a/lldb/tools/lldb-dap/JSONUtils.h +++ b/lldb/tools/lldb-dap/JSONUtils.h @@ -74,8 +74,8 @@ llvm::StringRef GetString(const llvm::json::Object &obj, llvm::StringRef key, llvm::StringRef GetString(const llvm::json::Object *obj, llvm::StringRef key, llvm::StringRef defaultValue = {}); -/// Extract the unsigned integer value for the specified key from -/// the specified object. +/// Extract the integer value for the specified key from the specified object +/// and return it as the specified integer type T. /// /// \param[in] obj /// A JSON object that we will attempt to extract the value from @@ -84,13 +84,23 @@ llvm::StringRef GetString(const llvm::json::Object *obj, llvm::StringRef key, /// The key to use when extracting the value /// /// \return -/// The unsigned integer value for the specified \a key, or -/// \a fail_value if there is no key that matches or if the -/// value is not an integer. -uint64_t GetUnsigned(const llvm::json::Object &obj, llvm::StringRef key, - uint64_t fail_value); -uint64_t GetUnsigned(const llvm::json::Object *obj, llvm::StringRef key, - uint64_t fail_value); +/// The integer value for the specified \a key, or std::nullopt if there is +/// no key that matches or if the value is not an integer. +/// @{ +template <typename T> +std::optional<T> GetInteger(const llvm::json::Object &obj, + llvm::StringRef key) { + return obj.getInteger(key); +} + +template <typename T> +std::optional<T> GetInteger(const llvm::json::Object *obj, + llvm::StringRef key) { + if (obj != nullptr) + return GetInteger<T>(*obj, key); + return std::nullopt; +} +/// @} /// Extract the boolean value for the specified key from the /// specified object. @@ -110,24 +120,6 @@ bool GetBoolean(const llvm::json::Object &obj, llvm::StringRef key, bool GetBoolean(const llvm::json::Object *obj, llvm::StringRef key, bool fail_value); -/// Extract the signed integer for the specified key from the -/// specified object. -/// -/// \param[in] obj -/// A JSON object that we will attempt to extract the value from -/// -/// \param[in] key -/// The key to use when extracting the value -/// -/// \return -/// The signed integer value for the specified \a key, or -/// \a fail_value if there is no key that matches or if the -/// value is not an integer. -int64_t GetSigned(const llvm::json::Object &obj, llvm::StringRef key, - int64_t fail_value); -int64_t GetSigned(const llvm::json::Object *obj, llvm::StringRef key, - int64_t fail_value); - /// Check if the specified key exists in the specified object. /// /// \param[in] obj diff --git a/lldb/tools/lldb-dap/SourceBreakpoint.cpp b/lldb/tools/lldb-dap/SourceBreakpoint.cpp index 418e205312c9f..37341fa387d40 100644 --- a/lldb/tools/lldb-dap/SourceBreakpoint.cpp +++ b/lldb/tools/lldb-dap/SourceBreakpoint.cpp @@ -27,8 +27,8 @@ namespace lldb_dap { SourceBreakpoint::SourceBreakpoint(DAP &dap, const llvm::json::Object &obj) : Breakpoint(dap, obj), logMessage(std::string(GetString(obj, "logMessage"))), - line(GetUnsigned(obj, "line", 0)), column(GetUnsigned(obj, "col... [truncated] `````````` </details> https://github.com/llvm/llvm-project/pull/129823 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits