]> git.saurik.com Git - bison.git/blobdiff - tests/local.at
tests: make deprecation tests more specific
[bison.git] / tests / local.at
index 2362e766fba749cd2d0ba39d784828b68c6e8e9f..b619338d3fa6efdf5ecfb399a7768534f0775007 100644 (file)
@@ -109,7 +109,7 @@ m4_define([AT_BISON_OPTION_PUSHDEFS],
 # --------------------------------------------------
 # This macro works around the impossibility to define macros
 # inside macros, because issuing `[$1]' is not possible in M4 :(.
-# This sucks hard, GNU M4 should really provide M5 like $$1.
+# This sucks hard, GNU M4 should really provide M5-like $$1.
 m4_define([_AT_BISON_OPTION_PUSHDEFS],
 [m4_if([$1$2], $[1]$[2], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
@@ -137,7 +137,7 @@ m4_pushdef([AT_LEXPARAM_IF],
 m4_pushdef([AT_LOCATION_IF],
 [m4_bmatch([$3], [%locations], [$1], [$2])])
 m4_pushdef([AT_LOCATION_TYPE_IF],
-[m4_bmatch([$3], [%define location_type], [$1], [$2])])
+[m4_bmatch([$3], [%define \(api\.location\.type\|location_type\)], [$1], [$2])])
 m4_pushdef([AT_PARAM_IF],
 [m4_bmatch([$3], [%parse-param], [$1], [$2])])
 m4_pushdef([AT_PURE_IF],
@@ -152,6 +152,9 @@ m4_pushdef([AT_NAME_PREFIX],
 [m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"],
            [m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])],
            [yy])])
+m4_pushdef([AT_TOKEN_PREFIX],
+[m4_bmatch([$3], [%define api.token.prefix ".*"],
+           [m4_bregexp([$3], [%define api.token.prefix "\(.*\)"], [\1])])])
 m4_pushdef([AT_API_prefix],
 [m4_bmatch([$3], [%define api\.prefix ".*"],
            [m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])],
@@ -161,20 +164,20 @@ m4_pushdef([AT_API_PREFIX],
 # yyerror receives the location if %location & %pure & (%glr or %parse-param).
 m4_pushdef([AT_YYERROR_ARG_LOC_IF],
 [AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])],
-                   [$2])])
+                    [$2])])
 # yyerror always sees the locations (when activated), except if
 # (yacc & pure & !param).  FIXME: This is wrong.  See the manual.
 m4_pushdef([AT_YYERROR_SEES_LOC_IF],
 [AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])],
-                                       [$1])],
-                           [$1])],
-               [$2])])
+                                        [$1])],
+                            [$1])],
+                [$2])])
 
 # The interface is pure: either because %define api.pure, or because we
 # are using the C++ parsers.
 m4_pushdef([AT_PURE_LEX_IF],
 [AT_PURE_IF([$1],
-           [AT_SKEL_CC_IF([$1], [$2])])])
+            [AT_SKEL_CC_IF([$1], [$2])])])
 
 m4_pushdef([AT_YYSTYPE],
 [AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::semantic_type]],
@@ -188,15 +191,15 @@ AT_PURE_LEX_IF(
 [m4_pushdef([AT_LOC], [(*llocp)])
  m4_pushdef([AT_VAL], [(*lvalp)])
  m4_pushdef([AT_YYLEX_FORMALS],
-           [AT_YYSTYPE *lvalp[]AT_LOCATION_IF([, AT_YYLTYPE *llocp])])
+            [AT_YYSTYPE *lvalp[]AT_LOCATION_IF([, AT_YYLTYPE *llocp])])
  m4_pushdef([AT_YYLEX_ARGS],
-           [lvalp[]AT_LOCATION_IF([, llocp])])
+            [lvalp[]AT_LOCATION_IF([, llocp])])
  m4_pushdef([AT_USE_LEX_ARGS],
-           [(void) lvalp;AT_LOCATION_IF([(void) llocp])])
+            [(void) lvalp;AT_LOCATION_IF([(void) llocp])])
  m4_pushdef([AT_YYLEX_PRE_FORMALS],
-           [AT_YYLEX_FORMALS, ])
+            [AT_YYLEX_FORMALS, ])
  m4_pushdef([AT_YYLEX_PRE_ARGS],
-           [AT_YYLEX_ARGS, ])
+            [AT_YYLEX_ARGS, ])
 ],
 [m4_pushdef([AT_LOC], [[(]AT_NAME_PREFIX[lloc)]])
  m4_pushdef([AT_VAL], [[(]AT_NAME_PREFIX[lval)]])
@@ -215,6 +218,8 @@ AT_SKEL_CC_IF(
     [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])])],
   [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])])
 
+
+AT_GLR_IF([AT_KEYWORDS([glr])])
 ])# _AT_BISON_OPTION_PUSHDEFS
 
 
@@ -389,13 +394,11 @@ static
 }]],
 [c++], [[/* A C++ error reporting function.  */
 void
-]AT_NAME_PREFIX[::parser::error (const location_type& l, const std::string& m)
-{
-  (void) l;
-  std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl;
+]AT_NAME_PREFIX[::parser::error (]AT_LOCATION_IF([[const location_type& l, ]])[const std::string& m)
+{  std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl;
 }]],
 [java], [AT_LOCATION_IF([[public void yyerror (Calc.Location l, String s)
-  {
+{
     if (l == null)
       System.err.println (s);
     else
@@ -405,7 +408,8 @@ void
   public void yyerror (String s)
   {
     System.err.println (s);
-  }]])])dnl
+  }]])],
+[m4_fatal([$0: invalid language: ]AT_LANG)])dnl
 ])
 
 
@@ -441,10 +445,6 @@ m4_define([AT_BISON_CHECK],
 [m4_null_if([$2], [AT_BISON_CHECK_XML($@)])
 AT_BISON_CHECK_NO_XML($@)])
 
-m4_define([AT_BISON_WERROR_MSG],
-          [[bison: warnings being treated as errors]])
-
-
 # AT_BISON_CHECK_(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
 # --------------------------------------------------
 # Low-level macro to run bison once.
@@ -461,11 +461,15 @@ m4_define([AT_BISON_CHECK_WARNINGS],
       [m4_null_if([$2], [AT_BISON_CHECK_WARNINGS_($@)])])])
 
 m4_define([AT_BISON_CHECK_WARNINGS_],
-[[# Defining POSIXLY_CORRECT causes bison to complain if options
-# are added after the grammar file name, so skip these checks
-# in that case.
-if test -z "${POSIXLY_CORRECT+set}"; then
-  ]AT_SAVE_SPECIAL_FILES[
+[[# Defining POSIXLY_CORRECT causes bison to complain if options are
+# added after the grammar file name, so skip these checks in that
+# case.
+#
+# Don't just check if $POSIXLY_CORRECT is set, as Bash, when launched
+# as /bin/sh, sets the shell variable POSIXLY_CORRECT to y, but not
+# the environment variable.
+if env | grep '^POSIXLY_CORRECT=' >/dev/null; then :; else
+          ]AT_SAVE_SPECIAL_FILES[
 
   # To avoid expanding it repeatedly, store specified stdout.
   ]AT_DATA([expout], [$3])[
@@ -475,33 +479,10 @@ if test -z "${POSIXLY_CORRECT+set}"; then
 
   # Build expected stderr up to and including the "warnings being
   # treated as errors" message.
-  ]AT_DATA([[at-bison-check-warnings]], [$4])[
-  at_bison_check_first=`sed -n \
-    '/: warning: /{=;q;}' at-bison-check-warnings`
-  : ${at_bison_check_first:=1}
-  at_bison_check_first_tmp=`sed -n \
-    '/conflicts: [0-9].*reduce$/{=;q;}' at-bison-check-warnings`
-  : ${at_bison_check_first_tmp:=1}
-  if test $at_bison_check_first_tmp -lt $at_bison_check_first; then
-    at_bison_check_first=$at_bison_check_first_tmp
-  fi
-  if test $at_bison_check_first -gt 1; then
-    sed -n "1,`expr $at_bison_check_first - 1`"p \
-      at-bison-check-warnings > experr
-  fi
-  echo ']AT_BISON_WERROR_MSG[' >> experr
-
-  # Finish building expected stderr and check.  Unlike warnings,
-  # complaints cause bison to exit early.  Thus, with -Werror, bison
-  # does not necessarily report all warnings that it does without
-  # -Werror, but it at least reports one.
-  at_bison_check_last=`sed -n '$=' stderr`
-  : ${at_bison_check_last:=1}
-  at_bison_check_last=`expr $at_bison_check_last - 1`
-  sed -n "$at_bison_check_first,$at_bison_check_last"p \
-    at-bison-check-warnings >> experr
-  ]AT_CHECK([[sed 's,.*/\(]AT_BISON_WERROR_MSG[\)$,\1,' \
-              stderr 1>&2]], [[0]], [[]], [experr])[
+  ]AT_DATA([[experr]], [$4])[
+  $PERL -pi -e 's{(.*): warning: (.*)\[-W(.*)\]$}
+                 {$][1: error: $][2\@<:@-Werror=$][3@:>@}' experr
+  ]AT_CHECK([[sed 's,.*/$,,' stderr 1>&2]], [[0]], [[]], [experr])[
 
   # Now check --warnings=error.
   cp stderr experr
@@ -543,10 +524,10 @@ m4_define([AT_BISON_CHECK_XML],
   # Don't combine these Bison invocations since we want to be sure that
   # --report=all isn't required to get the full XML file.
   AT_BISON_CHECK_([[--report=all --report-file=xml-tests/test.output \
-                  --graph=xml-tests/test.dot ]]AT_BISON_ARGS,
-                  [[0]], [ignore], [ignore])
+             --graph=xml-tests/test.dot ]]AT_BISON_ARGS,
+           [[0]], [ignore], [ignore])
   AT_BISON_CHECK_([[--xml=xml-tests/test.xml ]]AT_BISON_ARGS,
-                 [[0]], [ignore], [ignore])
+           [[0]], [ignore], [ignore])
   m4_popdef([AT_BISON_ARGS])dnl
   [cp xml-tests/test.output expout]
   AT_CHECK([[$XSLTPROC \
@@ -595,7 +576,7 @@ m4_define([AT_COMPILE],
                   [-o $1],
                   [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).c])],
                   [m4_bmatch([$1], [[.]], [], [$LIBS])]),
-          0, [ignore], [ignore])])
+           0, [ignore], [ignore])])
 
 # AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc])
 # ---------------------------------------------
@@ -614,7 +595,7 @@ AT_CHECK(m4_join([ ],
                  [-o $1],
                  [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).cc])],
                  [m4_bmatch([$1], [[.]], [], [$LIBS])]),
-        0, [ignore], [ignore])])
+         0, [ignore], [ignore])])
 
 # AT_JAVA_COMPILE(SOURCES)
 # ------------------------
@@ -654,23 +635,23 @@ m4_define([AT_FULL_COMPILE],
 [java],
   [AT_BISON_CHECK([-o $1.java $1.y])
    AT_LANG_COMPILE([$1],
-                   m4_join([ ],
-                           [$1.java],
-                           m4_ifval($2, [[$1-$2.java]]),
+                    m4_join([ ],
+                            [$1.java],
+                            m4_ifval($2, [[$1-$2.java]]),
                            m4_ifval($3, [[$1-$3.java]])))],
 [c++],
   [AT_BISON_CHECK([-o $1.cc $1.y])
    AT_LANG_COMPILE([$1],
-                   m4_join([ ],
-                           [$1.cc],
-                           m4_ifval($2, [[$1-$2.cc]]),
+                     m4_join([ ],
+                             [$1.cc],
+                             m4_ifval($2, [[$1-$2.cc]]),
                            m4_ifval($3, [[$1-$3.cc]])))],
 [c],
   [AT_BISON_CHECK([-o $1.c $1.y])
    AT_LANG_COMPILE([$1],
-                   m4_join([ ],
-                           [$1.c],
-                           m4_ifval($2, [[$1-$2.c]]),
+                  m4_join([ ],
+                          [$1.c],
+                          m4_ifval($2, [[$1-$2.c]]),
                            m4_ifval($3, [[$1-$3.c]])))])
 ])