mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 12:23:04 +00:00
(check_and_convert_grammar): New function.
(reader): Close the input file even if something went wrong during parsing. Minor file descriptor leak reported by twlevo.
This commit is contained in:
26
src/reader.c
26
src/reader.c
@@ -36,6 +36,8 @@
|
||||
#include "symlist.h"
|
||||
#include "symtab.h"
|
||||
|
||||
static void check_and_convert_grammar (void);
|
||||
|
||||
static symbol_list *grammar = NULL;
|
||||
static bool start_flag = false;
|
||||
merger_list *merge_functions;
|
||||
@@ -515,12 +517,22 @@ reader (void)
|
||||
scanner_initialize ();
|
||||
gram_parse ();
|
||||
|
||||
/* If something went wrong during the parsing, don't try to
|
||||
continue. */
|
||||
if (complaint_issued)
|
||||
return;
|
||||
if (! complaint_issued)
|
||||
check_and_convert_grammar ();
|
||||
|
||||
/* Grammar has been read. Do some checking */
|
||||
xfclose (gram_in);
|
||||
}
|
||||
|
||||
|
||||
/*-------------------------------------------------------------.
|
||||
| Check the grammar that has just been read, and convert it to |
|
||||
| internal form. |
|
||||
`-------------------------------------------------------------*/
|
||||
|
||||
static void
|
||||
check_and_convert_grammar (void)
|
||||
{
|
||||
/* Grammar has been read. Do some checking. */
|
||||
if (nrules == 0)
|
||||
fatal (_("no rules in the input grammar"));
|
||||
|
||||
@@ -537,7 +549,7 @@ reader (void)
|
||||
endtoken->user_token_number = 0;
|
||||
}
|
||||
|
||||
/* Insert the initial rule, which line is that of the first rule
|
||||
/* Insert the initial rule, whose line is that of the first rule
|
||||
(not that of the start symbol):
|
||||
|
||||
accept: %start EOF. */
|
||||
@@ -555,8 +567,6 @@ reader (void)
|
||||
|
||||
assert (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
|
||||
|
||||
xfclose (gram_in);
|
||||
|
||||
/* Assign the symbols their symbol numbers. Write #defines for the
|
||||
token symbols into FDEFINES if requested. */
|
||||
symbols_pack ();
|
||||
|
||||
Reference in New Issue
Block a user