A type declaration looks like this:
type
type_identifier = type_definition;
...
type_identifier = type_definition;
or, with preset content:
type
type_identifier = type_definition value constant_expression;
...
type_identifier = type_definition value constant_expression;
A type declaration part begins with the reserved word type.
It declares a type_identifier which is defined by type_definition.
A type definition either can be an array, a record, a schema, a set, an
object, a subrange, an enumerated type, a pointer to another type_identifier
or simply another type_identifier which is to alias.
If a schema type is to be declared, type_identifier is followed by a
discriminant enclosed in parentheses:
type_identifier (discriminant) = schema_type_definition;
If value is specified, followed by a constant satisfying
the type definition, every variable of this type is initialized with
constant_expression, unless it is initialized by value itself.
The reserved word value can be replaced by =, however
value is not allowed in ISO-Pascal and Borland Pascal, and the
replacement by = is not allowed in Extended Pascal.
type
{ This side is the } { That side is the }
{ type declaration } { type definition }
Arrayfoo = array [0 .. 9] of Integer; { array definition }
Recordfoo = record { record definition }
Bar: Integer;
end;
{ schema def with discriminants ``x, y: Integer'' }
SchemaFoo (x, y: Integer) = array [x .. y] of Integer;
CharSetFoo = set of Char; { Def of a set }
ObjectFoo = object { Def of an object }
procedure DoAction;
constructor Init;
destructor Done;
end;
SubrangeFoo = -123..456; { subrange def }
EnumeratedFoo = (Pope,John,the,Second); { enum type def }
{ Def of a pointer to another type identifier }
PInteger = ^arrayfoo;
{ Def of an alias name for another type identifier }
IdentityFoo = Integer;
{ Def of an integer which was initialized by 123 }
InitializedFoo = Integer value 123;