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=0.8 required=3.0 tests=BAYES_50 autolearn=ham autolearn_force=no version=3.4.5-pre1 Date: 24 Sep 92 23:04:21 GMT From: deccrl!news.crl.dec.com!pa.dec.com!jrdzzz.jrd.dec.com!e2big.mko.dec.com!n ntpd.lkg.dec.com!nntpd2.cxo.dec.com!bonmot!wallace@decwrl.dec.com (Richard Wal lace) Subject: Variant Record Defaults Message-ID: <1992Sep24.230421.8280@nntpd2.cxo.dec.com> List-Id: mmangieri@vitro.com (M. J. Mangieri) writes: : In article <1992Sep22.215834.11990@nntpd2.cxo.dec.com> wallace@bonmot (Richar d : Wallace) writes: : > 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 wil l : be 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 : default : > : : 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 doe s : not : > : : 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 : > : : : > : : .. my answer deleted ... : In simple terms -- the problem is that when defining a record type whose : discriminant type is POSITIVE, an implementation is allowed to reserve : sufficient space for POSITIVE'LAST characters (which on the VAX is a lot of : characters!) You may get STORAGE_ERROR, or, in the case of the VAX, : NUMERIC_ERROR, since POSITIVE'LAST + POSITIVE'SIZE (for the discriminant : itself) is a value greater than INTEGER'LAST. : : A solution would be to create a subtype of POSITIVE and use that as the : discriminant's type. : : __________________________________________________________________ : / Michael J. Mangieri Internet: mmangieri@vitro.com : __ / Vitro Corporation Voice: (301) 231-3016 : \ / MX-SP 4-2311 FAX: (301) 231-1233 : \ / 14000 Georgia Ave. : * Silver Spring, MD 20906-2972 : : "Everything should be made as simple as possible, but not simpler." : - A. Einstein : : I concur Michael's findings. With the subtype of POSITIVE the the discrimanent on dstring.text does not generate a compile warning or runtime error. The runtime error is CONSTRAINT_ERROR with VAX Ada on VAX/VMS if the original program above is run. 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, Uncle Ken or Uncle Bob may, or may not, agree with me."