From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=1.0 required=3.0 tests=BAYES_40,FROM_ADDR_WS autolearn=no autolearn_force=no version=3.4.5-pre1 Date: 22 Sep 92 21:58:34 GMT From: pa.dec.com!nntpd2.cxo.dec.com!bonmot!wallace@decwrl.dec.com (Richard Wal lace) Subject: Re: Variant Record Defaults Message-ID: <1992Sep22.215834.11990@nntpd2.cxo.dec.com> List-Id: wallace@bonmot (Richard Wallace) writes: : BERRYMAN@orca.drep.dnd.ca (DON BERRYMAN) writes: : : : : Please concider the following code fragment: : : : : package dstring is : : type text (maxlen: positive := 64) is private; : : ---STUFF DELETED-- : : private : : type text (maxlen: positive := 64) is : : record : : last: natural := 0; : : data: string (1..maxlen); : : end record; : : end dstring; : : : : with dstring; : : procedure useit is : : type buffer is record : : data: dstring.text; : : end record; : : aaa: buffer; : : bbb: dstring.text; : : begin : : null; : : end useit; : : : : : : When compiled on VAX/VMS Ada I get the following: : : : : S2$ ada useit : : 3 type buffer is record : : ...........1 : : %ADAC-I-CONS_OR_NUM_ERR, (1) CONSTRAINT_ERROR or NUMERIC_ERROR will b e raised : : here [LRM 11.1(5-6), F.9.5] : : during evaluation related to record type buffer at line 3 : : %ADAC-I-ENDDIAGS, Ada compilation completed with 1 diagnostic : : S2$ : : : : What appears to be the problem is that BUFFER.DATA is not using the defaul t : : for MAXLEN. When I specify it in the record definition the message goes : : away. Since I can create the variable, BBB, of type DSTRING.TEXT it does n ot : : seem to be a problem with my definitions. So why does ADA not use the : : default for BUFFER.DATA??? : : : : I'm sure the reason is given in an obscure section of the LRM, : : : : : : Don Berryman : : Defence Research Establishment Pacific : : Canadian Forces Base Esquimalt : : Victoria, BC, CANADA, V0S-1B0 : : 604-363-2731 604-363-2856fax : : berryman@orca.drep.dnd.ca : : : : Let me try again! What's going wrong here is the declaration of a record aggregate with a record aggregate with a discrimanant part. Very specifically in LRM 4.3.1(1) it states: "If the type of an aggregate is a record type, the component names given as choices must denote components (including discrimants) fo the record type." This the second declaration is an object of the record type and not an aggregate of the record type as is the first one. Hope this helps! Richard Wallace Digital Equipment Corporation 301 Rockrimmon Blvd. South CXO2-1/7A Colorado Springs, CO 80919-2398 (719)548-2792 "The opinions expressed are my own, Unlce Ken or Uncle Bob may, or may not, agree with me.