From: Andrew Cagney <ac131313@redhat.com>
To: Paul Hilfinger <hilfingr@gnat.com>
Cc: gdb-patches@sources.redhat.com
Subject: Re: RFA: Changes to allow extensions to operator set
Date: Thu, 11 Sep 2003 18:55:00 -0000 [thread overview]
Message-ID: <3F60C50F.5040704@redhat.com> (raw)
In-Reply-To: <20030906111343.5F98DF2B63@nile.gnat.com>
>> [Where] is a method to handle operator evaluation missing? Otherwize won't
>> the jumbo switch in evaluate_subexp_standard still need to be modified
>> as languages add additional operators.
>
>
> Not so. The language vector already contains
>
> /* Evaluate an expression. */
> struct value *(*evaluate_exp) (struct type *, struct expression *,
> int *, enum noside);
Ah. Is ada doing anything special with that - something that will bite
later? Looking at the existing languages - they appear to simply be
overriding select operators but nothing more.
> In short, you want to object orient these suckers. Well as a matter
> of fact, I actually implemented something along these lines in an earlier
> iteration. It certainly can be made to work. However,
Yes.
> 1. To do it consistently requires a much more extensive and somewhat
> tedious change to the existing machinery (which works well enough)
> giving me even more opportunities to overlook something ("overlook"
> == "screw up").
True. Need to look for baby steps.
> 2. For example, to really do it up brown you'd want to modify all the
> .y files so that instead of emitting the integer codes directly, as they
> do now, there'd be operator-specific emission routines for parsing, so
> that, e.g., sequences like
>
> write_exp_elt_opcode (OP_FUNCALL);
> write_exp_elt_longcst ((LONGEST) end_arglist ());
> write_exp_elt_opcode (OP_FUNCALL); }
>
> became
>
> OP_FUNCALL->write_exp_longest ((LONGEST) end_arglist ());
>
> or some such thing.
Yes, eventually. In an as yet un-scheduled future round.
> 3. Personally, I find that this is one of those gray cases where the OOP
> style gains little in clarity. That is, we have choice of writing (A) an
> enumeration type and a few big functions of the form
>
> <type> <func> (<args>) {
> <prologue>
> switch (<op>) {
> case A:
> <A code>
> case B:
> <B code>
> }
> }
This, I think, is easier short term.
> and of writing (B) LOTS of little functions of the form
>
> <type> <func_X> (<args>) {
> <prologue>
> <X code>
> }
This, I think, is easier long term - it's clear exactly which methods
need to be implemented to make the new object functional - no chasing
after all those switch statements to figure out if/where each needs to
be changed.
It took me some time to understand why the OO style really was better
and how come Java omiting enum's was a good thing.
> plus a big dispatch vector (of struct operators, in your case) naming them.
> Perhaps I am overinterpreting your suggestion, but I see a lot of effort
> for little gain in clarity (maybe <0) in going from the current style (A)
> to style (B). In fact, for these reasons, I went so far as to tear up my
> original, more bject-oriented version of this extension mechanism and
> go back to the mechanism I submitted, as a simpler and more conservative
> solution.
sed would quickly create the initial table.
> Now if and when David Carlton gets his way and we eventually re-do GDB
> in C++, it might be time to revisit this decision, since C++ would
> remove the tedious table building and welter of names.
Not if, when. GDB's beeing re-done OO regardless of the C++ schedule.
Can you please move evaluate_exp to the new expresion descriptor (is
anything else missing?); modify:
> + OP_OBJC_NSSTRING,
> +
> + /* First extension operator. Individual language modules define
> + extra operators they need as constants with values
> + OP_LANGUAGE_SPECIFIC0 + k, for k >= 0, using a separate
> + enumerated type definition:
> + enum foo_extension_operator {
> + BINOP_MOGRIFY = OP_EXTENDED0,
> + BINOP_FROB,
> + ...
> + }; */
> + OP_EXTENDED0,
> +
> + /* Last possible extension operator. Defined simply to specify a
> + minimum range for the representation. */
> + OP_EXTENDED_LAST = 0xff
to provide a an explicit and finite number of extended operators
OP_EXTENDED_0, OP_EXTENDED_1, ... (I'm assuming Ada will contain enum {
OP_ADA_... = OP_EXTENDED_0, ... }); add a note that this is an interum
and it will go away.
Andrew
next prev parent reply other threads:[~2003-09-11 18:55 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-09-01 9:39 Paul Hilfinger
2003-09-04 2:18 ` Andrew Cagney
2003-09-05 8:32 ` Paul Hilfinger
2003-09-05 15:57 ` Andrew Cagney
2003-09-05 16:23 ` Andrew Cagney
2003-09-06 11:13 ` Paul Hilfinger
2003-09-11 18:55 ` Andrew Cagney [this message]
2003-09-13 8:58 ` Paul Hilfinger
2003-09-18 9:20 ` Paul Hilfinger
2003-09-22 17:04 ` Andrew Cagney
2003-09-05 16:29 ` Andrew Cagney
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=3F60C50F.5040704@redhat.com \
--to=ac131313@redhat.com \
--cc=gdb-patches@sources.redhat.com \
--cc=hilfingr@gnat.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