From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Should representation clauses be complete for each bit?
Date: Tue, 26 Jul 2011 16:10:09 -0500
Date: 2011-07-26T16:10:09-05:00 [thread overview]
Message-ID: <j0nafj$pvl$1@munin.nbi.dk> (raw)
In-Reply-To: wcc62mtav52.fsf@shell01.TheWorld.com
"Robert A Duff" <bobduff@shell01.TheWorld.com> wrote in message
news:wcc62mtav52.fsf@shell01.TheWorld.com...
> "Randy Brukardt" <randy@rrsoftware.com> writes:
>
>> I would do this slightly differently (in fact we did, in Claw where we
>> had
>> this exact problem):
>>
>> type T is
>> record
>> One : Boolean;
>> Gap1 : Bits2 := 0; -- must be zero
>> Tooth : Boolean;
>> Gap2 : Bits11 := 0; -- must be zero
>> Ree : Boolean;
>> end record
>> with Predicate => T.Gap1 = 0 and T.Gap2 = 0;
>>
>> with the same record rep clause.
>> Then the (correct) aggregates don't need to mention the gaps explicitly:
>>
>> with Ada.Assertions; use Ada.Assertions;
>> procedure P.Main is
>> -- X : T := (One | Tooth | Ree => True, Gap1 => 0, Gap2 => 0); -- OK
>> X : T := (One | Tooth | Ree => True, others => <>); -- OK
>
> Hmm. That seems reasonable, although it makes me nervous that
> you might accidentally say:
>
> X : T := (One | Tooth => True, others => <>);
>
> which evilly leaves junk in Ree. That sort of bug is likely if you add
> new components to a record.
Ugh. There really should be a restriction or something to prevent using <>
for uninitialized things. We have such a rule for discriminants, it would
seem easy enough to have it for all types (admittedly, it would be
complicated by the recursive nature for record types). It can't be very
common that the program actually wants to write aggregates that fill the
aggregate with junk.
Randy.
next prev parent reply other threads:[~2011-07-26 21:10 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-20 10:34 Should representation clauses be complete for each bit? okellogg
2011-07-20 14:51 ` Robert A Duff
2011-07-20 15:24 ` Georg Bauhaus
2011-07-20 17:28 ` Robert A Duff
2011-07-21 7:37 ` Martin
2011-07-21 8:22 ` Simon Wright
2011-07-21 14:58 ` Robert A Duff
2011-07-23 0:13 ` Randy Brukardt
2011-07-27 14:12 ` okellogg
2011-07-28 0:03 ` Randy Brukardt
2011-07-21 9:43 ` Georg Bauhaus
2011-07-21 15:06 ` Robert A Duff
2011-07-31 15:02 ` BrianG
2011-07-21 21:11 ` Brian Drummond
2011-07-21 7:59 ` Stephen Leake
2011-07-20 15:29 ` okellogg
2011-07-20 16:24 ` Dmitry A. Kazakov
2011-07-20 16:58 ` okellogg
2011-07-20 19:38 ` Dmitry A. Kazakov
2011-07-20 17:27 ` Robert A Duff
2011-07-20 19:14 ` okellogg
2011-07-20 20:13 ` J-P. Rosen
2011-07-20 21:23 ` Robert A Duff
2011-07-20 21:21 ` Robert A Duff
2011-07-21 8:02 ` Stephen Leake
2011-07-21 8:00 ` Stephen Leake
2011-07-21 7:36 ` Martin
2011-07-22 23:50 ` Randy Brukardt
2011-07-23 2:16 ` tmoran
2011-07-23 15:12 ` Robert A Duff
2011-07-26 21:10 ` Randy Brukardt [this message]
2011-07-23 0:01 ` Randy Brukardt
-- strict thread matches above, loose matches on Subject: below --
1998-04-17 0:00 Should Representation Clauses " Marin David Condic, 561.796.8997, M/S 731-96
[not found] <3533C3C5.3F25CB91@cacd.rockwell.com>
1998-04-16 0:00 ` Stephen Leake
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox