]> git.saurik.com Git - bison.git/blobdiff - tests/local.at
carets: activate by default
[bison.git] / tests / local.at
index 68a7ecaa57d12cbca358704787113a1ebeeb12a1..b7d75afcf2ab1637cf3fe19367a69572c0b77b5f 100644 (file)
@@ -29,6 +29,20 @@ m4_define([m4_null_if],
          [],  [$2],
          [$3])])
 
+# AT_SETUP_STRIP(TITLE)
+# ---------------------
+# Abbreviate the TITLE to be passed to AT_SETUP.
+m4_define([AT_SETUP_STRIP],
+[m4_bpatsubsts([$1],
+      [%\(language\|skeleton\) "?\([^\" ]*\)"?],
+        [\2],
+      [%define "?\([-A-Za-z0-9_.]+\)"? \("\([^\" ]+\)"\|\([-A-Za-z0-9_.]+\)\)],
+        [\1=\3\4],
+      [%define "?\([-A-Za-z0-9_.]+\)"?],
+        [\1])dnl
+])
+
+
 ## ------------- ##
 ## Basic tests.  ##
 ## ------------- ##
@@ -109,7 +123,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
@@ -142,7 +156,8 @@ m4_pushdef([AT_LOCATION_TYPE_IF],
 m4_pushdef([AT_PARAM_IF],
 [m4_bmatch([$3], [%parse-param], [$1], [$2])])
 # Comma-terminated list of formals parse-parameters.
-# E.g., %parse-param { int x } {int y} -> "int x, int y, ".
+# E.g., %parse-param { int x } %parse-param {int y} -> "int x, int y, ".
+# FIXME: Support grouped parse-param.
 m4_pushdef([AT_PARSE_PARAMS])
 m4_bpatsubst([$3], [%parse-param { *\([^{}]*[^{} ]\) *}],
              [m4_append([AT_PARSE_PARAMS], [\1, ])])
@@ -155,6 +170,11 @@ 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_CTOR_IF],
+[m4_bmatch([$3], [%define api.token.constructor], [$1], [$2])])
+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])],
@@ -174,7 +194,7 @@ m4_pushdef([AT_YYERROR_ARG_LOC_IF],
                                                         [%skeleton "?glr.c"?])),
                                        [$1], [$2])],
                             [$2])],
-                [$2])])
+                    [$2])])
 
 # yyerror always sees the locations (when activated) if the parser is impure.
 # When the parser is pure, yyerror sees the location if it is received as an
@@ -189,7 +209,7 @@ m4_pushdef([AT_YYERROR_SEES_LOC_IF],
 # 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]],
@@ -203,15 +223,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)]])
@@ -230,6 +250,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
 
 
@@ -251,6 +273,8 @@ m4_popdef([AT_YYERROR_SEES_LOC_IF])
 m4_popdef([AT_YYERROR_ARG_LOC_IF])
 m4_popdef([AT_API_PREFIX])
 m4_popdef([AT_API_prefix])
+m4_popdef([AT_TOKEN_PREFIX])
+m4_popdef([AT_TOKEN_CTOR_IF])
 m4_popdef([AT_NAME_PREFIX])
 m4_popdef([AT_LOCATION_TYPE_IF])
 m4_popdef([AT_LOCATION_IF])
@@ -399,13 +423,11 @@ AT_YYERROR_SEES_LOC_IF([[
 }]],
 [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
@@ -452,15 +474,11 @@ 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.
 m4_define([AT_BISON_CHECK_],
-[AT_CHECK(AT_QUELL_VALGRIND[[ bison ]]$@)])
+[AT_CHECK(AT_QUELL_VALGRIND[[ bison -fno-caret ]]$@)])
 
 
 # AT_BISON_CHECK_WARNINGS(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
@@ -476,7 +494,7 @@ m4_define([AT_BISON_CHECK_WARNINGS_],
 # added after the grammar file name, so skip these checks in that
 # case.
 if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; then
-  ]AT_SAVE_SPECIAL_FILES[
+          ]AT_SAVE_SPECIAL_FILES[
 
   # To avoid expanding it repeatedly, store specified stdout.
   ]AT_DATA([expout], [$3])[
@@ -486,33 +504,10 @@ if test "$POSIXLY_CORRECT_IS_EXPORTED" = false; 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
@@ -534,7 +529,7 @@ fi]dnl
 # when a tortured grammar's XML is known to be too large for xsltproc to
 # handle.
 m4_define([AT_BISON_CHECK_NO_XML],
-[AT_CHECK(m4_null_if([$2], [], [AT_QUELL_VALGRIND ])[[bison ]]$@)
+[AT_CHECK(m4_null_if([$2], [], [AT_QUELL_VALGRIND ])[[bison -fno-caret ]]$@)
 AT_BISON_CHECK_WARNINGS($@)])
 
 # AT_BISON_CHECK_XML(BISON_ARGS, [OTHER_AT_CHECK_ARGS])
@@ -554,10 +549,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 \
@@ -607,7 +602,7 @@ AT_CHECK(m4_join([ ],
                   [-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])
 # ---------------------------------------------
@@ -626,7 +621,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)
 # ------------------------
@@ -666,23 +661,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]])))])
 ])
 
@@ -906,12 +901,20 @@ m4_popdef([AT_COND_CASE])])
 
 
 
+
 ## ----------------------- ##
 ## Launch the test suite.  ##
 ## ----------------------- ##
 
 AT_INIT
 
+# AT_SETUP([TITLE])
+# -----------------
+# Redefine AT_SETUP to be more concise.  Must be done after AT_INIT.
+m4_copy_force([AT_SETUP], [B4_SETUP])
+m4_define([AT_SETUP],
+[B4_SETUP(m4_expand([AT_SETUP_STRIP([[$1]])]))])
+
 # Cannot assign CC and CFLAGS here, since atlocal is loaded after
 # options are processed, so we don't know the value of CXX and
 # CXXFLAGS yet.