* src/print.c: Include reduce.h.

Reported by Hans Aberg.
This commit is contained in:
Akim Demaille
2001-11-14 14:43:58 +00:00
parent 0f37a9942f
commit 09b503c8e1
5 changed files with 64 additions and 43 deletions

View File

@@ -1,3 +1,20 @@
2001-11-14 Akim Demaille <akim@epita.fr>
* src/print.c: Include reduce.h.
Reported by Hans Aberg.
2001-11-14 Akim Demaille <akim@epita.fr>
* src/lex.c, src/lex.h (token_buffer, unlexed_token_buffer):
Revert a previous patch: these are really const.
* src/conflicts.c (conflict_report): Additional useless pair of
braces to pacify GCC's warnings for `if () if () {} else {}'.
* src/lex.c (parse_percent_token): Replace equal_offset with
arg_offset.
arg is const.
Be sure to strdup `arg' when used, since there is no reason for
token_buffer not to change.
2001-11-14 Akim Demaille <akim@epita.fr>
* src/system.h (EXIT_SUCCESS, EXIT_FAILURE): Ensure a proper

View File

@@ -474,24 +474,26 @@ conflicts_print (void)
/* Report the total number of conflicts on STDERR. */
if (src_total || rrc_total)
if (yacc_flag)
{
/* If invoked with `--yacc', use the output format specified by
POSIX. */
fprintf (stderr, _("conflicts: "));
if (src_total > 0)
fprintf (stderr, _(" %d shift/reduce"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf (stderr, ",");
if (rrc_total > 0)
fprintf (stderr, _(" %d reduce/reduce"), rrc_total);
putc ('\n', stderr);
}
else
{
fprintf (stderr, _("%s contains "), infile);
fputs (conflict_report (src_total, rrc_total), stderr);
}
{
if (yacc_flag)
{
/* If invoked with `--yacc', use the output format specified by
POSIX. */
fprintf (stderr, _("conflicts: "));
if (src_total > 0)
fprintf (stderr, _(" %d shift/reduce"), src_total);
if (src_total > 0 && rrc_total > 0)
fprintf (stderr, ",");
if (rrc_total > 0)
fprintf (stderr, _(" %d reduce/reduce"), rrc_total);
putc ('\n', stderr);
}
else
{
fprintf (stderr, _("%s contains "), infile);
fputs (conflict_report (src_total, rrc_total), stderr);
}
}
if (expected_conflicts != -1
&& src_total != expected_conflicts)

View File

@@ -30,15 +30,15 @@
/* Buffer for storing the current token. */
static struct obstack token_obstack;
char *token_buffer = NULL;
const char *token_buffer = NULL;
bucket *symval;
bucket *symval = NULL;
int numval;
/* A token to be reread, see unlex and lex. */
static token_t unlexed = tok_undef;
static bucket *unlexed_symval = NULL;
static char *unlexed_token_buffer = NULL;
static const char *unlexed_token_buffer = NULL;
void
lex_init (void)
@@ -554,9 +554,9 @@ token_t
parse_percent_token (void)
{
const struct option_table_struct *tx = NULL;
/* Where `=' was found in token_buffer. */
size_t equal_offset = 0;
char *arg = NULL;
const char *arg = NULL;
/* Where the ARG was found in token_buffer. */
size_t arg_offset = 0;
int c = getc (finput);
@@ -598,33 +598,34 @@ parse_percent_token (void)
c = getc (finput);
}
/* %DIRECTIVE="ARG". Separate into
TOKEN_BUFFER = `%DIRECTIVE\0ARG\0'.
This is a bit hackish, but once we move to a Bison parser,
things will be cleaned up. */
if (c == '=')
{
equal_offset = obstack_object_size (&token_obstack);
obstack_1grow (&token_obstack, c);
/* End of the directive. We skip the `='. */
obstack_1grow (&token_obstack, '\0');
/* Fetch the ARG if present. */
c = getc (finput);
if (c = '"')
if (c == '"')
{
int code; /* ignored here */
obstack_1grow (&token_obstack, '"');
/* Read up to and including ". */
while (literalchar (&token_obstack, &code, '"'))
/* nothing */;
int code;
arg_offset = obstack_object_size (&token_obstack);
/* Read up to and including `"'. Do not append the closing
`"' in the output: it's not part of the ARG. */
while (literalchar (NULL, &code, '"'))
obstack_1grow (&token_obstack, code);
}
/* else: should be an error. */
}
else
ungetc (c, finput);
obstack_1grow (&token_obstack, '\0');
token_buffer = obstack_finish (&token_obstack);
if (equal_offset)
{
/* %token_buffer="arg" */
arg = token_buffer + equal_offset + 2;
arg[strlen (arg) - 1] = '\0';
token_buffer[equal_offset] = '\0';
}
if (arg_offset)
arg = token_buffer + arg_offset;
/* table lookup % directive */
for (tx = option_table; tx->name; tx++)
@@ -647,7 +648,7 @@ parse_percent_token (void)
precedence. Side effect: if this %-option is used
several times, only the first is honored. Bah. */
if (!*((char **) (tx->set_flag)))
*((char **) (tx->set_flag)) = arg;
*((char **) (tx->set_flag)) = xstrdup (arg);
}
else
fatal (_("`%s' requires an argument"), token_buffer);

View File

@@ -57,7 +57,7 @@ typedef enum token_e
tok_obsolete
} token_t;
extern char *token_buffer;
extern const char *token_buffer;
extern bucket *symval;
extern int numval;

View File

@@ -1,5 +1,5 @@
/* Print information on generated parser, for bison,
Copyright 1984, 1986, 1989, 2000 Free Software Foundation, Inc.
Copyright 1984, 1986, 1989, 2000, 2001 Free Software Foundation, Inc.
This file is part of Bison, the GNU Compiler Compiler.
@@ -29,6 +29,7 @@
#include "state.h"
#include "reader.h"
#include "print.h"
#include "reduce.h"
#if 0
static void