comp.lang.ada
 help / color / mirror / Atom feed
From: cis.ohio-state.edu!zaphod.mps.ohio-state.edu!usc!rpi!psinntp!psinntp!vitr o.com!v7.vitro.com!v7.vitro.com!news@ucbvax.Berkeley.EDU  (M. J. Mangieri)
Subject: Re: Variant Record Defaults
Date: 23 Sep 92 20:13:40 GMT	[thread overview]
Message-ID: <1992Sep23.151341.258@v7.vitro.com> (raw)

In article <1992Sep22.215834.11990@nntpd2.cxo.dec.com> wallace@bonmot (Richard
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 will
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 does
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
> : : 
> : : 
>
>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
><wallace@cookie.enet.dec.com>
>
>	"The opinions expressed are my own, Unlce Ken or Uncle Bob
>	 may, or may not, agree with me.
>

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

             reply	other threads:[~1992-09-23 20:13 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1992-09-23 20:13 cis.ohio-state.edu!zaphod.mps.ohio-state.edu!usc!rpi!psinntp!psinntp!vitr [this message]
  -- strict thread matches above, loose matches on Subject: below --
1992-09-24 23:04 Variant Record Defaults deccrl!news.crl.dec.com!pa.dec.com!jrdzzz.jrd.dec.com!e2big.mko.dec.com!n
1992-09-22 21:58 pa.dec.com!nntpd2.cxo.dec.com!bonmot!wallace
1992-09-22 21:50 pa.dec.com!nntpd2.cxo.dec.com!bonmot!wallace
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox