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.
2
selected_component::= prefix . selector_name
3
selector_name::= identifier | character_literal | operator_symbol
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
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.
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.
16
Examples of selected components:
17/2
Tomorrow.Month −− a record component (see 3.8)
Next_Car.Owner −− a record component (see 3.10.1)
Next_Car.Owner.Age −− a record component (see 3.10.1)
−− the previous two lines involve implicit dereferences
Writer.Unit −− a record component (a discriminant) (see 3.8.1)
Min_Cell(H).Value −− a record component of the result (see 6.1)
−− of the function call Min_Cell(H)
Cashier.Append −− a prefixed view of a procedure (see 3.9.4)
Control.Seize −− an entry of a 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 a package (see 7.3.1)
Dot_Product.Sum −− a variable declared in a function body (see 6.1)
Buffer.Pool −− a variable declared in a protected unit (see 9.11)
Buffer.Read −− an entry of a protected unit (see 9.11)
Swap.Temp −− a variable declared in a block statement (see 5.6)
Standard.Boolean −− the name of a predefined type (see A.1)