re PR libfortran/37707 (Namelist read of array of derived type incorrect)

2008-10-22  Jerry DeLisle  <jvdelisle@gcc.gnu.org

	PR libfortran/37707
	* io/list_read.c (read_character): Remove code to look ahead in namelist
	reads to descriminate non-delimited strings from namelist objects.
	* io/write.c (namelist_write): Delimit character strings with quote or
	apostrophe, defaulting to quote.

From-SVN: r141317
This commit is contained in:
Jerry DeLisle 2008-10-23 02:31:00 +00:00
parent a7bd6332ac
commit a7f5d0542a
3 changed files with 11 additions and 59 deletions

View File

@ -1,3 +1,11 @@
2008-10-22 Jerry DeLisle <jvdelisle@gcc.gnu.org
PR libfortran/37707
* io/list_read.c (read_character): Remove code to look ahead in namelist
reads to descriminate non-delimited strings from namelist objects.
* io/write.c (namelist_write): Delimit character strings with quote or
apostrophe, defaulting to quote.
2008-10-21 Thomas Koenig <tkoenig@gcc.gnu.org>
PR libfortran/34670

View File

@ -929,52 +929,8 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
default:
if (dtp->u.p.namelist_mode)
{
if (dtp->u.p.current_unit->delim_status == DELIM_APOSTROPHE
|| dtp->u.p.current_unit->delim_status == DELIM_QUOTE
|| c == '&' || c == '$' || c == '/')
{
unget_char (dtp, c);
return;
}
/* Check to see if we are seeing a namelist object name by using the
line buffer and looking ahead for an '=' or '('. */
l_push_char (dtp, c);
int i;
for(i = 0; i < 63; i++)
{
c = next_char (dtp);
if (is_separator(c))
{
unget_char (dtp, c);
eat_separator (dtp);
c = next_char (dtp);
if (c != '=')
{
l_push_char (dtp, c);
dtp->u.p.item_count = 0;
dtp->u.p.line_buffer_enabled = 1;
goto get_string;
}
}
l_push_char (dtp, c);
if (c == '=' || c == '(')
{
dtp->u.p.item_count = 0;
dtp->u.p.nml_read_error = 1;
dtp->u.p.line_buffer_enabled = 1;
return;
}
}
/* The string is too long to be a valid object name so assume that it
is a string to be read in as a value. */
dtp->u.p.item_count = 0;
dtp->u.p.line_buffer_enabled = 1;
goto get_string;
unget_char (dtp, c);
return;
}
push_char (dtp, c);

View File

@ -1442,20 +1442,8 @@ namelist_write (st_parameter_dt *dtp)
/* Set the delimiter for namelist output. */
tmp_delim = dtp->u.p.current_unit->delim_status;
switch (tmp_delim)
{
case (DELIM_QUOTE):
dtp->u.p.nml_delim = '"';
break;
case (DELIM_APOSTROPHE):
dtp->u.p.nml_delim = '\'';
break;
default:
dtp->u.p.nml_delim = '\0';
break;
}
dtp->u.p.nml_delim = tmp_delim == DELIM_APOSTROPHE ? '\'' : '"';
/* Temporarily disable namelist delimters. */
dtp->u.p.current_unit->delim_status = DELIM_NONE;