Contents Index Search Previous Next
4.1 Names
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
Contents Index Search Previous Next Legal