From 8115dffa1e76ab007223199dfbc8c1298d2bf06e Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Tue, 16 May 2023 07:36:08 -0600 Subject: Handle DAP supportsVariableType capability A DAP client can report the supportsVariableType capability in the initialize request. In this case, gdb can include the type of a variable or expression in various results. --- gdb/python/lib/gdb/dap/evaluate.py | 1 - gdb/python/lib/gdb/dap/server.py | 11 +++++++++++ gdb/python/lib/gdb/dap/varref.py | 3 +++ 3 files changed, 14 insertions(+), 1 deletion(-) (limited to 'gdb/python') diff --git a/gdb/python/lib/gdb/dap/evaluate.py b/gdb/python/lib/gdb/dap/evaluate.py index 1db6962..2b40065 100644 --- a/gdb/python/lib/gdb/dap/evaluate.py +++ b/gdb/python/lib/gdb/dap/evaluate.py @@ -70,7 +70,6 @@ def _repl(command, frame_id): } -# FIXME supportsVariableType handling @request("evaluate") def eval_request( *, diff --git a/gdb/python/lib/gdb/dap/server.py b/gdb/python/lib/gdb/dap/server.py index be66676..b1c75ab 100644 --- a/gdb/python/lib/gdb/dap/server.py +++ b/gdb/python/lib/gdb/dap/server.py @@ -186,6 +186,17 @@ def capability(name, value=True): return wrap +def client_bool_capability(name): + """Return the value of a boolean client capability. + + If the capability was not specified, or did not have boolean type, + False is returned.""" + global _server + if name in _server.config and isinstance(_server.config[name], bool): + return _server.config[name] + return False + + @request("initialize") def initialize(**args): global _server, _capabilities diff --git a/gdb/python/lib/gdb/dap/varref.py b/gdb/python/lib/gdb/dap/varref.py index 88c34c2..23f18d6 100644 --- a/gdb/python/lib/gdb/dap/varref.py +++ b/gdb/python/lib/gdb/dap/varref.py @@ -15,6 +15,7 @@ import gdb from .startup import in_gdb_thread +from .server import client_bool_capability from abc import abstractmethod @@ -165,6 +166,8 @@ class VariableReference(BaseReference): result["memoryReference"] = hex(int(self.value)) elif self.value.address is not None: result["memoryReference"] = hex(int(self.value.address)) + if client_bool_capability("supportsVariableType"): + result["type"] = str(self.value.type) return result @in_gdb_thread -- cgit v1.1