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.3 required=5.0 tests=BAYES_00,INVALID_MSGID autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,7a2451b7782380d0 X-Google-Attributes: gid103376,public From: Tucker Taft Subject: Re: Order of subcomponent finalization Date: 1999/03/16 Message-ID: <36EEC9E1.EFF31ECB@averstar.com>#1/1 X-Deja-AN: 455780194 Content-Transfer-Encoding: 7bit Sender: news@inmet.camb.inmet.com (USENET news) X-Nntp-Posting-Host: houdini.burl.averstar.com References: <7cmcu3$o7g$1@nnrp1.dejanews.com> Content-Type: text/plain; charset=us-ascii Organization: AverStar (formerly Intermetrics) Burlington, MA USA Mime-Version: 1.0 Newsgroups: comp.lang.ada Date: 1999-03-16T00:00:00+00:00 List-Id: adam@irvine.com wrote: > > Suppose a record type and an object of that type are declared: > > procedure Subp is > > type Rectype is record > Component_1 : Controlled_Type_1; > Component_2 : Controlled_Type_2; > end record; > > R : Rectype; > > begin > ... > end Subp; > > where Controlled_Type_1 and Controlled_Type_2 are controlled types (duh). > > According to 7.6(12), R.Component_1 and R.Component_2 are initialized > in arbitrary order (since neither one has an access discriminant > constrained by a per-object expression). But does the RM specify in > which order the components are finalized when Subp exits? 7.6.1(9) > says similarly that the components of a composite type are finalized > in arbitrary order; but 7.6.1(11) says that objects created by > declarations in a master (in this case Subp) are finalized in the > reverse order of their creation, and 3.3(12) says that R.Component_1 > and R.Component_2 are objects (although whether they count as "objects > created by a declaration is unclear to me, especially after reading > 3.3.1(16-19)). So would 7.6.1(11) imply that R.Component_1 and > R.Component_2 be finalized in the reverse order in which they were > initialized (in apparent contradiction to 7.6.1(9))? This is admittedly a bit unclear. The intent is that components can be finalized in any order, so long as they don't have access to one another via access discriminants. In the Annotated Ada RM, the "to-be-honest" given in 7.6.1(4.c) indicates that only "top level" (non-component) objects are (directly) finalized as part of finalizing a master, while the subcomponents are finalized as part of finalizing their enclosing object. > -- thanks, Adam -- -Tucker Taft stt@averstar.com http://www.averstar.com/~stt/ Technical Director, Distributed IT Solutions (www.averstar.com/tools) AverStar (formerly Intermetrics, Inc.) Burlington, MA USA