Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Daniel Jacobowitz <drow@false.org>
To: Rob Quill <rob.quill@gmail.com>
Cc: gdb-patches@sourceware.org
Subject: Re: Remove deprecated_set_value_type (part 1)
Date: Tue, 29 Jan 2008 20:07:00 -0000	[thread overview]
Message-ID: <20080129195506.GE9019@caradoc.them.org> (raw)
In-Reply-To: <baf6008d0801202053w5aaa9ee1pf4cde2b15ec8fa53@mail.gmail.com>

On Mon, Jan 21, 2008 at 04:53:05AM +0000, Rob Quill wrote:
> 2008-01-21   Rob Quill <rob.quill@gmail.com>
> 
>          Removes some uses of deprecated_set_value_type
>          * ada-lang.c (ada_coerce_to_simple_array_type): Create a new
> zero value of the correct type instead of changing type.
>          (ada_value_assign): Call copy_value_and_change_type instead.
>          * c-valprint.c (c_value_print): Call copy_value_and_change_type.
>          * printcmd.c (printf_command): Create a zero value of the
> correct type and copy the contents of the old value into it.
>          * valops.c (value_cast_pointers, value_cast, value_assign,
> value_addr): Call value_value_copy_and_change_type instead of copying
> the value and then changing the type.
>          * value.c (value_copy_and_change_type): Define.
>          * value.h (value_copy_and_change_type): Declare.

Formatting: a changelog entry is single tab indented, and each line
should wrap at a sensible margin (somewhere between 72 and 79
columns).

> Index: gdb/ada-lang.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/ada-lang.c,v
> retrieving revision 1.131
> diff -u -p -r1.131 ada-lang.c
> --- gdb/ada-lang.c	8 Jan 2008 19:28:08 -0000	1.131
> +++ gdb/ada-lang.c	21 Jan 2008 00:00:46 -0000
> @@ -1737,9 +1737,8 @@ struct type *
>  ada_coerce_to_simple_array_type (struct type *type)
>  {
>    struct value *mark = value_mark ();
> -  struct value *dummy = value_from_longest (builtin_type_long, 0);
> +  struct value *dummy = value_zero(type, not_lval);
>    struct type *result;
> -  deprecated_set_value_type (dummy, type);
>    result = ada_type_of_array (dummy, 0);
>    value_free_to_mark (mark);
>    return result;

Spaces before open parentheses, please.  This one's certainly correct.

> @@ -2241,10 +2240,9 @@ ada_value_assign (struct value *toval, s
>        if (deprecated_memory_changed_hook)
>  	deprecated_memory_changed_hook (to_addr, len);
> 
> -      val = value_copy (toval);
> +      val = value_copy_and_change_type(toval, type);
>        memcpy (value_contents_raw (val), value_contents (fromval),
>                TYPE_LENGTH (type));
> -      deprecated_set_value_type (val, type);
> 
>        return val;
>      }

I can't tell if this one is right.  I don't understand what it's for
either.  Mind leaving it out for now?

> Index: gdb/c-valprint.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/c-valprint.c,v
> retrieving revision 1.48
> diff -u -p -r1.48 c-valprint.c
> --- gdb/c-valprint.c	11 Jan 2008 13:34:14 -0000	1.48
> +++ gdb/c-valprint.c	21 Jan 2008 00:00:46 -0000
> @@ -562,8 +562,8 @@ c_value_print (struct value *val, struct
>  	       * error about a non-pointer type in value_rtti_target_type
>  	       */
>  	      struct value *temparg;
> -	      temparg=value_copy(val);
> -	      deprecated_set_value_type (temparg, lookup_pointer_type
> (TYPE_TARGET_TYPE(type)));
> +	      temparg=value_copy_and_change_type(val,
> +				  lookup_pointer_type (TYPE_TARGET_TYPE(type)));
>  	      val=temparg;
>  	    }
>  	  /* Pointer to class, check real type of object */

This one should just call value_addr; that's how you convert a
reference into the corresponding pointer.

> Index: gdb/printcmd.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/printcmd.c,v
> retrieving revision 1.116
> diff -u -p -r1.116 printcmd.c
> --- gdb/printcmd.c	11 Jan 2008 13:34:14 -0000	1.116
> +++ gdb/printcmd.c	21 Jan 2008 00:00:50 -0000
> @@ -2035,9 +2035,19 @@ printf_command (char *arg, int from_tty)
>  	  {
>  	    struct type *type = value_type (val_args[nargs]);
>  	    if (TYPE_LENGTH (type) == sizeof (float))
> -	      deprecated_set_value_type (val_args[nargs], builtin_type_float);
> +		{
> +			struct value *temp = value_zero(builtin_type_float, not_lval);
> +			memcpy(value_contents_all_raw(temp),
> value_contents_all_raw(val_args[nargs]),
> +					TYPE_LENGTH(builtin_type_float));
> +			val_args[nargs] = temp;
> +		}
>  	    if (TYPE_LENGTH (type) == sizeof (double))
> -	      deprecated_set_value_type (val_args[nargs], builtin_type_double);
> +		{	
> +			struct value *temp = value_zero(builtin_type_double, not_lval);
> +			memcpy(value_contents_all_raw(temp),
> value_contents_all_raw(val_args[nargs]),
> +					TYPE_LENGTH(builtin_type_double));
> +			val_args[nargs] = temp;
> +		}
>  	  }
>  	nargs++;
>  	s = s1;

Formatting: two spaces for the braces, two more for the body, spaces
before open parentheses.  Also be careful of the right margin.  The
code change looks correct to me.  You can use just
value_contents_writeable for temp (the _all_raw bit is only for cases
where you might have a different dynamic type), and use just
value_contents for the right hand type (value_contents is the data
that goes along with value_type; value_contents_all* might be an
enclosing object).

> @@ -440,8 +439,7 @@ value_cast (struct type *type, struct va
>        if (code1 == TYPE_CODE_PTR && code2 == TYPE_CODE_PTR)
>  	return value_cast_pointers (type, arg2);
> 
> -      arg2 = value_copy (arg2);
> -      deprecated_set_value_type (arg2, type);
> +      arg2 = value_copy_and_change_type(arg2, type);
>        arg2 = value_change_enclosing_type (arg2, type);
>        set_value_pointed_to_offset (arg2, 0);	/* pai: chk_val */
>        return arg2;

Space before apren.

> Index: gdb/value.c
> ===================================================================
> RCS file: /cvs/src/src/gdb/value.c,v
> retrieving revision 1.56
> diff -u -p -r1.56 value.c
> --- gdb/value.c	16 Jan 2008 16:16:44 -0000	1.56
> +++ gdb/value.c	21 Jan 2008 00:00:56 -0000
> @@ -275,6 +275,33 @@ deprecated_set_value_type (struct value
>    value->type = type;
>  }
> 
> +struct value *
> +value_copy_and_change_type (struct value *arg, struct type *type)
> +{

You can just use value_copy for most of this, to avoid the
duplication; that's not a problem here, since we're inside value.c.

> +/* This function acts as a partial replacement for deprecated_set_value_type.
> +   The function is exactly the same as value_copy() but it also changes
> +   the type.  */
> +
> + extern struct value *value_copy_and_change_type(struct value *arg,
> +					          struct type *type);

Space before paren.

/* Copy ARG to a new value.  The new value is exactly the same, except
   for its type, which is set to TYPE.  */

Don't want to add new references to deprecated_set_value_type; just
one more thing to delete when it's gone.

-- 
Daniel Jacobowitz
CodeSourcery


  reply	other threads:[~2008-01-29 19:55 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-01-21  4:53 Rob Quill
2008-01-29 20:07 ` Daniel Jacobowitz [this message]
2008-01-30 12:06   ` Rob Quill
2008-01-30 18:06     ` Mark Kettenis
2008-02-26  2:24       ` Daniel Jacobowitz
2008-02-26 14:36         ` Rob Quill
2008-07-27 19:16         ` Rob Quill
2008-08-09 15:10           ` Rob Quill

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=20080129195506.GE9019@caradoc.them.org \
    --to=drow@false.org \
    --cc=gdb-patches@sourceware.org \
    --cc=rob.quill@gmail.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