X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/1154ccedaf2f504455446e484932c5c9ffd2a18e..4e0813a6cf9ec58cd6e6ef7ecaa1857eecb8cf13:/tests/cxx-type.at diff --git a/tests/cxx-type.at b/tests/cxx-type.at index 4e8762f2..61c7f50b 100644 --- a/tests/cxx-type.at +++ b/tests/cxx-type.at @@ -1,5 +1,5 @@ # Checking GLR Parsing. -*- Autotest -*- -# Copyright 2002 Free Software Foundation, Inc. +# Copyright (C) 2002 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -36,7 +36,11 @@ $1 ]m4_bmatch([$2], [stmtMerge], [ static YYSTYPE stmtMerge (YYSTYPE x0, YYSTYPE x1);])[ #define YYINITDEPTH 10 - int yyerror (const char *s); + int yyerror (const char *s +#if YYPURE && YYLSP_NEEDED + , YYLTYPE *yylocation +#endif + ); #if YYPURE ]m4_bmatch([$1], [location], @@ -88,13 +92,15 @@ declarator : ID { printf ("\"%s\" ", ]$[1); } #include #include +#include #include int main (int argc, char** argv) { - assert (argc = 2); - assert (freopen (argv[1], "r", stdin)); + assert (argc == 2); + if (!freopen (argv[1], "r", stdin)) + abort (); exit (yyparse ()); } @@ -110,34 +116,56 @@ yylex () { char buffer[256]; int c; + unsigned int i; #if YYPURE # define yylval (*lvalp) ]m4_bmatch([$1], [location],[ (void) llocp;])[ #endif - while (1) { - c = getchar (); - switch (c) { - case EOF: - return 0; - case ' ': case '\t': case '\n': case '\f': - break; - default: - if (isalpha (c)) { - ungetc (c, stdin); - scanf ("%[A-Za-z0-9_]", buffer); - yylval = strdup (buffer); - return isupper (buffer[0]) ? TYPENAME : ID; - } - return c; + while (1) + { + c = getchar (); + switch (c) + { + case EOF: + return 0; + case ' ': case '\t': case '\n': case '\f': + break; + default: + if (isalpha (c)) + { + i = 0; + + do + { + buffer[i++] = c; + if (i == sizeof buffer - 1) + abort (); + c = getchar (); + } + while (isalnum (c) || c == '_'); + + ungetc (c, stdin); + buffer[i++] = 0; + yylval = strcpy (malloc (i), buffer); + return isupper ((unsigned char) buffer[0]) ? TYPENAME : ID; + } + return c; + } } - } } int -yyerror (const char *s) +yyerror (const char *s +#if YYPURE && YYLSP_NEEDED + , YYLTYPE *yylocation +#endif + ) { +#if YYPURE && YYLSP_NEEDED + (void) *yylocation; +#endif fprintf (stderr, "%s\n", s); return 0; } @@ -182,7 +210,7 @@ z + q; This is total garbage, but it should be ignored. ]]) -AT_CHECK([bison types.y -o types.c], 0, [], ignore) +AT_CHECK([bison -o types.c types.y], 0, [], ignore) AT_COMPILE([types]) ]) @@ -224,62 +252,56 @@ m4_define([_AT_VERBOSE_GLR_STDERR], AT_SETUP([GLR: Resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CALC([],[%dprec 1],[%dprec 2]) -AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, _AT_RESOLVED_GLR_OUTPUT, - _AT_GLR_STDERR) +AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, + _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, impure, locations]) _AT_TEST_GLR_CALC([%locations],[%dprec 1],[%dprec 2]) -AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, _AT_RESOLVED_GLR_OUTPUT, - _AT_GLR_STDERR) +AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, + _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, no locations]) _AT_TEST_GLR_CALC([%pure-parser],[%dprec 1],[%dprec 2]) -AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, _AT_RESOLVED_GLR_OUTPUT, - _AT_GLR_STDERR) +AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, + _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Resolve ambiguity, pure, locations]) _AT_TEST_GLR_CALC([%pure-parser %locations],[%dprec 1],[%dprec 2]) AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, - _AT_RESOLVED_GLR_OUTPUT, - _AT_GLR_STDERR) + _AT_RESOLVED_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, impure, no locations]) _AT_TEST_GLR_CALC([],[%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 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_CALC([%locations],[%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, - _AT_AMBIG_GLR_OUTPUT, - _AT_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Merge conflicting parses, pure, no locations]) _AT_TEST_GLR_CALC([%pure-parser],[%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 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_CALC([%pure-parser %locations],[%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, - _AT_AMBIG_GLR_OUTPUT, - _AT_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT, _AT_GLR_STDERR) AT_CLEANUP AT_SETUP([GLR: Verbose messages, resolve ambiguity, impure, no locations]) _AT_TEST_GLR_CALC([%error-verbose], [%merge ],[%merge ]) AT_PARSER_CHECK([[./types test-input | sed 's/ *$//']], 0, - _AT_AMBIG_GLR_OUTPUT, - _AT_VERBOSE_GLR_STDERR) + _AT_AMBIG_GLR_OUTPUT, _AT_VERBOSE_GLR_STDERR) AT_CLEANUP