From 5a08f1ce215ab931d571cd9331309c2785bc8551 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Sun, 30 Jun 2002 17:27:14 +0000 Subject: [PATCH] Make the test suite pass with warnings checked. * tests/actions.at (Printers and Destructors): Improve. Avoid unsigned vs. signed issues. * tests/calc.at: Don't exercise the scanner here, do it... * tests/input.at (Torturing the Scanner): here. --- ChangeLog | 10 ++++ tests/actions.at | 38 +++++++------- tests/calc.at | 32 ++---------- tests/input.at | 132 ++++++++++++++++++++++++++++++++++++++--------- 4 files changed, 141 insertions(+), 71 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6e921cd1..cacfb23b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2002-06-30 Akim Demaille + + Make the test suite pass with warnings checked. + + * tests/actions.at (Printers and Destructors): Improve. + Avoid unsigned vs. signed issues. + * tests/calc.at: Don't exercise the scanner here, do it... + * tests/input.at (Torturing the Scanner): here. + + 2002-06-28 Paul Hilfinger * data/glr.c: Correct typo in Emacs-mode directive. Slightly diff --git a/tests/actions.at b/tests/actions.at index 8b29f397..5331bfc6 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -193,7 +193,6 @@ AT_DATA([[input.y]], %{ static int yylex (void); static void yyerror (const char *msg); -static void yyprint (FILE *out, int num, YYSTYPE val); %} @@ -252,21 +251,22 @@ yylex (void) can be reduced. */ 'x', 'x', 'x', 'x', 'x', 'x', ';', - /* Load the stack and provoke an error that cannot be caught be - the grammar, and check that the stack is cleared. */ + /* Load the stack and provoke an error that cannot be caught by + the grammar, to check that the stack is cleared. */ 'x', 'x', ';', 'x', ';', 'y' }; - static int counter = 0; + static unsigned int counter = 0; if (counter < (sizeof(input) / sizeof (input[0]))) { yylval.ival = counter; - printf ("sending: '%c' (line %d)\n", input[counter], counter); /* As in BASIC, line numbers go from 10 to 10. */ yylloc.first_line = 10 * counter; - return input[counter++]; + printf ("sending: '%c' (value = %d, line %d)\n", + input[counter], yylval.ival, yylloc.first_line); + return (int) input[counter++]; } else { @@ -298,35 +298,35 @@ main (void) AT_CHECK([bison input.y --location -d -v -o input.c]) AT_CHECK([$CC $CFLAGS $CPPFLAGS input.c -o input], 0, [], [ignore]) AT_CHECK([./input], 1, -[[sending: 'x' (line 0) +[[sending: 'x' (value = 0, line 0) thing(0): 'x'(0) -sending: 'x' (line 1) +sending: 'x' (value = 1, line 10) thing(1): 'x'(1) -sending: 'x' (line 2) +sending: 'x' (value = 2, line 20) thing(2): 'x'(2) -sending: 'x' (line 3) +sending: 'x' (value = 3, line 30) 30: parse error, unexpected 'x', expecting ';' Freeing nterm thing (2 from 20) Freeing nterm thing (1 from 10) Freeing nterm thing (0 from 0) Freeing token 'x' (3 from 30) -sending: 'x' (line 4) +sending: 'x' (value = 4, line 40) Freeing token 'x' (4 from 40) -sending: 'x' (line 5) +sending: 'x' (value = 5, line 50) Freeing token 'x' (5 from 50) -sending: ';' (line 6) +sending: ';' (value = 6, line 60) line(-1): error ';' -sending: 'x' (line 7) +sending: 'x' (value = 7, line 70) thing(7): 'x'(7) -sending: 'x' (line 8) +sending: 'x' (value = 8, line 80) thing(8): 'x'(8) -sending: ';' (line 9) +sending: ';' (value = 9, line 90) line(7): thing(7) thing(8) ';' -sending: 'x' (line 10) +sending: 'x' (value = 10, line 100) thing(10): 'x'(10) -sending: ';' (line 11) +sending: ';' (value = 11, line 110) line(10): thing(10) ';' -sending: 'y' (line 12) +sending: 'y' (value = 12, line 120) 120: parse error, unexpected $undefined., expecting $ or error or 'x' sending: EOF Freeing nterm line (10 from 100) diff --git a/tests/calc.at b/tests/calc.at index ec19d903..5f91557c 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -67,30 +67,17 @@ typedef int value_t; %} -/* Exercise M4 quoting: '@:>@@:>@', 0. */ - -/* Also exercise %union. */ +/* Exercise %union. */ %union { - value_t ival; /* A comment to exercise an old bug. */ + value_t ival; }; -/* Exercise post-prologue dependency to %union. */ -%{ -static void id (YYSTYPE *lval); - -/* Exercise quotes in declarations. */ -char quote[] = "@:>@@:>@,"; -%} - /* Bison Declarations */ %token CALC_EOF 0 "end of file" %token NUM "number" %type exp -/* Exercise quotes in strings. */ -%token FAKE "fake @>:@@>:@," - %nonassoc '=' /* comparison */ %left '-' '+' %left '*' '/' @@ -107,15 +94,10 @@ input: ; line: - '\n' -| exp '\n' - { - /* Exercise quotes in braces. */ - char tmp[] = "@>:@@:>@,"; - } + '\n' {} +| exp '\n' {} ; -/* Exercise M4 quoting: '@:>@@:>@', 1. */ exp: NUM { $$ = $1; } | exp '=' exp @@ -137,7 +119,6 @@ exp: /* The input. */ FILE *yyin; -/* Exercise M4 quoting: '@:>@@:>@', 2. */ static void yyerror (const char *s) { @@ -259,11 +240,6 @@ power (int base, int exponent) return res; } -void -id (YYSTYPE* lval) -{ -} - int main (int argc, const char **argv) { diff --git a/tests/input.at b/tests/input.at index 68bd1f6d..37703ce2 100644 --- a/tests/input.at +++ b/tests/input.at @@ -21,30 +21,6 @@ AT_BANNER([[Input Processing.]]) # Mostly test that we are robust to mistakes. -## ----------------------- ## -## Torturing the Scanner. ## -## ----------------------- ## - -AT_SETUP([Torturing the Scanner]) - -AT_DATA([input.y], -[[%{ -/* This is seen in GCC: a %{ and %} in middle of a comment. */ -const char *foo = "So %{ and %} can be here."; -%} -/* %{ and %} can be here too. */ - -%% -exp: 'a'; -]]) - -AT_CHECK([bison input.y]) - -AT_CLEANUP - - - - ## ------------ ## ## Invalid $n. ## ## ------------ ## @@ -104,3 +80,111 @@ input.y:6.4: empty rule for typed nonterminal, and no action ]]) AT_CLEANUP + + + +## ----------------------- ## +## Torturing the Scanner. ## +## ----------------------- ## + +# Be sure to compile and run, so that the C compiler checks what +# we do. + +AT_SETUP([Torturing the Scanner]) + +AT_DATA([input.y], +[[%{ +/* This is seen in GCC: a %{ and %} in middle of a comment. */ +const char *foo = "So %{ and %} can be here too."; + +#include +%} +/* %{ and %} can be here too. */ + +%{ +/* Exercise pre-prologue dependency to %union. */ +typedef int value_t; +%} + +/* Exercise M4 quoting: '@:>@@:>@', 0. */ + +/* Also exercise %union. */ +%union +{ + value_t ival; /* A comment to exercise an old bug. */ +}; + + +/* Exercise post-prologue dependency to %union. */ +%{ +static YYSTYPE value_t_as_yystype (value_t val); + +/* Exercise quotes in declarations. */ +char quote[] = "@:>@@:>@,"; +%} + +%{ +static void yyerror (const char *s); +static int yylex (void); +%} + +%type '1' + +/* Exercise quotes in strings. */ +%token FAKE "fake @<:@@:>@," + +%% +/* Exercise M4 quoting: '@:>@@:>@', 1. */ +exp: '1' + { + /* Exercise quotes in braces. */ + char tmp[] = "@<:@%c@:>@,\n"; + printf (tmp, $1); + } +; +%% +/* Exercise M4 quoting: '@:>@@:>@', 2. */ + +static YYSTYPE +value_t_as_yystype (value_t val) +{ + YYSTYPE res; + res.ival = val; + return res; +} + +static int +yylex (void) +{ + static const char *input = "1"; + yylval = value_t_as_yystype (*input); + return *input++; +} + +static void +yyerror (const char *msg) +{ + fprintf (stderr, "%s\n", msg); +} +]]) + +AT_DATA([main.c], +[[typedef int value_t; +#include "input.h" + +int yyparse (void); + +int +main (void) +{ + return yyparse (); +} +]]) + +AT_CHECK([bison input.y -d -v -o input.c]) +AT_CHECK([$CC $CFLAGS $CPPFLAGS main.c input.c -o input], 0, [], [ignore]) +AT_CHECK([./input], 0, +[[[1], +]]) + +AT_CLEANUP -- 2.45.2