mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-09 20:33:03 +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 *"?false"?], [$2], [$1])],
|
||||
[$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_bmatch([$3], [\(%define api\.prefix\|%name-prefix\) ".*"],
|
||||
[m4_bregexp([$3], [\(%define api\.prefix\|%name-prefix\) "\([^""]*\)"], [\2])],
|
||||
@@ -165,17 +161,28 @@ m4_pushdef([AT_API_prefix],
|
||||
[yy])])
|
||||
m4_pushdef([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],
|
||||
[AT_GLR_OR_PARAM_IF([AT_PURE_AND_LOC_IF([$1], [$2])],
|
||||
[$2])])
|
||||
# yyerror always sees the locations (when activated), except if
|
||||
# (yacc & pure & !param). FIXME: This is wrong. See the manual.
|
||||
[AT_LOCATION_IF([AT_PURE_IF([m4_bmatch([$3],
|
||||
m4_quote(m4_join([\|],
|
||||
[%glr-parser],
|
||||
[%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],
|
||||
[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_PARAM_IF([$1], [$2])],
|
||||
[$1])],
|
||||
[$1])],
|
||||
[$2])])
|
||||
[AT_LOCATION_IF([AT_YACC_IF([AT_PURE_IF([AT_YYERROR_ARG_LOC_IF([$1], [$2])],
|
||||
[$1])],
|
||||
[$1])],
|
||||
[$2])])
|
||||
|
||||
# The interface is pure: either because %define api.pure, or because we
|
||||
# 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_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_IF])
|
||||
m4_popdef([AT_PARSE_PARAMS])
|
||||
@@ -358,7 +363,7 @@ static
|
||||
# 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([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],
|
||||
|
||||
Reference in New Issue
Block a user