From 69078d4b3bf695e94ea0c0a61740e524f829f50e Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Tue, 11 Jun 2002 08:01:41 +0000 Subject: [PATCH] GCJ's parser requires the tokens to be defined before the prologue. * data/bison.simple: Output the token definition before the user's prologue. * tests/regression.at (Braces parsing, Duplicate string) (Mixing %token styles): Check the output from bison. (Early token definitions): New. --- ChangeLog | 10 +++++++++ data/bison.simple | 4 ++-- tests/regression.at | 50 ++++++++++++++++++++++++++++++++++++++++----- 3 files changed, 57 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index d50b1e87..02a5ac60 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2002-06-10 Akim Demaille + + GCJ's parser requires the tokens to be defined before the prologue. + + * data/bison.simple: Output the token definition before the user's + prologue. + * tests/regression.at (Braces parsing, Duplicate string) + (Mixing %token styles): Check the output from bison. + (Early token definitions): New. + 2002-06-10 Akim Demaille * src/symtab.c (symbol_user_token_number_set): Don't complain when diff --git a/data/bison.simple b/data/bison.simple index 1beb5ed7..8b5eda87 100644 --- a/data/bison.simple +++ b/data/bison.simple @@ -175,6 +175,8 @@ m4_if(b4_prefix[], [yy], [], /* Copy the first part of user declarations. */ b4_pre_prologue +b4_token_defines(b4_tokens) + /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG b4_debug @@ -312,8 +314,6 @@ union yyalloc #endif -b4_token_defines(b4_tokens) - /* YYFINAL -- State number of the termination state. */ #define YYFINAL b4_final #define YYFLAG b4_flag diff --git a/tests/regression.at b/tests/regression.at index d1d819e6..1adce973 100644 --- a/tests/regression.at +++ b/tests/regression.at @@ -19,12 +19,50 @@ AT_BANNER([[Regression tests.]]) +## ------------------------- ## +## Early token definitions. ## +## ------------------------- ## + + +AT_SETUP([Early token definitions]) + +# Found in GCJ: they expect the tokens to be defined before the user +# prologue, so that they can use the token definitions in it. + +AT_DATA([input.y], +[[%{ +void yyerror (const char *s); +int yylex (void); +%} + +%union +{ + int val; +}; +%{ +#ifndef MY_TOKEN +# error "MY_TOKEN not defined." +#endif +%} +%token MY_TOKEN +%% +exp: MY_TOKEN; +%% +]]) + +AT_CHECK([bison input.y -o input.c]) +AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -c]) + +AT_CLEANUP + + + ## ---------------- ## ## Braces parsing. ## ## ---------------- ## -AT_SETUP([braces parsing]) +AT_SETUP([Braces parsing]) AT_DATA([input.y], [[/* Bison used to swallow the character after `}'. */ @@ -34,7 +72,7 @@ exp: { tests = {{{{{{{{{{}}}}}}}}}}; }; %% ]]) -AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore) +AT_CHECK([bison -v input.y -o input.c]) AT_CHECK([fgrep 'tests = {{{{{{{{{{}}}}}}}}}};' input.c], 0, [ignore]) @@ -61,7 +99,9 @@ exp: '(' exp ')' | NUM ; %% ]]) -AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore) +AT_CHECK([bison -v input.y -o input.c], 0, [], +[[input.y:6: warning: symbol `"<="' used more than once as a literal string +]]) AT_CLEANUP @@ -102,7 +142,7 @@ expr: }; ]]) -AT_CHECK([bison input.y -o input.c -v], 0, [], []) +AT_CHECK([bison input.y -o input.c -v]) # Check the contents of the report. AT_CHECK([cat input.output], [], @@ -230,7 +270,7 @@ exp: ; %% ]]) -AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore) +AT_CHECK([bison -v input.y -o input.c]) AT_CLEANUP -- 2.47.2