Boost logo

Boost-Commit :

From: hartmut.kaiser_at_[hidden]
Date: 2008-03-15 21:39:59


Author: hkaiser
Date: 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
New Revision: 43646
URL: http://svn.boost.org/trac/boost/changeset/43646

Log:
Wave: Fixed whitespace insertion error, fixed test cases.
Text files modified:
   trunk/boost/wave/util/insert_whitespace_detection.hpp | 14 ++++++++++--
   trunk/libs/wave/test/testwave/collect_hooks_information.hpp | 6 ++--
   trunk/libs/wave/test/testwave/testfiles/t_2_009.cpp | 2
   trunk/libs/wave/test/testwave/testfiles/t_9_003.cpp | 13 ++++++++++-
   trunk/libs/wave/test/testwave/testwave.cpp | 6 +++-
   trunk/libs/wave/test/testwave/testwave_app.cpp | 44 ++++++++++++++++++++-------------------
   6 files changed, 53 insertions(+), 32 deletions(-)

Modified: trunk/boost/wave/util/insert_whitespace_detection.hpp
==============================================================================
--- trunk/boost/wave/util/insert_whitespace_detection.hpp (original)
+++ trunk/boost/wave/util/insert_whitespace_detection.hpp 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
@@ -388,10 +388,18 @@
             break;
 
         case T_GREATER:
- if (T_MINUS == prev)
- return true; // prevent ->
- // fall through
+ if (T_MINUS == prev || T_GREATER == prev)
+ return true; // prevent -> or >>
+ if (!impl::handle_parens(prev))
+ return false;
+ if (T_QUESTION_MARK == prev && T_QUESTION_MARK == beforeprev)
+ return true;
+ break;
+
         case T_LESS:
+ if (T_LESS == prev)
+ return true; // prevent <<
+ // fall through
         case T_CHARLIT:
         case T_NOT:
         case T_NOTEQUAL:

Modified: trunk/libs/wave/test/testwave/collect_hooks_information.hpp
==============================================================================
--- trunk/libs/wave/test/testwave/collect_hooks_information.hpp (original)
+++ trunk/libs/wave/test/testwave/collect_hooks_information.hpp 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
@@ -47,10 +47,10 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 template <typename String>
-inline std::string repr(boost::wave::util::file_position<String> const& pos)
+inline String repr(boost::wave::util::file_position<String> const& pos)
 {
- return handle_filepath(pos.get_file()) + String("(") +
- boost::lexical_cast<String>(pos.get_line()) + ")";
+ std::string linenum = boost::lexical_cast<std::string>(pos.get_line());
+ return handle_filepath(pos.get_file()) + String("(") + linenum.c_str() + ")";
 }
 
 ///////////////////////////////////////////////////////////////////////////////

Modified: trunk/libs/wave/test/testwave/testfiles/t_2_009.cpp
==============================================================================
--- trunk/libs/wave/test/testwave/testfiles/t_2_009.cpp (original)
+++ trunk/libs/wave/test/testwave/testfiles/t_2_009.cpp 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
@@ -43,7 +43,7 @@
 //H 02: <t_2_009.cpp>
 //H 03: <t_2_009.cpp>
 //H 04: <t_2_009.cpp>
-//H 05: ./t_2_009.cpp (C:/CVS/wave/libs/wave/test/testwave/testfiles/t_2_009.cpp)
+//H 05: $B(t_2_009.cpp) ($B(t_2_009.cpp))
 //H 10: t_2_009.cpp(15): #if
 //H 11: t_2_009.cpp(15): #if !defined(FILE_002_009_CPP) : 0
 //H 06:

Modified: trunk/libs/wave/test/testwave/testfiles/t_9_003.cpp
==============================================================================
--- trunk/libs/wave/test/testwave/testfiles/t_9_003.cpp (original)
+++ trunk/libs/wave/test/testwave/testfiles/t_9_003.cpp 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
@@ -16,8 +16,10 @@
 #define PLUS() +
 #define MINUS() -
 #define DOT() .
+#define GREATER() >
+#define LESS() <
 
-//R #line 21 "t_9_003.cpp"
+//R #line 23 "t_9_003.cpp"
 X()2 //R 1 2
 STRINGIZE( X()2 ) //R "12"
 //R
@@ -37,13 +39,20 @@
 STRINGIZE( DOT()DOT()DOT() ) //R "..."
 
 // the following are regressions reported by Stefan Seefeld
+//R #line 43 "t_9_003.cpp"
+GREATER()GREATER() //R > >
+STRINGIZE( GREATER()GREATER() ) //R ">>"
+//R
+LESS()LESS() //R < <
+STRINGIZE( LESS()LESS() ) //R "<<"
+
 #define COMMA() ,
 #define AND() &
 #define CHAR() char
 #define STAR() *
 
 // Make sure no whitespace gets inserted in between the operator symbols
-//R #line 47 "t_9_003.cpp"
+//R #line 56 "t_9_003.cpp"
 void foo(char&, char) //R void foo(char&, char)
 void foo(char *) //R void foo(char *)
 void foo(char *&) //R void foo(char *&)

Modified: trunk/libs/wave/test/testwave/testwave.cpp
==============================================================================
--- trunk/libs/wave/test/testwave/testwave.cpp (original)
+++ trunk/libs/wave/test/testwave/testwave.cpp 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
@@ -61,11 +61,13 @@
             ("copyright,c", "print out the copyright statement")
             ("config-file", po::value<std::vector<std::string> >()->composing(),
                 "specify a config file (alternatively: @arg)")
+ ("hooks", po::value<bool>()->default_value(true),
+ "test preprocessing hooks")
             ("debug,d", po::value<int>(), "set the debug level (0...9)")
         ;
 
     // Hidden options, will be used in in config file analysis to allow to
- // recognise positional arguments, will not be shown to the user.
+ // recognize positional arguments, will not be shown to the user.
         po::options_description desc_hidden("Hidden options");
         desc_hidden.add_options()
             ("input", po::value<std::vector<std::string> >()->composing(),
@@ -174,7 +176,7 @@
                     for (std::vector<std::string>::const_iterator iit = infiles.begin();
                          iit != iend; ++iit)
                     {
- // correct the file name (prepend the cfg file path)
+ // correct the file name (pre-pend the config file path)
                         fs::path cfgpath = fs::complete(
                             fs::path(*cit, fs::native), fs::current_path());
                         fs::path filepath =

Modified: trunk/libs/wave/test/testwave/testwave_app.cpp
==============================================================================
--- trunk/libs/wave/test/testwave/testwave_app.cpp (original)
+++ trunk/libs/wave/test/testwave/testwave_app.cpp 2008-03-15 21:39:59 EDT (Sat, 15 Mar 2008)
@@ -97,6 +97,24 @@
         result = result + name.c_str();
         return true;
     }
+
+ template <typename T>
+ inline T const&
+ variables_map_as(po::variable_value const& v, T*)
+ {
+#if (__GNUC__ == 3 && (__GNUC_MINOR__ == 2 || __GNUC_MINOR__ == 3)) || \
+ BOOST_WORKAROUND(__MWERKS__, < 0x3200)
+// gcc 3.2.x and 3.3.x choke on vm[...].as<...>()
+// CW 8.3 has problems with the v.as<T>() below
+ T const* r = boost::any_cast<T>(&v.value());
+ if (!r)
+ boost::throw_exception(boost::bad_any_cast());
+ return *r;
+#else
+ return v.as<T>();
+#endif
+ }
+
 }
 
 ///////////////////////////////////////////////////////////////////////////
@@ -274,6 +292,10 @@
     if (!read_file(filename, instr))
         return false; // error was reported already
 
+ bool test_hooks = true;
+ if (global_vm.count("hooks"))
+ test_hooks = variables_map_as(global_vm["hooks"], (bool *)NULL);
+
 // extract expected output, preprocess the data and compare results
     std::string expected, expected_hooks;
     if (extract_expected_output(filename, instr, expected, expected_hooks)) {
@@ -325,7 +347,7 @@
             }
             else {
             // preprocessing succeeded, check hook information, if appropriate
- if (!expected_hooks.empty() &&
+ if (test_hooks && !expected_hooks.empty() &&
                     !got_expected_result(filename, hooks, expected_hooks))
                 {
                     if (debuglevel > 2) {
@@ -746,26 +768,6 @@
     return true;
 }
 
-namespace {
-
- template <typename T>
- inline T const&
- variables_map_as(po::variable_value const& v, T*)
- {
-#if (__GNUC__ == 3 && (__GNUC_MINOR__ == 2 || __GNUC_MINOR__ == 3)) || \
- BOOST_WORKAROUND(__MWERKS__, < 0x3200)
-// gcc 3.2.x and 3.3.x choke on vm[...].as<...>()
-// CW 8.3 has problems with the v.as<T>() below
- T const* r = boost::any_cast<T>(&v.value());
- if (!r)
- boost::throw_exception(boost::bad_any_cast());
- return *r;
-#else
- return v.as<T>();
-#endif
- }
-}
-
 template <typename Context>
 bool
 testwave_app::initialise_options(Context& ctx, po::variables_map const& vm,


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk