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

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

--- ai22s/ai22-0024-1.html	2022/09/10 09:05:14	1.2
+++ ai22s/ai22-0024-1.html	2022/10/22 07:29:03	1.3
@@ -1,17 +1,11 @@
-<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0024-1/03</title>
+<html><head><meta content="text/html; charset=UTF-8" http-equiv="content-type"><title>AI22-0024-1/04</title>
 <style type="text/css">
 table td,table th{padding:0}
-.c24{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}
-.c2{background-color:#f0f0f0;font-family:"Consolas";color:#444444;font-weight:400}
-.c29{border-spacing:0;border-collapse:collapse;margin-right:auto}
-.c17{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}
-.c10{background-color:#f0f0f0;font-family:"Consolas";color:#888888;font-weight:400}
-.c5{background-color:#f0f0f0;font-family:"Consolas";color:#444444;font-weight:700}
-.c1{background-color:#f0f0f0;font-family:"Consolas";color:#880000;font-weight:400}
-.c9{background-color:#f0f0f0;font-family:"Consolas";color:#880000;font-weight:700}
-.c30{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}
-.c4{color:inherit;text-decoration:inherit}
-.c20{border:1px solid black;margin:5px}
+.c32{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}
+.c8{text-decoration-skip-ink:none;-webkit-text-decoration-skip:none;color:#1155cc;text-decoration:underline}
+.c16{border-spacing:0;border-collapse:collapse;margin-right:auto}
+.c17{background-color:#ffffff;max-width:468pt;padding:72pt 72pt 72pt 72pt}
+.c27{color:inherit;text-decoration:inherit}
 .c18{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}
@@ -28,14 +22,13 @@
 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}
-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.a15{background-color:#f0f0f0; font-family:"Consolas"; color:#888888; font-weight:400; text-decoration:none; vertical-align:baseline; font-size:11pt; font-style:normal}
-SPAN.a16{background-color:#f0f0f0; font-family:"Consolas"; color:#888888; font-weight:400; font-style:italic}
-SPAN.a30{text-decoration-skip-ink:none; -webkit-text-decoration-skip:none; color:#1155cc; text-decoration:underline}
+SPAN.ntrm{font-family:"Arial","Liberation Sans",sans-serif}
+P.a5{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.a35{text-decoration-skip-ink:none; -webkit-text-decoration-skip:none; color:#1155cc; text-decoration:underline}
 </style>
-</head><body class="c30 doc-content"><p class="a4">AI22-0024-1</p>
+</head><body class="c17 doc-content"><p class="a5">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-09-09 &nbsp;AI22-0024-1/03</p>
+&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;22-10-21 &nbsp;AI22-0024-1/04</p>
 <p class="head">!standard 4.1.3(9.2/3)</p>
 <p class="head">!class binding interpretation 22-01-20</p>
 <p class="head">!status Corrigendum 1-2022 &nbsp;22-09-09</p>
@@ -59,8 +52,8 @@
 <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="c29"><tr class="c18"></tr></table><p class="text">&nbsp;</p>
-<a id="t.0a83fcf6f0060650be3d1940649573282238d897"></a><a id="t.1"></a><table class="c29"><tr class="c18"><td class="c24">
+<a id="t.0539a8d78e6c3da25e277d06a9eed551b6241ac7"></a><a id="t.0"></a><table class="c16"><tr class="c18"></tr></table><p class="text">&nbsp;</p>
+<a id="t.0a83fcf6f0060650be3d1940649573282238d897"></a><a id="t.1"></a><table class="c16"><tr class="c18"><td class="c32">
 <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>
@@ -97,11 +90,11 @@
 
 <p class="text">The actual here is a prefixed view of an abstract subprogram, but this view is</p>
 <p class="text">of a dispatching call that is legal for an actual call. But is it legal as the</p>
-<p class="txts">actual of a generic subprogram? (Yes)</p>
+<p class="txts">actual of a generic subprogram? (Yes.)</p>
 
 <p class="txts">The test also renames these calls:</p>
 
-<a id="t.99e97e28b61f37c8758585a612fac6cc328ca2d4"></a><a id="t.2"></a><table class="c29"><tr class="c18"><td class="c24">
+<a id="t.99e97e28b61f37c8758585a612fac6cc328ca2d4"></a><a id="t.2"></a><table class="c16"><tr class="c18"><td class="c32">
 <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>
@@ -116,16 +109,16 @@
 <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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-3-1.html">6.3.1</a></span>)
+<span class="c8"><a class="c27" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-3-9-2.html">3.9.2</a></span>
+<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-3-9-2.html">3.9.2</a></span>
 and
-<span class="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-5-2.html">5.2</a></span>).
+<span class="c8"><a class="c27" 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>
@@ -136,29 +129,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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
+<span class="c8"><a class="c27" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
 of the
-<span class="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html#S0098">selected_component</a></span>
+<span class="c8"><a class="c27" 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="wrds">If the
-<span class="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
+<span class="c8"><a class="c27" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
 or
-<span class="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c8"><a class="c27" 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="a30"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1-3.html">4.1.3</a></span>),
+<span class="a35"><a class="c27" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c8"><a class="c27" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
+<span class="c8"><a class="c27" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-4.html#S0219">actual_parameter_part</a></span>,
+<span class="c8"><a class="c27" 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
@@ -184,45 +177,41 @@
 prefixed view is tag-indeterminate.</p>
 <h2 class="head">!wording</h2>
 <p class="inst">Modify 4.1.3(9.2/3):</p>
-<p class="word">The
-<span class="c17"><a class="c4" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0093">prefix</a></span>
-of the
-<span class="c17"><a class="c4" 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.
-<span class="ins">{In the special case where the prefix is class-wide and controlling, the prefixed
-view is not abstract, even if the unprefixed view is abstract; otherwise the prefixed view is
-abstract if and only if the unprefixed view is abstract. A renaming of a prefixed view whose prefix
-is class-wide and controlling shall have an expected profile such that each formal parameter or
-result type corresponding to a controlling parameter (or access parameter) or result (or access
-result) in the unprefixed view, is the same class-wide type (or access to class-wide type) &nbsp;as
-the prefix; otherwise the unprefixed view shall not be abstract and the types of the formal
-parameters or result in the expected profile shall match those of the corresponding formal
-parameters or result of the unprefixed view. Any constraints on the formal parameters or results
-come from the unprefixed view, as with a normal subprogram renaming. When renaming a prefixed view
-whose prefix is tag-indeterminate and controlling, the controlling tag is statically determined to
-be that of the type of the prefix.}</span></p>
+<p class="word">The <span class="ntrm">selected_component</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="ntrm">prefix</span> of the
+<span class="ntrm">selected_component</span><span class="ntrm"> </span>(after any implicit
+dereference) is called the <i>prefix</i> of the prefixed view. <span class="ins">{In the special
+case where the <span class="ntrm">prefix </span>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</span></p>
+<p class="wrds"><span class="ins">only if the unprefixed view is abstract.</span></p>
+
+<p class="word"><span class="ins">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
+<span class="ntrm">prefix</span> is class-wide and controlling shall have an expected profile such
+that each formal parameter or result type corresponding to a controlling parameter (or access
+parameter) or controlling result (or access result) in the unprefixed view, is (or designates) the
+same class-wide type as the <span class="ntrm">prefix</span>. In a renaming or matching of a
+prefixed view whose prefix is of a specific type or is not controlling, the unprefixed view shall
+not be abstract and the types of the formal parameters or result in the expected profile shall
+match those of the corresponding formal parameters or result of the unprefixed view. [Redundant: In
+either case, any constraints, null exclusions, or predicates on the formal parameters or results in
+the view declared by the renaming or instantiation come from the unprefixed view, as in the normal
+case.] When renaming or matching a prefixed view whose prefix is tag-indeterminate and controlling,
+the controlling tag is statically determined to be that of the type of the prefix.}</span></p>
 <p class="inst">Modify 6.4(9.1/5):</p>
-<p class="wrds">If the
-<span class="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-4-1.html#S0091">name</a></span>
-or
-<span class="c17"><a class="c4" 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="c17"><a class="c4" 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="c17"><a class="c4" 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="c17"><a class="c4" 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="c17"><a class="c4" href="http://www.ada-auth.org/standards/2xaarm/html/AA-6-4.html#S0219">actual_parameter_part</a></span>,
-if any. <span class="ins">{[Redundant: In the case where the prefix is class-wide and controlling,
-if there are multiple controlling parameters, a check is made that they all have the same tag, as
-defined in 3.9.2. A call on a renaming of a prefixed view results in a dispatching call if the
-prefix of the prefixed view is class-wide and controlling.]}</span> </p>
+<p class="wrds">If the <span class="ntrm">name</span> or <span class="ntrm">prefix</span> of a
+subprogram call denotes a prefixed view (see 4.1.3), the subprogram call is equivalent to a call on
+the underlying subprogram, with the first actual parameter being provided by the
+<span class="ntrm">prefix</span> of the prefixed view (or the Access attribute of this
+<span class="ntrm">prefix</span><span class="ntrm"> </span>if the first formal parameter is an
+access parameter), and the remaining actual parameters given by the
+<span class="ntrm">actual_parameter_part</span>, if any. <span class="ins">{[Redundant: In the case
+where the prefix is class-wide and controlling, if there are multiple controlling parameters, a
+check is made that they all have the same tag, as defined in 3.9.2. A call on a renaming of a
+prefixed view results in a dispatching call if the prefix of the prefixed view is class-wide and
+controlling.]}</span> </p>
 
 <h2 class="head">!discussion</h2>
 <p class="txts">4.1.3(9.2/3) defines a prefixed view to be a view of a subprogram &ndash; it is not
@@ -253,8 +242,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><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>
@@ -262,7 +250,7 @@
 abstract operation, and again the other parameters have no effect on that. So in that case, a
 renaming of the prefixed view might as well be illegal.</li>
 </ul>
-<ul class="blts"><li>In the case where the first parameter of the unprefixed view is not a
+<li>In the case where the first parameter of the unprefixed view is not a
 controlling parameter (it still needs to be tagged; it might be class-wide), then one or more of
 the remaining parameters might be controlling parameter(s). In such a case, we propose that the
 renaming be legal only if the unprefixed view is <i>not</i> abstract, for simplicity (we could some
@@ -281,97 +269,45 @@
 
 <p class="txts">It might help to look at an example:</p>
 
-<a id="t.a943e863f7ff539b0a82525f010c1a75a7727aec"></a><a id="t.3"></a><table class="c29"><tr class="c18"><td class="c24">
-<p class="text"><span class="c2">&nbsp; &nbsp;
-</span><span class="c5">package</span><span class="c2"> </span><span class="c9">P1
-</span><span class="c5">is</span><span class="c2"><br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">type</span><span class="c2">
-</span><span class="c1">Intf </span><span class="c5">is</span><span class="c2">
-</span><span class="c5">interface</span><span class="c2">;<br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">function</span><span class="c2">
-</span><span class="c9">F1</span><span class="c2"> (A :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Intf</span><span class="c2">; B :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Natural</span><span class="c2">)<br>
- &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="c5">return</span><span class="c2">
-</span><span class="c1">Boolean</span><span class="c2">
-</span><span class="c5">is</span><span class="c2">
-</span><span class="c5">abstract</span><span class="c2">;<br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">function</span><span class="c2">
-</span><span class="c9">F2</span><span class="c2"> (A :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Intf&#39;Class</span><span class="c2">; B :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Intf</span><span class="c2">)<br>
- &nbsp; &nbsp; &nbsp; &nbsp; </span><span class="c5">return</span><span class="c2">
-</span><span class="c1">Boolean</span><span class="c2">
-</span><span class="c5">is</span><span class="c2">
-</span><span class="c5">abstract</span><span class="c2">;<br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">function</span><span class="c2">
-</span><span class="c9">F3</span><span class="c2"> (A, B :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Intf</span><span class="c2">)
-</span><span class="c5">return</span><span class="c2">
-</span><span class="c1">Boolean</span><span class="c2">
-</span><span class="c5">is</span><span class="c2">
-</span><span class="c5">abstract</span><span class="c2">;<br>
-</span><sup><a href="#cmnt1">[a]</a></sup><span class="c2">&nbsp; &nbsp;
-</span><span class="c5">end</span><span class="c2"> P1;<br>
+<a id="t.6eb1b62e67134fed732e2319eb5d650e67ac3f6d"></a><a id="t.3"></a><table class="c16"><tr class="c18"><td class="c32">
+<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>
+<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>
- &nbsp; &nbsp;</span><span class="c5">procedure</span><span class="c2">
-</span><span class="c9">Test</span><span class="c2"> (Obj :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">P1.Intf</span><span class="c2">&#39;Class; Val :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Natural</span><span class="c2">)
-</span><span class="c5">is</span><span class="c2"><br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">function</span><span class="c2">
-</span><span class="c9">R1a</span><span class="c2"> (B :
-</span><span class="c5">in</span><span class="c2">
-</span><span class="c1">Natural</span><span class="c2">)
-</span><span class="c5">return</span><span class="c2">
-</span><span class="c1">Boolean</span><span class="c2">
-</span><span class="c5">renames</span><span class="c2"> Obj.F1; </span><span class="a15">--
-(1a)</span></p>
-<p class="codt">&nbsp; &nbsp; &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; &nbsp; &nbsp;<b>renames</b> P1.Intf(Obj).F1; -- because
-non-disp call on abstract subp<br>
-</p>
-<p class="codt">&nbsp; &nbsp; &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; &nbsp; &nbsp;<b>renames</b> Obj.F2; &nbsp;-- because Obj.F2(B)
-is call on abstract subp<br>
- &nbsp; &nbsp; &nbsp; <b>function</b> R3 (B : <b>in</b> P1.Intf&#39;Class) &nbsp; &nbsp; &nbsp;
-&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -- (3)</p>
-<p class="text"><span class="c2">&nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp;</span><span class="c5">return</span><span class="c2">
-</span><span class="c1">Boolean</span><span class="c2">
-</span><span class="c5">renames</span><span class="c2"> Obj.F3;<br>
-</span><sup><a href="#cmnt2">[b]</a></sup><span class="c2">&nbsp; &nbsp;
-</span><span class="c5">begin</span><span class="c2"><br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">if</span><span class="c2">
-R1a(</span><span class="c1">1</span><span class="c2">)
-</span><span class="c5">then</span><span class="c2">&nbsp; &nbsp; &nbsp;</span><span class="c10">--
-OK. R1a will dispatch </span><span class="a16">internally</span><span class="c10"> based on
-Obj</span><span class="c2"><br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;null;<br>
- &nbsp; &nbsp; &nbsp; </span><span class="c5">elsif</span><span class="c2"> R2(Obj)
-</span><span class="c5">then</span><span class="c2"> </span><span class="a15">-- Not legal unless
-R2 is itself a primitive</span></p>
-<p class="codt">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp; -- (which it isn&#39;t) even though P1.F2(Val, Obj)<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-- is
-legal&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
-&nbsp;<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;null;<br>
- &nbsp; &nbsp; &nbsp; <b>elsif</b> R3(Obj) <b>then</b> -- OK. R3 dispatches <i>internally</i> (with
+<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>
+<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>
+<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>
+<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
 Tag_Check)<br>
- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;null;<br>
- &nbsp; &nbsp; &nbsp; <b>end</b> <b>if</b>;<br>
- &nbsp; &nbsp;<b>end</b> Test;</p>
-</td></tr><tr class="c18"><td class="c24">
+ &nbsp; &nbsp; &nbsp;<b>null</b>;<br>
+ &nbsp; <b>end</b> <b>if</b>;<br>
+<b>end</b> Test;</p>
+</td></tr><tr class="c18"><td class="c32">
 <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
@@ -476,7 +412,4 @@
 <p class="txts">it is best deferred.</p>
 
 
-<div class="c20"><p class="text"><a href="#cmnt_ref1">[a]</a>Obj.F3(BC) is equiv to F3(Obj, BC)</p>
-</div><div class="c20"><p class="text"><a href="#cmnt_ref2">[b]</a>Please add example of code for
-R3 -- Ed S.</p>
-</div></body></html> 
+</body></html> 

Questions? Ask the ACAA Technical Agent