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.
2 slice ::= prefix(discrete_range)
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.
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.
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.
NOTES
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 Proof: Slices are not aliased, by 3.10, “Access Types”.
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.
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