mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +00:00
* NEWS: Version 2.1.
* NEWS: Remove notice of yytname change, since it was never in an official release. * data/glr.c (yydestroyGLRState): Rename local var to avoid shadowing diagnostic. * src/output.c (prepare): Likewise. * data/lalr1.cc (YYERROR_VERBOSE_IF): New macro. (yysyntax_error_): Use it to avoid GCC warning when YYERROR_VERBOSE is not defined. This is an awful hack, but it's enough for now. All callers changed. * tests/glr-regression-at (make_value): Args are const pointers now, to avoid GCC warning. (Duplicated user destructor for lookahead): New test. Currently skipped. It fails on my host but I'm not sure it'll always fail.
This commit is contained in:
22
ChangeLog
22
ChangeLog
@@ -1,11 +1,29 @@
|
||||
2005-09-16 Akim <akim@epita.fr>
|
||||
2005-09-16 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* NEWS: Version 2.1.
|
||||
|
||||
* NEWS: Remove notice of yytname change, since it was never in an
|
||||
official release.
|
||||
* data/glr.c (yydestroyGLRState): Rename local var to avoid shadowing
|
||||
diagnostic.
|
||||
* src/output.c (prepare): Likewise.
|
||||
* data/lalr1.cc (YYERROR_VERBOSE_IF): New macro.
|
||||
(yysyntax_error_): Use it to avoid GCC warning when YYERROR_VERBOSE
|
||||
is not defined. This is an awful hack, but it's enough for now.
|
||||
All callers changed.
|
||||
* tests/glr-regression-at (make_value): Args are const pointers now,
|
||||
to avoid GCC warning.
|
||||
(Duplicated user destructor for lookahead): New test. Currently
|
||||
skipped. It fails on my host but I'm not sure it'll always fail.
|
||||
|
||||
2005-09-16 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* src/symtab.h (struct symbol): Declare the printer and destructor
|
||||
as const, to avoid accidental calls to free.
|
||||
(symbol_destructor_set, symbol_printer_set): Adjust.
|
||||
* src/symtab.c: Adjust.
|
||||
|
||||
2005-09-16 Akim <akim@epita.fr>
|
||||
2005-09-16 Akim Demaille <akim@epita.fr>
|
||||
|
||||
* data/c.m4 (b4_token_enums): New.
|
||||
(b4_token_defines): Rename as...
|
||||
|
||||
7
NEWS
7
NEWS
@@ -1,7 +1,7 @@
|
||||
Bison News
|
||||
----------
|
||||
|
||||
Changes in version 2.0b, 2005-07-24:
|
||||
Changes in version 2.1, 2005-09-16:
|
||||
|
||||
* Bison-generated parsers now support the translation of diagnostics like
|
||||
"syntax error" into languages other than English. The default
|
||||
@@ -19,11 +19,6 @@ Changes in version 2.0b, 2005-07-24:
|
||||
behind on the stack. Also, the start symbol is now destroyed after a
|
||||
successful parse. In both cases, the behavior was formerly inconsistent.
|
||||
|
||||
* The yytname array now contains the same contents that it did in 2.0,
|
||||
undoing an incompatible and undocumented change made in 2.0a.
|
||||
|
||||
Changes in version 2.0a, 2005-05-22:
|
||||
|
||||
* When generating verbose diagnostics, Bison-generated parsers no longer
|
||||
quote the literal strings associated with tokens. For example, for
|
||||
a syntax error associated with '%token NUM "number"' they might
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
# least Autoconf 2.59.
|
||||
AC_PREREQ(2.59)
|
||||
|
||||
AC_INIT([GNU Bison], [2.0c], [bug-bison@gnu.org])
|
||||
AC_INIT([GNU Bison], [2.1], [bug-bison@gnu.org])
|
||||
AC_CONFIG_AUX_DIR([build-aux])
|
||||
AC_CONFIG_MACRO_DIR([m4])
|
||||
|
||||
|
||||
@@ -920,12 +920,12 @@ yydestroyGLRState (char const *yymsg, yyGLRState *yys)
|
||||
if (yys->yysemantics.yyfirstVal)
|
||||
{
|
||||
yySemanticOption *yyoption = yys->yysemantics.yyfirstVal;
|
||||
yyGLRState *yyrhs;
|
||||
yyGLRState *yyrh;
|
||||
int yyn;
|
||||
for (yyrhs = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
|
||||
for (yyrh = yyoption->yystate, yyn = yyrhsLength (yyoption->yyrule);
|
||||
yyn > 0;
|
||||
yyrhs = yyrhs->yypred, yyn -= 1)
|
||||
yydestroyGLRState (yymsg, yyrhs);
|
||||
yyrh = yyrh->yypred, yyn -= 1)
|
||||
yydestroyGLRState (yymsg, yyrh);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -69,6 +69,12 @@ b4_syncline([@oline@], [@ofile@])[
|
||||
# define YYERROR_VERBOSE ]b4_error_verbose[
|
||||
#endif
|
||||
|
||||
#if YYERROR_VERBOSE
|
||||
# define YYERROR_VERBOSE_IF(x) x
|
||||
#else
|
||||
# define YYERROR_VERBOSE_IF(x) /* empty */
|
||||
#endif
|
||||
|
||||
/* Enabling the token table. */
|
||||
#ifndef YYTOKEN_TABLE
|
||||
# define YYTOKEN_TABLE ]b4_token_table[
|
||||
@@ -176,7 +182,7 @@ namespace yy
|
||||
|
||||
/// Generate an error message.
|
||||
/// \param tok the look-ahead token.
|
||||
virtual std::string yysyntax_error_ (int tok);
|
||||
virtual std::string yysyntax_error_ (YYERROR_VERBOSE_IF (int tok));
|
||||
|
||||
#if YYDEBUG
|
||||
/// \brief Report a symbol on the debug stream.
|
||||
@@ -695,7 +701,7 @@ yyerrlab:
|
||||
if (!yyerrstatus_)
|
||||
{
|
||||
++yynerrs_;
|
||||
error (yylloc, yysyntax_error_ (yyilooka));
|
||||
error (yylloc, yysyntax_error_ (YYERROR_VERBOSE_IF (yyilooka)));
|
||||
}
|
||||
|
||||
yyerror_range[0] = yylloc;
|
||||
@@ -816,7 +822,7 @@ yyreturn:
|
||||
|
||||
// Generate an error message.
|
||||
std::string
|
||||
yy::]b4_parser_class_name[::yysyntax_error_ (int tok)
|
||||
yy::]b4_parser_class_name[::yysyntax_error_ (YYERROR_VERBOSE_IF (int tok))
|
||||
{
|
||||
std::string res;
|
||||
#if YYERROR_VERBOSE
|
||||
|
||||
@@ -618,8 +618,8 @@ prepare (void)
|
||||
|
||||
/* About the skeletons. */
|
||||
{
|
||||
char const* p = getenv ("BISON_PKGDATADIR");
|
||||
MUSCLE_INSERT_STRING ("pkgdatadir", p ? p : PKGDATADIR);
|
||||
char const *pkgdatadir = getenv ("BISON_PKGDATADIR");
|
||||
MUSCLE_INSERT_STRING ("pkgdatadir", pkgdatadir ? pkgdatadir : PKGDATADIR);
|
||||
MUSCLE_INSERT_C_STRING ("skeleton", skeleton);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,7 +338,8 @@ AT_CLEANUP
|
||||
AT_SETUP([Duplicate representation of merged trees])
|
||||
|
||||
AT_DATA_GRAMMAR([glr-regr4.y],
|
||||
[[%union { char *ptr; }
|
||||
[[
|
||||
%union { char *ptr; }
|
||||
%type <ptr> S A A1 A2 B
|
||||
%glr-parser
|
||||
|
||||
@@ -347,7 +348,7 @@ AT_DATA_GRAMMAR([glr-regr4.y],
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
static char *merge (YYSTYPE, YYSTYPE);
|
||||
static char *make_value (char *, char *);
|
||||
static char *make_value (char const *, char const *);
|
||||
static void yyerror (char const *);
|
||||
static int yylex (void);
|
||||
%}
|
||||
@@ -386,7 +387,7 @@ main (void)
|
||||
}
|
||||
|
||||
static char *
|
||||
make_value (char *parent, char *child)
|
||||
make_value (char const *parent, char const *child)
|
||||
{
|
||||
char const format[] = "%s <- %s";
|
||||
char *value =
|
||||
@@ -433,7 +434,8 @@ AT_CLEANUP
|
||||
AT_SETUP([User destructor for unresolved GLR semantic value])
|
||||
|
||||
AT_DATA_GRAMMAR([glr-regr5.y],
|
||||
[[%{
|
||||
[[
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
static void yyerror (char const *);
|
||||
@@ -503,7 +505,8 @@ AT_CLEANUP
|
||||
AT_SETUP([User destructor after an error during a split parse])
|
||||
|
||||
AT_DATA_GRAMMAR([glr-regr6.y],
|
||||
[[%{
|
||||
[[
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
static void yyerror (char const *);
|
||||
@@ -556,3 +559,80 @@ AT_CHECK([[./glr-regr6]], 0,
|
||||
])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
|
||||
## ------------------------------------------------------------------------- ##
|
||||
## Duplicated user destructor for lookahead ##
|
||||
## Thanks to Joel E. Denny for this test; see ##
|
||||
## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00035.html>. ##
|
||||
## ------------------------------------------------------------------------- ##
|
||||
|
||||
AT_SETUP([Duplicated user destructor for lookahead])
|
||||
|
||||
AT_DATA_GRAMMAR([glr-regr7.y],
|
||||
[[
|
||||
%{
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
static void yyerror (char const *);
|
||||
static int yylex (void);
|
||||
#define YYSTACKEXPANDABLE 0
|
||||
%}
|
||||
|
||||
%glr-parser
|
||||
%union { int *count; }
|
||||
%type <count> 'a'
|
||||
|
||||
%destructor {
|
||||
if ((*$$)++)
|
||||
fprintf (stderr, "Destructor called on same value twice.\n");
|
||||
} 'a'
|
||||
|
||||
%%
|
||||
|
||||
start:
|
||||
stack1 start
|
||||
| stack2 start
|
||||
| /* empty */
|
||||
;
|
||||
stack1: 'a' ;
|
||||
stack2: 'a' ;
|
||||
|
||||
%%
|
||||
|
||||
static int
|
||||
yylex (void)
|
||||
{
|
||||
yylval.count = malloc (sizeof (int));
|
||||
if (!yylval.count)
|
||||
{
|
||||
fprintf (stderr, "Test inconclusive.\n");
|
||||
exit (EXIT_FAILURE);
|
||||
}
|
||||
*yylval.count = 0;
|
||||
return 'a';
|
||||
}
|
||||
|
||||
static void
|
||||
yyerror (char const *msg)
|
||||
{
|
||||
fprintf (stderr, "%s\n", msg);
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
return yyparse ();
|
||||
}
|
||||
]])
|
||||
|
||||
AT_CHECK([[bison -o glr-regr7.c glr-regr7.y]], 0, [],
|
||||
[glr-regr7.y: conflicts: 2 reduce/reduce
|
||||
])
|
||||
AT_COMPILE([glr-regr7])
|
||||
|
||||
AT_CHECK([[exit 77; ./glr-regr7]], 2, [],
|
||||
[memory exhausted
|
||||
])
|
||||
|
||||
AT_CLEANUP
|
||||
|
||||
Reference in New Issue
Block a user