X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/6d55954743c7243ba46680f368c76ee70b1112f8..423ca9b50e4321c078cc6fe7903b10ed4907d269:/tests/local.at diff --git a/tests/local.at b/tests/local.at index 02093938..649e9943 100644 --- a/tests/local.at +++ b/tests/local.at @@ -97,7 +97,7 @@ m4_define([AT_BISON_OPTION_PUSHDEFS], # -------------------------------------------------- # This macro works around the impossibility to define macros # inside macros, because issuing `[$1]' is not possible in M4 :(. -# This sucks hard, GNU M4 should really provide M5 like $$1. +# This sucks hard, GNU M4 should really provide M5-like $$1. m4_define([_AT_BISON_OPTION_PUSHDEFS], [m4_if([$1$2], $[1]$[2], [], [m4_fatal([$0: Invalid arguments: $@])])dnl @@ -138,51 +138,54 @@ m4_pushdef([AT_GLR_OR_PARAM_IF], [m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])]) m4_pushdef([AT_NAME_PREFIX], [m4_bmatch([$3], [%name-prefix ".*"], - [m4_bregexp([$3], [name-prefix "\([^""]*\)"], [\1])], + [m4_bregexp([$3], [%name-prefix "\([^""]*\)"], [\1])], [yy])]) m4_pushdef([AT_API_PREFIX], -[m4_bmatch([$3], [%define api\.prefix ".*"], - [m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])], +[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"], + [m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])], [yy])]) +m4_pushdef([AT_TOKEN_PREFIX], +[m4_bmatch([$3], [%define api.tokens.prefix ".*"], + [m4_bregexp([$3], [%define api.tokens.prefix "\(.*\)"], [\1])])]) # yyerror receives the location if %location & %pure & (%glr or %parse-param). m4_pushdef([AT_YYERROR_ARG_LOC_IF], [AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])], - [$2])]) + [$2])]) # yyerror always sees the locations (when activated), except if # (yacc & pure & !param). FIXME: This is wrong. See the manual. m4_pushdef([AT_YYERROR_SEES_LOC_IF], [AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])], - [$1])], - [$1])], - [$2])]) + [$1])], + [$1])], + [$2])]) # The interface is pure: either because %define api.pure, or because we # are using the C++ parsers. m4_pushdef([AT_PURE_LEX_IF], [AT_PURE_IF([$1], - [AT_SKEL_CC_IF([$1], [$2])])]) + [AT_SKEL_CC_IF([$1], [$2])])]) AT_PURE_LEX_IF( [m4_pushdef([AT_LOC], [(*llocp)]) m4_pushdef([AT_VAL], [(*lvalp)]) - m4_pushdef([AT_LEX_FORMALS], - [YYSTYPE *lvalp[]AT_LOCATION_IF([, YYLTYPE *llocp])]) - m4_pushdef([AT_LEX_ARGS], - [lvalp[]AT_LOCATION_IF([, llocp])]) + m4_pushdef([AT_YYLEX_FORMALS], + [YYSTYPE *lvalp[]AT_LOCATION_IF([, YYLTYPE *llocp])]) + m4_pushdef([AT_YYLEX_ARGS], + [lvalp[]AT_LOCATION_IF([, llocp])]) m4_pushdef([AT_USE_LEX_ARGS], - [(void) lvalp;AT_LOCATION_IF([(void) llocp])]) - m4_pushdef([AT_LEX_PRE_FORMALS], - [AT_LEX_FORMALS, ]) - m4_pushdef([AT_LEX_PRE_ARGS], - [AT_LEX_ARGS, ]) + [(void) lvalp;AT_LOCATION_IF([(void) llocp])]) + m4_pushdef([AT_YYLEX_PRE_FORMALS], + [AT_YYLEX_FORMALS, ]) + m4_pushdef([AT_YYLEX_PRE_ARGS], + [AT_YYLEX_ARGS, ]) ], [m4_pushdef([AT_LOC], [[(]AT_NAME_PREFIX[lloc)]]) m4_pushdef([AT_VAL], [[(]AT_NAME_PREFIX[lval)]]) - m4_pushdef([AT_LEX_FORMALS], [void]) - m4_pushdef([AT_LEX_ARGS], []) + m4_pushdef([AT_YYLEX_FORMALS], [void]) + m4_pushdef([AT_YYLEX_ARGS], []) m4_pushdef([AT_USE_LEX_ARGS], []) - m4_pushdef([AT_LEX_PRE_FORMALS], []) - m4_pushdef([AT_LEX_PRE_ARGS], []) + m4_pushdef([AT_YYLEX_PRE_FORMALS], []) + m4_pushdef([AT_YYLEX_PRE_ARGS], []) ]) # Handle the different types of location components. @@ -193,17 +196,19 @@ AT_SKEL_CC_IF( [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])])], [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])]) + +AT_GLR_IF([AT_KEYWORDS([glr])]) ])# _AT_BISON_OPTION_PUSHDEFS # AT_BISON_OPTION_POPDEFS # ----------------------- m4_define([AT_BISON_OPTION_POPDEFS], -[m4_popdef([AT_LEX_PRE_ARGS]) -m4_popdef([AT_LEX_PRE_FORMALS]) +[m4_popdef([AT_YYLEX_PRE_ARGS]) +m4_popdef([AT_YYLEX_PRE_FORMALS]) m4_popdef([AT_USE_LEX_ARGS]) -m4_popdef([AT_LEX_ARGS]) -m4_popdef([AT_LEX_FORMALS]) +m4_popdef([AT_YYLEX_ARGS]) +m4_popdef([AT_YYLEX_FORMALS]) m4_popdef([AT_VAL]) m4_popdef([AT_LOC]) m4_popdef([AT_PURE_LEX_IF]) @@ -276,12 +281,17 @@ m4_define([AT_DATA_GRAMMAR], $2]) ]) +# AT_YYLEX_PROTOTYPE # AT_YYLEX_DECLARE_EXTERN # AT_YYLEX_DECLARE # AT_YYLEX_DEFINE(INPUT-STRING, [ACTION]) # --------------------------------------- +m4_define([AT_YYLEX_PROTOTYPE], +[int AT_API_PREFIX[]lex (]AT_YYLEX_FORMALS[)[]dnl +]) + m4_define([AT_YYLEX_DECLARE_EXTERN], -[int AT_API_PREFIX[]lex (]AT_LEX_FORMALS[);dnl +[AT_YYLEX_PROTOTYPE;dnl ]) m4_define([AT_YYLEX_DECLARE], @@ -290,8 +300,8 @@ m4_define([AT_YYLEX_DECLARE], m4_define([AT_YYLEX_DEFINE], [[#include /* abort */ -static int -]AT_API_PREFIX[lex (]AT_LEX_FORMALS[) +static +]AT_YYLEX_PROTOTYPE[ { static char const input[] = "$1"; static size_t toknum = 0; @@ -312,9 +322,14 @@ static int # AT_YYERROR_DEFINE # ------------------------- # Must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS pair. +m4_define([AT_YYERROR_FORMALS], +[m4_case(AT_LANG, +[c], [AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])[const char *msg]])[]dnl +]) + m4_define([AT_YYERROR_PROTOTYPE], [m4_case(AT_LANG, -[c], [[void ]AT_API_PREFIX[error (]AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])[const char *msg)]])[]dnl +[c], [[void ]AT_API_PREFIX[error (]AT_YYERROR_FORMALS[)]])[]dnl ]) m4_define([AT_YYERROR_DECLARE_EXTERN], @@ -348,13 +363,11 @@ static }]], [c++], [[/* A C++ error reporting function. */ void -]AT_NAME_PREFIX[::parser::error (const location_type& l, const std::string& m) -{ - (void) l; - std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl; +]AT_NAME_PREFIX[::parser::error (]AT_LOCATION_IF([[const location_type& l, ]])[const std::string& m) +{ std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl; }]], [java], [AT_LOCATION_IF([[public void yyerror (Calc.Location l, String s) - { +{ if (l == null) System.err.println (s); else @@ -364,7 +377,7 @@ void public void yyerror (String s) { System.err.println (s); - }]])])dnl +}]])])dnl ]) @@ -531,7 +544,7 @@ m4_define([AT_QUELL_VALGRIND], # assume that we are linking too; this is a hack. m4_define([AT_COMPILE], [AT_CHECK([$CC $CFLAGS $CPPFLAGS m4_bmatch([$1], [[.]], [], [$LDFLAGS ])-o $1 m4_default([$2], [$1.c])[]m4_bmatch([$1], [[.]], [], [ $LIBS])], - 0, [ignore], [ignore])]) + 0, [ignore], [ignore])]) # AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc]) # -------------------------------------------- @@ -542,7 +555,7 @@ m4_define([AT_COMPILE_CXX], [AT_KEYWORDS(c++) AT_CHECK([$BISON_CXX_WORKS], 0, ignore, ignore) AT_CHECK([$CXX $CXXFLAGS $CPPFLAGS m4_bmatch([$1], [[.]], [], [$LDFLAGS ])-o $1 m4_default([$2], [$1.cc])[]m4_bmatch([$1], [[.]], [], [ $LIBS])], - 0, [ignore], [ignore])]) + 0, [ignore], [ignore])]) # AT_JAVA_COMPILE(SOURCES) # ------------------------ @@ -576,23 +589,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]])))]) ])