E.2.2 Remote Types Library Units

From OC Systems Wiki!
< Guide:95lrm
Revision as of 23:13, 1 May 2019 by imported>WikiVisor
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

A remote types library unit supports the definition of types intended for use in communication between active partitions.

Syntax

The form of a pragma Remote_Types is as follows:

pragma Remote_Types[(library_unit_name)];

Legality Rules

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:

  • it shall be preelaborable;
  • it shall depend semantically only on declared pure, shared passive, or other remote types library units;
  • it shall not contain the declaration of any variable within the visible part of the library unit;
  • if the full view of a type declared in the visible part of the library unit has a part that is of a non-remote access type, then that access type, or the type of some part that includes the access type subcomponent, shall have user-specified Read and Write attributes.

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:

  • an access-to-subprogram type, or
  • 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.

A type that is derived from a remote access type is also a remote access type.

The following restrictions apply to the use of a remote access-to-subprogram type:

  • A value of a remote access-to-subprogram type shall be converted only to another (subtype-conformant) remote access-to-subprogram type;
  • 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.

The following restrictions apply to the use of a remote access-to-class-wide type:

  • 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 have either a nonlimited type or a type with Read and Write attributes specified via an attribute_definition_clause;
  • A value of a remote access-to-class-wide type shall be explicitly converted only to another remote access-to-class-wide type;
  • 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, Remote Subprogram Calls).
  • The Storage_Pool and Storage_Size attributes are not defined for remote access-to-class-wide types; 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.

Notes

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.

Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc. Ada Reference Manual