[net.lang.ada] Another question about types and subypes

steve@sdcrdcf.UUCP (Steven Holtsberg) (08/15/86)

On page 3-15, section 3.5.4, the ARM says:

A type declaration of the form:

    type T is range L .. R;

is, by definition equivalent to the following declarations:

    type <integer_type> is new predefined_integer_type;
    subtype T is <integer_type> range <integer_type>(L) .. <integer_type>(R);

It then goes on to refer to T as a _type_ :
"The elaboration of the declaration of an integer _type_ ...".
However, the "equivalent" pair of declarations given does
_not_ declare a new type named T, is declares an anonymous
type (integer_type) and a _subtype_ T.

Are they lying, or are they just careless?

markb@sdcrdcf.UUCP (Mark Biggar) (08/15/86)

In article <2956@sdcrdcf.UUCP> steve@sdcrdcf.UUCP (Steven Holtsberg) writes:
>
>On page 3-15, section 3.5.4, the ARM says:
>
>A type declaration of the form:
>
>    type T is range L .. R;
>
>is, by definition equivalent to the following declarations:
>
>    type <integer_type> is new predefined_integer_type;
>    subtype T is <integer_type> range <integer_type>(L) .. <integer_type>(R);
>
>It then goes on to refer to T as a _type_ :
>"The elaboration of the declaration of an integer _type_ ...".
>However, the "equivalent" pair of declarations given does
>_not_ declare a new type named T, is declares an anonymous
>type (integer_type) and a _subtype_ T.
>
>Are they lying, or are they just careless?

No just pragmatic, They use T as the name of the type, even though it's
really only a subtype, because there is no other name they can use.

The LRM explisitly outlaws using T'BASE as the name of the type.

Note also that subtypes are used to rename types as in:

subtype FOO is BAR;

After this there is no difference between FOO and BAR to the compiler.

Mark Biggar
{allegra,burdvax,cbosgd,hplabs,ihnp4,akgua,sdcsvax}!sdcrdcf!markb