comp.lang.ada
 help / color / mirror / Atom feed
From: Adam Beneschan <adam@irvine.com>
Subject: Re: Dynamic Variant Record Creation
Date: Tue, 16 Mar 2010 21:20:07 -0700 (PDT)
Date: 2010-03-16T21:20:07-07:00	[thread overview]
Message-ID: <a4de16f2-1b14-4c9d-886a-2e61f6c01863@k6g2000prg.googlegroups.com> (raw)
In-Reply-To: hnp4r7$eqo$1@munin.nbi.dk

On Mar 16, 4:39�pm, "Randy Brukardt" <ra...@rrsoftware.com> wrote:
> "Adam Beneschan" <a...@irvine.com> wrote in message
>
> news:c3fa9a0f-99c7-4fff-9310-7e4d769065db@s25g2000prd.googlegroups.com...
> ...
>
> >By the way, now that Ada 2005 has the <> construct for aggregates,
> >it's just occurred to me that maybe 4.3.1(17) can be relaxed a bit, to
> >make it legal to specify a record aggregate with a nonstatic
> >discriminant for a variant record, *if* the only component
> >associations for aggregates are components that are not in variant
> >parts *and* there is an others=><> in the aggregate (or something
> >along those lines). �I don't know whether it's worthwhile, though.
> >(It wouldn't help too much in this exact example, since there are no
> >non-variant components, but if it were expanded to include, say, a
> >source file name, line number, and column number for each Token_Unit,
> >then there would be some benefit.) �I'll consider making a proposal
> >for this, depending on how loud a groan Randy, Bob, etc., make when
> >they read this idea... �:)
>
> GROAAANNN!!! �:-)
>
> I'd like to see a solution to this problem, but I don't think this is it.
> The problem is that the compiler wouldn't know what components to generate,
> so it would effectively have to generate a giant case statement:

My thinking was that it has to do that anyway, if you declare an
uninitialized object:

  Var : Token_Unit(T);

This has to use the same sort of case statement to initialize the
components in the variant parts.  So I thought that basically the code
would be using the same logic, plus assigning initial values to the
non-variant components.

                             -- Adam

> X := (Token => T, others => <>) would become:
>
> case T is
> � �when LEX_ID => X := (Token => LEX_ID, String_Id => <>);
> � �when '!' => X := (Token => '!');
> � �...
> end case;
>
> The compiler could combine similar variants, I guess, but it often doesn't
> help much. And it looks like a very complex mess.
>
> � � � � � � � � � � � � � � � � � �Randy.




  parent reply	other threads:[~2010-03-17  4:20 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-03-16 17:11 Dynamic Variant Record Creation Warren
2010-03-16 18:31 ` Georg Bauhaus
2010-03-16 18:57 ` Adam Beneschan
2010-03-16 20:01   ` Warren
2010-03-16 20:09     ` Jeffrey R. Carter
2010-03-16 20:24       ` Warren
2010-03-16 20:40         ` Robert A Duff
2010-03-16 20:44           ` Warren
2010-03-16 20:31     ` Robert A Duff
2010-03-16 20:59       ` Warren
2010-03-16 21:55         ` Jeffrey R. Carter
2010-03-17 14:40           ` Warren
2010-03-18 12:57           ` Warren
2010-03-16 21:58         ` Robert A Duff
2010-03-17 14:22           ` Charmed Snark
2010-03-17 14:49             ` Robert A Duff
2010-03-17 16:30               ` Warren
2010-03-16 21:15       ` Adam Beneschan
2010-03-16 23:24       ` Adam Beneschan
2010-03-16 20:15   ` Robert A Duff
2010-03-16 21:00     ` Warren
2010-03-16 23:39   ` Randy Brukardt
2010-03-16 23:43     ` Randy Brukardt
2010-03-17  0:15     ` Robert A Duff
2010-03-17 14:28       ` Warren
2010-03-18  0:02       ` Randy Brukardt
2010-03-17  4:20     ` Adam Beneschan [this message]
2010-03-18  0:13       ` Randy Brukardt
2010-03-18 13:00         ` Warren
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox