[PATCH 6/7] tests: glr: prepare for more languages

Akim Demaille <[email protected]>
Newsgroups gmane.comp.parsers.bison.patches
Message-ID <[email protected]>
* tests/glr-regression.at: Wrap each test in an AT_TEST.
Call it with glr.c.
---
 tests/glr-regression.at | 492 ++++++++++++++++++++++++++--------------
 1 file changed, 317 insertions(+), 175 deletions(-)

diff --git a/tests/glr-regression.at b/tests/glr-regression.at
index 8b58795a..64bb396a 100644
--- a/tests/glr-regression.at
+++ b/tests/glr-regression.at
@@ -22,28 +22,26 @@ AT_BANNER([[GLR Regression Tests]])
 ## Badly Collapsed GLR States.  ##
 ## ---------------------------- ##
 
-AT_SETUP([Badly Collapsed GLR States])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Badly Collapsed GLR States: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr1.y],
 [[/* Regression Test: Improper state compression */
 /* Reported by Scott McPeak */
 
-%{
-#include <stdio.h>
-#include <stdlib.h>
-#include <assert.h>
+%define api.value.type {int}
 
-#define YYSTYPE int
+%code {
 static YYSTYPE exprMerge (YYSTYPE x0, YYSTYPE x1);
 ]AT_YYERROR_DECLARE[
 ]AT_YYLEX_DECLARE[
-%}
-
+}
 
 %define parse.assert
 %glr-parser
 %expect 1
+]$1[
 
 /* -------- productions ------ */
 %%
@@ -80,9 +78,9 @@ main (int argc, const char* argv[])
 
 ]AT_YYERROR_DEFINE[
 
-int
-yylex (void)
+]AT_YYLEX_PROTOTYPE[
 {
+  ]AT_USE_LEX_ARGS[
   return *input++;
 }
 ]])
@@ -98,25 +96,32 @@ E -> 'B'
 E -> E 'P' E
 E -> E 'P' E
 <OR>
-]], [])
+]])
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
+
 
 ## -------------------------------------------------------------- ##
 ## Improper handling of embedded actions and $-N in GLR parsers.  ##
 ## -------------------------------------------------------------- ##
 
-AT_SETUP([Improper handling of embedded actions and dollar(-N) in GLR parsers])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Improper handling of embedded actions and dollar(-N) in GLR parsers: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr2a.y],
 [[/* Regression Test: Improper handling of embedded actions and $-N  */
 /* Reported by S. Eken */
 
-%{
-  #define YYSTYPE char *
-
+%define api.value.type {char *}
+%code {
   #include <ctype.h>
   #include <stdio.h>
   #include <stdlib.h>
@@ -124,39 +129,40 @@ AT_DATA_GRAMMAR([glr-regr2a.y],
   #include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect 2
+]$1[
 
 %%
 
 command:
     's' var 't'
-       { printf ("Variable: '%s'\n", $2); }
+       { printf ("Variable: '%s'\n", $][2); }
     'v' 'x' 'q'
-       { free ($2); }
+       { free ($][2); }
   | 's' var_list 't' 'e'
-       { printf ("Varlist: '%s'\n", $2); free ($2); }
+       { printf ("Varlist: '%s'\n", $][2); free ($][2); }
   | 's' var 't' var_printer 'x'
-       { free ($2); }
+       { free ($][2); }
   ;
 
 var:
   'V'
-     { $$ = $1; }
+     { $$ = $][1; }
   ;
 
 var_list:
   var
-    { $$ = $1; }
+    { $$ = $][1; }
   | var ',' var_list
     {
-      char *s = YY_CAST (char *, realloc ($1, strlen ($1) + 1 + strlen ($3) + 1));
+      char *s = YY_CAST (char *, realloc ($][1, strlen ($][1) + 1 + strlen ($][3) + 1));
       strcat (s, ",");
-      strcat (s, $3);
-      free ($3);
+      strcat (s, $][3);
+      free ($][3);
       $$ = s;
     }
   ;
@@ -168,10 +174,10 @@ var_printer: 'v'
 ]AT_YYERROR_DEFINE[
 FILE *input;
 
-int
-yylex (void)
+]AT_YYLEX_PROTOTYPE[
 {
   char buf[50];
+  ]AT_USE_LEX_ARGS[
   assert (!feof (stdin));
   switch (fscanf (input, " %1[a-z,]", buf))
   {
@@ -233,24 +239,28 @@ AT_PARSER_CHECK([[glr-regr2a input3.txt]], 0,
 [[Variable: 'VARIABLE_3'
 ]])
 
-
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 ## --------------------------------------------- ##
 ## Improper merging of GLR delayed action sets.  ##
 ## --------------------------------------------- ##
 
-AT_SETUP([Improper merging of GLR delayed action sets])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Improper merging of GLR delayed action sets: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr3.y],
 [[/* Regression Test: Improper merging of GLR delayed action sets.  */
 /* Reported by M. Rosien */
 
-%{
-#include <stdio.h>
-#include <stdlib.h>
+%code {
 #include <stdarg.h>
 #include <assert.h>
 
@@ -260,19 +270,20 @@ static int MergeRule (int x0, int x1);
 
 #define RULE(x) (1 << (x))
 
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect 1
 %expect-rr 2
+]$1[
 
 %token BAD_CHAR
 %token P1 P2 T1 T2 T3 T4 O1 O2
 
 %%
 
-S : P1 T4 O2 NT6 P2  { printf ("Result: %x\n", $4); }
+S : P1 T4 O2 NT6 P2  { printf ("Result: %x\n", $][4); }
 ;
 
 NT1 : P1 T1 O1 T2 P2 { $$ = RULE(2); }  %merge<MergeRule>
@@ -294,8 +305,8 @@ NT4 : NT3              { $$ = RULE(7); } %merge<MergeRule>
 NT5 : NT4              { $$ = RULE(10); } %merge<MergeRule>
 ;
 
-NT6 : P1 NT1 O1 T3 P2  { $$ = RULE(11) | $2; } %merge<MergeRule>
-    | NT5              { $$ = RULE(12) | $1; } %merge<MergeRule>
+NT6 : P1 NT1 O1 T3 P2  { $$ = RULE(11) | $][2; } %merge<MergeRule>
+    | NT5              { $$ = RULE(12) | $][1; } %merge<MergeRule>
 ;
 
 %%
@@ -354,6 +365,11 @@ AT_PARSER_CHECK([[glr-regr3 input.txt]],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
 
 
 ## ---------------------------------------------------------------------- ##
@@ -361,9 +377,10 @@ AT_CLEANUP
 ## <http://lists.gnu.org/archive/html/help-bison/2005-07/msg00013.html>.  ##
 ## ---------------------------------------------------------------------- ##
 
-AT_SETUP([Duplicate representation of merged trees])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Duplicate representation of merged trees: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr4.y],
 [[
 %define parse.assert
@@ -371,9 +388,9 @@ AT_DATA_GRAMMAR([glr-regr4.y],
 %type <ptr> S A A1 A2 B
 %glr-parser
 %expect-rr 2
-%{
-  #include <stdio.h>
-  #include <stdlib.h>
+]$1[
+
+%code {
   #include <string.h>
   static char *merge (YYSTYPE, YYSTYPE);
   static char *make_value (char const *, char const *);
@@ -381,20 +398,20 @@ AT_DATA_GRAMMAR([glr-regr4.y],
   ]AT_YYLEX_DECLARE[
   static char *ptrs[100];
   static char **ptrs_next = ptrs;
-%}
+}
 
 %%
 
-tree: S { printf ("%s\n", $1); } ;
+tree: S { printf ("%s\n", $][1); } ;
 
 S:
-  A   %merge<merge> { $$ = make_value ("S", $1); }
-  | B %merge<merge> { $$ = make_value ("S", $1); }
+  A   %merge<merge> { $$ = make_value ("S", $][1); }
+  | B %merge<merge> { $$ = make_value ("S", $][1); }
   ;
 
 A:
-  A1   %merge<merge> { $$ = make_value ("A", $1); }
-  | A2 %merge<merge> { $$ = make_value ("A", $1); }
+  A1   %merge<merge> { $$ = make_value ("A", $][1); }
+  | A2 %merge<merge> { $$ = make_value ("A", $][1); }
   ;
 
 A1: 'a' { $$ = make_value ("A1", "'a'"); } ;
@@ -443,6 +460,11 @@ AT_PARSER_CHECK([[glr-regr4]], 0,
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
 
 
 ## ------------------------------------------------------------------------- ##
@@ -450,23 +472,24 @@ AT_CLEANUP
 ## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00016.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
-AT_SETUP([User destructor for unresolved GLR semantic value])
+m4_pushdef([AT_TEST],
+[AT_SETUP([User destructor for unresolved GLR semantic value: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr5.y],
 [[
-%{
-  #include <stdio.h>
-  #include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   enum { MAGIC_VALUE = -1057808125 }; /* originally chosen at random */
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect 0
 %expect-rr 1
+]$1[
+
 %union { int value; }
 %type <value> start
 
@@ -499,6 +522,12 @@ AT_PARSER_CHECK([[glr-regr5]], 1, [],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------------------- ##
@@ -506,21 +535,22 @@ AT_CLEANUP
 ## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00029.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
-AT_SETUP([User destructor after an error during a split parse])
+m4_pushdef([AT_TEST],
+[AT_SETUP([User destructor after an error during a split parse: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr6.y],
 [[
-%{
-  #include <stdio.h>
-  #include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect-rr 1
+]$1[
+
 %union { int value; }
 %type <value> 'a'
 
@@ -548,6 +578,12 @@ AT_PARSER_CHECK([[glr-regr6]], 1,
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------------------- ##
@@ -555,27 +591,31 @@ AT_CLEANUP
 ## <http://lists.gnu.org/archive/html/bison-patches/2005-08/msg00035.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
-AT_SETUP([Duplicated user destructor for lookahead])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Duplicated user destructor for lookahead: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr7.y],
 [[
-%{
-  #include <stdio.h>
-  #include <stdlib.h>
-  ]AT_YYERROR_DECLARE[
-  ]AT_YYLEX_DECLARE[
-  #define YYSTACKEXPANDABLE 0
+%code requires {
   typedef struct count_node {
     int count;
     struct count_node *prev;
   } count_node;
+}
+
+%code {
+  ]AT_YYERROR_DECLARE[
+  ]AT_YYLEX_DECLARE[
+  #define YYSTACKEXPANDABLE 0
   static count_node *tail;
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect-rr 2
+]$1[
+
 %union { count_node *node; }
 %type <node> 'a'
 
@@ -634,6 +674,12 @@ AT_PARSER_CHECK([[glr-regr7]], 2, [],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------------------- ##
@@ -643,25 +689,25 @@ AT_CLEANUP
 ## http://lists.gnu.org/archive/html/bug-bison/2005-10/msg00072.html         ##
 ## ------------------------------------------------------------------------- ##
 
-AT_SETUP([Incorrectly initialized location for empty right-hand side in GLR])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Incorrectly initialized location for empty right-hand side in GLR: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr8.y],
 [[
-%{
-  #include <stdio.h>
-  #include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
-
-%token T_CONSTANT
-%token T_PORT
-%token T_SIGNAL
+}
 
 %define parse.assert
 %glr-parser
 %expect-rr 1
+]$1[
+
+%token T_CONSTANT
+%token T_PORT
+%token T_SIGNAL
 
 %%
 
@@ -724,6 +770,12 @@ AT_PARSER_CHECK([[glr-regr8]], 0,
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------------------- ##
@@ -731,25 +783,26 @@ AT_CLEANUP
 ## <http://lists.gnu.org/archive/html/bison-patches/2005-09/msg00109.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
-AT_SETUP([No users destructors if stack 0 deleted])
+m4_pushdef([AT_TEST],
+[AT_SETUP([No users destructors if stack 0 deleted: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr9.y],
 [[
-%{
-# include <stdio.h>
-# include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
 # define YYSTACKEXPANDABLE 0
   static int tokens = 0;
   static int destructors = 0;
 # define USE(Var)
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect-rr 2
+]$1[
+
 %union { int dummy; }
 %type <dummy> 'a'
 
@@ -760,7 +813,7 @@ AT_DATA_GRAMMAR([glr-regr9.y],
 %%
 
 start:
-    ambig0 'a'   { destructors += 2; USE ($2); }
+    ambig0 'a'   { destructors += 2; USE ($][2); }
   | ambig1 start { destructors += 1; }
   | ambig2 start { destructors += 1; }
   ;
@@ -801,29 +854,36 @@ AT_PARSER_CHECK([[glr-regr9]], 0, [],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------ ##
 ## Corrupted semantic options if user action cuts parse.  ##
 ## ------------------------------------------------------ ##
 
-AT_SETUP([Corrupted semantic options if user action cuts parse])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Corrupted semantic options if user action cuts parse: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr10.y],
 [[
-%{
-# include <stdlib.h>
-# include <stdio.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   #define GARBAGE_SIZE 50
   static char garbage[GARBAGE_SIZE];
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect-rr 1
+]$1[
+
 %union { char *ptr; }
 %type <ptr> start
 
@@ -854,28 +914,36 @@ AT_PARSER_CHECK([[glr-regr10]], 0, [], [])
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## --------------------------------------------------- ##
 ## Undesirable destructors if user action cuts parse.  ##
 ## --------------------------------------------------- ##
 
-AT_SETUP([Undesirable destructors if user action cuts parse])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Undesirable destructors if user action cuts parse: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr11.y],
 [[
-%{
-# include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static int destructors = 0;
 # define USE(val)
-%}
+}
 
 %define parse.assert
 %glr-parser
 %expect-rr 1
+]$1[
+
 %union { int dummy; }
 %type <int> 'a'
 %destructor { destructors += 1; } 'a'
@@ -883,8 +951,8 @@ AT_DATA_GRAMMAR([glr-regr11.y],
 %%
 
 start:
-    'a' %dprec 2 { USE ($1); destructors += 1; YYACCEPT; }
-  | 'a' %dprec 1 { USE ($1); destructors += 1; YYACCEPT; }
+    'a' %dprec 2 { USE ($][1); destructors += 1; YYACCEPT; }
+  | 'a' %dprec 1 { USE ($][1); destructors += 1; YYACCEPT; }
   ;
 
 %%
@@ -911,21 +979,30 @@ AT_PARSER_CHECK([[glr-regr11]], 0, [], [])
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## -------------------------------------------------- ##
 ## Leaked semantic values if user action cuts parse.  ##
 ## -------------------------------------------------- ##
 
-AT_SETUP([Leaked semantic values if user action cuts parse])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Leaked semantic values if user action cuts parse: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr12.y],
 [[
 %define parse.assert
 %glr-parser
 %expect 1
 %expect-rr 1
+]$1[
+
 %union { int dummy; }
 %token PARENT_RHS_AFTER
 %type <dummy> parent_rhs_before merged PARENT_RHS_AFTER
@@ -933,8 +1010,7 @@ AT_DATA_GRAMMAR([glr-regr12.y],
 %destructor { merged_value = 0; } merged
 %destructor { parent_rhs_after_value = 0; } PARENT_RHS_AFTER
 
-%{
-# include <stdlib.h>
+%code {
 # include <assert.h>
   static int merge (YYSTYPE, YYSTYPE);
   ]AT_YYERROR_DECLARE[
@@ -943,7 +1019,7 @@ AT_DATA_GRAMMAR([glr-regr12.y],
   static int merged_value = 0;
   static int parent_rhs_after_value = 0;
 # define USE(val)
-%}
+}
 
 %%
 
@@ -954,14 +1030,14 @@ start:
 
 alt1:
   PARENT_RHS_AFTER {
-    USE ($1);
+    USE ($][1);
     parent_rhs_after_value = 0;
   }
   ;
 
 alt2:
   parent_rhs_before merged PARENT_RHS_AFTER {
-    USE (($1, $2, $3));
+    USE (($][1, $][2, $][3));
     parent_rhs_before_value = 0;
     merged_value = 0;
     parent_rhs_after_value = 0;
@@ -1031,6 +1107,12 @@ AT_PARSER_CHECK([[glr-regr12]], 0, [], [])
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------------------- ##
@@ -1039,9 +1121,10 @@ AT_CLEANUP
 ## <http://lists.gnu.org/archive/html/bison-patches/2006-01/msg00060.html>.  ##
 ## ------------------------------------------------------------------------- ##
 
-AT_SETUP([Incorrect lookahead during deterministic GLR])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Incorrect lookahead during deterministic GLR: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr13.y],
 [[
 /* Tests:
@@ -1051,26 +1134,27 @@ AT_DATA_GRAMMAR([glr-regr13.y],
      - Defaulted state after shift: yychar == YYEMPTY.
      - User action changing the lookahead.  */
 
-%{
-  #include <stdio.h>
+%code {
   #include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static void print_lookahead (char const *);
   #define USE(value)
-%}
+}
 
 %define parse.assert
+%locations
+%glr-parser
+]$1[
+
 %union { char value; }
 %type <value> 'a' 'b'
-%glr-parser
-%locations
 
 %%
 
 start:
   defstate_init defstate_shift 'b' change_lookahead 'a' {
-    USE ($3);
+    USE ($][3);
     print_lookahead ("start <- defstate_init defstate_shift 'b'");
   }
   ;
@@ -1081,7 +1165,7 @@ defstate_init:
   ;
 defstate_shift:
   nondefstate defstate_look 'a' {
-    USE ($3);
+    USE ($][3);
     print_lookahead ("defstate_shift <- nondefstate defstate_look 'a'");
   }
   ;
@@ -1095,7 +1179,7 @@ nondefstate:
     print_lookahead ("nondefstate <- empty string");
   }
   | 'b' {
-    USE ($1);
+    USE ($][1);
     print_lookahead ("nondefstate <- 'b'");
   }
   ;
@@ -1157,15 +1241,22 @@ start <- defstate_init defstate_shift 'b':
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------- ##
 ## Incorrect lookahead during nondeterministic GLR.  ##
 ## ------------------------------------------------- ##
 
-AT_SETUP([Incorrect lookahead during nondeterministic GLR])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Incorrect lookahead during nondeterministic GLR: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr14.y],
 [[
 /* Tests:
@@ -1187,31 +1278,30 @@ AT_DATA_GRAMMAR([glr-regr14.y],
      - If only defaulted states are entered, there are no conflicts, so
        nondeterministic operation does not start.  */
 
+%define parse.assert
+%type <value> 'a' 'b' 'c' 'd' stack_explosion
+%glr-parser
+%expect 0
+%expect-rr 5
+]$1[
+%locations
+
 %union { char value; }
 
-%{
-  #include <stdlib.h>
-  #include <stdio.h>
+%code {
   #include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static void print_lookahead (char const *);
   static char merge (union YYSTYPE, union YYSTYPE);
   #define USE(value)
-%}
-
-%define parse.assert
-%type <value> 'a' 'b' 'c' 'd' stack_explosion
-%glr-parser
-%expect 0
-%expect-rr 5
-%locations
+}
 
 %%
 
 start:
   merge 'c' stack_explosion {
-    USE ($2); USE ($3);
+    USE ($][2); USE ($][3);
     print_lookahead ("start <- merge 'c' stack_explosion");
   }
   ;
@@ -1219,11 +1309,11 @@ start:
 /* When merging the 2 deferred actions, the lookahead needs are different.  */
 merge:
   nonconflict1 'a' 'b' nonconflict2 %dprec 1 {
-    USE ($2); USE ($3);
+    USE ($][2); USE ($][3);
     print_lookahead ("merge <- nonconflict1 'a' 'b' nonconflict2");
   }
   | conflict defstate_look 'a' nonconflict2 'b' defstate_shift %dprec 2 {
-    USE ($3); USE ($5);
+    USE ($][3); USE ($][5);
     print_lookahead ("merge <- conflict defstate_look 'a' nonconflict2 'b'"
                       " defstate_shift");
   }
@@ -1239,7 +1329,7 @@ nonconflict2:
     print_lookahead ("nonconflict2 <- empty string");
   }
   | 'a' {
-    USE ($1);
+    USE ($][1);
     print_lookahead ("nonconflict2 <- 'a'");
   }
   ;
@@ -1263,13 +1353,13 @@ defstate_shift:
 
 stack_explosion:
   { $$ = '\0'; }
-  | alt1 stack_explosion %merge<merge> { $$ = $2; }
-  | alt2 stack_explosion %merge<merge> { $$ = $2; }
-  | alt3 stack_explosion %merge<merge> { $$ = $2; }
+  | alt1 stack_explosion %merge<merge> { $$ = $][2; }
+  | alt2 stack_explosion %merge<merge> { $$ = $][2; }
+  | alt3 stack_explosion %merge<merge> { $$ = $][2; }
   ;
 alt1:
   'd' no_look {
-    USE ($1);
+    USE ($][1);
     if (yychar != 'd' && yychar != YYEOF)
       {
         fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
@@ -1278,7 +1368,7 @@ alt1:
   ;
 alt2:
   'd' no_look {
-    USE ($1);
+    USE ($][1);
     if (yychar != 'd' && yychar != YYEOF)
       {
         fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
@@ -1287,7 +1377,7 @@ alt2:
   ;
 alt3:
   'd' no_look {
-    USE ($1);
+    USE ($][1);
     if (yychar != 'd' && yychar != YYEOF)
       {
         fprintf (stderr, "Incorrect lookahead during stack explosion.\n");
@@ -1373,30 +1463,38 @@ start <- merge 'c' stack_explosion:
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------- ##
 ## Leaked semantic values when reporting ambiguity.  ##
 ## ------------------------------------------------- ##
 
-AT_SETUP([Leaked semantic values when reporting ambiguity])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Leaked semantic values when reporting ambiguity: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr15.y],
 [[
 %define parse.assert
 %glr-parser
 %expect 0
 %expect-rr 2
+]$1[
+
 %destructor { parent_rhs_before_value = 0; } parent_rhs_before
 
-%{
-# include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static int parent_rhs_before_value = 0;
 # define USE(val)
-%}
+}
 
 %%
 
@@ -1414,7 +1512,7 @@ alt1: ;
 
 alt2:
   parent_rhs_before ambiguity {
-    USE ($1);
+    USE ($][1);
     parent_rhs_before_value = 0;
   }
   ;
@@ -1455,31 +1553,39 @@ AT_PARSER_CHECK([[glr-regr15]], 0, [],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------ ##
 ## Leaked lookahead after nondeterministic parse syntax error.  ##
 ## ------------------------------------------------------------ ##
 
-AT_SETUP([Leaked lookahead after nondeterministic parse syntax error])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Leaked lookahead after nondeterministic parse syntax error: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr16.y],
 [[
 %define parse.assert
 %glr-parser
 %expect 0
 %expect-rr 1
+]$1[
+
 %destructor { lookahead_value = 0; } 'b'
 
-%{
-# include <stdlib.h>
+%code {
 # include <assert.h>
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
   static int lookahead_value = 0;
 # define USE(val)
-%}
+}
 
 %%
 
@@ -1515,15 +1621,22 @@ AT_PARSER_CHECK([[glr-regr16]], 0, [],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------- ##
 ## Uninitialized location when reporting ambiguity.  ##
 ## ------------------------------------------------- ##
 
-AT_SETUP([Uninitialized location when reporting ambiguity])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Uninitialized location when reporting ambiguity: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations %define api.pure])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser %locations %define api.pure $1])
 
 AT_DATA_GRAMMAR([glr-regr17.y],
 [[
@@ -1531,16 +1644,17 @@ AT_DATA_GRAMMAR([glr-regr17.y],
 %glr-parser
 %expect 0
 %expect-rr 3
+]$1[
 %locations
 %define api.pure
 %define parse.error verbose
 
 %union { int dummy; }
 
-%{
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
+}
 
 %%
 
@@ -1589,24 +1703,31 @@ AT_PARSER_CHECK([[glr-regr17]], 1, [],
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------------------------------------------------- ##
 ## Missed %merge type warnings when LHS type is declared later.  ##
 ## ------------------------------------------------------------- ##
 
-AT_SETUP([Missed %merge type warnings when LHS type is declared later])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Missed %merge type warnings when LHS type is declared later: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([glr-regr18.y],
 [[%define parse.assert
 %glr-parser
+]$1[
 
-%{
-  #include <stdlib.h>
+%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
+}
 
 %union {
   int type1;
@@ -1615,8 +1736,8 @@ AT_DATA_GRAMMAR([glr-regr18.y],
 }
 %%
 
-sym1: sym2 %merge<merge> { $$ = $1; } ;
-sym2: sym3 %merge<merge> { $$ = $1; } ;
+sym1: sym2 %merge<merge> { $$ = $][1; } ;
+sym2: sym3 %merge<merge> { $$ = $][1; } ;
 sym3: %merge<merge> { $$ = 0; } ;
 
 %type <type1> sym1;
@@ -1638,36 +1759,43 @@ glr-regr18.y:28.18-24: note: previous declaration
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ------------------- ##
 ## Ambiguity reports.  ##
 ## ------------------- ##
 
-AT_SETUP([Ambiguity reports])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Ambiguity reports: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser %debug])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser %debug $1])
 AT_DATA_GRAMMAR([input.y],
-[[%{
-  #include <stdio.h>
-  #include <stdlib.h>
+[[%code {
   ]AT_YYERROR_DECLARE[
   ]AT_YYLEX_DECLARE[
-%}
+}
 
 %define parse.assert
 %debug
 %glr-parser
 %expect 0
 %expect-rr 1
+]$1[
 
 %%
+
 start:
   'a' b 'c' d
 | 'a' b 'c' d
 ;
 b: 'b';
-d: /* nada.  */;
+d: %empty;
 %%
 ]AT_YYERROR_DEFINE[
 ]AT_YYLEX_DEFINE(["abc"])[
@@ -1688,15 +1816,15 @@ Next token is token 'b' ()
 Shifting token 'b' ()
 Entering state 3
 Reducing stack 0 by rule 3 (line 29):
-   $1 = token 'b' ()
--> $$ = nterm b ()
+   $][1 = token 'b' ()
+-> $][$ = nterm b ()
 Entering state 4
 Reading a token
 Next token is token 'c' ()
 Shifting token 'c' ()
 Entering state 6
 Reducing stack 0 by rule 4 (line 30):
--> $$ = nterm d ()
+-> $][$ = nterm d ()
 Entering state 7
 Reading a token
 Now at end of input.
@@ -1740,6 +1868,12 @@ Cleanup: popping token 'a' ()
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
+
 
 
 ## ----------------------------------------------------------------- ##
@@ -1749,14 +1883,17 @@ AT_CLEANUP
 ## http://lists.gnu.org/archive/html/bug-bison/2018-05/msg00033.html ##
 ## ----------------------------------------------------------------- ##
 
-AT_SETUP([Predicates])
+m4_pushdef([AT_TEST],
+[AT_SETUP([Predicates: $1])
 
-AT_BISON_OPTION_PUSHDEFS([%glr-parser])
+AT_BISON_OPTION_PUSHDEFS([%glr-parser $1])
 AT_DATA_GRAMMAR([input.y],
 [[%define parse.assert
 %glr-parser
 %define parse.error verbose
 %expect-rr 1
+]$1[
+
 %code requires
 {
   #include <assert.h>
@@ -1805,3 +1942,8 @@ AT_PARSER_CHECK([[input Nwio]], [1], [], [[syntax error, unexpected 'o', expecti
 
 AT_BISON_OPTION_POPDEFS
 AT_CLEANUP
+])
+
+AT_TEST([%skeleton "glr.c"])
+
+m4_popdef([AT_TEST])
-- 
2.29.2
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.