From 7490994123d5cae9ae69547f4e121b24412b2760 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 22 Jun 2012 10:20:28 +0200 Subject: [PATCH] tests: handle locations in the generic yyerror functions. * tests/local.at (AT_YYERROR_DECLARE_EXTERN, AT_YYERROR_DECLARE) (AT_YYERROR_DEFINE): Handle locations for C and C++. * tests/calc.at: Use it for C++ (as C has extra arguments which are not yet handled by AT_BISON_OPTION_PUSHDEFS). * tests/actions.at: Adjust. --- tests/actions.at | 2 +- tests/calc.at | 10 +--------- tests/local.at | 23 ++++++++++++++++++----- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/tests/actions.at b/tests/actions.at index 5efc043d..afba3f0b 100644 --- a/tests/actions.at +++ b/tests/actions.at @@ -674,7 +674,7 @@ Reading a token: Next token is token 'd' (1.4-1.4: <> printer for 'd' @ 4) Shifting token 'd' (1.4-1.4: <> printer for 'd' @ 4) Entering state 6 Reading a token: Now at end of input. -syntax error, unexpected $end, expecting 'e' +1.5-4: syntax error, unexpected $end, expecting 'e' Error: popping token 'd' (1.4-1.4: <> printer for 'd' @ 4) Stack now 0 1 3 5 Error: popping token 'c' (1.3-1.3: 'b'/'c' printer for 'c' @ 3) diff --git a/tests/calc.at b/tests/calc.at index bd52d7cb..34d2e488 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -376,15 +376,7 @@ power (int base, int exponent) return o; } ]]) - -/* A C++ error reporting function. */ -void -AT_NAME_PREFIX::parser::error (const location_type& l, const std::string& m) -{ - (void) l; - 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, ]) diff --git a/tests/local.at b/tests/local.at index 4396a980..b945968e 100644 --- a/tests/local.at +++ b/tests/local.at @@ -314,7 +314,7 @@ static int # pair. m4_define([AT_YYERROR_DECLARE_EXTERN], [m4_case(AT_LANG, -[c], [void AT_API_PREFIX[]error (const char *msg);])[]dnl +[c], [void AT_API_PREFIX[]error (]AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])[const char *msg);])[]dnl ]) m4_define([AT_YYERROR_DECLARE], @@ -325,15 +325,28 @@ m4_define([AT_YYERROR_DECLARE], m4_define([AT_YYERROR_DEFINE], [m4_case(AT_LANG, [c], [[#include +/* A C error reporting function. */ static void -]AT_API_PREFIX[error (char const *msg) +yyerror (]AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])[const char *msg) { +]AT_YYERROR_SEES_LOC_IF([[ + fprintf (stderr, "%d.%d", + ]AT_LOC_FIRST_LINE[, ]AT_LOC_FIRST_COLUMN[); + if (]AT_LOC_FIRST_LINE[ != ]AT_LOC_LAST_LINE[) + fprintf (stderr, "-%d.%d", + ]AT_LOC_LAST_LINE[, ]AT_LOC_LAST_COLUMN[ - 1); + else if (]AT_LOC_FIRST_COLUMN[ != ]AT_LOC_LAST_COLUMN[ - 1) + fprintf (stderr, "-%d", + ]AT_LOC_LAST_COLUMN[ - 1); + fprintf (stderr, ": ");]])[ fprintf (stderr, "%s\n", msg); }]], -[c++], [[void -]AT_NAME_PREFIX[::parser::error (const yy::location &, std::string const &msg) +[c++], [[/* A C++ error reporting function. */ +void +]AT_NAME_PREFIX[::parser::error (const location_type& l, const std::string& m) { - std::cerr << msg << std::endl; + (void) l; + std::cerr << ]AT_LOCATION_IF([l << ": " << ])[m << std::endl; }]], [java], [[public void yyerror (String msg) { -- 2.45.2