Contents Index Search Previous Next
4.1.2 Slices
1
[
{array slice} A
slice denotes a one-dimensional
array formed by a sequence of consecutive components of a one-dimensional
array. A
slice of a variable is
a variable; a
slice of a constant
is a constant;] a
slice of a value
is a value.
Syntax
2
slice
::= prefix(
discrete_range)
Name Resolution Rules
3
The prefix
of a slice shall resolve to denote
a one-dimensional array (after any implicit dereference).
4
{expected type (slice discrete_range)
[partial]} The expected type for the
discrete_range
of a
slice is the index type of
the array type.
Static Semantics
5
A slice denotes
a one-dimensional array formed by the sequence of consecutive components
of the array denoted by the prefix,
corresponding to the range of values of the index given by the discrete_range.
6
The type of the slice
is that of the prefix. Its bounds
are those defined by the discrete_range.
Dynamic Semantics
7
{evaluation (slice) [partial]}
For the evaluation of a
slice,
the
prefix and the
discrete_range
are evaluated in an arbitrary order.
{Index_Check
[partial]} {check, language-defined
(Index_Check)} {null
slice} If the
slice
is not a
null slice (a
slice
where the
discrete_range is a null
range), then a check is made that the bounds of the
discrete_range
belong to the index range of the array denoted by the
prefix.
{Constraint_Error (raised by failure of run-time check)}
Constraint_Error is raised if this check fails.
8
2 A slice
is not permitted as the prefix of
an Access attribute_reference, even
if the components or the array as a whole are aliased. See 3.10.2.
8.a
8.b
Reason: This is to ease
implementation of general-access-to-array. If slices were aliased, implementations
would need to store array dope with the access values, which is not always
desirable given access-to-incomplete types completed in a package body.
9
3 For a one-dimensional
array A, the slice A(N .. N) denotes
an array that has only one component; its type is the type of A. On the
other hand, A(N) denotes a component of the array A and has the corresponding
component type.
Examples
10
Examples of
slices:
11
Stars(1 .. 15) -- a slice of 15 characters (see 3.6.3)
Page(10 .. 10 + Size) -- a slice of 1 + Size components (see 3.6)
Page(L)(A .. B) -- a slice of the array Page(L) (see 3.6)
Stars(1 .. 0) -- a null slice (see 3.6.3)
My_Schedule(Weekday) -- bounds given by subtype (see 3.6.1 and 3.5.1)
Stars(5 .. 15)(K) -- same as Stars(K) (see 3.6.3)
-- provided that K is in 5 .. 15
Contents Index Search Previous Next Legal