Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help


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)
(10)
An expanded name shall resolve to denote a declaration that occurs immediately within a named declarative region, as follows:
(11)
(12)
(13)
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)
         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)
         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)

Prev | Up | Next | Back | Forward
TOC -- / --.-- / --.--.-- | Index | Search | Syntax | Help

Ada WWW Home -- Email comments, additions, corrections, gripes, kudos, etc. to:

Magnus Kempe -- Magnus.Kempe@di.epfl.ch
Copyright statement
Page last generated: 95-03-12