Next: , Previous: 4.1.2, Up: 4.1


4.1.3 Selected Components

1
Selected_components are used to denote components (including discriminants), entries, entry families, and protected subprograms; they are also used as expanded names as described below.

Syntax

2

selected_component::= prefix selector_name

3

selector_name::= identifier character_literal operator_symbol
Name Resolution Rules

4
A selected_component is called an expanded name if, according to the visibility rules, at least one possible interpretation of its prefix denotes a package or an enclosing named construct (directly, not through a subprogram_renaming_declaration or generic_renaming_declaration).

5
A selected_component that is not an expanded name shall resolve to denote one of the following:

6

7

8

9

9.1/2

9.2/2

10
An expanded name shall resolve to denote a declaration that occurs immediately within a named declarative region, as follows:

11

12

13

Legality Rules

13.1/2
For a subprogram whose first parameter is an access parameter, the prefix of any prefixed view shall denote an aliased view of an object.

13.2/2
For a subprogram whose first parameter is of mode in out or out, or of an anonymous access−to−variable type, the prefix of any prefixed view shall denote a variable.

Dynamic Semantics

14
The evaluation of a selected_component includes the evaluation of the prefix.

15
For a selected_component that denotes a component of a variant, a check is made that the values of the discriminants are such that the value or object denoted by the prefix has this component. The exception Constraint_Error is raised if this check fails.

Examples

16
Examples of selected components:

17/2

       Tomorrow.Month     −−  record component    (see 3.8)
       Next_Car.Owner     −−  record component    (see 3.10.1)
       Next_Car.Owner.Age −−  record component    (see 3.10.1)
                          −−  the previous two lines involve implicit dereferences
       Writer.Unit        −−  record component (a discriminant)    (see 3.8.1)
       Min_Cell(H).Value  −−  record component of the result    (see 6.1)
                          −−  of the function call Min_Cell(H)
       Cashier.Append     −−  prefixed view of procedure    (see 3.9.4)
       Control.Seize      −−  an entry of protected object    (see 9.4)
       Pool(K).Write      −−  an entry of the task Pool(K)    (see 9.4)

18
Examples of expanded names:

19

       Key_Manager."<"      −−  an operator of the visible part of package    (see 7.3.1)
       Dot_Product.Sum      −−  variable declared in function body    (see 6.1)
       Buffer.Pool          −−  variable declared in protected unit    (see 9.11)
       Buffer.Read          −−  an entry of protected unit    (see 9.11)
       Swap.Temp            −−  variable declared in block statement    (see 5.6)
       Standard.Boolean     −−  the name of predefined type    (see A.1)