CVS difference for ai22s/ai22-0024-1.html

Differences between 1.4 and version 1.5
Log of other versions for file ai22s/ai22-0024-1.html

--- ai22s/ai22-0024-1.html	2022/11/18 05:01:40	1.4
+++ ai22s/ai22-0024-1.html	2023/02/02 05:32:26	1.5
@@ -1,12 +1,12 @@
-<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0024-1/05</title>
+<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0024-1/06</title>
 <style type="text/css">
 table td,table th{padding:0}
-.c14{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:0pt;border-right-width:0pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:0pt;border-top-style:solid;background-c
olor:#f0f0f0;border-left-style:solid;border-bottom-width:0pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}
-.c25{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}
-.c32{border-spacing:0;border-collapse:collapse;margin-right:auto}
-.c33{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}
+.c12{border-right-style:solid;padding:5pt 5pt 5pt 5pt;border-bottom-color:#000000;border-top-width:0pt;border-right-width:0pt;border-left-color:#000000;vertical-align:top;border-right-color:#000000;border-left-width:0pt;border-top-style:solid;background-c
olor:#f0f0f0;border-left-style:solid;border-bottom-width:0pt;width:468pt;border-top-color:#000000;border-bottom-style:solid}
+.c27{border-spacing:0;border-collapse:collapse;margin-right:auto}
+.c11{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}
+.c32{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}
 .c9{color:inherit;text-decoration:inherit}
-.c11{height:0pt}
+.c0{height:0pt}
 P.head{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:0pt; color:#000000; font-size:14pt; padding-bottom:0pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; orphans:2; widows:2; text-align:left; font-weight:
400; text-decoration:none; vertical-align:baseline; font-style:normal}
 H2.head{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:12pt; color:#000000; font-size:14pt; padding-bottom:6pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; page-break-after:avoid; orphans:2; widows:2; tex
t-align:left; font-weight:400; text-decoration:none; vertical-align:baseline; font-style:normal}
 P.inst{margin-bottom:0; margin-top:0; margin-left:18pt; margin-right:0; padding-top:9pt; color:#000000; font-size:12pt; padding-bottom:6pt; font-family:"Arial","Liberation Sans",sans-serif;line-height:1.15; orphans:2; widows:2; text-align:left; font-weigh
t:400; text-decoration:none; vertical-align:baseline; font-style:normal}
@@ -18,18 +18,20 @@
 P.txts{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:0pt; color:#000000; font-size:11pt; padding-bottom:11pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; text-align:left; font-weight:400; text-decoration
:none; vertical-align:baseline; font-style:normal}
 UL.bull{margin-bottom:0; margin-top:0; margin-left:12pt; margin-right:0; padding-top:0pt; color:#000000; font-size:11pt; padding-bottom:3pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15;text-align:left; font-weight:400; text-decorati
on:none; vertical-align:baseline; font-style:normal; list-style: disc outside}
 UL.blts{margin-bottom:0; margin-top:0; margin-left:12pt; margin-right:0; padding-top:0pt; color:#000000; font-size:11pt; padding-bottom:12pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15;text-align:left; font-weight:400; text-decorat
ion:none; vertical-align:baseline; font-style:normal; list-style: disc outside}
+UL.buli{margin-bottom:0; margin-top:0; margin-left:36pt; margin-right:0; padding-top:0pt; color:#000000; font-size:11pt; padding-bottom:3pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15;text-align:left; font-weight:400; text-decorati
on:none; vertical-align:baseline; font-style:normal; list-style: disc outside}
 P.from{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:0pt; color:#000000; font-size:10pt; padding-bottom:0pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; orphans:2; widows:2; text-align:left; font-weight:
400; text-decoration:none; vertical-align:baseline; font-style:none}
 P.time{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0; padding-top:0pt; color:#000000; font-size:9pt; padding-bottom:9pt; font-family:"Arial","Liberation Sans",sans-serif; line-height:1.15; orphans:2; widows:2; text-align:left; font-weight:4
00; text-decoration:none; vertical-align:baseline; font-style:italic}
 SPAN.name{font-family:"Lucida Calligraphy",cursive; font-style:normal}
-SPAN.ins{color:#005500}
+SPAN.ins{color:#008800}
 SPAN.ntrm{font-family:"Arial","Liberation Sans",sans-serif}
-P.a4{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0;color:#000000;font-size:26pt;font-family:"Arial","Liberation Sans",sans-serif; padding-top:0pt; padding-bottom:3pt; line-height:1.15; page-break-after:avoid; orphans:2; widows:2; text-align
:left; font-weight:400; text-decoration:none; vertical-align:baseline; font-style:normal}
-SPAN.a34{text-decoration-skip-ink:none; -webkit-text-decoration-skip:none; color:#1155cc; text-decoration:underline}
+P.a4{margin-bottom:0; margin-top:0; margin-left:0; margin-right:0;color:#000000;font-size:26pt;font-family:"Arial","Liberation Sans",sans-serif; orphans:2; widows:2; padding-top:0pt; padding-bottom:3pt; line-height:1.15; page-break-after:avoid; text-align
:left; font-weight:400; text-decoration:none; vertical-align:baseline; font-style:normal}
+SPAN.a35{text-decoration-skip-ink:none; -webkit-text-decoration-skip:none; color:#1155cc; text-decoration:underline}
 </style>
-</head><body class="c33 doc-content"><p class="a4">AI22-0024-1</p>
-<p class="head">!standard 3.9.3(7/5) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;22-11-17 &nbsp;AI22-0024-1/05</p>
-<p class="head">!standard 4.1.3(9.2/3)</p>
+</head><body class="c32 doc-content"><p class="a4">AI22-0024-1</p>
+<p class="head">!standard 4.1.3(9.2/3) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;23-02-01
+&nbsp;AI22-0024-1/06</p>
+<p class="head">!standard 6.4(9.1/5)</p>
 <p class="head">!class binding interpretation 22-01-20</p>
 <p class="head">!status Corrigendum 1-2022 &nbsp;22-09-09</p>
 <p class="head">!status ARG Approved &nbsp;8-0-1 &nbsp;22-09-09</p>
@@ -40,46 +42,46 @@
 <p class="head">!qualifier Clarification</p>
 <p class="head">!subject Abstract prefixed views</p>
 <h2 class="head">!summary</h2>
-<p class="txts">If the prefix is class-wide and controlling, all other controlling parameters
-become class-wide in the profile of the renaming of the prefixed view; the subprogram is not
-abstract even if the original one was, and a call on the renaming is equivalent to making a
-dispatching call on the underlying subprogram, implying a Tag_Check if there are multiple
-controlling parameters. &nbsp;Otherwise, the renaming of the prefixed view is illegal if the
-original subprogram is abstract.</p>
+<p class="txts">If a prefix is class-wide and controlling, all other controlling parameters become
+class-wide in the profile of the renaming of a prefixed view; the subprogram is not abstract even
+if the original one was, and a call on the renaming is equivalent to making a dispatching call on
+the underlying subprogram, implying a Tag_Check if there are multiple controlling parameters.
+&nbsp;Otherwise, the renaming of the prefixed view is illegal if the original subprogram is
+abstract.</p>
 
 <p class="text">When renaming a prefixed view with a tag-indeterminate prefix, the prefix is always
-interpreted as being statically tagged, and will be illegal if the type is abstract.</p>
+interpreted as being statically tagged, and is illegal if the type is abstract.</p>
 <h2 class="head">!issue</h2>
 <p class="text">Following is a distillation of another ACATS test that gets different results </p>
 <p class="text">in different Ada 2012 compilers:</p>
-<a id="t.0539a8d78e6c3da25e277d06a9eed551b6241ac7"></a><a id="t.0"></a><table class="c32"><tr class="c11"></tr></table><p class="text">&nbsp;</p>
-<a id="t.0a83fcf6f0060650be3d1940649573282238d897"></a><a id="t.1"></a><table class="c32"><tr class="c11"><td class="c14">
+<a id="t.0539a8d78e6c3da25e277d06a9eed551b6241ac7"></a><a id="t.0"></a><table class="c27"><tr class="c0"></tr></table><p class="text">&nbsp;</p>
+<a id="t.0a83fcf6f0060650be3d1940649573282238d897"></a><a id="t.1"></a><table class="c27"><tr class="c0"><td class="c12">
 <p class="codt"><b>procedure</b> B950001 <b>is</b><br>
- &nbsp; <b>package</b> Nested <b>is</b><br>
- &nbsp; &nbsp; &nbsp;<b>type</b> Intf <b>is</b> <b>synchronized</b> <b>interface</b>;<br>
- &nbsp; &nbsp; &nbsp;<b>procedure</b> PEN1 (Param : <b>in</b> <b>out</b> Intf) <b>is</b>
+&nbsp; &nbsp;<b>package</b> Nested <b>is</b><br>
+&nbsp; &nbsp; &nbsp; <b>type</b> Intf <b>is</b> <b>synchronized</b> <b>interface</b>;<br>
+&nbsp; &nbsp; &nbsp; <b>procedure</b> PEN1 (Param : <b>in</b> <b>out</b> Intf) <b>is</b>
 <b>abstract</b><br>
- &nbsp; &nbsp; &nbsp; &nbsp; <b>with</b> Synchronization =&gt; By_Entry;<br>
- &nbsp; <b>end</b> Nested;<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<b>with</b> Synchronization =&gt; By_Entry;<br>
+&nbsp; &nbsp;<b>end</b> Nested;<br>
 <br>
- &nbsp; <b>generic</b><br>
- &nbsp; &nbsp; &nbsp;<b>with</b> <b>procedure</b> P;<br>
- &nbsp; package Gen1 <b>is</b><br>
- &nbsp; &nbsp; &nbsp;Decl : Natural;<br>
- &nbsp; <b>end</b> Gen1;<br>
+&nbsp; &nbsp;<b>generic</b><br>
+&nbsp; &nbsp; &nbsp; <b>with</b> <b>procedure</b> P;<br>
+&nbsp; &nbsp;<b>package</b> Gen1 <b>is</b><br>
+&nbsp; &nbsp; &nbsp; Decl : Natural;<br>
+&nbsp; &nbsp;<b>end</b> Gen1;<br>
 <br>
- &nbsp; <b>procedure</b> Test (Intf_In_Parm : <b>in</b> Nested.Intf&#39;Class;<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Intf_In_Out_Parm : <b>in</b>
+&nbsp; &nbsp;<b>procedure</b> Test (Intf_In_Parm : <b>in</b> Nested.Intf&#39;Class;<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Intf_In_Out_Parm : <b>in</b>
 <b>out</b> Nested.Intf&#39;Class) <b>is</b><br>
- &nbsp; &nbsp; &nbsp;<b>package</b> GPE139 <b>is</b> <b>new</b> Gen1 (Intf_In_Parm.PEN1);<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- ERROR: Prefix is constant<br>
- &nbsp; &nbsp; &nbsp;<b>package</b> GPE149 <b>is</b> <b>new</b> Gen1 (Intf_In_Out_Parm.PEN1);<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- OK. Prefix is variable<br>
- &nbsp; <b>begin</b><br>
- &nbsp; &nbsp; &nbsp;null;<br>
- &nbsp; <b>end</b> Test;<br>
+&nbsp; &nbsp; &nbsp; <b>package</b> GPE139 <b>is</b> <b>new</b> Gen1 (Intf_In_Parm.PEN1);<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- ERROR: Prefix is constant<br>
+&nbsp; &nbsp; &nbsp; <b>package</b> GPE149 <b>is</b> <b>new</b> Gen1 (Intf_In_Out_Parm.PEN1);<br>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- OK. Prefix is variable<br>
+&nbsp; &nbsp;<b>begin</b><br>
+&nbsp; &nbsp; &nbsp; <b>null</b>;<br>
+&nbsp; &nbsp;<b>end</b> Test;<br>
 ...</p>
 </td></tr></table><p class="text">&nbsp;</p>
 <p class="txts">The test is trying to check legality of prefixes of prefixed views.</p>
@@ -94,7 +96,7 @@
 
 <p class="txts">The test also renames these calls:</p>
 
-<a id="t.99e97e28b61f37c8758585a612fac6cc328ca2d4"></a><a id="t.2"></a><table class="c32"><tr class="c11"><td class="c14">
+<a id="t.99e97e28b61f37c8758585a612fac6cc328ca2d4"></a><a id="t.2"></a><table class="c27"><tr class="c0"><td class="c12">
 <p class="codt"><b>procedure</b> RPE139 <b>renames</b> Intf_In_Parm.PEN1; &nbsp;-- ERROR: Prefix is
 constant<br>
 <b>procedure</b> RPE149 <b>renames</b> Intf_In_Out_Parm.PEN1; -- OK. Prefix is variable</p>
@@ -102,23 +104,23 @@
 <p class="text">Would a call on RPE149 be legal? (Yes)</p>
 <h2 class="head">!recommendation</h2>
 <p class="text">One situation in Ada that resembles this one is the case where a formal derived (or
-private) type is instantiated with a class-wide type. &nbsp;Here are the relevant rules, from RM
+private) type is instantiated with a class-wide type. &nbsp;Here are the relevant rules, from
 12.5.1(23.1/3-23.3/2):</p>
 <p class="word">In the case where a formal type has unknown discriminants, and the actual type is a
 class-wide type <i>T</i>&#39;Class:</p>
 <ul class="wbl"><li>For the purposes of defining the primitive operations of the formal type, each
 of the primitive operations of the actual type is considered to be a subprogram (with an intrinsic
 calling convention &mdash; see
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-3-1.html">6.3.1</a></span>)
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-3-1.html">6.3.1</a></span>)
 whose body consists of a dispatching call upon the corresponding operation of <i>T</i>, with its
 formal parameters as the actual parameters. If it is a function, the result of the dispatching call
 is returned.</li>
 <li>If the corresponding operation of <i>T</i> has no controlling formal parameters, then the
 controlling tag value is determined by the context of the call, according to the rules for
 tag-indeterminate calls (see
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-3-9-2.html">3.9.2</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-3-9-2.html">3.9.2</a></span>
 and
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-5-2.html">5.2</a></span>).
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-5-2.html">5.2</a></span>).
 In the case where the tag would be statically determined to be that of the formal type, the call
 raises Program_Error. If such a function is renamed, any call on the renaming raises
 Program_Error.</li>
@@ -129,29 +131,29 @@
 <p class="text">If we look at the current rules relating to prefixed views, we find that the
 profile of a prefixed view is defined in 4.1.3(9.2/3):</p>
 <p class="wrds">The
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
 denotes a view of this subprogram that omits the first formal parameter. This view is called a
 <i>prefixed view</i> of the subprogram, and the
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of the
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
 (after any implicit dereference) is called the <i>prefix</i> of the prefixed view.</p>
 
-<p class="text">&nbsp;The semantics of a call on a prefixed view are given in RM 6.4(9.1/5):</p>
+<p class="text">&nbsp;The semantics of a call on a prefixed view are given in 6.4(9.1/5):</p>
 <p class="wrds">If the
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
 or
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of a subprogram call denotes a prefixed view (see
-<span class="a34"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html">4.1.3</a></span>),
+<span class="a35"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html">4.1.3</a></span>),
 the subprogram call is equivalent to a call on the underlying subprogram, with the first actual
 parameter being provided by the
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of the prefixed view (or the Access attribute of this
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 if the first formal parameter is an access parameter), and the remaining actual parameters given by
 the
-<span class="c25"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-4.html#S0219">actual_parameter_part</a></span>,
+<span class="c11"><a class="c9" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-4.html#S0219">actual_parameter_part</a></span>,
 if any. </p>
 
 <p class="txts">This does not clarify the properties of a <i>renaming</i> of a prefixed view when
@@ -222,9 +224,9 @@
 <p class="txts">However, the existing rules do not provide a full description of the properties of
 the prefixed view itself. This matters when the prefixed view is renamed or used as the actual for
 a generic formal subprogram. In particular, is the renamed prefixed view still abstract even if the
-prefixed view represents part of a dispatching call? This AI attempts to answer by adding rules
-that define the properties of a renaming (and equivalent situation with generic instantiation),
-distinct from the rules for a &quot;direct&quot; call on a prefixed view.</p>
+prefixed view represents part of a dispatching call? This AI answers this by adding rules that
+define the properties of a renaming (and equivalent situation with generic instantiation), distinct
+from the rules for a &quot;direct&quot; call on a prefixed view.</p>
 
 <p class="txts">To remain compatible with the existing rules for a direct call on a prefixed view
 (rather than through a renaming or generic instantiation), it seems important to continue to define
@@ -241,7 +243,7 @@
 <ul class="bull"><li>In the case where there the first parameter of the underlying abstract
 subprogram is the only controlling parameter, then there are two cases:</li>
 </ul>
-<ul class="bull"><li>if the type of the prefix is class-wide, a call would be a legal dispatching
+<ul class="buli"><li>if the type of the prefix is class-wide, a call would be a legal dispatching
 call and the other parameters (if any) have no effect on that. So in this case, we should allow the
 prefixed view to be created, and it should not be abstract, and it should <i>always</i> do a
 dispatching call &quot;internally&quot;.</li>
@@ -268,58 +270,60 @@
 
 <p class="txts">It might help to look at an example:</p>
 
-<a id="t.6eb1b62e67134fed732e2319eb5d650e67ac3f6d"></a><a id="t.3"></a><table class="c32"><tr class="c11"><td class="c14">
+<a id="t.6eb1b62e67134fed732e2319eb5d650e67ac3f6d"></a><a id="t.3"></a><table class="c27"><tr class="c0"><td class="c12">
 <p class="codt"><b>package</b> P1 <b>is</b><br>
- &nbsp; <b>type</b> Intf <b>is</b> <b>interface</b>;<br>
- &nbsp; <b>function</b> F1 (A : <b>in</b> Intf; B : <b>in</b> Natural)<br>
- &nbsp; &nbsp; &nbsp;<b>return</b> Boolean <b>is</b> <b>abstract</b>;<br>
- &nbsp; <b>function</b> F2 (A : <b>in</b> Intf&#39;Class; B : <b>in</b> Intf)<br>
- &nbsp; &nbsp; &nbsp;<b>return</b> Boolean <b>is</b> <b>abstract</b>;<br>
- &nbsp; <b>function</b> F3 (A, B : <b>in</b> Intf) <b>return</b> Boolean <b>is</b>
+&nbsp; &nbsp;<b>type</b> Intf <b>is</b> <b>interface</b>;<br>
+&nbsp; &nbsp;<b>function</b> F1 (A : <b>in</b> Intf; B : <b>in</b> Natural)<br>
+&nbsp; &nbsp; &nbsp; <b>return</b> Boolean <b>is</b> <b>abstract</b>;<br>
+&nbsp; &nbsp;<b>function</b> F2 (A : <b>in</b> Intf&#39;Class; B : <b>in</b> Intf)<br>
+&nbsp; &nbsp; &nbsp; <b>return</b> Boolean <b>is</b> <b>abstract</b>;<br>
+&nbsp; &nbsp;<b>function</b> F3 (A, B : <b>in</b> Intf) <b>return</b> Boolean <b>is</b>
 <b>abstract</b>;</p>
 <p class="codt">&nbsp; &nbsp; &nbsp; -- Obj.F3(Other_Obj) is equivalent to F3(Obj, Other_Obj).<br>
 <b>end</b> P1;<br>
 <br>
 <b>procedure</b> Test (Obj : <b>in</b> P1.Intf&#39;Class; Val : <b>in</b> Natural) <b>is</b><br>
- &nbsp; <b>function</b> R1a (B : <b>in</b> Natural) <b>return</b> Boolean <b>renames</b> Obj.F1; --
-(1a)</p>
+&nbsp; &nbsp;<b>function</b> R1a (B : <b>in</b> Natural) <b>return</b> Boolean <b>renames</b>
+Obj.F1; -- (1a)</p>
 <p class="codt">&nbsp; &nbsp;<b>function</b> R1b (B : <b>in</b> Natural) <b>return</b> Boolean --
 Illegal&nbsp; &nbsp; &nbsp; -- (1b)</p>
 <p class="codt">&nbsp; &nbsp; &nbsp; <b>renames</b> P1.Intf(Obj).F1; -- because non-disp call on
 abstract subp<br>
- &nbsp; <b>function</b> R2 (B : <b>in</b> P1.Intf) <b>return</b> Boolean&nbsp; -- Illegal &nbsp;
-&nbsp; &nbsp;-- (2)</p>
+&nbsp; &nbsp;<b>function</b> R2 (B : <b>in</b> P1.Intf) <b>return</b> Boolean&nbsp; -- Illegal
+&nbsp; &nbsp; &nbsp;-- (2)</p>
 <p class="codt">&nbsp; &nbsp; &nbsp; <b>renames</b> Obj.F2; &nbsp;-- because Obj.F2(B) is call on
 abstract subp<br>
- &nbsp; <b>function</b> R3 (B : <b>in</b> P1.Intf&#39;Class) <b>return</b> Boolean &nbsp; &nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp;-- (3)</p>
+&nbsp; &nbsp;<b>function</b> R3 (B : <b>in</b> P1.Intf&#39;Class) <b>return</b> Boolean &nbsp;
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- (3)</p>
 <p class="codt">&nbsp; &nbsp; &nbsp; <b>renames</b> Obj.F3;<br>
 <b>begin</b><br>
- &nbsp; <b>if</b> R1a(1) <b>then</b>&nbsp; &nbsp; &nbsp;-- OK. R1a will dispatch <i>internally</i>
-based on Obj<br>
- &nbsp; &nbsp; &nbsp;<b>null</b>;<br>
- &nbsp; <b>elsif</b> R2(Obj) <b>then</b> -- Not legal even though P1.F2(Val, Obj) is legal&nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br>
- &nbsp; &nbsp; &nbsp;<b>null</b>;<br>
- &nbsp; <b>elsif</b> R3(Obj) <b>then</b> -- OK. R3 dispatches <i>internally</i> (with
+&nbsp; &nbsp;<b>if</b> R1a(1) <b>then</b>&nbsp; &nbsp; &nbsp;-- OK. R1a will dispatch
+<i>internally</i> based on Obj<br>
+&nbsp; &nbsp; &nbsp; <b>null</b>;<br>
+&nbsp; &nbsp;<b>elsif</b> R2(Obj) <b>then</b> -- Not legal even though P1.F2(Val, Obj) is
+legal&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
+&nbsp;<br>
+&nbsp; &nbsp; &nbsp; <b>null</b>;<br>
+&nbsp; &nbsp;<b>elsif</b> R3(Obj) <b>then</b> -- OK. R3 dispatches <i>internally</i> (with
 Tag_Check)<br>
- &nbsp; &nbsp; &nbsp;<b>null</b>;<br>
- &nbsp; <b>end</b> <b>if</b>;<br>
+&nbsp; &nbsp; &nbsp; <b>null</b>;<br>
+&nbsp; &nbsp;<b>end</b> <b>if</b>;<br>
 <b>end</b> Test;</p>
-</td></tr><tr class="c11"><td class="c14">
+</td></tr><tr class="c0"><td class="c12">
 <p class="codt">&nbsp;</p>
 </td></tr></table><p class="text">&nbsp;</p>
-<p class="text">R1a and R1b correspond to the two alternatives of the first case above. R1a is
-treated as not being abstract &ndash; the dispatching is &quot;hidden&quot; in the wrapper created
-by the renaming of the prefixed view. R1b is illegal because it is a renaming of an abstract
-prefixed view, and we deem such abstract renamings to be unduly complex to support.</p>
-<p class="txts">R2 corresponds to the second case, and R2 is not primitive and is not a dispatching
-operation, and so cannot legally be called. &nbsp;Furthermore, the &quot;internal&quot; call with
-the formal parameter B would not be legal if F2 is abstract, so we deem the renaming as
+<p class="txts">Functions R1a and R1b correspond to the two alternatives of the first case above.
+R1a is treated as not being abstract &ndash; the dispatching is &quot;hidden&quot; in the wrapper
+created by the renaming of the prefixed view. R1b is illegal because it is a renaming of an
+abstract prefixed view, and we deem such abstract renamings to be unduly complex to support.</p>
+
+<p class="txts">Function R2 corresponds to the second case, and R2 is not primitive and is not a
+dispatching operation, and so cannot legally be called. &nbsp;Furthermore, the &quot;internal&quot;
+call with the formal parameter B would not be legal if F2 is abstract, so we deem the renaming as
 illegal.</p>
 
-<p class="text">Finally, R3 demonstrates the last case. Note that the profile of R3 now has a
-class-wide parameter where before it had a controlling parameter. &nbsp;Internally R3 does a
+<p class="text">Finally, function R3 demonstrates the last case. Note that the profile of R3 now
+has a class-wide parameter where before it had a controlling parameter. &nbsp;Internally R3 does a
 dispatching call, with a Tag_Check, but from the &quot;outside&quot; it is now a class-wide
 operation.</p>
 <h2 class="head">!corrigendum 4.1.3(9.2/3)</h2>
@@ -329,13 +333,12 @@
 the @fa{selected_component} (after any implicit dereference) is called the @i{prefix} of the
 prefixed view.</p>
 <p class="text">@dby</p>
-<p class="text">The @fa{selected_component} denotes a view of this subprogram that omits the first
+<p class="txts">The @fa{selected_component} denotes a view of this subprogram that omits the first
 formal parameter. This view is called a @i{prefixed view} of the subprogram, and the @fa{prefix} of
 the @fa{selected_component} (after any implicit dereference) is called the @i{prefix} of the
 prefixed view. In the special case where the prefix is class-wide and controlling, the prefixed
 view is not abstract, even if the &nbsp;unprefixed view is abstract; otherwise the prefixed view is
-abstract if and</p>
-<p class="txts">only if the unprefixed view is abstract.</p>
+abstract if and only if the unprefixed view is abstract.</p>
 
 <p class="text">In the context of a subprogram renaming (see 8.5.4) or the matching of an actual
 subprogram with a formal subprogram (see 12.6), a prefixed view whose prefix is class-wide and

Questions? Ask the ACAA Technical Agent