2002-06-10 Akim Demaille <akim@epita.fr>
+ 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 <akim@epita.fr>
+
* src/symtab.c (symbol_user_token_number_set): Don't complain when
assigning twice the same user number to a token, so that we can
use it in...
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 `}'. */
%%
]])
-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])
%%
]])
-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
};
]])
-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], [],
%%
]])
-AT_CHECK([bison -v input.y -o input.c], 0, ignore, ignore)
+AT_CHECK([bison -v input.y -o input.c])
AT_CLEANUP