1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>AARM95 - Slices</TITLE>
<META NAME="Author" CONTENT="JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor">
<META NAME="GENERATOR" CONTENT="Arm_Form.Exe, Ada Reference Manual generator">
<STYLE type="text/css">
DIV.paranum {position: absolute; font-family: Arial, Helvetica, sans-serif; left: 0.5 em; top: auto}
TT {font-family: "Courier New", monospace}
DT {display: compact}
DIV.Normal {font-family: "Times New Roman", Times, serif; margin-bottom: 0.6em}
DIV.Wide {font-family: "Times New Roman", Times, serif; margin-top: 0.6em; margin-bottom: 0.6em}
DIV.Annotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
DIV.WideAnnotations {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0.6em; margin-bottom: 0.6em}
DIV.Index {font-family: "Times New Roman", Times, serif}
DIV.SyntaxSummary {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
DIV.Notes {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.6em}
DIV.NotesHeader {font-family: "Times New Roman", Times, serif; margin-left: 2.0em}
DIV.SyntaxIndented {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-bottom: 0.4em}
DIV.Indented {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-bottom: 0.6em}
DIV.CodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-bottom: 0.6em}
DIV.SmallIndented {font-family: "Times New Roman", Times, serif; margin-left: 10.0em; margin-bottom: 0.6em}
DIV.SmallCodeIndented {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-bottom: 0.6em}
DIV.Examples {font-family: "Courier New", monospace; margin-left: 2.0em; margin-bottom: 0.6em}
DIV.SmallExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 7.5em; margin-bottom: 0.6em}
DIV.IndentedExamples {font-family: "Courier New", monospace; margin-left: 8.0em; margin-bottom: 0.6em}
DIV.SmallIndentedExamples {font-family: "Courier New", monospace; font-size: 80%; margin-left: 15.0em; margin-bottom: 0.6em}
UL.Bulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SmallBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SmallNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.IndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.CodeIndentedNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-right: 8.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.SyntaxIndentedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesBulleted {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
UL.NotesNestedBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
DL.Hanging {font-family: "Times New Roman", Times, serif; margin-top: 0em; margin-bottom: 0.6em}
DD.Hanging {margin-left: 6.0em}
DL.IndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.IndentedHanging {margin-left: 2.0em}
DL.HangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.HangingInBulleted {margin-left: 4.0em}
DL.SmallHanging {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.SmallHanging {margin-left: 7.5em}
DL.SmallIndentedHanging {font-family: "Times New Roman", Times, serif; margin-left: 8.0em; margin-top: 0em; margin-bottom: 0.6em}
DD.SmallIndentedHanging {margin-left: 2.0em}
DL.SmallHangingInBulleted {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.SmallHangingInBulleted {margin-left: 5.0em}
DL.Enumerated {font-family: "Times New Roman", Times, serif; margin-right: 0.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.Enumerated {margin-left: 2.0em}
DL.SmallEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 4.0em; margin-right: 4.0em; margin-top: 0em; margin-bottom: 0.5em}
DD.SmallEnumerated {margin-left: 2.5em}
DL.NestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 2.0em; margin-right: 2.0em; margin-top: 0em; margin-bottom: 0.5em}
DL.SmallNestedEnumerated {font-family: "Times New Roman", Times, serif; margin-left: 6.0em; margin-right: 6.0em; margin-top: 0em; margin-bottom: 0.5em}
</STYLE>
</HEAD>
<BODY TEXT="#000000" BGCOLOR="#FFFFF0" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-4-1-1.html">Previous</A> <A HREF="AA-4-1-3.html">Next</A></P>
<HR>
<H1> 4.1.2 Slices</H1>
<DIV Class="Paranum"><FONT SIZE=-2>1</FONT></DIV>
<DIV Class="Normal"> [<A NAME="I2295"></A> A <FONT FACE="Arial, Helvetica">slice</FONT>
denotes a one-dimensional array formed by a sequence of consecutive components
of a one-dimensional array. A <FONT FACE="Arial, Helvetica">slice</FONT>
of a variable is a variable; a <FONT FACE="Arial, Helvetica">slice</FONT>
of a constant is a constant;] a <FONT FACE="Arial, Helvetica">slice</FONT>
of a value is a value. </DIV>
<H4 ALIGN=CENTER>Syntax</H4>
<DIV Class="Paranum"><FONT SIZE=-2>2</FONT></DIV>
<DIV Class="SyntaxIndented"><FONT FACE="Arial, Helvetica">slice<A NAME="I2296"></A>
::= </FONT><A NAME="I2297"></A><FONT FACE="Arial, Helvetica">prefix</FONT>(<A NAME="I2298"></A><FONT FACE="Arial, Helvetica">discrete_range</FONT>)</DIV>
<H4 ALIGN=CENTER>Name Resolution Rules</H4>
<DIV Class="Paranum"><FONT SIZE=-2>3</FONT></DIV>
<DIV Class="Normal"> The <FONT FACE="Arial, Helvetica">prefix</FONT>
of a <FONT FACE="Arial, Helvetica">slice</FONT> shall resolve to denote
a one-dimensional array (after any implicit dereference).</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>4</FONT></DIV>
<DIV Class="Normal"> <A NAME="I2299"></A>The expected type for the
<FONT FACE="Arial, Helvetica">discrete_range</FONT> of a <FONT FACE="Arial, Helvetica">slice</FONT>
is the index type of the array type. </DIV>
<H4 ALIGN=CENTER>Static Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>5</FONT></DIV>
<DIV Class="Normal"> A <FONT FACE="Arial, Helvetica">slice</FONT> denotes
a one-dimensional array formed by the sequence of consecutive components
of the array denoted by the <FONT FACE="Arial, Helvetica">prefix</FONT>,
corresponding to the range of values of the index given by the <FONT FACE="Arial, Helvetica">discrete_range</FONT>.</DIV>
<DIV Class="Paranum"><FONT SIZE=-2>6</FONT></DIV>
<DIV Class="Normal"> The type of the <FONT FACE="Arial, Helvetica">slice</FONT>
is that of the <FONT FACE="Arial, Helvetica">prefix</FONT>. Its bounds
are those defined by the <FONT FACE="Arial, Helvetica">discrete_range</FONT>.</DIV>
<H4 ALIGN=CENTER>Dynamic Semantics</H4>
<DIV Class="Paranum"><FONT SIZE=-2>7</FONT></DIV>
<DIV Class="Normal"> <A NAME="I2300"></A>For the evaluation of a <FONT FACE="Arial, Helvetica">slice</FONT>,
the <FONT FACE="Arial, Helvetica">prefix</FONT> and the <FONT FACE="Arial, Helvetica">discrete_range</FONT>
are evaluated in an arbitrary order. <A NAME="I2301"></A><A NAME="I2302"></A><A NAME="I2303"></A>If
the <FONT FACE="Arial, Helvetica">slice</FONT> is not a <I>null slice</I>
(a <FONT FACE="Arial, Helvetica">slice</FONT> where the <FONT FACE="Arial, Helvetica">discrete_range</FONT>
is a null range), then a check is made that the bounds of the <FONT FACE="Arial, Helvetica">discrete_range</FONT>
belong to the index range of the array denoted by the <FONT FACE="Arial, Helvetica">prefix</FONT>.
<A NAME="I2304"></A>Constraint_Error is raised if this check fails.</DIV>
<DIV Class="NotesHeader"><FONT SIZE=-1>NOTES</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>2 A <FONT FACE="Arial, Helvetica">slice</FONT>
is not permitted as the <FONT FACE="Arial, Helvetica">prefix</FONT> of
an Access <FONT FACE="Arial, Helvetica">attribute_reference</FONT>, even
if the components or the array as a whole are aliased. See <A HREF="AA-3-10-2.html">3.10.2</A>.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.a</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Proof: </B>Slices are not aliased,
by <A HREF="AA-3-10.html">3.10</A>, ``<A HREF="AA-3-10.html">Access Types</A>''.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>8.b</FONT></DIV>
<DIV Class="Annotations"><FONT SIZE=-1><B>Reason: </B>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.
</FONT></DIV>
<DIV Class="Paranum"><FONT SIZE=-2>9</FONT></DIV>
<DIV Class="Notes"><FONT SIZE=-1>3 For a one-dimensional array
A, the <FONT FACE="Arial, Helvetica">slice</FONT> 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. </FONT></DIV>
<H4 ALIGN=CENTER>Examples</H4>
<DIV Class="Paranum"><FONT SIZE=-2>10</FONT></DIV>
<DIV Class="Normal" Style="margin-bottom: 0.4em"> <I>Examples of
slices:</I> </DIV>
<DIV Class="Paranum"><FONT SIZE=-2>11</FONT></DIV>
<DIV Class="Examples"><TT> Stars(1 .. 15) <I>-- a slice of 15 characters (see <A HREF="AA-3-6-3.html">3.6.3</A>)</I><BR>
Page(10 .. 10 + Size) <I>-- a slice of 1 + Size components (see <A HREF="AA-3-6.html">3.6</A>)</I><BR>
Page(L)(A .. B) <I>-- a slice of the array Page(L) (see <A HREF="AA-3-6.html">3.6</A>)</I><BR>
Stars(1 .. 0) <I>-- a null slice (see <A HREF="AA-3-6-3.html">3.6.3</A>)</I><BR>
My_Schedule(Weekday) <I>-- bounds given by subtype (see <A HREF="AA-3-6-1.html">3.6.1</A> and <A HREF="AA-3-5-1.html">3.5.1</A>)</I><BR>
Stars(5 .. 15)(K) <I>-- same as Stars(K) (see <A HREF="AA-3-6-3.html">3.6.3</A>)</I><BR>
<I>-- provided that K is in 5 .. 15</I></TT></DIV>
<HR>
<P><A HREF="AA-TOC.html">Contents</A> <A HREF="AA-0-29.html">Index</A> <A HREF="AA-4-1-1.html">Previous</A> <A HREF="AA-4-1-3.html">Next</A> <A HREF="AA-TTL.html">Legal</A></P>
</BODY>
</HTML>
|