!standard 3.3.1(20.4/2) 11-02-01 AI05-0092-1/15 !standard 3.3.1(23) !standard 3.9(25.1/2) !standard 6.3.1(21.1/2) !standard 7.6(9.3/2) !standard 9.6(6) !standard 9.6(8) !standard 9.6(22) !standard 13.3(75/1) !standard 13.13.2(55/2) !standard 13.13.2(56/2) !standard A.11(4/2) !standard A.11(5/2) !standard A.16(44/2) !standard A.16(68/2) !standard A.16(104/2) !standard A.16(112/2) !standard A.18.2(189/2) !standard A.18.10(2/2) !standard A.18.11(2/2) !standard A.18.12(2/2) !standard A.18.13(2/2) !standard A.18.14(2/2) !standard A.18.15(2/2) !standard D.5.1(18) !standard D.14.2(4/2) !standard D.14.2(21/2) !standard G.2.2(11) !class presentation 08-03-05 !status work item 06-03-05 !status received 06-02-13 !priority Low !difficulty Easy !qualifier Omission !subject More presentation issues in the Standard !summary This AI corrects minor errors in the Standard. 1) Drop "must" from 3.3.1(20.4/2) (two places). 2) Replace "must be" with "is" in 6.3.1(21.1/2). 3) Replace "must include" with "includes" in 13.3(8.1/2). 4) Replace "must" by "shall" in 13.13.2(55-56/2). 5) Replace "Safe_last" by "Safe_Last" in G.2.2(11). 6) Drop the "3.9.2" reference from 13.3(75/1). 7) In A.11(4-5/2), replace "Wide_Bounded_String" with "Bounded_Wide_String" and "Wide_Wide_Bounded_String" with "Bounded_Wide_Wide_String". 8) Replace "Interface_Ancestor_Tag" with "Interface_Ancestor_Tags" in 3.9(25.1/2). 9) The routines Wide_Expanded_Name and Wide_Wide_Expanded_Name should be listed in 3.9(25.1/2). 10) Replace "_statement" with "statement". 11) Add a default of "" to the Form parameter. 12) The existing indefinite container forms have differences in contents and in semantics. 13) Correct the note D.5.1(18). 14) Correct the note 3.3.1(23). 15) Correct A.16(104/2) and A.16(112/2). 16) Change "List" to "Vector" in A.18.2(189/2). 17) Replace "that with "whose type" in 7.6(9.3/2) 18) Replace "P" in D.14.2(4/3) and D.14.2(21/3). 19) Ada.Real_Time.Time is a time-type. 20) The private part should match other language-defined packages. !question 1) Generally, "must" shall not be used in normative rules of the standard. However, 3.3.1(20.4/2) uses "must precede" twice. Should this be fixed? (Yes.) 2) "Must" also occurs in 6.3.1(8.1/2). Fix that, too? (Yes.) 3) "Must" also occurs in 13.3(8.1/2). Should that also be fixed? (Yes.) 4) "Must" also occurs in 13.13.2(55-56/2). Sigh. More text to fix? (Yes.) 5) "Safe_last" should be written as "Safe_Last" in G.2.2(11). Fix it? (Yes.) 6) 13.3(75/1) says "See 3.9.2 and 13.13.2". There doesn't appear to be anything relevant in 3.9.2. What is the intent? (Delete it.) 7) A.11(4-5/2) use the wrong names for the Wide and Wide_Wide versions of bounded strings. Fix these? (Yes.) 8) 3.9(25.1/2) mentions "Interface_Ancestor_Tag", but there is no such thing. Change to "Interface_Ancestor_Tags"? (Yes.) 9) 3.9(25.1/2) mentioned "Expanded_Name", but it doesn't mention "Wide_Expanded_Name" and "Wide_Wide_Expanded_Name". Should it? (Yes.) 10) 9.6(22) includes "_statement"; this fragment is unseemly. Should this be replaced by "statement"? (Yes.) 11) A.16(13/2) includes a default of "" for the Form parameter, but A.16(68/2) does not. Should A.16(68/2) have a default for the Form parameter? (Yes.) 12) A.18.10(2/2) [and the other 5 indefinite container forms] says that the contents of package Indefinite_Vectors differs from the contents of package Vectors, but the semantics is changed in various ways as well. Should the wording reflect this? (Yes.) 13) The Note D.5.1(18) talks about when Tasking_Error is raised by Set_Priority. But Tasking_Error is never raised by Set_Priority, so this note is confusing. 14) The Note 3.3.1(23) says that a formal_object_declaration "is not called a stand-alone object", while 12.4(10/2) says that a formal_object_declaration of mode in is "a stand-alone constant object" within an instance. This note must be wrong, should it be fixed? (Yes.) 15) A.16(104/2) and A.16(112/2) contain the text "If the Pattern is null, ...". But Pattern is of type String and cannot be null. Should this be fixed? (Yes.) 16) A.18.2(189/2) has a parameter type of "List"; but this is the vector package. Should this be fixed? (Yes.) 17) 7.6(9.1-9.6/2) define "needs finalization" on types. But 7.6(9.3/2) talks about components: these are objects not types. This needs to say something about "a component whose type needs finalization". Should this be fixed? (Yes.) 18) AI05-0167-1 uses "CPU" as the discriminant and parameter name when representating a processor. AI05-0169-1 uses "P" instead. Should these be the same? (Yes.) 19) The second sentence of 9.6(6) (a Legality Rule) says, "The type of the delay_expression in a delay_until_statement shall be a time type--either the type Time defined in the language-defined package Calendar (see below), or some other implementation-defined time type (see D.8)." Ada.Real_Time.Time is supposed to be one of those possible time types (and D.8(18) says so explicitly), but since it's defined by the language, it isn't "implementation-defined", so strictly speaking this rule doesn't allow it. Should this be fixed? (Yes.) 20) The private part of Ada.Directories says "-- Not specified by the language." while other packages "... -- not specified by the language" (dots, lower case 'n', no period). This should be consistent. [Other questions here.] !recommendation (See summary.) !wording 1) Drop "must" from 3.3.1(20.4/2); it occurs in two places. 2) Replace "must be" with "is" in 6.3.1(21.1/2). 3) Replace "must include" by "includes" in 13.3(8.1/2). 4) Replace "must" by "shall" in 13.13.2(55-56/2). 5) Replace "Safe_last" by "Safe_Last" in G.2.2(11). 6) Remove "3.9.2 and" from 13.3(75/1). 7) In A.11(4-5/2), replace "Wide_Bounded_String" with "Bounded_Wide_String" and "Wide_Wide_Bounded_String" with "Bounded_Wide_Wide_String". 8) Replace "Interface_Ancestor_Tag" with "Interface_Ancestor_Tags" in 3.9(25.1/2). 9) Replace "or Parent_Tag" with "Parent_Tag, Wide_Expanded_Name, or Wide_Wide_Expanded_Name" in 3.9(25.1/2). 10) Replace "_statement" with "statement" in 9.6(22). 11) Replace "Form : in String);" with "Form : in String := "");" in A.16(68/2). 12) Add "and semantics" after "contents" in A.18.10(2/2), A.18.11(2/2), A.18.12(2/2), A.18.13(2/2), A.18.14(2/2), and A.18.15(2/2). 13) Modify the Note D.5.1(18): 32 The rule for when Tasking_Error is raised for Set_Priority or Get_Priority is different from the rule for when Tasking_Error is raised on an entry call (see 9.5.3). In particular, [setting or ]querying the priority of a completed or an abnormal task is allowed, so long as the task is not yet terminated{, and setting the priority of a task is allowed for any task state (including for terminated tasks)}. 14) Modify the Note 3.3.1(23): An object declared by a loop_parameter_specification, parameter_specification, entry_index_specification, choice_parameter_specification, {extended_return_statement,} or a formal_object_declaration {of mode IN OUT} is not [called] {considered} a stand-alone object. 15) Modify A.16(104/2) and A.16(112/2): ... If Pattern is {the} null {string}, 16) Replace "List" with "Vector" in A.18.2(189/2). 17) Replace "that" with "whose type" in 7.6(9.3/2). 18) Replace "P" by "CPU" in D.14.2(4/3) and replace "processor P" by "CPU" in D.14.2(21/3). 19) Modify 9.6(6) as "... package Calendar (see below), {the type Time in the package Real_Time (see D.8), } or some other implementation-defined time type[(see D.8)]." Delete "implementation-defined" from 9.6(8). 20) Change A.16(44/2) to "... -- not specified by the language". !discussion 1) 3.3.1(20.4/2) uses "must precede", while 3.3.1(20.1-3/2) use "is preceded by". "Must" doesn't add anything here, as this is a rule after all -- following it is not optional and we don't need to re-enforce that. 2) 6.3.1(21.1/2) is a definition, and should use "is", not "shall" (or "must"). 3) 13.3(8.1/2) is also a definition, and "must" is just emphasis. 4) 13.13.2(55/2) is an Implementation Requirement, and must use "shall". 13.13.2(56/2) is an Implementation Permission, so "shall" is optional, but just dropping "must" doesn't make much sense (the emphasis is needed). 5) All other references to Safe_Last use a capital 'L', this one should, too. Note that this error dates all the way back to the original Ada 95 Standard. 6) It's possible the author meant 3.9, but that wouldn't be useful, as 3.9(11) just references 13.3. We surely don't want a circular definition, so we just drop the reference. 7) The names of the types ought be consistent between A.4.7, A.4.8, and A.11. 8) An obvious missing 's'. 9) The Wide and Wide_Wide versions of Expanded_Name surely should raise the same exceptions as the base version. Anything else would be madness. Note that the routines are listed in alphabetical order. 10) This is one of a number of similar fragments in the Ada 95 RM. As they interfere with automated linking and indexing (and look like a mistake), we've been eliminating them when possible. We could have used the entire "delay_statement" here, but that would seem redundant (there are two other occurrences of delay_statement in the paragraph). 11) Clearly the specifications given in A.16(13/2) and A.16(68/2) should match. Since Form parameters generally default to "", we believe that A.16(13/2) is correct and change A.16(68/2) to match. 12) It is obvious that more than just the contents are changed for the indefinite forms. For instance, A.18.10(8/2) is not referring to the contents of the package. It is best if the wording reflects that. 13) The note is technically correct, but it is misleading. The rewrite makes it clearer that Set_Priority is always allowed. 14) We don't like notes that lie, so we correct it to match the normative semantics. (We have no reason to assume that the normative semantics are wrong.) We also mention extended return objects in this list, since they are a similar kind of object that is not considered stand-alone. 15) "null" clearly should be "null string". We use the form "Pattern is the null string" because text of that form occurs in multiple places in A.16 already. 16) There is nothing named "List" in this package, so this must be a simple cut-and-paste error. 17) The questioner is right; we need to say something about the type of the component. 18) These two AIs should use similar names. 19) Clearly, Real_Time.Time is supposed to be a time type. There is even a cross-reference in the rule in question - but it isn't implementation-defined. Since the cross-reference is already there, we might as well go all the way and identify the type, too, and then we don't need to weasel about what we mean. OTOH, this will make the language a bit more fragile; if another language-defined time type is ever created, we'd need to update this paragraph again. An alternative that we considered was to simply echo 9.5.1(18): "... package Calendar (see below), or some other type that is identified as a time type where it is defined (see D.8)." This isn't as fragile, but no longer includes the indication that implementation-defined time types are expected. Moreover, the cross-reference is still mysterious. We could also just add language defined to the existing rule: "... package Calendar (see below), or some other language-defined or implementation-defined time type (see D.8)." but here the cross-reference seems to associate with "implementation-defined" which makes no sense. Reversing the two hyphenated terms fixes that, but then they are in a weird order. So we chose the wording given above. Note that we also fix 9.6(8). There is no need to mention where the time type is defined in this sentence, so we just drop it. 20) Ada.Directories is different from all other language-defined packages, so make it consistent. !corrigendum 3.3.1(20.4/2) @drepl @xbullet @dby @xbullet !corrigendum 3.3.1(23) @drepl @xindent<@s9<8 As indicated above, a stand-alone object is an object declared by an @fa. Similar definitions apply to "stand-alone constant" and "stand-alone variable." A subcomponent of an object is not a stand-alone object, nor is an object that is created by an @fa. An object declared by a @fa, @fa, @fa, @fa, or a @fa is not called a stand-alone object.>> @dby @xindent<@s9<8 As indicated above, a stand-alone object is an object declared by an @fa. Similar definitions apply to "stand-alone constant" and "stand-alone variable." A subcomponent of an object is not a stand-alone object, nor is an object that is created by an @fa. An object declared by a @fa, @fa, @fa, @fa, @fa, or a @fa of mode @b is not considered a stand-alone object.>> !corrigendum 3.9(25.1/2) @drepl Tag_Error is raised by a call of Descendant_Tag, Expanded_Name, External_Tag, Interface_Ancestor_Tag, Is_Descendant_At_Same_Level, or Parent_Tag if any tag passed is No_Tag. @dby Tag_Error is raised by a call of Descendant_Tag, Expanded_Name, External_Tag, Interface_Ancestor_Tags, Is_Descendant_At_Same_Level, Parent_Tag, Wide_Expanded_Name, or Wide_Wide_Expanded_Name if any tag passed is No_Tag. !corrigendum 6.3.1(21.1/2) @drepl @xbullet in one must be the same as the corresponding @fa in the other; and> @dby @xbullet in one is the same as the corresponding @fa in the other; and> !corrigendum 7.6(9.3/2) @drepl @xbullet @dby @xbullet !corrigendum 9.6(6) @drepl There can be multiple time bases, each with a corresponding clock, and a corresponding @i