Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
* Patch for gdb/mi problem 702
@ 2002-10-03 16:06 J. Johnston
  2002-10-03 17:22 ` Keith Seitz
  0 siblings, 1 reply; 17+ messages in thread
From: J. Johnston @ 2002-10-03 16:06 UTC (permalink / raw)
  To: gdb-patches

[-- Attachment #1: Type: text/plain, Size: 969 bytes --]

The following fixes a problem with -var-assign whereby an assignment
of a new value is not seen by a subsequent -var-update.  The
underlying varobj_update call looks to see if there is a difference
between the current value and a refreshed value.  Since varobj_set_value
actually changes both the internal value and the actual value, varobj_update
does not add the variable to the changelist.

The fix involves adding a new flag: "updated" to the struct varobj which
is set by varobj_set_value when the value changes and is checked by varobj_update
before comparing current and refreshed values for a varobj.

ChangeLog:

2002-10-03  Jeff Johnston  <jjohnstn@redhat.com>

	* varobj.c (struct varobj): Add new "updated" flag.
	(new_variable): Default "updated" flag to 0.
	(varobj_set_value): Set "updated" flag to 1 if value
	changes.
	(varobj_update): Check varobj "updated" flag before
	comparing old and refreshed values.  Fix for
	PR gdb/702.

Approved?

-- Jeff J.

[-- Attachment #2: 702.patch --]
[-- Type: text/plain, Size: 2102 bytes --]

Index: varobj.c
===================================================================
RCS file: /cvs/src/src/gdb/varobj.c,v
retrieving revision 1.32
diff -u -r1.32 varobj.c
--- varobj.c	24 Sep 2002 18:50:34 -0000	1.32
+++ varobj.c	3 Oct 2002 23:00:54 -0000
@@ -111,6 +111,9 @@
 
   /* The format of the output for this object */
   enum varobj_display_formats format;
+
+  /* Was this variable updated via a varobj_set_value operation */
+  int updated;
 };
 
 /* Every variable keeps a linked list of its children, described
@@ -753,6 +756,7 @@
 varobj_set_value (struct varobj *var, char *expression)
 {
   struct value *val;
+  int error;
   int offset = 0;
 
   /* The argument "expression" contains the variable's new value.
@@ -778,6 +782,8 @@
 	  return 0;
 	}
 
+      if (!my_value_equal (var->value, value, &error))
+        var->updated = 1;
       if (!gdb_value_assign (var->value, value, &val))
 	return 0;
       value_free (var->value);
@@ -893,10 +899,11 @@
   /* If values are not equal, note that it's changed.
      There a couple of exceptions here, though.
      We don't want some types to be reported as "changed". */
-  else if (type_changeable (*varp)
-	   && !my_value_equal ((*varp)->value, new, &error2))
+  else if (type_changeable (*varp) &&
+	   ((*varp)->updated || !my_value_equal ((*varp)->value, new, &error2)))
     {
       vpush (&result, *varp);
+      (*varp)->updated = 0;
       changed++;
       /* error2 replaces var->error since this new value
          WILL replace the old one. */
@@ -933,10 +940,12 @@
 
       /* Update this variable */
       new = value_of_child (v->parent, v->index);
-      if (type_changeable (v) && !my_value_equal (v->value, new, &error2))
+      if (type_changeable (v) && 
+          (v->updated || !my_value_equal (v->value, new, &error2)))
 	{
 	  /* Note that it's changed */
 	  vpush (&result, v);
+	  v->updated = 0;
 	  changed++;
 	}
       /* error2 replaces v->error since this new value
@@ -1294,6 +1303,7 @@
   var->children = NULL;
   var->format = 0;
   var->root = NULL;
+  var->updated = 0;
 
   return var;
 }

^ permalink raw reply	[flat|nested] 17+ messages in thread
[parent not found: <200210041725.NAA27681@node1.ott.qnx.com>]

end of thread, other threads:[~2002-11-11 17:12 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-03 16:06 Patch for gdb/mi problem 702 J. Johnston
2002-10-03 17:22 ` Keith Seitz
2002-10-04  9:57   ` J. Johnston
2002-10-04 10:12     ` Keith Seitz
2002-10-04 10:26       ` Alain Magloire
2002-10-04 12:26       ` J. Johnston
2002-10-04 14:35         ` Keith Seitz
2002-10-23 15:20           ` J. Johnston
2002-10-23 15:39             ` Andrew Cagney
2002-10-23 16:58               ` J. Johnston
2002-10-23 15:43             ` Andrew Cagney
2002-11-08 14:08               ` J. Johnston
2002-11-09 14:02                 ` Eli Zaretskii
2002-11-11  9:12                   ` J. Johnston
2002-10-21 18:40   ` Andrew Cagney
2002-10-22 14:54     ` J. Johnston
     [not found] <200210041725.NAA27681@node1.ott.qnx.com>
2002-10-04 10:51 ` Keith Seitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox