]> git.saurik.com Git - bison.git/commitdiff
c++: support wide strings for file names
authorAkim Demaille <akim@lrde.epita.fr>
Wed, 5 Dec 2012 10:21:21 +0000 (11:21 +0100)
committerAkim Demaille <akim@lrde.epita.fr>
Wed, 5 Dec 2012 12:22:21 +0000 (13:22 +0100)
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
data/location.cc
tests/headers.at

diff --git a/THANKS b/THANKS
index 218eea798fdf2c045d2795fef9c7c524fdd6a12a..9a64012caf7d35335c5500b341c0437b4e858c27 100644 (file)
--- 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
 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
 Martin Jacobs             martin.jacobs@arcor.de
 Martin Mokrejs            mmokrejs@natur.cuni.cz
 Martin Nylin              martin.nylin@linuxmail.org
index 58182a34acfe048966e8998eb29d1327ed9df45e..4082e09d1821829ee33b52cb548e83a6ef14ada4 100644 (file)
@@ -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
    */
    ** \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 <typename YYChar>
+  inline std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const position& pos)
   {
     if (pos.filename)
       ostr << *pos.filename << ':';
   {
     if (pos.filename)
       ostr << *pos.filename << ':';
@@ -275,7 +276,9 @@ b4_copyright([Locations for Bison parsers in C++],
    **
    ** Avoid duplicate information.
    */
    **
    ** Avoid duplicate information.
    */
-  inline std::ostream& operator<< (std::ostream& ostr, const location& loc)
+  template <typename YYChar>
+  inline std::basic_ostream<YYChar>&
+  operator<< (std::basic_ostream<YYChar>& ostr, const location& loc)
   {
     position last = loc.end - 1;
     ostr << loc.begin;
   {
     position last = loc.end - 1;
     ostr << loc.begin;
index dcf09a728296d307e54029c6faa28f47b62e2546..351b8a7b8efb1284fa5de8e2bd28076b5e342103 100644 (file)
@@ -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.
 # 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;
 #
 # 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
       |YYPUSH_MORE(_DEFINED)?
       |YY_\w+_INCLUDED
       |YY_NULL
@@ -244,13 +246,13 @@ AT_CHECK([[$PERL -n -0777 -e '
       )\b}{}gx;
   while (/^(.*YY.*)$/gm)
   {
       )\b}{}gx;
   while (/^(.*YY.*)$/gm)
   {
-    print "$ARGV: $1\n";
+    print "$ARGV: invalid exported YY: $1\n";
   }
   if ($ARGV =~ /\.h$/)
   {
     while (/^(.*yy.*)$/gm)
     {
   }
   if ($ARGV =~ /\.h$/)
   {
     while (/^(.*yy.*)$/gm)
     {
-      print "$ARGV: $1\n";
+      print "$ARGV: invalid exported yy: $1\n";
     }
   }
 ' -- *.hh *.h]])
     }
   }
 ' -- *.hh *.h]])