comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Is this a bug?
Date: Mon, 30 Dec 2019 17:16:17 -0600
Date: 2019-12-30T17:16:17-06:00	[thread overview]
Message-ID: <que0g1$5rn$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: h6uum4F2481U1@mid.individual.net

"Niklas Holsti" <niklas.holsti@tidorum.invalid> wrote in message 
news:h6uum4F2481U1@mid.individual.net...
> On 2019-12-30 19:51, Anh Vo wrote:
>> On Monday, December 30, 2019 at 7:44:37 AM UTC-8, reinert wrote:
>>> Hello,
>>>
>>> assume the following Ada procedure:
>>> ------------------------------------------------------------------------------
>>> with Text_IO;
>>> procedure test1 is
>>> package test_package is
>>>   type rec1_t is tagged record
>>>     a : integer := 2;
>>> -- b : integer := 2;
>>>   end record;
>>>   function a(x : rec1_t) return integer is (3);
>>>   rec1 : rec1_t;
>>> end test_package;
>>> begin
>>>    Text_IO.Put(" test_package.rec1: " & 
>>> integer'image(test_package.rec1.a));
>>> end test1;
>>> -------------------------------------------------------------------------------
>>>
>>> It gives (for mye computer):
>>>
>>> test_package.rec1:  2
>>>
>>> If I change the statement
>>>
>>> "a : integer := 2;"
>>>
>>> to
>>>
>>> "b : integer := 2;"
>>>
>>> then I get:
>>>
>>> test_package.rec1:  3
>>>
>>> Is this reasonable?  Bug?
>>>
>>> reinert
>>
>> No, the compiler behaves correctly. In fact, if tagged record is
>> replaced by record, the latter case will be rejected.
>
> Yes.
>
> When rec1_t is tagged, the "selected component" text "test_package.rec1.a" 
> could refer either to the rec1_t-component "a" or to the subprogram 
> (function) "a". In RM 4.1.3(9.1/2) and RM 4.1.3(9.2/3), the latter case is 
> available only under the condition that the tagged record type (rec1_t) 
> does not have a (visible) component with the name "a". This means that the 
> ambiguity is resolved in favour of the component "a", which has the value 
> 2.
>
> One could ask, why is such an ambiguity not rejected (made illegal)? 
> Probably because such an illegality rule would have made many illegal many 
> Ada programs that were legal before the introduction of the 
> "object.operation" syntax for tagged-record objects.

The other reason is that there isn't any alternative notation available for 
components, whereas there is an alternative method for function calls. Ergo, 
we assume that you mean a component if both are available -- otherwise, it 
would be impossible to access a component at all if there is a function with 
the same name visible. Since that function wouldn't even have to be in the 
same scope, there would be a significant maintainance hazard.

Moral: This is another reason to make everything a private type (and also to 
not use prefixed notation with types that aren't private).

                                      Randy.





  parent reply	other threads:[~2019-12-30 23:16 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-12-30 15:44 Is this a bug? reinert
2019-12-30 17:51 ` Anh Vo
2019-12-30 18:41   ` Niklas Holsti
2019-12-30 19:50     ` reinert
2019-12-30 20:11       ` Dmitry A. Kazakov
2019-12-30 23:16     ` Randy Brukardt [this message]
2019-12-31 19:40       ` Optikos
2019-12-31 21:50         ` Randy Brukardt
2020-01-02  9:34           ` Dmitry A. Kazakov
2020-01-03  7:26             ` reinert
2020-01-03  7:35             ` reinert
2020-01-03  8:37               ` Dmitry A. Kazakov
2020-01-04  0:42                 ` Randy Brukardt
2020-01-05 13:32                   ` reinert
2020-01-06 10:43                     ` J-P. Rosen
2020-01-06 12:19                       ` Tero Koskinen
2020-01-17  9:54                 ` reinert
2020-01-17 10:08                   ` Dmitry A. Kazakov
2020-01-17 22:14                   ` Randy Brukardt
2019-12-31  6:08     ` J-P. Rosen
  -- strict thread matches above, loose matches on Subject: below --
2004-09-23  0:52 Wojtek Narczynski
2004-09-23  8:35 ` Wojtek Narczynski
2004-09-23 14:52   ` Nick Roberts
2004-09-23 22:26     ` Brian May
2004-09-24  0:28       ` Stephen Leake
2004-09-24  0:57         ` Jeffrey Carter
2004-09-24 12:47         ` Wojtek Narczynski
2004-09-25  0:17           ` Brian May
2004-09-24 12:37       ` Wojtek Narczynski
2004-09-23 11:27 ` Jeff C r e e.m
2004-09-24  0:30   ` Stephen Leake
2004-09-24  1:49     ` Jeff C r e e.m
2004-09-25 12:59       ` Stephen Leake
2004-10-04 16:36         ` Warren W. Gay VE3WWG
replies disabled

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