Fix result of DAP setExpression
authorTom Tromey <tromey@adacore.com>
Wed, 21 Jun 2023 12:23:20 +0000 (06:23 -0600)
committerTom Tromey <tromey@adacore.com>
Fri, 7 Jul 2023 19:56:52 +0000 (13:56 -0600)
A co-worker, Andry, noticed that the DAP setExpression implementation
returned the wrong fields -- it used "result" rather than "value", and
included "memoryReference", which isn't in the spec (an odd oversight,
IMO).

This patch fixes the problems.

gdb/python/lib/gdb/dap/evaluate.py
gdb/testsuite/gdb.dap/basic-dap.exp

index 651a4046a348047179768536ed262a70c3bb4f89..5e3ebf7fa24aaab0e6a11f483b220f42c24631e2 100644 (file)
@@ -53,6 +53,18 @@ def _eval_for_hover(expr, frame_id):
                 return _evaluate(expr, frame_id)
 
 
+class _SetResult(VariableReference):
+    def __init__(self, value):
+        super().__init__(None, value, "value")
+
+    def to_object(self):
+        result = super().to_object()
+        # This is not specified in the setExpression result.
+        if "memoryReference" in result:
+            del result["memoryReference"]
+        return result
+
+
 # Helper function to perform an assignment.
 @in_gdb_thread
 def _set_expression(expression, value, frame_id):
@@ -64,7 +76,7 @@ def _set_expression(expression, value, frame_id):
     lhs = gdb.parse_and_eval(expression, global_context=global_context)
     rhs = gdb.parse_and_eval(value, global_context=global_context)
     lhs.assign(rhs)
-    return EvaluateResult(lhs).to_object()
+    return _SetResult(lhs).to_object()
 
 
 # Helper function to evaluate a gdb command in a certain frame.
index df9afcfcdfc409649144380406328e7237b563ee..853e1536eabd77a766f8757f428a1b6b07e84e78 100644 (file)
@@ -177,7 +177,7 @@ dap_match_values "global value in main" [lindex $obj 0] \
 set obj [dap_check_request_and_response "set global in main" \
             setExpression {o expression [s global_variable] value [s 23]}]
 dap_match_values "global value in main after set" [lindex $obj 0] \
-    "body result" 23 \
+    "body value" 23 \
     "body type" int
 
 set obj [dap_request_and_response \