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: Mon, 4 Dec 2017 17:19:39 +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> <4ea6417a-d352-4af4-bfe5-241910bc9684@googlegroups.com> <18484b80-247e-4d01-9aea-2b60899846ac@googlegroups.com> NNTP-Posting-Host: MyFhHs417jM9AgzRpXn7yg.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 6.1; 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:49355 Date: 2017-12-04T17:19:39+01:00 List-Id: On 04/12/2017 16:44, AdaMagica wrote: > Aha, now I see what you are talking about. That's what I meant with cryptic message. You too often just expect mind reading (especially difficult with illegal code snippets). > > Am Montag, 4. Dezember 2017 14:55:23 UTC+1 schrieb Dmitry A. Kazakov: >> Which is catastrophic and there is *no* way to make it right in presence >> of multiple derived types. You cannot announce a call to a deferred >> implementation during initialization of a specific type T. That may >> happen only after initializations of all derived specific types are >> complete. >> >> Semantically it means that it must be called in the initialization of >> T'Class. The proper sequence must be: >> >> >> >> >> + call Foo of S > > What do you mean by init of S'Class? There are no components of an > S'Class. Sorry, I don't understand. Then user initialization of S'Class is null. The point is that in order to initialize a type that supports view conversion to a class-wide type (e.g. S'Class), the instance must be initialized as the corresponding class-wide type to be any time ready for that conversion. In Ada there is no way to provide a user-defined hook on that initialization. BTW, the class-wide initialization is not always null in Ada as one might think. When there is a task component ARM requires task activation to happen *after* calling all Initializes, which is logical, such tasks usually have class-wide discriminants. This is the point of class-wide initialization. If we wanted to make a dispatching call to Foo safe we would need to have an Initialize for the corresponding class and put it there. And we could communicate with our task components there, which is presently impossible (and rightly so during type-specific initialization). -- Regards, Dmitry A. Kazakov http://www.dmitry-kazakov.de