]> git.saurik.com Git - bison.git/commitdiff
Make the test suite pass with warnings checked.
authorAkim Demaille <akim@epita.fr>
Sun, 30 Jun 2002 17:27:14 +0000 (17:27 +0000)
committerAkim Demaille <akim@epita.fr>
Sun, 30 Jun 2002 17:27:14 +0000 (17:27 +0000)
* 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
tests/actions.at
tests/calc.at
tests/input.at

index 6e921cd1411811f001c917e4372645bce74750f8..cacfb23b988b787471591e032f08203c8b521ec0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2002-06-30  Akim Demaille  <akim@epita.fr>
+
+       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  <Hilfinger@CS.Berkeley.EDU>
 
        * data/glr.c: Correct typo in Emacs-mode directive.  Slightly 
 2002-06-28  Paul Hilfinger  <Hilfinger@CS.Berkeley.EDU>
 
        * data/glr.c: Correct typo in Emacs-mode directive.  Slightly 
index 8b29f39741ae2ac36b8fd658dce89365e16dea9f..5331bfc61cb14b85a3e38468663eaf796d39898d 100644 (file)
@@ -193,7 +193,6 @@ AT_DATA([[input.y]],
 %{
 static int yylex (void);
 static void yyerror (const char *msg);
 %{
 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', ';',
 
          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'
     };
       'x', 'x', ';',
       'x', ';',
       'y'
     };
-  static int counter = 0;
+  static unsigned int counter = 0;
 
   if (counter < (sizeof(input) / sizeof (input[0])))
     {
        yylval.ival = counter;
 
   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;
        /* 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
     {
     }
   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,
 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)
 thing(0): 'x'(0)
-sending: 'x' (line 1)
+sending: 'x' (value = 1, line 10)
 thing(1): 'x'(1)
 thing(1): 'x'(1)
-sending: 'x' (line 2)
+sending: 'x' (value = 2, line 20)
 thing(2): 'x'(2)
 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)
 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)
 Freeing token 'x' (4 from 40)
-sending: 'x' (line 5)
+sending: 'x' (value = 5, line 50)
 Freeing token 'x' (5 from 50)
 Freeing token 'x' (5 from 50)
-sending: ';' (line 6)
+sending: ';' (value = 6, line 60)
 line(-1): error ';'
 line(-1): error ';'
-sending: 'x' (line 7)
+sending: 'x' (value = 7, line 70)
 thing(7): 'x'(7)
 thing(7): 'x'(7)
-sending: 'x' (line 8)
+sending: 'x' (value = 8, line 80)
 thing(8): 'x'(8)
 thing(8): 'x'(8)
-sending: ';' (line 9)
+sending: ';' (value = 9, line 90)
 line(7): thing(7) thing(8) ';'
 line(7): thing(7) thing(8) ';'
-sending: 'x' (line 10)
+sending: 'x' (value = 10, line 100)
 thing(10): 'x'(10)
 thing(10): 'x'(10)
-sending: ';' (line 11)
+sending: ';' (value = 11, line 110)
 line(10): thing(10) ';'
 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)
 120: parse error, unexpected $undefined., expecting $ or error or 'x'
 sending: EOF
 Freeing nterm line (10 from 100)
index ec19d90375b930549b75e193a2ef85ffef0b46f5..5f91557ced896f48b6d991750e0f742d09cd7a35 100644 (file)
@@ -67,30 +67,17 @@ typedef int value_t;
 
 %}
 
 
 %}
 
-/* Exercise M4 quoting: '@:>@@:>@', 0.  */
-
-/* Also exercise %union. */
+/* Exercise %union. */
 %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 <ival> NUM "number"
 %type  <ival> exp
 
 /* Bison Declarations */
 %token CALC_EOF 0 "end of file"
 %token <ival> NUM "number"
 %type  <ival> exp
 
-/* Exercise quotes in strings.  */
-%token FAKE "fake @>:@@>:@,"
-
 %nonassoc '=' /* comparison           */
 %left '-' '+'
 %left '*' '/'
 %nonassoc '=' /* comparison           */
 %left '-' '+'
 %left '*' '/'
@@ -107,15 +94,10 @@ input:
 ;
 
 line:
 ;
 
 line:
-  '\n'
-| exp '\n'
-  {
-    /* Exercise quotes in braces.  */
-    char tmp[] = "@>:@@:>@,";
-  }
+  '\n'      {}
+| exp '\n'  {}
 ;
 
 ;
 
-/* Exercise M4 quoting: '@:>@@:>@', 1.  */
 exp:
   NUM                { $$ = $1;             }
 | exp '=' exp
 exp:
   NUM                { $$ = $1;             }
 | exp '=' exp
@@ -137,7 +119,6 @@ exp:
 /* The input. */
 FILE *yyin;
 
 /* The input. */
 FILE *yyin;
 
-/* Exercise M4 quoting: '@:>@@:>@', 2.  */
 static void
 yyerror (const char *s)
 {
 static void
 yyerror (const char *s)
 {
@@ -259,11 +240,6 @@ power (int base, int exponent)
   return res;
 }
 
   return res;
 }
 
-void
-id (YYSTYPE* lval)
-{
-}
-
 int
 main (int argc, const char **argv)
 {
 int
 main (int argc, const char **argv)
 {
index 68bd1f6d6737fe4d05a01ee1ffd40a7c82e16825..37703ce21fbe1bf931b07a31c43d55366cf76e77 100644 (file)
@@ -21,30 +21,6 @@ AT_BANNER([[Input Processing.]])
 # Mostly test that we are robust to mistakes.
 
 
 # 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.  ##
 ## ------------ ##
 ## ------------ ##
 ## Invalid $n.  ##
 ## ------------ ##
@@ -104,3 +80,111 @@ input.y:6.4: empty rule for typed nonterminal, and no action
 ]])
 
 AT_CLEANUP
 ]])
 
 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 <stdio.h>
+%}
+/* %{ 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 <ival> '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