]> git.saurik.com Git - bison.git/blobdiff - tests/regression.at
DJGPP support added.
[bison.git] / tests / regression.at
index 59eddbb22964be57802530cc20d3303a8fca9111..eb85f290053fbdbfc9161a6f6a7e483ebc31bab3 100644 (file)
@@ -1,5 +1,5 @@
 # Bison Regressions.                               -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+# Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -13,8 +13,8 @@
 
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
-# 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
 
 AT_BANNER([[Regression tests.]])
 
@@ -298,7 +298,27 @@ input.y:5.1-17: invalid directive: `%a-does-not-exist'
 input.y:6.1: invalid character: `%'
 input.y:6.2: invalid character: `-'
 input.y:7.1-8.0: missing `%}' at end of file
-input.y:7.1-8.0: syntax error, unexpected "%{...%}"
+]])
+
+AT_CLEANUP
+
+
+AT_SETUP([Invalid inputs with {}])
+
+AT_DATA([input.y],
+[[
+%destructor
+%initial-action
+%lex-param
+%parse-param
+%printer
+%union
+]])
+
+AT_CHECK([bison input.y], [1], [],
+[[input.y:3.1: missing `{' in "%destructor {...}"
+input.y:4.1: missing `{' in "%initial-action {...}"
+input.y:4.1: syntax error, unexpected %initial-action {...}, expecting string or identifier
 ]])
 
 AT_CLEANUP
@@ -315,20 +335,45 @@ AT_SETUP([Token definitions])
 # Bison managed, when fed with `%token 'f' "f"' to #define 'f'!
 AT_DATA_GRAMMAR([input.y],
 [%{
+#include <stdio.h>
 void yyerror (const char *s);
 int yylex (void);
 %}
-[%token MYEOF 0 "end of file"
+[%error-verbose
+%token MYEOF 0 "end of file"
 %token 'a' "a"
-%token b "b"
-%token c 'c'
-%token 'd' d
+%token B_TOKEN "b"
+%token C_TOKEN 'c'
+%token 'd' D_TOKEN
+%token SPECIAL "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!"
 %%
-exp: "a";
+exp: "a" "\\\'\?\"\a\b\f\n\r\t\v\001\201\x001\x000081??!";
+%%
+void
+yyerror (char const *s)
+{
+  fprintf (stderr, "%s\n", s);
+}
+
+int
+yylex (void)
+{
+  return SPECIAL;
+}
+
+int
+main (void)
+{
+  return yyparse ();
+}
 ]])
 
 AT_CHECK([bison -o input.c input.y])
-AT_COMPILE([input.o], [-c input.c])
+AT_COMPILE([input])
+AT_DATA([experr],
+[[syntax error, unexpected "\\'?\"\a\b\f\n\r\t\v\001\201\001\201?\?!", expecting a
+]])
+AT_PARSER_CHECK([./input], 1, [], [experr])
 AT_CLEANUP
 
 
@@ -536,7 +581,7 @@ AT_CLEANUP
 #
 # It used to be wrong on yydefact only:
 #
-# static const short yydefact[] =
+# static const short int yydefact[] =
 #  {
 # -       2,     0,     1,     0,     0,     2,     3,     2,     5,     4,
 # +       2,     0,     1,     0,     0,     0,     3,     2,     5,     4,
@@ -614,7 +659,7 @@ static const char *const yytname[] =
   "$end", "error", "$undefined", "\"if\"", "\"const\"", "\"then\"",
   "\"else\"", "$accept", "statement", "struct_stat", "if", "else", 0
 };
-static const unsigned short yytoknum[] =
+static const unsigned short int yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261
 };
@@ -676,11 +721,10 @@ AT_CLEANUP
 m4_define([_AT_DATA_DANCER_Y],
 [AT_DATA_GRAMMAR([dancer.y],
 [%{
-AT_LALR1_CC_IF(
-[static int yylex (int *lval);],
+static int yylex (AT_LALR1_CC_IF([int *], [void]));
+AT_LALR1_CC_IF([],
 [#include <stdio.h>
-static void yyerror (const char *s);
-static int yylex ();])
+static void yyerror (const char *);])
 %}
 $1
 %token ARROW INVALID NUMBER STRING DATA
@@ -727,23 +771,18 @@ member: STRING
    ;
 %%
 AT_LALR1_CC_IF(
-[/* Currently, print_ is required in C++. */
-void
-yy::Parser::print_ ()
-{
-}
-
-/* A C++ error reporting function. */
+[/* A C++ error reporting function. */
 void
-yy::Parser::error_ ()
+yy::parser::error (const location&, const std::string& m)
 {
-  std::cerr << message << std::endl;
+  std::cerr << m << std::endl;
 }
 
 int
-yyparse (void)
+yyparse ()
 {
-  yy::Parser parser (!!YYDEBUG);
+  yy::parser parser;
+  parser.set_debug_level (!!YYDEBUG);
   return parser.parse ();
 }
 ],
@@ -754,13 +793,14 @@ yyerror (const char *s)
 }])
 
 static int
-yylex (AT_LALR1_CC_IF([int *lval]))
+yylex (AT_LALR1_CC_IF([int *lval], [void]))
 [{
   static int toknum = 0;
   int tokens[] =
     {
       ':', -1
     };
+  ]AT_LALR1_CC_IF([*lval = 0; /* Pacify GCC.  */])[
   return tokens[toknum++];
 }]
 
@@ -781,8 +821,11 @@ m4_define([AT_CHECK_DANCER],
 AT_BISON_OPTION_PUSHDEFS([$1])
 _AT_DATA_DANCER_Y([$1])
 AT_CHECK([bison -o dancer.c dancer.y])
-AT_LALR1_CC_IF([AT_COMPILE_CXX([dancer])],
-               [AT_COMPILE([dancer])])
+AT_LALR1_CC_IF(
+  [AT_CHECK([bison -o dancer.cc dancer.y])
+   AT_COMPILE_CXX([dancer])],
+  [AT_CHECK([bison -o dancer.c dancer.y])
+   AT_COMPILE([dancer])])
 AT_PARSER_CHECK([./dancer], 1, [],
 [syntax error, unexpected ':'
 ])