J3/02-235 To: J3 Subject: PASS and NOPASS description needs improvement From: Malcolm Cohen. Date: 2002-07-19 1. Introduction The PASS and NOPASS specifiers, in particular the constraints thereon, are described confusingly in lots of places instead of in just one. We've changed our constraint "technology" to handle semantic constraints, let's use it to simplify this mess. 2. Please don't mix syntax and semantics in a single clause [51:12] has "the PASS attribute is specified without <(arg-name)>". Ugh. The PASS attribute doesn't have syntax, it's the that has the syntax. 3. Duplication [43:32-33] and [43:34-44:3] essentially repeat themselves. And [44:5] is separate from the other constraint requirements. What a mess. More duplication follows at [45:11-18]. I propose splitting off all the passed-object-dummy-argument constraints into a single unified section. Fortunately, we already have one to put it in. 4. Confusion [45:21-23] confuses me, anyway. Does it mean "The PASS attribute shall be explicitly specified" or is implicit specification ok? It also doesn't seem to make sense for specific bindings; it is indeed out of place (since it specifically mentions R442 it ought to follow R442). Also, "all" would seem to apply to bindings outside of the type being defined. I assume that implicit is ok, and suggest rewording the constraint so that it is less ambiguous. 5. What requirements? There's lots of references like "shall meet the requirements for a passed-object dummy argument (4.5.1.6)" e.g. in [43:33]. This is good. But in 4.5.1.6, for an implicitly specified passed-object dummy argument, one of the requirements for it to be a passed-object dummy argument is that it meets the requirements for it to be a passed-object dummy argument. Circular, ne? 6. Edits to 02-007r2 [43:31-44:3] Replace with "If PASS appears, the procedure component shall have an explicit interface." [44:5] Delete. [44:36+] Move reworded C459 to here. [45:11-18] Delete. [45:21-23] Replace with (and then move to [44:36+]) "C459 (R442): An overriding generic binding shall have the PASS attribute if and only if all generic bindings with the same that are inherited or declared within the type definition, have the attibute." {Remove ambiguities.} {OR:} "Constraint: An overriding generic binding shall have the PASS attribute if the binding which it overrides has the PASS attribute." {Hmm. Is this constraint necessary? Is it sufficient?} [51:10-11] Replace final sentence with "Cxxx: The passed-object dummy argument shall be a scalar, nonpointer, nonallocatable, dummy argument of the type being defined. Cyyy: The passed-object dummy argument shall be polymorphic if and only if the type being defined is extensible." [51:12-14] Replace the first two sentences with "If the PASS attribute is explicitly specified, the passed-object dummy argument is the one named if that is specified, or the first dummy argument otherwise." {OK, this is still horrible, but I think less so.} [51:15] Replace "meets ... argument" by "satisfies constraint Cxxx". {Avoid circularity and vagueness.} {Alternatively, "meets the requirements specified by constraint Cxxx".}