]> git.saurik.com Git - bison.git/blobdiff - tests/regression.at
* src/parse-gram.y (grammar_declaration): Location of printer
[bison.git] / tests / regression.at
index 59eddbb22964be57802530cc20d3303a8fca9111..b1a3d56be53d29f5d5d3dd7595904e9e0f7c9bba 100644 (file)
@@ -1,5 +1,7 @@
 # Bison Regressions.                               -*- Autotest -*-
-# Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc.
+
+# Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 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 +15,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 +300,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 +337,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 +583,7 @@ AT_CLEANUP
 #
 # It used to be wrong on yydefact only:
 #
-# static const short yydefact[] =
+# static const yytype_uint8 yydefact[] =
 #  {
 # -       2,     0,     1,     0,     0,     2,     3,     2,     5,     4,
 # +       2,     0,     1,     0,     0,     0,     3,     2,     5,     4,
@@ -566,7 +613,7 @@ AT_CHECK([bison -v -o input.c input.y])
 [sed -n 's/  *$//;/^static const.*\[\] =/,/^}/p' input.c >tables.c]
 
 AT_CHECK([[cat tables.c]], 0,
-[[static const unsigned char yytranslate[] =
+[[static const yytype_uint8 yytranslate[] =
 {
        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -596,16 +643,16 @@ AT_CHECK([[cat tables.c]], 0,
        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        5,     6
 };
-static const unsigned char yyprhs[] =
+static const yytype_uint8 yyprhs[] =
 {
        0,     0,     3,     5,     6,     9,    14
 };
-static const yysigned_char yyrhs[] =
+static const yytype_int8 yyrhs[] =
 {
        8,     0,    -1,     9,    -1,    -1,    10,    11,    -1,     3,
        4,     5,     8,    -1,     6,     8,    -1
 };
-static const unsigned char yyrline[] =
+static const yytype_uint8 yyrline[] =
 {
        0,     2,     2,     3,     3,     4,     5
 };
@@ -614,45 +661,45 @@ 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 yytype_uint16 yytoknum[] =
 {
        0,   256,   257,   258,   259,   260,   261
 };
-static const unsigned char yyr1[] =
+static const yytype_uint8 yyr1[] =
 {
        0,     7,     8,     9,     9,    10,    11
 };
-static const unsigned char yyr2[] =
+static const yytype_uint8 yyr2[] =
 {
        0,     2,     1,     0,     2,     4,     2
 };
-static const unsigned char yydefact[] =
+static const yytype_uint8 yydefact[] =
 {
        3,     0,     0,     2,     0,     0,     1,     3,     4,     3,
        6,     5
 };
-static const yysigned_char yydefgoto[] =
+static const yytype_int8 yydefgoto[] =
 {
       -1,     2,     3,     4,     8
 };
-static const yysigned_char yypact[] =
+static const yytype_int8 yypact[] =
 {
       -2,    -1,     4,    -8,     0,     2,    -8,    -2,    -8,    -2,
       -8,    -8
 };
-static const yysigned_char yypgoto[] =
+static const yytype_int8 yypgoto[] =
 {
       -8,    -7,    -8,    -8,    -8
 };
-static const unsigned char yytable[] =
+static const yytype_uint8 yytable[] =
 {
       10,     1,    11,     5,     6,     0,     7,     9
 };
-static const yysigned_char yycheck[] =
+static const yytype_int8 yycheck[] =
 {
        7,     3,     9,     4,     0,    -1,     6,     5
 };
-static const unsigned char yystos[] =
+static const yytype_uint8 yystos[] =
 {
        0,     3,     8,     9,    10,     4,     0,     6,    11,     5,
        8,     8
@@ -676,11 +723,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 +773,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 +795,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 +823,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 ':'
 ])