Copyright Digital Equipment Corp. All rights reserved.

Type_Declaration

 A TYPE section introduces the name  and  set  of  values  for  a
 user-defined  type  or  schema  definition  and  has  one of the
 following forms:


 Syntax:

    TYPE
       {type-identifier = [[attribute-list]] type-denoter}
          [[VALUE initial-state-specifier]];...

    TYPE
       {schema-declaration} [[VALUE initial-state-specifier]]


 The 'type-identifier'  is  the  identifier  of  the  type  being
 defined.

 The 'attribute-list' is one or more  optional  identifiers  that
 provide additional information about the type-denoter.

 The 'type-denoter' is any legal Pascal type syntax.

 The 'schema-declaration' is the declaration of a schema type.

 The 'initial-state-specifier' is a compile-time expression  that
 is  assignment compatible with a variable of the TYPE identifier
 being defined.  VSI Pascal initializes all variables declared to
 be  of  this  type  with  the  constant value or values provided
 (unless there is an overriding initial-state  specifier  in  the
 variable declaration).

 Pascal requires that all user-defined type  identifiers  (except
 base  types  of pointers) be defined before they are used in the
 definitions of other types.  A base type must be defined  before
 the end of the TYPE section in which it is first mentioned.

 Example:
       
    TYPE
       Entertainment = ( dinner, movie, theater, concert );
       Week_end = ( sat, sun ) VALUE sat;
       Hours_worked = ARRAY[mon .. fri] OF INTEGER;
       Salary = ARRAY[1 .. 50] OF REAL;
       Salary_template( upper_bound : integer ) = 
          ARRAY [1..upper_bound] of REAL;
       Pay = salary;
       Ptr_to_hits = ^Hits;
       Hits = RECORD
                 Title, Artist, Composer : VARYING[30] OF CHAR;
                 Weeks_on_chart : INTEGER;
                 First_version : Boolean;
                 END;

    VAR
       Week1, Week2 : Week_end;
       Week3 : Week_end VALUE sun;
       Salary_type2 : Salary_template( x );


 In this example, 'Week1' and 'Week2' have initial values of sat,
 as  specified in the TYPE definition of 'Week_end'.  'Week3' has
 an initial value of sun, because an initial value  specified  in
 the  variable  declaration overrides any initial value specified
 in the type definition.  The 'Salary_template' schema has actual
 discriminants  of  x, which indicates that the upper boundary of
 'Salary_type2' will be determined at run time by a  variable  or
 function call.