mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-20 17:53:02 +00:00
Merge remote-tracking branch 'origin/maint'
* origin/maint: tests: more uniformity. tests: handle locations in a more generic way. tests: handle locations in the generic yyerror functions. tests: fix AT_CHECK_CALC. tests: improve infrastructure tests: factor. skeletons: minor style changes tests: AT_LANG. c skeletons: factor the declaration of yylloc and yylval. news: condemn YYPARSE_PARAM and YYLEX_PARAM. maint: regen. Conflicts: tests/calc.at tests/local.at tests/regression.at
This commit is contained in:
@@ -110,15 +110,15 @@ main (int argc, const char **argv)
|
||||
m4_pushdef([AT_CALC_LEX],
|
||||
[[#include <ctype.h>
|
||||
|
||||
int ]AT_NAME_PREFIX[lex (]AT_LEX_FORMALS[);
|
||||
static int get_char (]AT_LEX_FORMALS[);
|
||||
static void unget_char (]AT_LEX_PRE_FORMALS[ int c);
|
||||
]AT_YYLEX_DECLARE_EXTERN[
|
||||
static int get_char (]AT_YYLEX_FORMALS[);
|
||||
static void unget_char (]AT_YYLEX_PRE_FORMALS[ int c);
|
||||
|
||||
]AT_LOCATION_IF([
|
||||
static YYLTYPE last_yylloc;
|
||||
])[
|
||||
static int
|
||||
get_char (]AT_LEX_FORMALS[)
|
||||
get_char (]AT_YYLEX_FORMALS[)
|
||||
{
|
||||
int res = getc (input);
|
||||
]AT_USE_LEX_ARGS[;
|
||||
@@ -136,7 +136,7 @@ get_char (]AT_LEX_FORMALS[)
|
||||
}
|
||||
|
||||
static void
|
||||
unget_char (]AT_LEX_PRE_FORMALS[ int c)
|
||||
unget_char (]AT_YYLEX_PRE_FORMALS[ int c)
|
||||
{
|
||||
]AT_USE_LEX_ARGS[;
|
||||
]AT_LOCATION_IF([
|
||||
@@ -147,26 +147,26 @@ unget_char (]AT_LEX_PRE_FORMALS[ int c)
|
||||
}
|
||||
|
||||
static int
|
||||
read_signed_integer (]AT_LEX_FORMALS[)
|
||||
read_signed_integer (]AT_YYLEX_FORMALS[)
|
||||
{
|
||||
int c = get_char (]AT_LEX_ARGS[);
|
||||
int c = get_char (]AT_YYLEX_ARGS[);
|
||||
int sign = 1;
|
||||
int n = 0;
|
||||
|
||||
]AT_USE_LEX_ARGS[;
|
||||
if (c == '-')
|
||||
{
|
||||
c = get_char (]AT_LEX_ARGS[);
|
||||
c = get_char (]AT_YYLEX_ARGS[);
|
||||
sign = -1;
|
||||
}
|
||||
|
||||
while (isdigit (c))
|
||||
{
|
||||
n = 10 * n + (c - '0');
|
||||
c = get_char (]AT_LEX_ARGS[);
|
||||
c = get_char (]AT_YYLEX_ARGS[);
|
||||
}
|
||||
|
||||
unget_char (]AT_LEX_PRE_ARGS[ c);
|
||||
unget_char (]AT_YYLEX_PRE_ARGS[ c);
|
||||
|
||||
return sign * n;
|
||||
}
|
||||
@@ -178,8 +178,7 @@ read_signed_integer (]AT_LEX_FORMALS[)
|
||||
| blanks and tabs, returns 0 for EOF. |
|
||||
`---------------------------------------------------------------*/
|
||||
|
||||
int
|
||||
]AT_NAME_PREFIX[lex (]AT_LEX_FORMALS[)
|
||||
]AT_YYLEX_PROTOTYPE[
|
||||
{
|
||||
static int init = 1;
|
||||
int c;
|
||||
@@ -201,13 +200,13 @@ int
|
||||
AT_LOC_FIRST_LINE = AT_LOC_LAST_LINE;
|
||||
])[
|
||||
}
|
||||
while ((c = get_char (]AT_LEX_ARGS[)) == ' ' || c == '\t');
|
||||
while ((c = get_char (]AT_YYLEX_ARGS[)) == ' ' || c == '\t');
|
||||
|
||||
/* process numbers */
|
||||
if (c == '.' || isdigit (c))
|
||||
{
|
||||
unget_char (]AT_LEX_PRE_ARGS[ c);
|
||||
]AT_VAL[.ival = read_signed_integer (]AT_LEX_ARGS[);
|
||||
unget_char (]AT_YYLEX_PRE_ARGS[ c);
|
||||
]AT_VAL[.ival = read_signed_integer (]AT_YYLEX_ARGS[);
|
||||
return ]AT_TOKEN_PREFIX[NUM;
|
||||
}
|
||||
|
||||
@@ -288,14 +287,11 @@ FILE *input;
|
||||
static int power (int base, int exponent);
|
||||
|
||||
]AT_SKEL_CC_IF(,
|
||||
[/* yyerror receives the location if:
|
||||
- %location & %pure & %glr
|
||||
- %location & %pure & %yacc & %parse-param. */
|
||||
static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
|
||||
[static void yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
|
||||
AT_PARAM_IF([semantic_value *result, int *count, ])
|
||||
const char *s
|
||||
);])[
|
||||
int yylex (]AT_LEX_FORMALS[);
|
||||
]AT_YYLEX_DECLARE_EXTERN[
|
||||
}
|
||||
|
||||
]AT_SKEL_CC_IF([AT_LOCATION_IF([AT_LOCATION_TYPE_IF([], [
|
||||
@@ -376,14 +372,7 @@ power (int base, int exponent)
|
||||
return o;
|
||||
}
|
||||
]])
|
||||
|
||||
/* A C++ error reporting function. */
|
||||
void
|
||||
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;
|
||||
}
|
||||
],
|
||||
AT_YYERROR_DEFINE],
|
||||
[/* A C error reporting function. */
|
||||
static void
|
||||
yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
|
||||
@@ -517,16 +506,15 @@ AT_CHECK([cat stderr], 0, [expout])
|
||||
])
|
||||
|
||||
|
||||
# AT_CHECK_CALC([BISON-OPTIONS, [EXPECTED-TO-FAIL]])
|
||||
# --------------------------------------------------
|
||||
# AT_CHECK_CALC([BISON-OPTIONS])
|
||||
# ------------------------------
|
||||
# Start a testing chunk which compiles `calc' grammar with
|
||||
# BISON-OPTIONS, and performs several tests over the parser.
|
||||
# However, if EXPECTED-TO-FAIL is nonempty, this test is expected to fail.
|
||||
m4_define([AT_CHECK_CALC],
|
||||
[# We use integers to avoid dependencies upon the precision of doubles.
|
||||
AT_SETUP([Calculator $1])
|
||||
[m4_ifval([$2], [m4_fatal([$0: expected a single argument])])
|
||||
|
||||
m4_ifval([$2], [AT_CHECK([exit 77])])
|
||||
# We use integers to avoid dependencies upon the precision of doubles.
|
||||
AT_SETUP([Calculator $1])
|
||||
|
||||
AT_BISON_OPTION_PUSHDEFS([$1])
|
||||
|
||||
|
||||
Reference in New Issue
Block a user