mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 17:23:02 +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 "symlist.h"
|
||||||
#include "symtab.h"
|
#include "symtab.h"
|
||||||
|
|
||||||
|
static void check_and_convert_grammar (void);
|
||||||
|
|
||||||
static symbol_list *grammar = NULL;
|
static symbol_list *grammar = NULL;
|
||||||
static bool start_flag = false;
|
static bool start_flag = false;
|
||||||
merger_list *merge_functions;
|
merger_list *merge_functions;
|
||||||
@@ -515,12 +517,22 @@ reader (void)
|
|||||||
scanner_initialize ();
|
scanner_initialize ();
|
||||||
gram_parse ();
|
gram_parse ();
|
||||||
|
|
||||||
/* If something went wrong during the parsing, don't try to
|
if (! complaint_issued)
|
||||||
continue. */
|
check_and_convert_grammar ();
|
||||||
if (complaint_issued)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* 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)
|
if (nrules == 0)
|
||||||
fatal (_("no rules in the input grammar"));
|
fatal (_("no rules in the input grammar"));
|
||||||
|
|
||||||
@@ -537,7 +549,7 @@ reader (void)
|
|||||||
endtoken->user_token_number = 0;
|
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):
|
(not that of the start symbol):
|
||||||
|
|
||||||
accept: %start EOF. */
|
accept: %start EOF. */
|
||||||
@@ -555,8 +567,6 @@ reader (void)
|
|||||||
|
|
||||||
assert (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
|
assert (nsyms <= SYMBOL_NUMBER_MAXIMUM && nsyms == ntokens + nvars);
|
||||||
|
|
||||||
xfclose (gram_in);
|
|
||||||
|
|
||||||
/* Assign the symbols their symbol numbers. Write #defines for the
|
/* Assign the symbols their symbol numbers. Write #defines for the
|
||||||
token symbols into FDEFINES if requested. */
|
token symbols into FDEFINES if requested. */
|
||||||
symbols_pack ();
|
symbols_pack ();
|
||||||
|
|||||||
Reference in New Issue
Block a user