Contents   Index   Search   Previous   Next


12.5.4 Formal Access Types

1
   [The class determined for a formal access type is the class of all access types.]

Syntax

2
formal_access_type_definition ::= access_type_definition

Legality Rules

3
   For a formal access-to-object type, the designated subtypes of the formal and actual types shall statically match. {statically matching (required) [partial]}
4
   If and only if the general_access_modifier constant applies to the formal, the actual shall be an access-to-constant type. If the general_access_modifier all applies to the formal, then the actual shall be a general access-to-variable type (see 3.10).
4.a
Ramification: If no _modifier applies to the formal, then the actual type may be either a pool-specific or a general access-to-variable type.
4.a.1/1
Reason: {8652/0109} Matching an access-to-variable to a formal access-to-constant type cannot be allowed. If it were allowed, it would be possible to create an access-to-variable value designating a constant.
5
   For a formal access-to-subprogram subtype, the designated profiles of the formal and the actual shall be mode-conformant, and the calling convention of the actual shall be protected if and only if that of the formal is protected. {mode conformance (required)}
5.a
Reason: We considered requiring subtype conformance here, but mode conformance is more flexible, given that there is no way in general to specify the convention of the formal.

Examples

6
   Example of formal access types:
7
--  the formal types of the generic package 
8
generic
   type Node is private;
   type Link is access Node;
package P is
   ...
end P;
9
--  can be matched by the actual types 
10
type Car;
type Car_Name is access Car;
11
type Car is
   record
      Pred, Succ : Car_Name;
      Number     : License_Number;
      Owner      : Person;
   end record;
12
--  in the following generic instantiation 
13
package R is new P(Node => Car, Link => Car_Name);

Incompatibilities With Ada 83

13.a
{incompatibilities with Ada 83} The check for matching of designated subtypes is changed from a run-time check to a compile-time check. The Ada 83 rule that ``If the designated type is other than a scalar type, then the designated subtypes shall be either both constrained or both unconstrained'' is removed, since it is subsumed by static matching.

Extensions to Ada 83

13.b
{extensions to Ada 83} Formal access-to-subprogram subtypes and formal general access types are new concepts.

Contents   Index   Search   Previous   Next   Legal