[patch,fortran] PR33268 read ('(f3.3)'), a rejected due to the extra (...)
Jerry DeLisle
jvdelisle@verizon.net
Fri May 2 01:37:00 GMT 2008
Jerry DeLisle wrote:
> Hi Folks,
>
> This patch provides for the "format" form of the READ and PRINT
> statements. By "format" form I mean with no UNIT specified. The patch
> also rejects the WRITE statement with this form. See section 9.5 of the
> F2003 Standard.
>
> By example:
>
> print('a'), 'Hello' ! Invalid, missing parens inside format string
> write(*,('(a)')) 'Hello' ! Valid
> write (*,'(f8.3)'), 3.141597 ! Extension, comma after the ')'
> write ('(a)'), "invalid" ! Invalid, "format" form not allowed for WRITE
> print ('(a)'), "valid" ! Valid, "format" form accepted
> read ('(f3.3)')), a ! Valid, "format form accepted
>
> To accomplish this, I added a new expression pointer, extra_comma, to
> pass the io_kind and locus to gfc_resolve_dt. If this pointer is
> non-NULL, it indicates that an extra comma preceding the I/O list was
> encountered. This signals a possible alternate form of the I/O statement.
>
> If the alternate form was used, the io_unit expression will come in as a
> character type of expression. If so, it is assumed to be a format
> expression and not a unit, and the pointers involved are adjusted so
> that the format expression refers to the character expression in
> io_unit, and the io_unit is pointed to the default unit for the io_kind.
>
> The io_kind is passed in extra_comma->value.logical. I used this since
> it is an int and can hold the enumerator type without problem. Another
> option would be to add "io_kind k" to the union for value in gfc_expr,
> giving more readable code.
>
> Regression tested on x86-64.
>
> OK for trunk?
>
ping
More information about the Fortran
mailing list