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


4.1 Names -- TOC

(1)
Names can denote declared entities, whether declared explicitly or implicitly (see 3.1). Names can also denote objects or subprograms designated by access values; the results of type_conversions or function_calls; subcomponents and slices of objects and values; protected subprograms, single entries, entry families, and entries in families of entries. Finally, names can denote attributes of any of the foregoing.
Syntax
(2)
       name ::=
            direct_name                | explicit_dereference
          | indexed_component          | slice
          | selected_component         | attribute_reference
          | type_conversion            | function_call
          | character_literal
(3)
       direct_name ::= identifier | operator_symbol
(4)
       prefix ::= name | implicit_dereference
(5)
       explicit_dereference ::= name.all
(6)
       implicit_dereference ::= name
(7)
Certain forms of name (indexed_components, selected_components, slices, and attributes) include a prefix that is either itself a name that denotes some related entity, or an implicit_dereference of an access value that designates some related entity.
Name Resolution Rules
(8)
The name in a dereference (either an implicit_dereference or an explicit_dereference) is expected to be of any access type.
Static Semantics
(9)
If the type of the name in a dereference is some access-to-object type T, then the dereference denotes a view of an object, the nominal subtype of the view being the designated subtype of T.
(10)
If the type of the name in a dereference is some access-to-subprogram type S, then the dereference denotes a view of a subprogram, the profile of the view being the designated profile of S.
Dynamic Semantics
(11)
The evaluation of a name determines the entity denoted by the name. This evaluation has no other effect for a name that is a direct_name or a character_literal.
(12)
The evaluation of a name that has a prefix includes the evaluation of the prefix. The evaluation of a prefix consists of the evaluation of the name or the implicit_dereference. The prefix denotes the entity denoted by the name or the implicit_dereference.
(13)
The evaluation of a dereference consists of the evaluation of the name and the determination of the object or subprogram that is designated by the value of the name. A check is made that the value of the name is not the null access value. Constraint_Error is raised if this check fails. The dereference denotes the object or subprogram designated by the value of the name.
Examples
(14)
Examples of direct names:
(15)
       Pi             -- the direct name of a number                  (see 3.3.2)
       Limit          -- the direct name of a constant                (see 3.3.1)
       Count          -- the direct name of a scalar variable         (see 3.3.1)
       Board          -- the direct name of an array variable         (see 3.6.1)
       Matrix         -- the direct name of a type                    (see 3.6)
       Random         -- the direct name of a function                (see 6.1)
       Error          -- the direct name of an exception              (see 11.1)
(16)
Examples of dereferences:
(17)
       Next_Car.all         --  explicit dereference denoting the object designated by
                            --  the access variable Next_Car (see 3.10.1)
       Next_Car.Owner       --  selected component with implicit dereference;
                            --  same as Next_Car.all.Owner

Subclauses

  1. Indexed Components
  2. Slices
  3. Selected Components
  4. Attributes


____ | 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