bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

FYI: more lalr1.cc tests


From: Akim Demaille
Subject: FYI: more lalr1.cc tests
Date: Thu, 20 Feb 2003 09:47:45 +0100
User-agent: Gnus/5.090015 (Oort Gnus v0.15) Emacs/21.2

Index: ChangeLog
from  Akim Demaille  <address@hidden>
        
        * tests/calc.at (AT_CHECK_PUSHDEFS, AT_CHECK_POPDEFS): Define
        AT_YACC_IF.
        Redefine AT_YYERROR_SEES_LOC_IF using it.
        (_AT_DATA_CALC_Y): Don't declare yyerror when lalr1.cc, as it is
        not defined.
        Don't use the location in yy::Parser::error_ and
        yy::Parser::print_ when not %locations.
        Activate more lalr1.cc tests.
        
        (AT_LEX_ARGS, AT_USE_LEX_ARGS, AT_LEX_PRE_FORMALS, AT_LEX_PRE_ARGS)
Index: tests/calc.at
===================================================================
RCS file: /cvsroot/bison/bison/tests/calc.at,v
retrieving revision 1.52
diff -u -u -r1.52 calc.at
--- tests/calc.at       19 Feb 2003 14:33:27 -0000      1.52
+++ tests/calc.at       20 Feb 2003 08:13:54 -0000
@@ -66,13 +66,14 @@
 
 %{
 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 @@
 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 @@
 ])])[
     }
 
-]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 @@
       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_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_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_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,9 +698,9 @@
 
 # AT_CHECK_CALC_LALR1_CC()
 
-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])
@@ -707,11 +709,11 @@
 
 # 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}])




reply via email to

[Prev in Thread] Current Thread [Next in Thread]