From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00 autolearn=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!aioe.org!.POSTED!not-for-mail From: "Dmitry A. Kazakov" Newsgroups: comp.lang.ada Subject: Re: Extending a third party tagged type while adding finalization Date: Sun, 3 Dec 2017 17:39:27 +0100 Organization: Aioe.org NNTP Server Message-ID: References: <4db43571-7f86-4e73-8849-c41160927703@googlegroups.com> <6496a10f-c97e-4e42-b295-2478ad464b2f@googlegroups.com> <6106dfe6-c614-4fc1-aace-74bf8d7435e3@googlegroups.com> <24767ee5-cda8-45e4-98d1-7da44757bd40@googlegroups.com> <037e7f02-9149-4648-b7c5-91f67c1c1961@googlegroups.com> NNTP-Posting-Host: sWq1fEaAu/L5fGxxOY76vQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Complaints-To: abuse@aioe.org User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 Content-Language: en-US X-Notice: Filtered by postfilter v. 0.8.2 Xref: reader02.eternal-september.org comp.lang.ada:49331 Date: 2017-12-03T17:39:27+01:00 List-Id: On 2017-12-03 16:10, AdaMagica wrote: > Am Sonntag, 3. Dezember 2017 10:29:07 UTC+1 schrieb Dmitry A. Kazakov: >> type T is new Ada.Finalization.Controlled with record >> Self : not null access T'Class; >> end record; >> procedure Initialize (X : in out T); >> procedure Foo (X : in out T) is abstract; >> >> type S is new T with ... >> overriding procedure Foo (X : in out S); >> >> procedure Initialize (X : in out T) is >> begin >> X.Self.Foo; -- Boom! >> end Initialize; > > Again an example of cryptic code I do not understand what it is > aimed at to demonstrate. It demonstrates dispatch from Initialize (of T) to a procedure (Foo) of the derived type (S) before the derived type's Initialize is called. > All I can see is that it is illegal Ada. It is perfectly legal Ada. Initialize is not a constructor, it is just a primitive operation. So there is no promises made and no promises to fulfill regarding its semantics. One can call it anywhere, any number of times, in any order, everything is up to the unfortunate programmer. -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de