From: "Tom Grosman" <grosman@aonix.fr>
Subject: Re: Discriminant ans tagged type ?!
Date: Fri, 4 Apr 2008 17:40:37 +0200
Date: 2008-04-04T17:40:37+02:00 [thread overview]
Message-ID: <ft5gbt$1t1$1@s1.news.oleane.net> (raw)
In-Reply-To: cc37c7dc-d89b-4f4a-82e3-24941300efb5@k13g2000hse.googlegroups.com
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2871 bytes --]
"Tony" <truand.tony@gmail.com> a �crit dans le message de news:
cc37c7dc-d89b-4f4a-82e3-24941300efb5@k13g2000hse.googlegroups.com...
> On 21 mar, 16:25, Adam Beneschan <a...@irvine.com> wrote:
>> On Mar 21, 1:18 am, Tony <truand.t...@gmail.com> wrote:
>>
>>
>>
>> > On 18 mar, 20:54, Adam Beneschan <a...@irvine.com> wrote:
>>
>> > > On Mar 18, 8:54 am, Adam Beneschan <a...@irvine.com> wrote:
>>
>> > > > However, I tried changing the declaration of T as follows:
>>
>> > > > T : String (1 .. B.L); -- NO, THIS IS WRONG, I SCREWED UP
>>
>> > > > and GNAT accepted it. (I haven't done enough testing to make sure
>> > > > GNAT handles it correctly in other ways, though.) Here, B refers
>> > > > to
>> > > > the "current instance" of the type (8.6(17)), and 3.7(18) means
>> > > > that
>> > > > all instances of the type will have a component L that is inherited
>> > > > from A, so this should be legal unless there are some other rules
>> > > > that
>> > > > I've missed (and that GNAT also missed).
>>
>> > > Never mind. After reading Bob's post, I got pointed to 3.8(10-12),
>> > > which disallows references to inherited discriminants in a type
>> > > extension. So I guess GNAT (or at least the version I'm using, which
>> > > is probably not the latest) is wrong to accept this. Sorry.
>>
>> > > -- Adam
>>
>> > --
>> > I tried Bob's answer with the Aonix compiler:
>> > ERROR : LRM:3.8(12), A discriminant used in a constraint may only
>> > appear alone as a direct_name.
>> > I'm lost...;-)
>>
>> 3.8(12) is one of the rules I overlooked (thanks, Tuck). Perhaps you
>> tried Bob's answer together with my incorrect suggestion to use
>> string(1..B.L), which violates that rule; when you use a discriminant
>> in a constraint, the discriminant can't be an "expanded name" or part
>> of a larger expression, and I think B.L is an expanded name here. My
>> apologies for misleading you.
>>
>> This should work:
>>
>> type B (L : Natural) is new A(L) with record
>> T : String (1 .. L);
>> end record;
>>
>> Everything I said earlier about visibility wouldn't apply here,
>> because redeclaring the discriminant L makes it visible inside the
>> record declaration of B. This would work too:
>>
>> type B (Ell : Natural) is new A(L) with record
>> T : String (1 .. Ell);
>> end record;
>>
>> It's the new discriminant that can be used in the declaration, not the
>> one inherited from A.
>>
>> > Is my first code correct? I guess yes...
>>
>> Still no. The compiler may accept it, but that just means the
>> compiler has a bug.
>>
>> I hope I've got everything straight now.
>>
>> -- Adam
> --
> You are right !! , it works :-)
> Thanks for all.
> Tony.
> --
Tony,
Thanks for bringing this problem to our attention.
Tom Grosman, Aonix
next prev parent reply other threads:[~2008-04-04 15:40 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-18 15:22 Discriminant ans tagged type ?! Tony
2008-03-18 15:54 ` Adam Beneschan
2008-03-18 19:54 ` Adam Beneschan
2008-03-21 8:18 ` Tony
2008-03-21 15:25 ` Adam Beneschan
2008-03-21 16:46 ` Simon Wright
2008-03-22 9:05 ` Tony
2008-04-04 15:40 ` Tom Grosman [this message]
2008-03-18 18:40 ` Robert A Duff
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox