llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-lldb Author: Sergei Druzhkov (DrSergei) <details> <summary>Changes</summary> This patch adds support for format option in the `evaluate` request according to [DAP](https://microsoft.github.io/debug-adapter-protocol/specification#Requests_Evaluate) specification. Also, fixed typo in `LLDB_DAP_INVALID_VARRERF` constant. --- Full diff: https://github.com/llvm/llvm-project/pull/169132.diff 4 Files Affected: - (modified) lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py (+5-1) - (modified) lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py (+10-1) - (modified) lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp (+7-3) - (modified) lldb/tools/lldb-dap/Protocol/ProtocolTypes.h (+2-2) ``````````diff diff --git a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py index f85ab1910a2eb..306448602b48f 100644 --- a/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py +++ b/lldb/packages/Python/lldbsuite/test/tools/lldb-dap/dap_server.py @@ -987,7 +987,9 @@ def request_writeMemory(self, memoryReference, data, offset=0, allowPartial=Fals } return self._send_recv(command_dict) - def request_evaluate(self, expression, frameIndex=0, threadId=None, context=None): + def request_evaluate( + self, expression, frameIndex=0, threadId=None, context=None, is_hex=None + ): stackFrame = self.get_stackFrame(frameIndex=frameIndex, threadId=threadId) if stackFrame is None: return [] @@ -997,6 +999,8 @@ def request_evaluate(self, expression, frameIndex=0, threadId=None, context=None } if context: args_dict["context"] = context + if is_hex is not None: + args_dict["format"] = {"hex": is_hex} command_dict = { "command": "evaluate", "type": "request", diff --git a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py index 3c233a5b43ebb..95573780e94bd 100644 --- a/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py +++ b/lldb/test/API/tools/lldb-dap/evaluate/TestDAP_evaluate.py @@ -27,8 +27,11 @@ def assertEvaluate( want_varref=False, want_memref=True, want_locref=False, + is_hex=None, ): - resp = self.dap_server.request_evaluate(expression, context=self.context) + resp = self.dap_server.request_evaluate( + expression, context=self.context, is_hex=is_hex + ) self.assertTrue( resp["success"], f"Failed to evaluate expression {expression!r}" ) @@ -132,6 +135,12 @@ def run_test_evaluate_expressions( if context == "repl": self.assertEvaluate("", "21", want_type="int") self.assertEvaluate("", "21", want_type="int") + self.assertEvaluate("static_int", "0x0000002a", want_type="int", is_hex=True) + self.assertEvaluate( + "non_static_int", "0x0000002b", want_type="int", is_hex=True + ) + self.assertEvaluate("struct1.foo", "0x0000000f", want_type="int", is_hex=True) + self.assertEvaluate("struct2->foo", "0x00000010", want_type="int", is_hex=True) self.assertEvaluate("static_int", "42", want_type="int") self.assertEvaluate("non_static_int", "43", want_type="int") self.assertEvaluate("struct1.foo", "15", want_type="int") diff --git a/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp b/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp index ea8c3a2a4a296..637fc4be63bac 100644 --- a/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp +++ b/lldb/tools/lldb-dap/Handler/EvaluateRequestHandler.cpp @@ -84,8 +84,12 @@ EvaluateRequestHandler::Run(const EvaluateArguments &arguments) const { if (value.GetError().Fail()) return ToError(value.GetError(), /*show_user=*/false); - VariableDescription desc(value, - dap.configuration.enableAutoVariableSummaries); + bool hex = false; + if (arguments.format) + hex = arguments.format->hex; + + VariableDescription desc(value, dap.configuration.enableAutoVariableSummaries, + hex); body.result = desc.GetResult(arguments.context); body.type = desc.display_type_name; @@ -98,7 +102,7 @@ EvaluateRequestHandler::Run(const EvaluateArguments &arguments) const { body.memoryReference = EncodeMemoryReference(addr); if (ValuePointsToCode(value) && - body.variablesReference != LLDB_DAP_INVALID_VARRERF) + body.variablesReference != LLDB_DAP_INVALID_VAR_REF) body.valueLocationReference = PackLocation(body.variablesReference, true); return body; diff --git a/lldb/tools/lldb-dap/Protocol/ProtocolTypes.h b/lldb/tools/lldb-dap/Protocol/ProtocolTypes.h index 690a1d684d0e9..ee103ddf0b7a2 100644 --- a/lldb/tools/lldb-dap/Protocol/ProtocolTypes.h +++ b/lldb/tools/lldb-dap/Protocol/ProtocolTypes.h @@ -28,7 +28,7 @@ #include <optional> #include <string> -#define LLDB_DAP_INVALID_VARRERF INT64_MAX +#define LLDB_DAP_INVALID_VAR_REF INT64_MAX #define LLDB_DAP_INVALID_SRC_REF 0 #define LLDB_DAP_INVALID_VALUE_LOC 0 @@ -462,7 +462,7 @@ struct Scope { /// remains suspended. See 'Lifetime of Object References' in the Overview /// section for details. //// - uint64_t variablesReference = LLDB_DAP_INVALID_VARRERF; + uint64_t variablesReference = LLDB_DAP_INVALID_VAR_REF; /// The number of named variables in this scope. /// The client can use this information to present the variables in a paged UI `````````` </details> https://github.com/llvm/llvm-project/pull/169132 _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
