X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/f42c012fcf0c4eb4d07b59caca90de5442f988c3..ddb9db151b1620a2bffceeddf7790dd586129d92:/tests/local.at diff --git a/tests/local.at b/tests/local.at index a0e911fe..f3cc933a 100644 --- a/tests/local.at +++ b/tests/local.at @@ -31,15 +31,18 @@ m4_define([m4_null_if], # AT_SETUP_STRIP(TITLE) # --------------------- -# Abbreviate the TITLE to be passed to AT_SETUP. +# Abbreviate the TITLE to be passed to AT_SETUP. Remove new-lines +# that completely break AT_SETUP. m4_define([AT_SETUP_STRIP], [m4_bpatsubsts([$1], [%\(language\|skeleton\) "?\([^\" ]*\)"?], [\2], - [%define "?\([-A-Za-z0-9_.]+\)"? \("\([^\" ]+\)"\|\([-A-Za-z0-9_.]+\)\)], - [\1=\3\4], + [%define "?\([-A-Za-z0-9_.]+\)"? \("[^\"]+"\|[-A-Za-z0-9_.]+\)], + [\1=\2], [%define "?\([-A-Za-z0-9_.]+\)"?], - [\1])dnl + [\1], + [ * ++ *], [ ])dnl ]) @@ -94,21 +97,30 @@ m4_define([AT_RESTORE_SPECIAL_FILES], [at_restore_special_files]) # AT_LOC_PUSHDEF(FIRST-LINE, FIRST-COLUMN, LAST-LINE, LAST-COLUMN) # ---------------------------------------------------------------- -# Pushdef AT_LOC_(FIRST|LAST)_(LINE|COLUMN). +# Pushdef AT(_LOC)?_(FIRST|LAST)_(LINE|COLUMN). m4_define([AT_LOC_PUSHDEF], -[m4_pushdef([AT_LOC_FIRST_LINE], [AT_LOC.$1]) -m4_pushdef([AT_LOC_FIRST_COLUMN], [AT_LOC.$2]) -m4_pushdef([AT_LOC_LAST_LINE], [AT_LOC.$3]) -m4_pushdef([AT_LOC_LAST_COLUMN], [AT_LOC.$4])]) +[m4_pushdef([AT_FIRST_LINE], [$1]) +m4_pushdef([AT_FIRST_COLUMN], [$2]) +m4_pushdef([AT_LAST_LINE], [$3]) +m4_pushdef([AT_LAST_COLUMN], [$4]) +m4_pushdef([AT_LOC_FIRST_LINE], [AT_LOC.AT_FIRST_LINE]) +m4_pushdef([AT_LOC_FIRST_COLUMN], [AT_LOC.AT_FIRST_COLUMN]) +m4_pushdef([AT_LOC_LAST_LINE], [AT_LOC.AT_LAST_LINE]) +m4_pushdef([AT_LOC_LAST_COLUMN], [AT_LOC.AT_LAST_COLUMN])]) # AT_LOC_POPDEF # ------------- -# Popdef AT_LOC_(FIRST|LAST)_(LINE|COL). +# Popdef AT(_LOC)?_(FIRST|LAST)_(LINE|COLUMN). m4_define([AT_LOC_POPDEF], [m4_popdef([AT_LOC_FIRST_LINE]) m4_popdef([AT_LOC_FIRST_COLUMN]) m4_popdef([AT_LOC_LAST_LINE]) -m4_popdef([AT_LOC_LAST_COLUMN])]) +m4_popdef([AT_LOC_LAST_COLUMN]) +m4_popdef([AT_FIRST_LINE]) +m4_popdef([AT_FIRST_COLUMN]) +m4_popdef([AT_LAST_LINE]) +m4_popdef([AT_LAST_COLUMN]) +]) @@ -168,15 +180,18 @@ m4_pushdef([AT_PURE_IF], [m4_bmatch([$3], [%define *api\.pure\|%pure-parser], [m4_bmatch([$3], [%define *api\.pure *"?false"?], [$2], [$1])], [$2])]) +# AT_NAME_PREFIX: also consider api.namespace. m4_pushdef([AT_NAME_PREFIX], -[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"], - [m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])], +[m4_bmatch([$3], [\(%define api\.\(namespace\|prefix\)\|%name-prefix\) ".*"], + [m4_bregexp([$3], [\(%define api\.\(namespace\|prefix\)\|%name-prefix\) "\([^""]*\)"], [\3])], [yy])]) m4_pushdef([AT_TOKEN_CTOR_IF], -[m4_bmatch([$3], [%define api.token.constructor], [$1], [$2])]) +[m4_bmatch([$3], [%define api\.token\.constructor], [$1], [$2])]) m4_pushdef([AT_TOKEN_PREFIX], -[m4_bmatch([$3], [%define api.token.prefix ".*"], - [m4_bregexp([$3], [%define api.token.prefix "\(.*\)"], [\1])])]) +[m4_bmatch([$3], [%define api\.token\.prefix ".*"], + [m4_bregexp([$3], [%define api\.token\.prefix "\(.*\)"], [\1])])]) +m4_pushdef([AT_VARIANT_IF], +[m4_bmatch([$3], [%define api\.value\.type "?variant"?], [$1], [$2])]) m4_pushdef([AT_API_prefix], [m4_bmatch([$3], [%define api\.prefix ".*"], [m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])], @@ -190,7 +205,7 @@ m4_pushdef([AT_API_PREFIX], m4_pushdef([AT_YYERROR_ARG_LOC_IF], [AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3], m4_quote(m4_join([\|], - [%define api.pure "?full"?], + [%define api\.pure "?full"?], [%glr-parser], [%parse-param], [%skeleton "?glr.c"?])), @@ -275,6 +290,7 @@ m4_popdef([AT_YYERROR_SEES_LOC_IF]) m4_popdef([AT_YYERROR_ARG_LOC_IF]) m4_popdef([AT_API_PREFIX]) m4_popdef([AT_API_prefix]) +m4_popdef([AT_VARIANT_IF]) m4_popdef([AT_TOKEN_PREFIX]) m4_popdef([AT_TOKEN_CTOR_IF]) m4_popdef([AT_NAME_PREFIX]) @@ -407,12 +423,51 @@ m4_define([AT_YYERROR_DECLARE_EXTERN], m4_define([AT_YYERROR_DECLARE], [m4_case(AT_LANG, -[c], [static AT_YYERROR_DECLARE_EXTERN])[]dnl +[c], [#include +]AT_LOCATION_IF([[ +#if defined ]AT_YYLTYPE[_IS_TRIVIAL && ]AT_YYLTYPE[_IS_TRIVIAL +static unsigned location_print (FILE *yyo, ]AT_YYLTYPE[ const * const yylocp); +# ifndef LOCATION_PRINT +# define LOCATION_PRINT(File, Loc) location_print (File, &(Loc)) +# endif +#endif +]])[ +static AT_YYERROR_DECLARE_EXTERN])[]dnl ]) m4_define([AT_YYERROR_DEFINE], [m4_case(AT_LANG, -[c], [[#include +[c], [[ +]AT_LOCATION_IF([[ +# if defined ]AT_YYLTYPE[_IS_TRIVIAL && ]AT_YYLTYPE[_IS_TRIVIAL +/* Print *YYLOCP on YYO. */ +__attribute__((__unused__)) +static unsigned +location_print (FILE *yyo, ]AT_YYLTYPE[ const * const yylocp) +{ + unsigned res = 0; + int end_col = 0 != yylocp->last_column ? yylocp->last_column - 1 : 0; + if (0 <= yylocp->first_line) + { + res += fprintf (yyo, "%d", yylocp->first_line); + if (0 <= yylocp->first_column) + res += fprintf (yyo, ".%d", yylocp->first_column); + } + if (0 <= yylocp->last_line) + { + if (yylocp->first_line < yylocp->last_line) + { + res += fprintf (yyo, "-%d", yylocp->last_line); + if (0 <= end_col) + res += fprintf (yyo, ".%d", end_col); + } + else if (0 <= end_col && yylocp->first_column < end_col) + res += fprintf (yyo, "-%d", end_col); + } + return res; +} +#endif +]])[ /* A C error reporting function. */ static ]AT_YYERROR_PROTOTYPE[ @@ -420,7 +475,7 @@ static [[^,]+[^A-Za-z_0-9]\([A-Za-z_][A-Za-z_0-9]*\), *], [ YYUSE(\1);])dnl AT_YYERROR_SEES_LOC_IF([[ - YY_LOCATION_PRINT (stderr, ]AT_LOC[); + LOCATION_PRINT (stderr, ]AT_LOC[); fprintf (stderr, ": ");]])[ fprintf (stderr, "%s\n", msg); }]], @@ -462,7 +517,7 @@ main (int argc, char const* argv[]) yydebug |= 1;]], [[ (void) argc; (void) argv;]])[ - return yyparse (); + return ]AT_NAME_PREFIX[parse (); }]], [c++], [[#include // getenv. @@ -470,7 +525,7 @@ main (int argc, char const* argv[]) int main (int argc, char const* argv[]) { - yy::parser p;]AT_DEBUG_IF([[ + ]AT_NAME_PREFIX[::parser p;]AT_DEBUG_IF([[ if (getenv("YYDEBUG") || (argc == 2 && (!strcmp (argv[1], "-d") || !strcmp (argv[1], "--debug")))) @@ -709,23 +764,23 @@ m4_define([AT_FULL_COMPILE], [java], [AT_BISON_CHECK([-o $1.java $1.y]) AT_LANG_COMPILE([$1], - m4_join([ ], - [$1.java], - m4_ifval($2, [[$1-$2.java]]), + m4_join([ ], + [$1.java], + m4_ifval($2, [[$1-$2.java]]), m4_ifval($3, [[$1-$3.java]])))], [c++], [AT_BISON_CHECK([-o $1.cc $1.y]) AT_LANG_COMPILE([$1], - m4_join([ ], - [$1.cc], - m4_ifval($2, [[$1-$2.cc]]), + m4_join([ ], + [$1.cc], + m4_ifval($2, [[$1-$2.cc]]), m4_ifval($3, [[$1-$3.cc]])))], [c], [AT_BISON_CHECK([-o $1.c $1.y]) AT_LANG_COMPILE([$1], - m4_join([ ], - [$1.c], - m4_ifval($2, [[$1-$2.c]]), + m4_join([ ], + [$1.c], + m4_ifval($2, [[$1-$2.c]]), m4_ifval($3, [[$1-$3.c]])))]) ]) @@ -874,7 +929,6 @@ AT_SETUP([$1]) AT_BISON_OPTION_PUSHDEFS([$4]) AT_DATA_GRAMMAR([[input.y]], [[%code { - #include ]AT_YYERROR_DECLARE[ ]AT_YYLEX_DECLARE[ } @@ -897,11 +951,7 @@ yylex (void) return *inputp++; } -int -main (void) -{ - return yyparse (); -} +]AT_MAIN_DEFINE[ ]]) # In some versions of Autoconf, AT_CHECK invokes AS_ESCAPE before