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.
next prev 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