X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/837b769659378e356f2f1ff4814e05c4e5300676..4b3847c3c0e161b85267d077adb256a880c0f3e3:/tests/local.at diff --git a/tests/local.at b/tests/local.at index 85507a39..7a981c6d 100644 --- a/tests/local.at +++ b/tests/local.at @@ -90,7 +90,8 @@ m4_popdef([AT_LOC_LAST_COLUMN])]) # AT_BISON_OPTION_PUSHDEFS([BISON-OPTIONS]) # ----------------------------------------- m4_define([AT_BISON_OPTION_PUSHDEFS], -[_AT_BISON_OPTION_PUSHDEFS($[1], $[2], [$1])]) +[m4_divert_text([KILL], + [_AT_BISON_OPTION_PUSHDEFS($[1], $[2], [$1])])]) # _AT_BISON_OPTION_PUSHDEFS($1, $2, [BISON-OPTIONS]) @@ -144,6 +145,8 @@ m4_pushdef([AT_API_prefix], [m4_bmatch([$3], [%define api\.prefix ".*"], [m4_bregexp([$3], [%define api\.prefix "\([^""]*\)"], [\1])], [yy])]) +m4_pushdef([AT_API_PREFIX], +[m4_toupper(AT_API_prefix)]) # 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])], @@ -162,11 +165,19 @@ m4_pushdef([AT_PURE_LEX_IF], [AT_PURE_IF([$1], [AT_SKEL_CC_IF([$1], [$2])])]) +m4_pushdef([AT_YYSTYPE], +[AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::semantic_type]], + [AT_API_PREFIX[STYPE]])]) +m4_pushdef([AT_YYLTYPE], +[AT_SKEL_CC_IF([AT_NAME_PREFIX[::parser::location_type]], + [AT_API_PREFIX[LTYPE]])]) + + AT_PURE_LEX_IF( [m4_pushdef([AT_LOC], [(*llocp)]) m4_pushdef([AT_VAL], [(*lvalp)]) m4_pushdef([AT_YYLEX_FORMALS], - [YYSTYPE *lvalp[]AT_LOCATION_IF([, YYLTYPE *llocp])]) + [AT_YYSTYPE *lvalp[]AT_LOCATION_IF([, AT_YYLTYPE *llocp])]) m4_pushdef([AT_YYLEX_ARGS], [lvalp[]AT_LOCATION_IF([, llocp])]) m4_pushdef([AT_USE_LEX_ARGS], @@ -199,16 +210,20 @@ AT_SKEL_CC_IF( # AT_BISON_OPTION_POPDEFS # ----------------------- m4_define([AT_BISON_OPTION_POPDEFS], +[m4_divert_text([KILL], [m4_popdef([AT_YYLEX_PRE_ARGS]) m4_popdef([AT_YYLEX_PRE_FORMALS]) m4_popdef([AT_USE_LEX_ARGS]) m4_popdef([AT_YYLEX_ARGS]) m4_popdef([AT_YYLEX_FORMALS]) +m4_popdef([AT_YYLTYPE]) +m4_popdef([AT_YYSTYPE]) m4_popdef([AT_VAL]) m4_popdef([AT_LOC]) m4_popdef([AT_PURE_LEX_IF]) 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_NAME_PREFIX]) m4_popdef([AT_GLR_OR_PARAM_IF]) @@ -225,7 +240,7 @@ m4_popdef([AT_SKEL_JAVA_IF]) m4_popdef([AT_GLR_CC_IF]) m4_popdef([AT_LALR1_CC_IF]) m4_popdef([AT_DEFINES_IF]) -AT_LOC_POPDEF +AT_LOC_POPDEF])dnl ])# AT_BISON_OPTION_POPDEFS @@ -279,8 +294,11 @@ $2]) # AT_YYLEX_PROTOTYPE # AT_YYLEX_DECLARE_EXTERN # AT_YYLEX_DECLARE -# AT_YYLEX_DEFINE(INPUT-STRING, [ACTION]) -# --------------------------------------- +# AT_YYLEX_DEFINE([INPUT], [ACTION]) +# ---------------------------------- +# INPUT can be empty, or in double quotes, or a list (in braces). +# ACTION may compute yylval for instance, using "res" as token type, +# and "toknum" as the number of calls to yylex (starting at 0). m4_define([AT_YYLEX_PROTOTYPE], [int AT_NAME_PREFIX[]lex (]AT_YYLEX_FORMALS[)[]dnl ]) @@ -294,19 +312,21 @@ m4_define([AT_YYLEX_DECLARE], ]) m4_define([AT_YYLEX_DEFINE], -[[#include /* abort */ +[[#include static ]AT_YYLEX_PROTOTYPE[ { - static char const input[] = "$1"; + ]m4_bmatch([$1], [^\(".*"\)?$], + [[static char const input[] = ]m4_default([$1], [""])], + [[static int const input[] = ]$1])[; static size_t toknum = 0; int res; - if (! (toknum < sizeof input)) - abort (); + ]AT_USE_LEX_ARGS[; + assert (toknum < sizeof input); res = input[toknum++]; - ]$2;[]AT_LOCATION_IF([[ - ]AT_NAME_PREFIX[lloc.first_line = ]AT_NAME_PREFIX[lloc.last_line = 1; - ]AT_NAME_PREFIX[lloc.first_column = ]AT_NAME_PREFIX[lloc.last_column = toknum;]])[ + ]$2[;]AT_LOCATION_IF([[ + ]AT_LOC_FIRST_LINE[ = ]AT_LOC_LAST_LINE[ = 1; + ]AT_LOC_FIRST_COLUMN[ = ]AT_LOC_LAST_COLUMN[ = toknum;]])[ return res; }]dnl ]) @@ -537,21 +557,37 @@ m4_define([AT_QUELL_VALGRIND], # AT_COMPILE(OUTPUT, [SOURCES = OUTPUT.c]) # ---------------------------------------- -# Compile SOURCES into OUTPUT. If OUTPUT does not contain '.', -# assume that we are linking too; this is a hack. +# Compile SOURCES into OUTPUT. +# +# If OUTPUT does not contain '.', assume that we are linking too, +# otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT +# with trailing .o removed, and ".c" appended. m4_define([AT_COMPILE], -[AT_CHECK([$CC $CFLAGS $CPPFLAGS m4_bmatch([$1], [[.]], [], [$LDFLAGS ])-o $1 m4_default([$2], [$1.c])[]m4_bmatch([$1], [[.]], [], [ $LIBS])], +[AT_CHECK(m4_join([ ], + [$CC $CFLAGS $CPPFLAGS], + [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])], + [-o $1], + [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).c])], + [m4_bmatch([$1], [[.]], [], [$LIBS])]), 0, [ignore], [ignore])]) # AT_COMPILE_CXX(OUTPUT, [SOURCES = OUTPUT.cc]) -# -------------------------------------------- -# Compile SOURCES into OUTPUT. If OUTPUT does not contain '.', -# assume that we are linking too; this is a hack. -# If the C++ compiler does not work, ignore the test. +# --------------------------------------------- +# Compile SOURCES into OUTPUT. If the C++ compiler does not work, +# ignore the test. +# +# If OUTPUT does not contain '.', assume that we are linking too, +# otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT +# with trailing .o removed, and ".cc" appended. 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])], +AT_CHECK(m4_join([ ], + [$CXX $CXXFLAGS $CPPFLAGS], + [m4_bmatch([$1], [[.]], [-c], [$LDFLAGS])], + [-o $1], + [m4_default([$2], [m4_bpatsubst([$1], [\.o$]).cc])], + [m4_bmatch([$1], [[.]], [], [$LIBS])]), 0, [ignore], [ignore])]) # AT_JAVA_COMPILE(SOURCES) @@ -566,6 +602,11 @@ AT_CHECK([[$SHELL ../../../javacomp.sh ]$1], # AT_LANG_COMPILE(OUTPUT, [SOURCES = OUTPUT.c] # -------------------------------------------- +# Compile SOURCES into OUTPUT. Skip if compiler does not work. +# +# If OUTPUT does not contain '.', assume that we are linking too, +# otherwise pass "-c"; this is a hack. The default SOURCES is OUTPUT +# with trailing .o removed, and ".c"/".cc" appended. m4_define([AT_LANG_COMPILE], [m4_case(AT_LANG, [c], [AT_COMPILE([$1], [$2])],