]> git.saurik.com Git - bison.git/blobdiff - tests/calc.at
* src/parse-gram.y (declaration): Have %parse-param and %lex-param
[bison.git] / tests / calc.at
index 4399d257e6ff68f6fc89f4da8317e8f2da5223bc..c3873e57c55c10ee687231a310eb4b685e875ddf 100644 (file)
 m4_define([_AT_DATA_CALC_Y],
 [m4_if([$1$2$3], $[1]$[2]$[3], [],
        [m4_fatal([$0: Invalid arguments: $@])])dnl
-AT_DATA([calc.y],
+AT_DATA_GRAMMAR([calc.y],
 [[/* Infix notation calculator--calc */
 ]$4[
 %{
-#include <config.h>
-/* We don't need perfect functions for these tests. */
-#undef malloc
-#undef memcmp
-#undef realloc
 #include <stdio.h>
 
 #if STDC_HEADERS
@@ -100,9 +95,9 @@ static int power (int base, int exponent);
 /* yyerror receives the location if:
    - %location & %pure & %glr
    - %location & %pure & %yacc & %parse-param. */
-static void yyerror (const char *s
-                     ]AT_YYERROR_ARG_LOC_IF([, YYLTYPE *yylloc])[
-                     ]AT_PARAM_IF([, value_t *result, int *count])[
+static void yyerror (]AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])[
+                     ]AT_PARAM_IF([value_t *result, int *count, ])[
+                     const char *s
                      );
 static int yylex (LEX_FORMALS);
 static int yygetc (LEX_FORMALS);
@@ -154,9 +149,10 @@ exp:
 FILE *yyin;
 
 static void
-yyerror (const char *s
-         ]AT_YYERROR_ARG_LOC_IF([, YYLTYPE *yylloc])[
-         ]AT_PARAM_IF([, value_t *result, int *count])[)
+yyerror (]AT_YYERROR_ARG_LOC_IF([YYLTYPE *yylloc, ])[
+         ]AT_PARAM_IF([value_t *result, int *count, ])[
+         const char *s
+         )
 {
 ]AT_PARAM_IF([(void) result; (void) count; ])[
 ]AT_YYERROR_SEES_LOC_IF([
@@ -295,6 +291,7 @@ main (int argc, const char **argv)
 {
   value_t result = 0;
   int count = 0;
+  int status = 0;
   yyin = NULL;
 
   if (argc == 2)
@@ -311,11 +308,10 @@ main (int argc, const char **argv)
 #if YYDEBUG
   yydebug = 1;
 #endif
-  yyparse (]AT_PARAM_IF([&result, &count])[);
+  status = yyparse (]AT_PARAM_IF([&result, &count])[);
   assert (global_result == result);
   assert (global_count  == count);
-
-  return 0;
+  return status;
 }
 ]])
 ])# _AT_DATA_CALC_Y
@@ -353,9 +349,10 @@ m4_bmatch([$1],
 ])
 
 
-# _AT_CHECK_CALC_ERROR(BISON-OPTIONS, INPUT, [NUM-DEBUG-LINES],
+# _AT_CHECK_CALC_ERROR(BISON-OPTIONS, EXIT-STATUS, INPUT,
+#                      [NUM-DEBUG-LINES],
 #                      [VERBOSE-AND-LOCATED-ERROR-MESSAGE])
-# -------------------------------------------------------------
+# ---------------------------------------------------------
 # Run `calc' on INPUT, and expect a `parse error' message.
 #
 # If INPUT starts with a slash, it is used as absolute input file name,
@@ -371,17 +368,17 @@ m4_bmatch([$1],
 # If BISON-OPTIONS contains `%debug' but not `%glr', then NUM-STDERR-LINES
 # is the number of expected lines on stderr.
 m4_define([_AT_CHECK_CALC_ERROR],
-[m4_bmatch([$2], [^/],
-           [AT_PARSER_CHECK([./calc $2], 0, [], [stderr])],
+[m4_bmatch([$3], [^/],
+           [AT_PARSER_CHECK([./calc $3], $2, [], [stderr])],
            [AT_DATA([[input]],
-[[$2
+[[$3
 ]])
-AT_PARSER_CHECK([./calc input], 0, [], [stderr])])
+AT_PARSER_CHECK([./calc input], $2, [], [stderr])])
 m4_bmatch([$1],
   [%debug.*%glr\|%glr.*%debug],
      [],
   [%debug],
-     [AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$3
+     [AT_CHECK([wc -l <stderr | sed 's/[[^0-9]]//g'], 0, [$4
 ])])
 
 # Normalize the observed and expected error messages, depending upon the
@@ -401,7 +398,7 @@ sed '/^Starting/d
 mv at-stderr stderr
 # 2. Create the reference error message.
 AT_DATA([[expout]],
-[$4
+[$5
 ])
 # 3. If locations are not used, remove them.
 AT_YYERROR_SEES_LOC_IF([],
@@ -501,27 +498,27 @@ _AT_CHECK_CALC([$1],
                [486])
 
 # Some parse errors.
-_AT_CHECK_CALC_ERROR([$1], [0 0], [11],
+_AT_CHECK_CALC_ERROR([$1], [1], [0 0], [11],
                      [1.3-1.4: parse error, unexpected "number"])
-_AT_CHECK_CALC_ERROR([$1], [1//2], [15],
+_AT_CHECK_CALC_ERROR([$1], [1], [1//2], [15],
                      [1.3-1.4: parse error, unexpected '/', expecting "number" or '-' or '('])
-_AT_CHECK_CALC_ERROR([$1], [error], [4],
+_AT_CHECK_CALC_ERROR([$1], [1], [error], [4],
                      [1.1-1.2: parse error, unexpected $undefined, expecting "number" or '-' or '\n' or '('])
-_AT_CHECK_CALC_ERROR([$1], [1 = 2 = 3], [22],
+_AT_CHECK_CALC_ERROR([$1], [1], [1 = 2 = 3], [22],
                      [1.7-1.8: parse error, unexpected '='])
-_AT_CHECK_CALC_ERROR([$1],
+_AT_CHECK_CALC_ERROR([$1], [1],
                      [
 +1],
                      [14],
                      [2.1-2.2: parse error, unexpected '+'])
 # Exercise error messages with EOF: work on an empty file.
-_AT_CHECK_CALC_ERROR([$1], [/dev/null], [4],
+_AT_CHECK_CALC_ERROR([$1], [1], [/dev/null], [4],
                      [1.1-1.2: parse error, unexpected "end of input", expecting "number" or '-' or '\n' or '('])
 
 # Exercise the error token: without it, we die at the first error,
 # hence be sure i. to have several errors, ii. to test the action
 # associated to `error'.
-_AT_CHECK_CALC_ERROR([$1], [(1 ++ 2) + (0 0) = 1], [82],
+_AT_CHECK_CALC_ERROR([$1], [0], [(1 ++ 2) + (0 0) = 1], [82],
 [1.5-1.6: parse error, unexpected '+', expecting "number" or '-' or '('
 1.15-1.16: parse error, unexpected "number"
 calc: error: 0 != 1])
@@ -565,7 +562,7 @@ AT_CHECK_CALC_LALR([%error-verbose %debug %locations %defines %name-prefix="calc
 
 AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param "value_t *result", "result" %parse-param "int *count", "count"])
+AT_CHECK_CALC_LALR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value_t *result}, {result} %parse-param {int *count}, {count}])
 
 
 # ----------------------- #
@@ -600,4 +597,4 @@ AT_CHECK_CALC_GLR([%error-verbose %debug %locations %defines %name-prefix="calc"
 
 AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc])
 
-AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param "value_t *result", "result" %parse-param "int *count", "count"])
+AT_CHECK_CALC_GLR([%pure-parser %error-verbose %debug %locations %defines %name-prefix="calc" %verbose %yacc %parse-param {value_t *result}, {result} %parse-param {int *count}, {count}])