From 7ae57e2a352764327f7b6b969a28d8c6640eab33 Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Wed, 5 Dec 2012 11:21:21 +0100 Subject: [PATCH] c++: support wide strings for file names Reported by Mark Boyall. http://lists.gnu.org/archive/html/help-bison/2011-08/msg00002.html * data/location.cc (operator<<): Be templated on the type of output stream. * tests/headers.at (Several parsers): Adjust. --- THANKS | 1 + data/location.cc | 9 ++++++--- tests/headers.at | 12 +++++++----- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/THANKS b/THANKS index 218eea79..9a64012c 100644 --- a/THANKS +++ b/THANKS @@ -68,6 +68,7 @@ Lie Yan lie.yan@kaust.edu.sa Magnus Fromreide magfr@lysator.liu.se Marc Autret autret_m@epita.fr Marc Mendiola mmendiol@usc.edu +Mark Boyall wolfeinstein@gmail.com Martin Jacobs martin.jacobs@arcor.de Martin Mokrejs mmokrejs@natur.cuni.cz Martin Nylin martin.nylin@linuxmail.org diff --git a/data/location.cc b/data/location.cc index 58182a34..4082e09d 100644 --- a/data/location.cc +++ b/data/location.cc @@ -136,8 +136,9 @@ b4_copyright([Positions for Bison parsers in C++], ** \param ostr the destination output stream ** \param pos a reference to the position to redirect */ - inline std::ostream& - operator<< (std::ostream& ostr, const position& pos) + template + inline std::basic_ostream& + operator<< (std::basic_ostream& ostr, const position& pos) { if (pos.filename) ostr << *pos.filename << ':'; @@ -275,7 +276,9 @@ b4_copyright([Locations for Bison parsers in C++], ** ** Avoid duplicate information. */ - inline std::ostream& operator<< (std::ostream& ostr, const location& loc) + template + inline std::basic_ostream& + operator<< (std::basic_ostream& ostr, const location& loc) { position last = loc.end - 1; ostr << loc.begin; diff --git a/tests/headers.at b/tests/headers.at index dcf09a72..351b8a7b 100644 --- a/tests/headers.at +++ b/tests/headers.at @@ -229,14 +229,16 @@ AT_TEST([x8], [%define api.pure %define api.push-pull both]) # C++ output relies on namespaces and still uses yy a lot. # # Check there is no 'YY' left. -# Ignore comments, YYPARSE_PARAM (obsolete), YYPUSH_MORE(_DEFINED)? -# (constant definition), YY_\w+_INCLUDED (header guards). +# Ignore comments, YYChar (template parameter), YYPARSE_PARAM +# (obsolete), YYPUSH_MORE(_DEFINED)? (constant definition), +# YY_\w+_INCLUDED (header guards). # # YYDEBUG (not renamed) can be read, but not changed. AT_CHECK([[$PERL -n -0777 -e ' s{/\*.*?\*/}{}gs; s{//.*}{}g; - s{\b(YYPARSE_PARAM + s{\b(YYChar + |YYPARSE_PARAM |YYPUSH_MORE(_DEFINED)? |YY_\w+_INCLUDED |YY_NULL @@ -244,13 +246,13 @@ AT_CHECK([[$PERL -n -0777 -e ' )\b}{}gx; while (/^(.*YY.*)$/gm) { - print "$ARGV: $1\n"; + print "$ARGV: invalid exported YY: $1\n"; } if ($ARGV =~ /\.h$/) { while (/^(.*yy.*)$/gm) { - print "$ARGV: $1\n"; + print "$ARGV: invalid exported yy: $1\n"; } } ' -- *.hh *.h]]) -- 2.45.2