mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-19 17:23:02 +00:00
local.at: improvements
* tests/local.at (AT_YYERROR_FORMALS): Make llocp const. (AT_PURE_AND_LOC_IF, AT_GLR_OR_PARAM_IF): Remove, expand... (AT_YYERROR_ARG_LOC_IF): Here, and use m4_join for readability.
This commit is contained in:
@@ -151,10 +151,6 @@ m4_pushdef([AT_PURE_IF],
|
|||||||
[m4_bmatch([$3], [%define *api\.pure\|%pure-parser],
|
[m4_bmatch([$3], [%define *api\.pure\|%pure-parser],
|
||||||
[m4_bmatch([$3], [%define *api\.pure *"?false"?], [$2], [$1])],
|
[m4_bmatch([$3], [%define *api\.pure *"?false"?], [$2], [$1])],
|
||||||
[$2])])
|
[$2])])
|
||||||
m4_pushdef([AT_PURE_AND_LOC_IF],
|
|
||||||
[m4_bmatch([$3], [%locations], [AT_PURE_IF($@)], [$2])])
|
|
||||||
m4_pushdef([AT_GLR_OR_PARAM_IF],
|
|
||||||
[m4_bmatch([$3], [%glr-parser\|%parse-param], [$1], [$2])])
|
|
||||||
m4_pushdef([AT_NAME_PREFIX],
|
m4_pushdef([AT_NAME_PREFIX],
|
||||||
[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"],
|
[m4_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"],
|
||||||
[m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])],
|
[m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])],
|
||||||
@@ -165,17 +161,28 @@ m4_pushdef([AT_API_prefix],
|
|||||||
[yy])])
|
[yy])])
|
||||||
m4_pushdef([AT_API_PREFIX],
|
m4_pushdef([AT_API_PREFIX],
|
||||||
[m4_toupper(AT_API_prefix)])
|
[m4_toupper(AT_API_prefix)])
|
||||||
# yyerror receives the location if %location & %pure & (%glr or %parse-param).
|
# yyerror receives the location if %location, and if the parser is pure. For
|
||||||
|
# historical reasons, with the "yacc.c" skeleton, the location is not passed
|
||||||
|
# unless an additional "%parse-param" is present, or if the purity is defined
|
||||||
|
# as "full".
|
||||||
m4_pushdef([AT_YYERROR_ARG_LOC_IF],
|
m4_pushdef([AT_YYERROR_ARG_LOC_IF],
|
||||||
[AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])],
|
[AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3],
|
||||||
[$2])])
|
m4_quote(m4_join([\|],
|
||||||
# yyerror always sees the locations (when activated), except if
|
[%glr-parser],
|
||||||
# (yacc & pure & !param). FIXME: This is wrong. See the manual.
|
[%parse-param],
|
||||||
|
[%skeleton "?glr.c"?])),
|
||||||
|
[$1], [$2])],
|
||||||
|
[$2])],
|
||||||
|
[$2])])
|
||||||
|
|
||||||
|
# yyerror always sees the locations (when activated) if the parser is impure.
|
||||||
|
# When the parser is pure, yyerror sees the location if it is received as an
|
||||||
|
# argument.
|
||||||
m4_pushdef([AT_YYERROR_SEES_LOC_IF],
|
m4_pushdef([AT_YYERROR_SEES_LOC_IF],
|
||||||
[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])],
|
[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_YYERROR_ARG_LOC_IF([$1], [$2])],
|
||||||
[$1])],
|
[$1])],
|
||||||
[$1])],
|
[$1])],
|
||||||
[$2])])
|
[$2])])
|
||||||
|
|
||||||
# The interface is pure: either because %define api.pure, or because we
|
# The interface is pure: either because %define api.pure, or because we
|
||||||
# are using the C++ parsers.
|
# are using the C++ parsers.
|
||||||
@@ -244,8 +251,6 @@ m4_popdef([AT_YYERROR_ARG_LOC_IF])
|
|||||||
m4_popdef([AT_API_PREFIX])
|
m4_popdef([AT_API_PREFIX])
|
||||||
m4_popdef([AT_API_prefix])
|
m4_popdef([AT_API_prefix])
|
||||||
m4_popdef([AT_NAME_PREFIX])
|
m4_popdef([AT_NAME_PREFIX])
|
||||||
m4_popdef([AT_GLR_OR_PARAM_IF])
|
|
||||||
m4_popdef([AT_PURE_AND_LOC_IF])
|
|
||||||
m4_popdef([AT_LOCATION_TYPE_IF])
|
m4_popdef([AT_LOCATION_TYPE_IF])
|
||||||
m4_popdef([AT_LOCATION_IF])
|
m4_popdef([AT_LOCATION_IF])
|
||||||
m4_popdef([AT_PARSE_PARAMS])
|
m4_popdef([AT_PARSE_PARAMS])
|
||||||
@@ -358,7 +363,7 @@ static
|
|||||||
# Must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS pair.
|
# Must be called inside a AT_BISON_OPTION_PUSHDEFS/POPDEFS pair.
|
||||||
m4_define([AT_YYERROR_FORMALS],
|
m4_define([AT_YYERROR_FORMALS],
|
||||||
[m4_case(AT_LANG,
|
[m4_case(AT_LANG,
|
||||||
[c], [AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE *llocp, ])AT_PARSE_PARAMS [const char *msg]])[]dnl
|
[c], [AT_YYERROR_ARG_LOC_IF([AT_YYLTYPE const * const llocp, ])AT_PARSE_PARAMS [const char *msg]])[]dnl
|
||||||
])
|
])
|
||||||
|
|
||||||
m4_define([AT_YYERROR_PROTOTYPE],
|
m4_define([AT_YYERROR_PROTOTYPE],
|
||||||
|
|||||||
Reference in New Issue
Block a user