X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/6557bcce8b9265a2a486f197beb613d86a1a0914..505ece51710209eb4aba50166f8f7ddc57d0562b:/tests/cxx-type.at diff --git a/tests/cxx-type.at b/tests/cxx-type.at index 746d05a4..b0e5fdcd 100644 --- a/tests/cxx-type.at +++ b/tests/cxx-type.at @@ -23,15 +23,15 @@ AT_BANNER([[C++ Type Syntax (GLR).]]) # and with RESOLVE1 and RESOLVE2 as annotations on the conflicted rule for # stmt. Then compile the result. m4_define([_AT_TEST_GLR_CXXTYPES], -[ -AT_BISON_OPTION_PUSHDEFS([$1]) +[AT_BISON_OPTION_PUSHDEFS([%glr-parser $1]) AT_DATA_GRAMMAR([types.y], [[/* Simplified C++ Type and Expression Grammar. */ $1 -%{ +%code requires +{ #include union Node { struct { @@ -51,33 +51,22 @@ $1 } term; }; typedef union Node Node; + #define YYSTYPE Node * +} + +%code +{ static Node *new_nterm (char const *, Node *, Node *, Node *); static Node *new_term (char *); static void free_node (Node *); static char *node_to_string (Node *); - #define YYSTYPE Node * ]m4_bmatch([$2], [stmtMerge], [ static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);])[ #define YYINITDEPTH 10 #define YYSTACKEXPANDABLE 1 - struct YYLTYPE; -#if YYPURE -# if YYLSP_NEEDED -# define LEX_PARAMETERS YYSTYPE *lvalp, struct YYLTYPE *llocp -# define ERROR_PARAMETERS struct YYLTYPE *llocp, char const *s -# else -# define LEX_PARAMETERS YYSTYPE *lvalp -# endif -#endif -#ifndef LEX_PARAMETERS -# define LEX_PARAMETERS void -#endif -#ifndef ERROR_PARAMETERS -# define ERROR_PARAMETERS char const *s -#endif - int yylex (LEX_PARAMETERS); - void yyerror (ERROR_PARAMETERS); -%} + ]AT_YYERROR_DECLARE[ + ]AT_YYLEX_DECLARE[ +} %token TYPENAME ID @@ -133,19 +122,20 @@ declarator : ID #include #include #include +#include int main (int argc, char **argv) { - if (argc != 2) - abort (); + assert (argc == 2); if (!freopen (argv[1], "r", stdin)) return 3; return yyparse (); } -int -yylex (LEX_PARAMETERS) +]AT_YYERROR_DEFINE[ + +]AT_YYLEX_PROTOTYPE[ { char buffer[256]; int c; @@ -162,8 +152,7 @@ yylex (LEX_PARAMETERS) while (1) { - if (feof (stdin)) - abort (); + assert (!feof (stdin)); c = getchar (); switch (c) { @@ -181,11 +170,9 @@ yylex (LEX_PARAMETERS) break; default: { - int tok; -#if YYLSP_NEEDED + int tok;]AT_LOCATION_IF([[ yylloc.first_line = yylloc.last_line = lineNum; - yylloc.first_column = colNum; -#endif + yylloc.first_column = colNum;]])[ if (isalpha (c)) { i = 0; @@ -194,8 +181,7 @@ yylex (LEX_PARAMETERS) { buffer[i++] = c; colNum += 1; - if (i == sizeof buffer - 1) - abort (); + assert (i != sizeof buffer - 1); c = getchar (); } while (isalnum (c) || c == '_'); @@ -210,27 +196,14 @@ yylex (LEX_PARAMETERS) colNum += 1; tok = c; yylval = YY_NULL; - } -#if YYLSP_NEEDED - yylloc.last_column = colNum-1; -#endif + }]AT_LOCATION_IF([[ + yylloc.last_column = colNum-1;]])[ return tok; } } } } -void -yyerror (ERROR_PARAMETERS) -{ -#if YYPURE && YYLSP_NEEDED - /* Pacify GCC by using llocp. */ - if (! llocp) - abort (); -#endif - fprintf (stderr, "%s\n", s); -} - static Node * new_nterm (char const *form, Node *child0, Node *child1, Node *child2) { @@ -351,7 +324,7 @@ AT_BISON_OPTION_POPDEFS ]) m4_define([_AT_RESOLVED_GLR_OUTPUT], -[[[+(z,q) +[[+(z,q) (T,x) (T,x,y) =(x,y) @@ -360,10 +333,10 @@ m4_define([_AT_RESOLVED_GLR_OUTPUT], (T,y,+(z,q)) +(z,q) -]]]) +]]) m4_define([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], -[[[3.0-3.5: +(z,q) +[[3.0-3.5: +(z,q) 5.0-5.3: (T,x) 7.0-7.7: (T,x,y) 9.0-9.5: =(x,y) @@ -372,10 +345,10 @@ m4_define([_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], 15.0-15.13: (T,y,+(z,q)) 17.0-17.15: 19.0-19.5: +(z,q) -]]]) +]]) m4_define([_AT_AMBIG_GLR_OUTPUT], -[[[+(z,q) +[[+(z,q) (T,x) (T,x,y) =(x,y) @@ -384,10 +357,10 @@ m4_define([_AT_AMBIG_GLR_OUTPUT], ((T,y,+(z,q)),=((y,T),+(z,q))) +(z,q) -]]]) +]]) m4_define([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], -[[[3.0-3.5: +(z,q) +[[3.0-3.5: +(z,q) 5.0-5.3: (T,x) 7.0-7.7: (T,x,y) 9.0-9.5: =(x,y) @@ -396,15 +369,23 @@ m4_define([_AT_AMBIG_GLR_OUTPUT_WITH_LOC], 15.0-15.13: ((T,y,+(z,q)),=((y,T),+(z,q))) 17.0-17.15: 19.0-19.5: +(z,q) -]]]) +]]) m4_define([_AT_GLR_STDERR], -[[[syntax error -]]]) +[[syntax error +]]) + +m4_define([_AT_GLR_STDERR_WITH_LOC], +[[17.5: syntax error +]]) m4_define([_AT_VERBOSE_GLR_STDERR], -[[[syntax error, unexpected ID, expecting '=' or '+' or ')' -]]]) +[[syntax error, unexpected ID, expecting '=' or '+' or ')' +]]) + +m4_define([_AT_VERBOSE_GLR_STDERR_WITH_LOC], +[[17.5: syntax error, unexpected ID, expecting '=' or '+' or ')' +]]) ## ---------------------------------------------------- ## ## Compile the grammar described in the documentation. ## @@ -414,59 +395,59 @@ AT_SETUP([GLR: Resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CXXTYPES([], [%dprec 1], [%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) + [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, impure, locations]) _AT_TEST_GLR_CXXTYPES([%locations],[%dprec 1],[%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + [_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, no locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure], [%dprec 1], [%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) + [_AT_RESOLVED_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure %locations], [%dprec 1], [%dprec 2]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_RESOLVED_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + [_AT_RESOLVED_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, no locations]) _AT_TEST_GLR_CXXTYPES([], [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) + [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, locations]) _AT_TEST_GLR_CXXTYPES([%locations], [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + [_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, no locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure], [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) + [_AT_AMBIG_GLR_OUTPUT], [_AT_GLR_STDERR]) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, locations]) _AT_TEST_GLR_CXXTYPES([%define api.pure %locations], [%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT_WITH_LOC, _AT_GLR_STDERR) + [_AT_AMBIG_GLR_OUTPUT_WITH_LOC], [_AT_GLR_STDERR_WITH_LOC]) AT_CLEANUP AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CXXTYPES([%error-verbose], [%merge ], [%merge ]) AT_PARSER_CHECK([[./types test-input]], 0, - _AT_AMBIG_GLR_OUTPUT, _AT_VERBOSE_GLR_STDERR) + [_AT_AMBIG_GLR_OUTPUT], [_AT_VERBOSE_GLR_STDERR]) AT_CLEANUP