mirror of
https://git.savannah.gnu.org/git/bison.git
synced 2026-03-15 15:23:02 +00:00
Locations are no longer required by lalr1.cc.
* data/lalr1.cc (_b4_args, b4_args): New. Adjust all uses of locations to make them optional. * tests/c++.at (AT_CHECK_VARIANTS): No longer use the locations. (AT_CHECK_NAMESPACE): Check the use of locations. * tests/calc.at (_AT_DATA_CALC_Y): Adjust to be usable with or without locations with lalr1.cc. Test these cases. * tests/output.at: Check lalr1.cc with and without location support. * tests/regression.at (_AT_DATA_EXPECT2_Y, _AT_DATA_DANCER_Y): Don't use locations.
This commit is contained in:
@@ -141,10 +141,9 @@ yylex(yy::parser::semantic_type* yylval)
|
||||
}
|
||||
|
||||
void
|
||||
yy::parser::error(const yy::parser::location_type& yylloc,
|
||||
const std::string& message)
|
||||
yy::parser::error(const std::string& message)
|
||||
{
|
||||
std::cerr << yylloc << ": " << message << std::endl;
|
||||
std::cerr << message << std::endl;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -278,10 +277,11 @@ AT_DATA_GRAMMAR([[input.y]],
|
||||
%define namespace "]$1["
|
||||
%union { int i; }
|
||||
%define global_tokens_and_yystype
|
||||
%locations
|
||||
|
||||
%code {
|
||||
// YYSTYPE contains a namespace reference.
|
||||
int yylex (YYSTYPE *lval) {
|
||||
int yylex (YYSTYPE *lval, const ]$1[::parser::location_type* lloc) {
|
||||
lval->i = 3;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -90,16 +90,16 @@ static int get_char (]AT_LEX_FORMALS[);
|
||||
static void unget_char (]AT_LEX_PRE_FORMALS[ int c);
|
||||
%}
|
||||
|
||||
]AT_SKEL_CC_IF(
|
||||
[/* The lalr1.cc skeleton, for backward compatibility, defines
|
||||
]AT_SKEL_CC_IF([AT_LOCATION_IF([
|
||||
/* The lalr1.cc skeleton, for backward compatibility, defines
|
||||
a constructor for position that initializes the filename. The
|
||||
glr.cc skeleton does not (and in fact cannot: location/position
|
||||
are stored in a union, from which objects with constructors are
|
||||
excluded in C++. */
|
||||
excluded in C++). */
|
||||
%initial-action {
|
||||
@$.initialize (0);
|
||||
}
|
||||
])[
|
||||
])])[
|
||||
|
||||
/* Bison Declarations */
|
||||
%token CALC_EOF 0 "end of input"
|
||||
@@ -150,9 +150,8 @@ static FILE *input;
|
||||
]AT_SKEL_CC_IF(
|
||||
[/* A C++ error reporting function. */
|
||||
void
|
||||
AT_NAME_PREFIX::parser::error (const location& l, const std::string& m)
|
||||
AT_NAME_PREFIX::parser::error (AT_LOCATION_IF([const location& l, ])const std::string& m)
|
||||
{
|
||||
(void) l;
|
||||
std::cerr << AT_LOCATION_IF([l << ": " << ])m << std::endl;
|
||||
}
|
||||
|
||||
@@ -627,16 +626,17 @@ AT_CHECK_CALC([%skeleton "lalr1.cc" %defines %locations])
|
||||
# Start a testing chunk which compiles `calc' grammar with
|
||||
# the C++ skeleton, and performs several tests over the parser.
|
||||
m4_define([AT_CHECK_CALC_LALR1_CC],
|
||||
[AT_CHECK_CALC([%language "C++" %defines %locations] $@)])
|
||||
[AT_CHECK_CALC([%language "C++" %defines] $@)])
|
||||
|
||||
AT_CHECK_CALC_LALR1_CC([])
|
||||
AT_CHECK_CALC_LALR1_CC([%error-verbose %name-prefix "calc" %verbose %yacc])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations %error-verbose %name-prefix "calc" %verbose %yacc])
|
||||
|
||||
AT_CHECK_CALC_LALR1_CC([%error-verbose %debug %name-prefix "calc" %verbose %yacc])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations %error-verbose %debug %name-prefix "calc" %verbose %yacc])
|
||||
|
||||
AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc])
|
||||
|
||||
AT_CHECK_CALC_LALR1_CC([%pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||
AT_CHECK_CALC_LALR1_CC([%locations %pure-parser %error-verbose %debug %name-prefix "calc" %verbose %yacc %parse-param {semantic_value *result} %parse-param {int *count}])
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -107,13 +107,16 @@ AT_CHECK([grep 'include .subdir/' $1.hh], 1, [])
|
||||
])
|
||||
|
||||
AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %defines %verbose], [],
|
||||
[foo.tab.cc foo.tab.hh foo.output stack.hh])
|
||||
|
||||
AT_CHECK_OUTPUT([foo.yy], [%skeleton "lalr1.cc" %defines %verbose %locations], [],
|
||||
[foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh])
|
||||
|
||||
AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose], [],
|
||||
[foo.tab.cc foo.tab.hh foo.output location.hh stack.hh position.hh],
|
||||
[foo.tab.cc foo.tab.hh foo.output stack.hh],
|
||||
[], [AT_CHECK_NO_SUBDIR_PART([foo.tab])])
|
||||
|
||||
AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose],
|
||||
AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose %locations],
|
||||
[-o subdir/foo.cc],
|
||||
[subdir/foo.cc subdir/foo.hh subdir/foo.output subdir/location.hh subdir/stack.hh subdir/position.hh],
|
||||
[], [AT_CHECK_NO_SUBDIR_PART([subdir/foo])])
|
||||
@@ -121,6 +124,11 @@ AT_CHECK_OUTPUT([subdir/foo.yy], [%skeleton "lalr1.cc" %defines %verbose],
|
||||
AT_CHECK_OUTPUT([gram_dir/foo.yy],
|
||||
[%skeleton "lalr1.cc" %defines %verbose %file-prefix "output_dir/foo"],
|
||||
[],
|
||||
[output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/foo.output output_dir/stack.hh])
|
||||
|
||||
AT_CHECK_OUTPUT([gram_dir/foo.yy],
|
||||
[%skeleton "lalr1.cc" %defines %locations %verbose %file-prefix "output_dir/foo"],
|
||||
[],
|
||||
[output_dir/foo.tab.cc output_dir/foo.tab.hh output_dir/foo.output output_dir/location.hh output_dir/stack.hh output_dir/position.hh])
|
||||
|
||||
|
||||
@@ -153,7 +161,7 @@ AT_CHECK_CONFLICTING_OUTPUT([foo.y],
|
||||
])
|
||||
|
||||
AT_CHECK_CONFLICTING_OUTPUT([foo.y],
|
||||
[%skeleton "lalr1.cc" %defines], [--graph="location.hh"],
|
||||
[%skeleton "lalr1.cc" %defines %locations], [--graph="location.hh"],
|
||||
[foo.y: warning: conflicting outputs to file `location.hh'
|
||||
])
|
||||
|
||||
@@ -163,7 +171,7 @@ AT_CHECK_CONFLICTING_OUTPUT([foo.y], [], [-o foo.y],
|
||||
|
||||
|
||||
# AT_CHECK_OUTPUT_FILE_NAME(FILE-NAME-PREFIX, [ADDITIONAL-TESTS])
|
||||
# -----------------------------------------------------------------------------
|
||||
# ---------------------------------------------------------------
|
||||
m4_define([AT_CHECK_OUTPUT_FILE_NAME],
|
||||
[AT_SETUP([Output file name: $1])
|
||||
|
||||
|
||||
@@ -887,7 +887,7 @@ member: STRING
|
||||
AT_LALR1_CC_IF(
|
||||
[/* A C++ error reporting function. */
|
||||
void
|
||||
yy::parser::error (const location&, const std::string& m)
|
||||
yy::parser::error (const std::string& m)
|
||||
{
|
||||
std::cerr << m << std::endl;
|
||||
}
|
||||
@@ -986,7 +986,7 @@ t: A | B;
|
||||
AT_LALR1_CC_IF(
|
||||
[/* A C++ error reporting function. */
|
||||
void
|
||||
yy::parser::error (const location&, const std::string& m)
|
||||
yy::parser::error (const std::string& m)
|
||||
{
|
||||
std::cerr << m << std::endl;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user