bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

01-fix-test-suite.patch


From: Akim Demaille
Subject: 01-fix-test-suite.patch
Date: Sun, 30 Jun 2002 19:26:28 +0200

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        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.
        
        
Index: tests/actions.at
--- tests/actions.at Fri, 28 Jun 2002 21:50:19 +0200 akim
+++ tests/actions.at Fri, 28 Jun 2002 22:37:14 +0200 akim
@@ -193,7 +193,6 @@ exp: a_1 a_2 { $<val>$ = 3; } a_4 a_5 su
 %{
 static int yylex (void);
 static void yyerror (const char *msg);
-static void yyprint (FILE *out, int num, YYSTYPE val);
 %}
 
 
@@ -252,21 +251,22 @@ thing:
          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 @@ thing:
 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)
Index: tests/calc.at
--- tests/calc.at Fri, 28 Jun 2002 21:50:19 +0200 akim
+++ tests/calc.at Fri, 28 Jun 2002 22:36:22 +0200 akim
@@ -67,30 +67,17 @@ m4_define([_AT_DATA_CALC_Y],
 
 %}
 
-/* 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 <ival> NUM "number"
 %type  <ival> 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)
 {
@@ -257,11 +238,6 @@ exp:
   for (/* Niente */; exponent; --exponent)
     res *= base;
   return res;
-}
-
-void
-id (YYSTYPE* lval)
-{
 }
 
 int
Index: tests/input.at
--- tests/input.at Fri, 28 Jun 2002 21:50:19 +0200 akim
+++ tests/input.at Fri, 28 Jun 2002 22:42:26 +0200 akim
@@ -21,30 +21,6 @@
 # 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.  ##
 ## ------------ ##
@@ -101,6 +77,114 @@ exp: foo {} foo
 [[input.y:4.4-15: type clash (`bar' `') on default action
 input.y:5.4-8: type clash (`bar' `') on default action
 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 <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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]