From: "J. Johnston" <jjohnstn@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: Patch for gdb/mi problem 702
Date: Thu, 03 Oct 2002 16:06:00 -0000 [thread overview]
Message-ID: <3D9CCD77.A189328C@redhat.com> (raw)
[-- 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;
}
next reply other threads:[~2002-10-03 23:06 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-10-03 16:06 J. Johnston [this message]
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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3D9CCD77.A189328C@redhat.com \
--to=jjohnstn@redhat.com \
--cc=gdb-patches@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox