CVS difference for ai05s/ai05-0090-1.txt

Differences between 1.1 and version 1.2
Log of other versions for file ai05s/ai05-0090-1.txt

--- ai05s/ai05-0090-1.txt	2008/02/05 04:17:06	1.1
+++ ai05s/ai05-0090-1.txt	2008/02/05 06:33:09	1.2
@@ -261,3 +261,70 @@
+From: Edmond Schonberg
+Sent: Monday, February  4, 2008  10:27 PM
+> I think there are two confusions here.  First, the operation
+> Other_Prim called at (2) isn't a case of overriding, as there's
+> no inherited operation by that name in my example.  But second,
+> if it were an overriding, then there would be a violation of the
+> rules in 9.1(9.6/2-9.8/2), which disallow having both an overriding
+> primitive and an "implemented by" operation for an inherited  
+> subprogram.
+> So I don't think that the fix for (1) would have any effect on the
+> ambiguity of cases such as (2).
+Right, I misread the example, Other_Prim is well-named, and this is  
+definitely (unambiguously?) ambiguous.
+From: Tucker Taft
+Sent: Monday, February  4, 2008  8:21 PM
+> ... Another possibility would be
+> to try and make certain declarations illegal, but that isn't appealing
+> either, as it would introduce illegalities for no particularly good
+> reason (plus it wouldn't work for technical reasons).
+Can you explain these "technical reasons"?
+We make it illegal to have an entry or
+protected subprogram that is homographic with the
+prefixed view of an explicit overriding.  Why can't we
+do the same for an explicit non-overriding primitive?
+> ...
+> Clearly we need a change to effectively give preference to one of the
+> two operations.  The proposed fix is to prefer the interpretation of
+> the entry (or protected subprogram), and to consider the implicit
+> overriding operation effectively hidden at the point of a selector_name
+> in a prefixed call.  It seems somewhat more natural to prefer the entry
+> or protected subprogram over the implicit overriding subprogram since
+> the former is explicit in the program text (though formulating the
+> rule the other way could also be considered).
+I strongly prefer having the entry/protected subprogram
+visible via prefixed notation.  That is what you would
+get in the absence of the interface, and it seems weird
+that the formal parameter names, defaults, etc., would
+suddenly change just because the task type now implements
+an interface.  So I agree with your current solution, and
+would be opposed to the alternate you considered.
+> ...In terms of the rules,
+> this is implemented by making the implicit overriding subprogram
+> hidden from all visibility at the point of a selector_name in cases
+> that would otherwise be ambiguous.
+Do we really need to use the term "hidden from all visibility" here?
+I think all you need to do is have 4.1.3(9.2) include a rule
+that disallows referring to a primitive subprogram that is implemented
+by an entry or protected subprogram.  Remember that 4.1.3(9.2)
+is all considered "Name Resolution" so disallowing something is
+effectively creating an overload resolution rule.  Hiding from
+"all visibility" seems like overkill, and is probably exactly
+what we *don't* want to do, since we still want to be able to
+refer to the implicitly declared primitive using "unprefixed"
+subprogram call notation.

Questions? Ask the ACAA Technical Agent