From ae097835482c59d31fa242ea7c8247913fcfee4a Mon Sep 17 00:00:00 2001 From: Vladimir Prus Date: Wed, 29 Nov 2006 06:41:13 +0000 Subject: [PATCH] 2006-11-29 Vladimir Prus * varobj.c (varobj_set_value): Don't compare the old and the new value here. Don't assign new value here. Instead, call install_new_value. --- gdb/ChangeLog | 6 ++++++ gdb/varobj.c | 14 +++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c92e9acc1c9..dc4257f947c 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2006-11-29 Vladimir Prus + + * varobj.c (varobj_set_value): Don't compare the old + and the new value here. Don't assign new value here. + Instead, call install_new_value. + 2006-11-28 Daniel Jacobowitz * regformats/reg-mips64.dat: New file. diff --git a/gdb/varobj.c b/gdb/varobj.c index 42ed597f292..309bd5e6e86 100644 --- a/gdb/varobj.c +++ b/gdb/varobj.c @@ -841,18 +841,22 @@ varobj_set_value (struct varobj *var, char *expression) array's content. */ value = coerce_array (value); - if (!value_contents_equal (var->value, value)) - var->updated = 1; - /* The new value may be lazy. gdb_value_assign, or rather value_contents, will take care of this. If fetching of the new value will fail, gdb_value_assign with catch the exception. */ if (!gdb_value_assign (var->value, value, &val)) return 0; - value_free (var->value); + release_value (val); - var->value = val; + + /* If the value has changed, record it, so that next -var-update can + report this change. If a variable had a value of '1', we've set it + to '333' and then set again to '1', when -var-update will report this + variable as changed -- because the first assignment has set the + 'updated' flag. There's no need to optimize that, because return value + of -var-update should be considered an approximation. */ + var->updated = install_new_value (var, val, 0 /* Compare values. */); input_radix = saved_input_radix; return 1; } -- 2.30.2