Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Vladimir Prus <ghost@cs.msu.su>
To: Nick Roberts <nickrob@snap.net.nz>
Cc: Daniel Jacobowitz <drow@false.org>,  gdb-patches@sources.redhat.com
Subject: Re: RFC: MI - Detecting change of string contents with variable objects
Date: Thu, 04 Jan 2007 21:05:00 -0000	[thread overview]
Message-ID: <200701050004.30631.ghost@cs.msu.su> (raw)
In-Reply-To: <17820.39505.966623.305338@kahikatea.snap.net.nz>

On Thursday 04 January 2007 09:10, Nick Roberts wrote:


> *** varobj.c    04 Jan 2007 16:22:25 +1300      1.68
> --- varobj.c    04 Jan 2007 19:04:25 +1300      
> *************** struct varobj
> *** 127,132 ****
> --- 127,135 ----
>   
>     /* Was this variable updated via a varobj_set_value operation */
>     int updated;
> + 
> +   /* Last print value */

Dot and two spaces ;-)

> +   char *print_value;
>   };
>   
>   /* Every variable keeps a linked list of its children, described
> *************** static int variable_editable (struct var
> *** 234,239 ****
> --- 237,245 ----
>   
>   static char *my_value_of_variable (struct varobj *var);
>   
> + static char *value_get_print_value (struct value *value,
> +                                   enum varobj_display_formats format);
> + 

I don't see a comment to this function either here or at the definition point.

>   static int type_changeable (struct varobj *var);
>   
>   /* C implementation */
> *************** install_new_value (struct varobj *var, s
> *** 978,1003 ****
>             changed = 1;
>           else
>             {
>               gdb_assert (!value_lazy (var->value));
> -             gdb_assert (!value_lazy (value));

Did you remove this because it failed? If so, I'd like to understand why.
I think this assert is needed -- if the value is lazy, then even if
printing code will fetch the value, you'll be comparing current value with
current value. That's a definite bug, so must be asserted.

>               
> !             if (!value_contents_equal (var->value, value))
> !               changed = 1;
>             }
>         }
>       }
> !     
>     /* We must always keep the new value, since children depend on it.  */
>     if (var->value != NULL)
>       value_free (var->value);
>     var->value = value;
>     var->updated = 0;
> !   
>     gdb_assert (!var->value || value_type (var->value));

Is that a formatting change above?

>   /* Update the values for a variable and its children.  This is a
>      two-pronged attack.  First, re-parse the value for the root's
> --- 984,1017 ----
>             changed = 1;
>           else
>             {
> +             char* print_value = value_get_print_value (value, var->format);
>               gdb_assert (!value_lazy (var->value));
>               
> !             if (var->print_value)
> !               {
> !                 if (strcmp (var->print_value, print_value))

Can you use 

        strcmp (var->print_value, print_value) != 0

for legibility?

> !                   {
> !                     xfree (var->print_value);
> !                     var->print_value = print_value;
> !                     changed = 1;
> !                   }

So, if values differ you xfree the old one and assign the new one. If the
values are the same -- where is 'print_value' freed?

- Volodya


  parent reply	other threads:[~2007-01-04 21:05 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-18  2:42 Nick Roberts
2006-12-18  7:01 ` Vladimir Prus
2006-12-18  8:15   ` Nick Roberts
2006-12-18  8:36     ` Vladimir Prus
2006-12-18 13:38       ` Daniel Jacobowitz
2006-12-18 21:57         ` Nick Roberts
2006-12-21 15:25           ` Vladimir Prus
2006-12-21 22:28             ` Nick Roberts
2006-12-22  6:16               ` Vladimir Prus
2006-12-22  7:16                 ` Nick Roberts
2006-12-22  7:23                   ` Vladimir Prus
2007-01-03 22:46           ` Daniel Jacobowitz
2007-01-04  4:13             ` Nick Roberts
2007-01-04  4:20               ` Daniel Jacobowitz
2007-01-04  6:10                 ` Nick Roberts
2007-01-04 19:40                   ` Daniel Jacobowitz
2007-01-04 20:35                     ` Nick Roberts
2007-01-04 20:50                       ` Daniel Jacobowitz
2007-01-04 21:00                         ` Vladimir Prus
2007-01-05  4:46                           ` Nick Roberts
2007-01-05 14:49                             ` Daniel Jacobowitz
2007-01-05 21:54                               ` Nick Roberts
2007-01-06  7:07                                 ` Vladimir Prus
2007-01-08 15:51                                 ` Daniel Jacobowitz
2007-01-08 21:30                                   ` Nick Roberts
2007-01-08 21:41                                     ` Daniel Jacobowitz
2007-01-04 20:57                       ` Vladimir Prus
2007-01-05  2:26                         ` Nick Roberts
2007-01-04 21:05                   ` Vladimir Prus [this message]
2007-01-05  1:09                     ` Nick Roberts
2007-01-05 14:44                       ` Daniel Jacobowitz
2007-01-05 14:49                         ` Vladimir Prus
2007-01-05 16:04                       ` Jim Blandy

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=200701050004.30631.ghost@cs.msu.su \
    --to=ghost@cs.msu.su \
    --cc=drow@false.org \
    --cc=gdb-patches@sources.redhat.com \
    --cc=nickrob@snap.net.nz \
    /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