E.2.2 Remote Types Library Units
1
A remote types library unit supports the definition of types intended for use in communication between active partitions.
Syntax
2
The form of a pragma Remote_Types is as follows:
3
pragma Remote_Types[(library_unit_name)];
Legality Rules
4
A remote types library unit is a library unit to which the pragma Remote_Types applies. The following restrictions apply to the declaration of such a library unit:
5
- it shall be preelaborable;
6
- it shall depend semantically only on declared pure, shared passive, or other remote types library units;
7
- it shall not contain the declaration of any variable within the visible part of the library unit;
8/2
- the full view of each type declared in the visible part of the library unit that has any available stream attributes shall support external streaming (see 13.13.2).
9/1
An access type declared in the visible part of a remote types or remote call interface library unit is called a remote access type. Such a type shall be:
9.1/1
- an access−to−subprogram type, or
9.2/1
- a general access type that designates a class−wide limited private type or a class−wide private type extension all of whose ancestors are either private type extensions or limited private types.
9.3/1
A type that is derived from a remote access type is also a remote access type.
10
The following restrictions apply to the use of a remote access−to−subprogram type:
11/2
- A value of a remote access−to−subprogram type shall be converted only to or from another (subtype−conformant) remote access−to−subprogram type;
12
- The prefix of an Access attribute_reference that yields a value of a remote access−to−subprogram type shall statically denote a (subtype−conformant) remote subprogram.
13
The following restrictions apply to the use of a remote access−to−class−wide type:
14/2
- The primitive subprograms of the corresponding specific limited private type shall only have access parameters if they are controlling formal parameters; each non−controlling formal parameter shall support external streaming (see 13.13.2);
15
- A value of a remote access−to−class−wide type shall be explicitly converted only to another remote access−to−class−wide type;
16/1
- A value of a remote access−to−class−wide type shall be dereferenced (or implicitly converted to an anonymous access type) only as part of a dispatching call where the value designates a controlling operand of the call (see E.4, "E.4 Remote Subprogram Calls").
17/2
- The Storage_Pool attribute is not defined for a remote access−to−class−wide type; the expected type for an allocator shall not be a remote access−to−class−wide type. A remote access−to−class−wide type shall not be an actual parameter for a generic formal access type. The Storage_Size attribute of a remote access−to−class−wide type yields 0; it is not allowed in an attribute_definition_clause.
NOTES
18
5 A remote types library unit need not be pure, and the types it defines may include levels of indirection implemented by using access types. User−specified Read and Write attributes (see 13.13.2) provide for sending values of such a type between active partitions, with Write marshalling the representation, and Read unmarshalling any levels of indirection.