re PR libfortran/33253 (namelist: reading back a string with apostrophe)
2007-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org> PR libfortran/33253 * io/list_read.c (read_character): Use line_buffer to scan ahead for object name or string when no delimiter is found. From-SVN: r129016
This commit is contained in:
parent
d17cd69f66
commit
808a2225f9
|
@ -1,3 +1,11 @@
|
|||
<<<<<<< .mine
|
||||
2007-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libfortran/33253
|
||||
* io/list_read.c (read_character): Use line_buffer to scan ahead for
|
||||
object name or string when no delimiter is found.
|
||||
|
||||
=======
|
||||
2007-10-04 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
|
||||
|
||||
PR libfortran/32021
|
||||
|
@ -10,6 +18,7 @@
|
|||
fpu_precision, sighup, sigint, allocate_init_flag and
|
||||
allocate_init_value.
|
||||
|
||||
>>>>>>> .r129015
|
||||
2007-10-02 Jerry DeLisle <jvdelisle@gcc.gnu.org>
|
||||
|
||||
PR libfortran/33253
|
||||
|
|
|
@ -893,14 +893,53 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
|
|||
goto get_string;
|
||||
|
||||
default:
|
||||
if (dtp->u.p.namelist_mode
|
||||
&& (dtp->u.p.current_unit->flags.delim == DELIM_APOSTROPHE
|
||||
|| dtp->u.p.current_unit->flags.delim == DELIM_QUOTE
|
||||
|| quote == ' '))
|
||||
if (dtp->u.p.namelist_mode)
|
||||
{
|
||||
unget_char (dtp,c);
|
||||
return;
|
||||
if (dtp->u.p.current_unit->flags.delim == DELIM_APOSTROPHE
|
||||
|| dtp->u.p.current_unit->flags.delim == DELIM_QUOTE)
|
||||
{
|
||||
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.line_buffer_enabled = 1;
|
||||
goto get_string;
|
||||
}
|
||||
|
||||
push_char (dtp, c);
|
||||
goto get_string;
|
||||
}
|
||||
|
@ -1007,6 +1046,7 @@ read_character (st_parameter_dt *dtp, int length __attribute__ ((unused)))
|
|||
unget_char (dtp, c);
|
||||
eat_separator (dtp);
|
||||
dtp->u.p.saved_type = BT_CHARACTER;
|
||||
free_line (dtp);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue