]> git.saurik.com Git - bison.git/blobdiff - tests/calc.at
Minor improvements to today's scan-gram.l bugfix.
[bison.git] / tests / calc.at
index a768fffea178f34eb2464f99f885a9f8fd8e0498..aade61ccbd0d2439a026fd496c42005fa1053990 100644 (file)
@@ -66,13 +66,14 @@ static int global_count = 0;
 
 %{
 static int power (int base, int exponent);
+]AT_LALR1_CC_IF([], [
 /* yyerror receives the location if:
    - %location & %pure & %glr
    - %location & %pure & %yacc & %parse-param. */
-static void yyerror (]AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])[
-                     ]AT_PARAM_IF([value *result, int *count, ])[
+static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])
+                     AT_PARAM_IF([value *result, int *count, ])
                      const char *s
-                     );
+                     );])[
 static int yylex (]AT_LEX_FORMALS[);
 static int yygetc (]AT_LEX_FORMALS[);
 static void yyungetc (]AT_LEX_PRE_FORMALS[ int c);
@@ -128,14 +129,15 @@ static FILE *yyin;
 void
 yy::Parser::print_ ()
 {
-  std::cerr << location;
+AT_LOCATION_IF([
+  std::cerr << location;])
 }
 
 /* A C++ error reporting function. */
 void
 yy::Parser::error_ ()
 {
-  std::cerr << location << ": " << message << std::endl;
+  std::cerr << AT_LOCATION_IF([location << ": " << ])message << std::endl;
 }
 
 int
@@ -253,20 +255,18 @@ yylex (]AT_LEX_FORMALS[)
 ])])[
     }
 
-]AT_LALR1_CC_IF(
+]AT_LOCATION_IF([AT_LALR1_CC_IF(
 [ AT_LOC.begin = AT_LOC.end;],
-[AT_LOCATION_IF([
-  AT_LOC.first_column = AT_LOC.last_column;
+[ AT_LOC.first_column = AT_LOC.last_column;
   AT_LOC.first_line   = AT_LOC.last_line;
 ])])[
 
   /* Skip white space.  */
   while ((c = yygetc (]AT_LEX_ARGS[)) == ' ' || c == '\t')
     {
-]AT_LALR1_CC_IF(
+]AT_LOCATION_IF([AT_LALR1_CC_IF(
 [     AT_LOC.begin = AT_LOC.end;],
-[AT_LOCATION_IF([
-      AT_LOC.first_column = AT_LOC.last_column;
+[     AT_LOC.first_column = AT_LOC.last_column;
       AT_LOC.first_line   = AT_LOC.last_line;
 ])])[
     }
@@ -317,9 +317,8 @@ main (int argc, const char **argv)
       exit (1);
     }
 
-#if YYDEBUG
-  yydebug = 1;
-#endif
+]AT_LALR1_CC_IF([], [m4_bmatch([$4], [%debug],
+[  yydebug = 1;])])[
   status = yyparse (]AT_PARAM_IF([&result, &count])[);
   if (global_result != result)
     abort ();
@@ -439,6 +438,9 @@ m4_pushdef([AT_LALR1_CC_IF],
 [m4_bmatch([$3], ["lalr1.cc"], [$1], [$2])])
 m4_pushdef([AT_GLR_IF],
 [m4_bmatch([$3], [%glr-parser], [$1], [$2])])
+# Using yacc.c?
+m4_pushdef([AT_YACC_IF],
+[m4_bmatch([$3], [%glr-parser\|%skeleton], [$2], [$1])])
 m4_pushdef([AT_PARAM_IF],
 [m4_bmatch([$3], [%parse-param], [$1], [$2])])
 m4_pushdef([AT_LOCATION_IF],
@@ -455,14 +457,13 @@ m4_pushdef([AT_GLR_OR_PARAM_IF],
 m4_pushdef([AT_YYERROR_ARG_LOC_IF],
 [AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])],
                     [$2])])
-# yyerror cannot see the locations if !glr & pure & !param.
+# yyerror always sees the locations (when activated), except if
+# yacc & pure & !param.
 m4_pushdef([AT_YYERROR_SEES_LOC_IF],
-[AT_LALR1_CC_IF([$1],
-                [AT_LOCATION_IF([AT_GLR_IF([$1],
-                                           [AT_PURE_IF([AT_PARAM_IF([$1],
-                                                                    [$2])],
-                                                       [$1])])],
-                                [$2])])])
+[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])],
+                                        [$1])],
+                            [$1])],
+                [$2])])
 
 # The interface is pure: either because %pure-parser, or because we
 # are using the C++ parsers.
@@ -512,6 +513,7 @@ m4_popdef([AT_GLR_OR_PARAM_IF])
 m4_popdef([AT_PURE_AND_LOC_IF])
 m4_popdef([AT_LOCATION_IF])
 m4_popdef([AT_PARAM_IF])
+m4_popdef([AT_YACC_IF])
 m4_popdef([AT_GLR_IF])
 m4_popdef([AT_LALR1_CC_IF])
 ])
@@ -696,10 +698,9 @@ m4_define([AT_CHECK_CALC_LALR1_CC],
 
 # AT_CHECK_CALC_LALR1_CC()
 
-# FIXME: YYERROR is not supported
-#   AT_CHECK_CALC_LALR1_CC([%defines %pure-parser %locations])
+AT_CHECK_CALC_LALR1_CC([%defines %locations])
 
-AT_CHECK_CALC_LALR1_CC([%defines])
+AT_CHECK_CALC_LALR1_CC([%defines])
 # AT_CHECK_CALC_LALR1_CC([%locations])
 # AT_CHECK_CALC_LALR1_CC([%name-prefix="calc"])
 # AT_CHECK_CALC_LALR1_CC([%verbose])
@@ -708,11 +709,11 @@ m4_define([AT_CHECK_CALC_LALR1_CC],
 
 # AT_CHECK_CALC_LALR1_CC([%error-verbose %locations])
 
-AT_CHECK_CALC_LALR1_CC([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %locations %defines %name-prefix="calc" %verbose %yacc])
 
 # AT_CHECK_CALC_LALR1_CC([%debug])
-AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
+AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
 
 # AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value *result} %parse-param {int *count}])