This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
RE: [Patch] p-exp.y: Typecast left operand of BINOP_DIV to long double
- From: "Pierre Muller" <muller at ics dot u-strasbg dot fr>
- To: "'Daniel Jacobowitz'" <drow at false dot org>
- Cc: <gdb-patches at sourceware dot org>
- Date: Fri, 1 Feb 2008 08:28:52 +0100
- Subject: RE: [Patch] p-exp.y: Typecast left operand of BINOP_DIV to long double
- References: <000c01c861c5$149352b0$3db9f810$@u-strasbg.fr> <20080131222641.GD6715@caradoc.them.org>
> -----Original Message-----
> From: Daniel Jacobowitz [mailto:drow@false.org]
> Sent: Thursday, January 31, 2008 11:27 PM
> To: Pierre Muller
> Cc: gdb-patches@sourceware.org
> Subject: Re: [Patch] p-exp.y: Typecast left operand of BINOP_DIV to
> long double
>
> On Mon, Jan 28, 2008 at 04:47:26PM +0100, Pierre Muller wrote:
> > Could someone please confirm that the
> > way I inserted the implicit typecast in the parser is
> > correct?
> > All comments most welcome.
>
> It looks OK to me. Does the type of the left operand completely
> determine the type of the operation, or do you need to worry about the
> type of the right-hand exp too before you cast?
But how can I do this?
It is still not really clear to me how I can
insert a typecast to left operand, only after
right operand has been parsed.
It would indeed be better to only do the typecast if both are integral
types.
> > @@ -367,7 +370,15 @@ exp : exp '*' exp
> > { write_exp_elt_opcode (BINOP_MUL); }
> > ;
> >
> > -exp : exp '/' exp
> > +exp : exp '/' {
> > + if (current_type && is_integral_type
> > (current_type))
> > + {
> > + write_exp_elt_opcode (UNOP_CAST);
> > + write_exp_elt_type
> (builtin_type_long_double);
> > + write_exp_elt_opcode (UNOP_CAST);
> > + }
> > + }
> > + exp
> > { write_exp_elt_opcode (BINOP_DIV); }
> > ;
> >
>
> Won't current_type still be integral after this? Try 1 / 2 / 3.
Whoops, of course, this lacks a
current_type = builtin_type_long_double
assignment.
Thanks for the comments.
Pierre