Issue 306 - Initial Modes for Child Data Transfer Statements To: J3 From: Craig Dedo Date: January 4, 2001 Subject: Issue 306 - Initial Modes for Child Data Transfer Statements Issue This could be 3 or 4 issues, but I'll group them. Sections 9.5.1.9-9.5.1.14 have repetitive descriptions about how the initial modes are determined. I almost wrote that these descriptions were wrong for child data transfer statements, but on careful study, I can't actually find a direct contradiction, so perhaps they are correct. Still, it is at least a subtle point. Section 9.5.4.4.3 says that the values are restored when the child is done, but it doesn't make it as clear as I'd like what happens when the child starts. I *THINK* it is saying that the values are reset to the initial ones, just like for a non-child statement, but I'm not sure. Seems like it would be worth making more explicit for dummies like me. In any case, though its not an error, I'd suggest eliminating the 6 copies in 9.5.1.9-14 of the material on initial modes. It would seem more concise to just reference 9.4 and 9.4.4.x instead of repeating it 6 times. (Among other things that would lower the number of places we need to be sure it's right). And while looking at 9.5.4.4.3, I see it looks out of sync with the new list of modes. The regularization paper didn't regularize this. Likewise 13.18.2.3 oddly omits DELIM=. Analysis When JOR considered the technical specification at meeting 155, it concluded that the only way that DTIO could work properly was if the child data transfer statement inherited the context of its parent data transfer statement. The technical specification for regularizing the I/O keywords, paper 00-316r1, explicitly states that child data transfer statements inherit the context of their parents. Although not explicitly stated, the child data transfer statement must restore its inherited context when it returns to the parent. This action is required by the combination of the rules of hierarchy, the child inheritance rule, and the save-and-restore rule. The current language does not completely implement the technical specification described in 00-316r1. It appears that reworking the language in subsections 9.5.1.9 - 9.5.1.14 would be at best a toss- up in terms of effort vs. benefit. I will refer this issue to the full J3 committee. The omission of DELIM= from 13.8.2.3 is an oversight that should be fixed. Edits Edits are with respect to 01-007. [181:3-12] Delete "This . . . error,". [181:16-17] Delete. [193:1] Add "character delimiter mode" and "pad mode" to the list. [193:4] Change "these" to "any". [193:5+] Add as a separate paragraph: A child data transfer statement shall inherit the connection modes (9.4) in effect in the parent data transfer statement. [340:19+] Add: CHARACTER(LEN=10) :: DELIM ! "APOSTROPHE" | "QUOTE" | "NONE" [340:31+] Add: DELIM indicates the character string delimiter mode for list-directed and namelist formatted output. It has the value APOSTROPHE to indicate that character strings are delimited by apostrophes, QUOTE to indicate that character strings are delimited by quotes, or NONE to indicate that character strings are not delimited. [340:18-22] Place the CHARACTER components in alphabetical order. [340:28-38] Organize the explanation of the CHARACTER components in alphabetical order. References 01-007, Fortran 2000 Draft 01-102, Changes to List of Unresolved Issues 00-316r1, Regularize I/O Keywords - Technical Specification and Syntax [End of J3 / 01-109r1]