Contents Index Search Previous Next
3.3 Objects and Named Numbers
1
Objects are created at run time and contain a
value of a given type.
An object can be created and
initialized as part of elaborating a declaration, evaluating an
allocator,
aggregate, or
function_call,
or passing a parameter by copy. Prior to reclaiming the storage for an
object, it is finalized if necessary (see
7.6.1).
Static Semantics
2
All
of the following are objects:
3
- the entity declared by an object_declaration;
4
- a formal parameter of a subprogram,
entry, or generic subprogram;
5
6
7
- a choice parameter of an exception_handler;
8
- an entry index of an entry_body;
9
- the result of dereferencing an access-to-object
value (see 4.1);
10
- the result of evaluating a function_call
(or the equivalent operator invocation -- see 6.6);
11
- the result of evaluating an aggregate;
12
- a component, slice, or view conversion
of another object.
13
An
object is either a
constant object or a
variable object.
The value of a constant object cannot be changed between its initialization
and its finalization, whereas the value of a variable object can be changed.
Similarly, a view of an object is either a
constant or a
variable.
All views of a constant object are constant. A constant view of a variable
object cannot be used to modify the value of the variable. The terms
constant and variable by themselves refer to constant and variable views
of objects.
14
The value of an object is
read when the value of any part of the object is evaluated, or
when the value of an enclosing object is evaluated.
The
value of a variable is
updated when an assignment is performed
to any part of the variable, or when an assignment is performed to an
enclosing object.
15
Whether a view
of an object is constant or variable is determined by the definition
of the view. The following (and no others) represent constants:
16
- an object declared by an object_declaration
with the reserved word constant;
17
- a formal parameter or generic formal
object of mode in;
18
19
- a loop parameter, choice parameter,
or entry index;
20
- the dereference of an access-to-constant
value;
21
- the result of evaluating a function_call
or an aggregate;
22
- a selected_component,
indexed_component, slice,
or view conversion of a constant.
23
At the place where a view
of an object is defined, a
nominal subtype is associated with
the view.
The object's
actual
subtype (that is, its subtype) can be more restrictive than the nominal
subtype of the view; it always is if the nominal subtype is an
indefinite
subtype.
A subtype is an
indefinite subtype if it is an unconstrained array subtype, or if it
has unknown discriminants or unconstrained discriminants without defaults
(see
3.7); otherwise the subtype is a
definite
subtype (all elementary subtypes are definite subtypes). A class-wide
subtype is defined to have unknown discriminants, and is therefore an
indefinite subtype. An indefinite subtype does not by itself provide
enough information to create an object; an additional
constraint
or explicit initialization
expression
is necessary (see
3.3.1). A component cannot
have an indefinite nominal subtype.
24
A
named number provides
a name for a numeric value known at compile time. It is declared by a
number_declaration.
25
5 A constant cannot be
the target of an assignment operation, nor be passed as an in
out or out parameter, between its initialization and finalization,
if any.
26
6 The nominal and actual
subtypes of an elementary object are always the same. For a discriminated
or array object, if the nominal subtype is constrained then so is the
actual subtype.
Contents Index Search Previous Next Legal