SCM Repositories - boost


Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.148 - (download) (annotate)
Tue Mar 6 19:28:32 2007 UTC (2 years, 4 months ago) by hkaiser
Branch: MAIN
Changes since 1.147: +3 -3 lines
Updated the changelog.
    1 Boost.Wave: A Standard compliant C++ preprocessor library
    2 http://www.boost.org/
    3 
    4 Copyright (c) 2001-2007 Hartmut Kaiser. Distributed under the Boost
    5 Software License, Version 1.0. (See accompanying file
    6 LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
    7 -------------------------------------------------------------------------------
    8 
    9 TODO (known issues):
   10 - Fix expansion of macros, which replacement-list terminates in a partial 
   11   macro expansion.
   12 - Fix the re2c lexer for iterators others then string::iterator (or more 
   13   generally for iterators, which aren't random access iterators)
   14 - Try to remove the second parameter from the pp_iterator<>::force_include
   15   function.
   16 - Fix the trigraph backslash problem in the re2c (C/C++ and IDL) scanners, if 
   17   there is the end of the (internal) buffer just in between a '??/' and a '\n'.
   18   
   19 - Do a sourceforge release.
   20 
   21 -------------------------------------------------------------------------------
   22 
   23 CHANGELOG
   24 
   25 - Wave Version 1.3
   26 - Changed the return value of the 'evaluated_conditional_expression()' pp hook
   27   to 'bool' allowing to force Wave to re-evaluate the current conditional
   28   expression. This was suggested by Felipe Magno de Almeida.
   29 - Added a wave::context object as first parameter to all pp hook functions. 
   30   This is an interface compatibility breaking change. The new pp-hooks can be 
   31   disabled by defining the BOOST_WAVE_USE_DEPRECIATED_PREPROCESSING_HOOKS 
   32   compile time constant to something not equal to zero. By default this 
   33   constant will be defined to zero for Boost V1.35.0 and newer, switching to
   34   the new interface by default.
   35 - Added optional support for the import keyword (needed for the C++ module
   36   proposal). The identifier import will be recognized as a keyword, if 
   37   the compile time constant BOOST_WAVE_SUPPORT_IMPORT_KEYWORD is defined to 
   38   something not equal zero.
   39 - Added new preprocessing hook functions: found_error_directive() and 
   40   found_warning_directive() to be called when #error/#warning directives are
   41   encountered. This was suggested by Andreas Sæbjørnsen.
   42 - Added a new sample to Wave: hannibal, a partial C++ parser implementation
   43   initially written by Danny Havenith (http://havenith-verlinden.nl/hannibal/)
   44   who agreed to add this here. Thanks!
   45 - Added new preprocessing hook function: found_line_directive() to be called 
   46   when a #line directive is encountered. This was suggested by Andreas
   47   Sæbjørnsen.
   48 - Improved command line handling for the wave applet.
   49 - Incorporated latest bug fixes for the Hannibal sample provided by Danny 
   50   Havenith. 
   51 - Added loading of a wave.cfg file from anywhere up the filesystem hierarchy 
   52   starting from the main input file for the wave driver applet up to the 
   53   root of the file system.
   54 - Added support_option_emit_pragma_directive to allow to control at runtime,
   55   whether unknown #pragma directives should be emitted or not. To maintain 
   56   compatibility with earlier versions this option is by default on if the
   57   compile time constant BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES was defined to 
   58   be not equal to zero and it is off otherwise.
   59 - Enabled XML serialization support.
   60 - Added the throw_exception preprocessing hook, which gets called for every 
   61   occurring error (whenever an exception would have been thrown). The default
   62   of this new hook function is to throw the corresponding exception, which 
   63   reproduces the old behavior.
   64 - Implemented a new preprocessing hook: generated_token(), which get's called
   65   whenever a token is about to be returned form the library. This function may
   66   be used to alter the token before it gets returned to the calling 
   67   application.
   68 - Added a new sample 'real_positions' demonstrating the new generated_token()
   69   preprocessing hook and showing how to use Wave with a new token type without 
   70   using a new lexer type.
   71 - Factored out the pure lex_input_interface to simplify writing different lexer 
   72   types for Wave.
   73 - Added the token_statistics sample showing how to use Xpressive to build a 
   74   lexer for Wave.
   75 - Changed the list_includes sample to use a lexer which is based on the lexertl 
   76   library written by Ben Hanson (http://www.benhanson.net/lexertl.html).
   77 - Added a new support_option: insert_whitespace, allowing to switch off 
   78   whitespace insertion which is normally (by default) in place to disambiugate
   79   C++ tokens, which would otherwise form different tokens in the output.
   80 - Added a new commandline option to the Wave applet: --disambiguate, allowing
   81   to control whitespace insertion. The default value for this option is 
   82   --disambiguate=1, resembling the previous behaviour. Specifying the option
   83   --disambiguate=0 allows to suppress whitespace insertion alltogether.
   84 - Switched to Re2C V0.11.0
   85 - Added pragma option values push and pop to the opetions line, preserve and 
   86   output allowing to store and restore the current option. The syntax is:
   87     #pragma wave options(<option>: push) and
   88     #pragma wave options(<option>: pop)
   89   where <option> may be line, preserve or output. Thanks to Eric Niebler for 
   90   suggesting this feature.
   91 - Added the possibility to use static pre-compiled DFA tables for the lexertl 
   92   based lexer.
   93   
   94 Boost V1.34.0
   95 - Wave Version 1.2.4
   96 - Added the possibility to explicitly enable/disable the generation of #line 
   97   directives. Added a corresponding commandline argument to the Wave driver 
   98   tool (--line/-L) which takes either 0 or 1 as its parameter.
   99 - Added support for #pragma wave option(command: value) directives, which 
  100   supports the following commands:
  101    . #pragma wave option(line: [0|1])  
  102         Enable/disable generation of #line directives
  103    . #pragma wave option(preserve: [0|1|2])  
  104         Control whitespace preservation
  105    . #pragma wave option(output: ["filename" | null | default])
  106         Redirect output to the given file (or no output, if 'null' is specified,
  107         or output to the file as given on the command line, if 'default' is 
  108         specified).
  109         The filename is resolved relative to the directory of the processed
  110         file.
  111   These new #pragma directives are implemented in the Wave driver tool only.
  112   It is possible to combine several options in one #pragma directive, i.e.
  113   #pragma wave option(line: 0, preserve: 2).
  114 - Changed the signature of the may_skip_whitespace() preprocessing hook to 
  115   additionally take the preprocessing context as its first parameter.
  116 - Added the possibility to the Wave tool to disable initial output by 
  117   specifying a '-' as the output file. This is useful for syntax checks only or
  118   in conjunction with the #pragma wave option(output: ...) to restrict the
  119   generated output.
  120 - Improved error reporting in the Wave tool on bad output file stream state.
  121 - Switched to Re2C V0.10.0
  122 - Fixed some of the VC7.1 /W4 warnings.
  123 - The Wave tool now creates the directory hierarchy of output files as needed.
  124 - Applied some optimization, which causes skipping of the parsing for almost 
  125   all preprocessor directives when the if block status is false. This gains
  126   upto 10-20% in speed for average applications.
  127 - Added error diagnostic for #elif without matching #if, which was missing 
  128   under certain circumstances.
  129 - Avoided the evaluation of #elif expressions if one of the previous #if/#elif
  130   blocks of the same level was true. This gains upto another 5% of speed for
  131   average applications.
  132 - The MS specific integer suffix 'i64' is now correctly supported by the Re2C
  133   and SLex lexer components (only when BOOST_WAVE_SUPPORT_MS_EXTENSIONS is 
  134   defined during compilation).
  135 - Changed the Wave tool to print the column number of an error/warning along
  136   with the line number. The new format is: 'filename:line:column: error text'.
  137 - It is now possible to recover from the unbalanced #if/#endif statement 
  138   warning in a proper way.
  139 - The Wave library now automaticaly recognizes include guards in headers files
  140   and uses this information to avoid opening these header files more than once.
  141   This speeds up things by upto 10-20% depending on the concrete include files.
  142 - Fixed the failing test t_6_023.cpp. Error reporting for illformed #else 
  143   directives was broken (because of some recent changes).
  144 - Fixed the failing test t_5_007.cpp. This was caused by the automatic include 
  145   guard detection, which prevented the second inclusion of the specified
  146   include file the test was relying on.
  147 - Added the possibility to switch off the automatic include guard detection.
  148 - Added a new command line option to the Wave tool: --noguard/-G, which
  149   disables the automatic include guard detection.
  150 - Now a header with include guards will be included correctly for a second time
  151   after its include guard symbol gets undefined.
  152 - Added the generating platform to Wave's full version string.
  153 - Made the Wave tool fully interactive when started with input from stdin and
  154   and output to stdout. In this mode the Wave tool preprocesses the input 
  155   line by line and not only after receiving the full input as normally.
  156 - Added serialization support for the wave::context object, which stores 
  157   all information about defined macros and all #pragma once header information.
  158 - Added the command line option --state (-s) to the Wave tool, which tries to 
  159   load the serialized information from the file given as the argument to 
  160   --state and save the state information at the end to the same file. 
  161   This option is available in interactive mode only. 
  162 - Added possibility to verify the compatibility of the configuration used 
  163   during compilation of the Wave library with the config info used for the 
  164   application. Added a corresponding test to the Wave tool.
  165 - Added a new predefined macro __WAVE_CONFIG__ which expands to an integer
  166   literal containg the configuration information the library was compiled
  167   with.
  168 - Added proper versioning support to the serialization of state.
  169 - Fixed the macro tracing information to contain the column numbers of the macro
  170   definitions as well (the format used is the same as for error messages).
  171 - Fixed a memory leak in the flex_string copy on write code (thanks to Tobias 
  172   Schwinger for reporting this bug).
  173 - Fixed a memory corruption bug in the Re2C scanner buffer management code
  174   (thanks to Andreas Sæbjørnsen for spotting the bug).
  175 - Fixed a major performance bottleneck in the lex_token class. This speeds up 
  176   Wave for upto another 20-40% depending on the amount of macro expansions to 
  177   perform.
  178 - Added the BOOST_SPIRIT_USE_BOOST_ALLOCATOR_FOR_TREES and the
  179   BOOST_SPIRIT_USE_LIST_FOR_TREES Spirit configration constants to the 
  180   wave_config.hpp to allow to fine tune the generated Spirit tree code. VC7.1
  181   gives best results when both are defined.
  182 - Fixed a memory corruption bug triggered by a possible dangling reference.
  183 - Fixed Wave tools startup crash when compiled with VC8.
  184 - Added the name of the generating compiler (BOOST_COMPILER) to the full 
  185   Wave version info.
  186 - Fixed all Jamfile.v2 to correctly disable RTTI for VC7.1.
  187 - Added #pragma message("...") to be optionally supported by the Wave library.
  188   This may be enabled by defining the BOOST_WAVE_SUPPORT_PRAGMA_MESSAGE pp
  189   constant to some value different from zero.
  190 - Fixed a couple of typos in the file cpp.cpp preventing it to compile on 
  191   gcc 4.1.0 (thanks to Richard Guenther for reporting these).
  192 - Richard Guenther fixed another buffer overrun problem in the Re2C scanner.
  193 - Fixed Jamfile.v2 files for all sample applications.
  194 - Fixed a bug which lead to reporting of an illegal preprocessing directive
  195   inside not-evaluated conditional blocks under certain circumstances (thanks
  196   to Tobias Schwinger for reporting).
  197 - Fixed '#define true ...', '#define false ...' and other constructs, i.e. the 
  198   usage of the boolean keywords as identifiers during the preprocessing. Added
  199   a corresponding test case (t_9_017.cpp). Thanks to Andreas Sæbjørnsen for
  200   reporting.
  201 - Corrected the Jamfile[.v2] of the waveidl sample to refer to correct file 
  202   names (thanks to Juergen Hunold for submitting a patch).
  203 - Fixed a bug which prevented the main iterator from returning a T_EOF token 
  204   at the overall end of the input. 
  205 - Fixed a problem, where non-evaluated #elif directives never got passed to the 
  206   skippen_token() pp hook (thanks to Andreas Sæbjørnsen for reporting).
  207 - Fixed a problem in the get_tokenname() function.
  208 - Added a missing #define BOOST_WAVE_SOURCE 1 to the wave_config_constant.cpp
  209   file.
  210 - Fixed exception specifications to catch all exceptions by const&.
  211 - Fixed predefined macros to appear to be defined at a position referring to 
  212   a file named "<built-in>". Thanks to Andreas Sæbjørnsen for reporting.
  213 - Fixed the Re2C lexer not to segfault on empty files anymore.
  214 - Stripped leading and trailing whitespace for all lines in a config file (Wave
  215   driver tool).
  216 - Fixed RTTI build issue for VC7.1/bjam --v2 (thanks to Rene Rivera for 
  217   submitting a patch for the Wave Jamfile.v2).
  218 - Fixed certain problems reported by the Boost inspection tool.
  219 - Fixed a couple of SunPro5.8 warnings.
  220 - Fixed a bug resulting in a crash if a macro was redefined with a shorter
  221   expansion list as it was defined initially. Added a corresponding test case.
  222 - Fixed a bug causing an infinite loop when there was a missing endif in the 
  223   main preprocessed file.
  224 - Improved error recovery for illegal preprocessing directive errors.
  225 - Improved error handling and error recovery for conditional expressions 
  226   (#if/#elif expressions).
  227 - Wave now passes 160 out of 161 tests from the MCPP V2.6.1 validation 
  228   testsuite!
  229 - Added new warning for invalid #line number and filename arguments
  230 - Improved error diagnostics for invalid #line directives containing arbitrary
  231   tokens after at the end of the line.
  232 - Improved error handling wrt the misuse of the __VA_ARG__ token in macro 
  233   definitions.
  234 - The warning, that a file is not terminated by a newline is now issued for all
  235   files, not only for the main file (as previous).
  236 - Added a couple of new test cases to verify various diagnostics.
  237 - Fixed wave applet not to report missing #endif's when in interactive mode.
  238 - Cleaned up the Re2C lexer code.
  239 - Fixed a bug, where a empty line followed by an arbitrary token and followed 
  240   by a preprocessing directive interpreted the preprcessing directive as if it
  241   were the first non-whitespace token on the line. This error occured only
  242   if the #line directive generation was suppressed. Thanks to Joan Grant for
  243   reporting this problem.
  244 - Fixed a problem in the Wave applet which prevented the correct recognition of 
  245   Windows file paths in a configuration file, if this path was enclosed in 
  246   quotes.
  247 - Extended the copyright notice to include the year 2007.
  248 - Fixed a problem in preserve=1 mode, when a C style comment triggered the 
  249   generation of a #line directive.
  250 - Worked around a linker issue for the True64/CXX compiler, complaining about
  251   multiple defined symbols when using the flex_string class.
  252 - Added the is_macro_defined(name) function to the context object as described 
  253   in the documentation. This function is usable with any string type compatible 
  254   with std::string.
  255   
  256 Sat Feb 18 2005
  257 - Version 1.2.3
  258 - Added a missing throw() specification to the function 
  259   cpp_exception::get_related_name().
  260 - Fix Boost bug ([ boost-Bugs-1395857 ] wave redefines BSIZE).
  261 - Added missing calls to the skipped_token() preprocessing hook which wasn't
  262   called for pp directives inside disabled #if blocks.
  263 - Made the context<> type noncopyable.
  264 - Introduced the --extended/-x command line option to the wave driver 
  265   executable, which enables the #pragma wave system() directive. This directive
  266   is now disabled by default because it may cause a potential security threat.
  267 - Changed the what() function of the macro_handling_exception class, which now
  268   correctly returns the name of the exception type itself.
  269 - Added a diagnostic message to the wave driver executable, which is issued 
  270   whenever a #pragma wave system() directive is found, but the -x (--extended) 
  271   command line argument was not given.
  272 - Fixed long integer suffix to be allowed to be mixed case (1Ll or 2lL).
  273 - Fixed the BOOST_PP_CAT(1e, -1) pp-token bug. Wave now correctly recognizes
  274   pp-number tokens, which are converted to C++ tokens right before they are 
  275   returned from the library.
  276 - Moved the implementation of the token_id query functions (get_token_name(), 
  277   get_token_value()) to a separate source file.
  278 - Fixed a bug, which prevented to prefer pp-numbers in files preprocessed as
  279   a result of #include directives.
  280 - Fixed a bug, which prevented to open #include'd files specified by an 
  281   absolute path.
  282 - Fixed a problem in the expression parser value type.
  283 - Fixed a dynaload compilation problem with VC7.1 of the re2c lexer tests.
  284 
  285 Sat Dec 24 13:33:53 CST 2005
  286 - Version 1.2.2
  287 - Added three new preprocessing hooks: 'found_directive', 'skipped_token' and 
  288   'evaluated_conditional_expression' (thanks to Andreas Sæbjørnsen for the 
  289   suggestions).
  290 - Removed hook forwarding functions in the context_type.
  291 - Added missing include_next case branches for get_directivename() function.
  292 - Added new sample: advanced_hooks.
  293 - Fixed a possible buffer overflow in the cpplexer and cpp exception classes.
  294 - Made the cpp_grammar thread safe.
  295 - Removed the need for the get_directivename() function. Fixed typos in the 
  296   predefined token table.
  297 - Removed assertions from get_token_name() and get_token_value() and replaced 
  298   these with more meaningful code.
  299 - Added the BOOST_WAVE_USE_STRICT_LEXER configuration constant which allows to
  300   decide, whether the '$' character will be recognized as a part of identifiers
  301   or not (the default is BOOST_WAVE_USE_STRICT_LEXER == 0, i.e. '$' will be
  302   recognized as part of identifiers).
  303 - Added the possibility to testwave to extract a tagged comment based on a
  304   preprocessor constant (testwave V0.4.0).
  305 - Made the predefined_macros_grammar thread safe.
  306 - Added dll support for the generated Wave libraries.
  307 - Added the const_iterator based exlicit instantiations for the Re2C lexer to 
  308   the built Wave library and dll.
  309 - Added the whitespace handling policy to the context object. This actually is 
  310   no separate policy, it's a new preprocessing hook allowing to decide, whether
  311   a concrete token has to be skipped.
  312 - Changed the --preserve option of the wave tool to take a single integer 
  313   argument (0: no whitespace is preserved, 1: only comments are preserved, 
  314   2: all whitespace is preserved)
  315 - Edited the command line option descriptions of the wave driver.
  316 - Fixed broken tags in documentation (magically inserted by DreamWeaver).
  317 - Merged the new whitespace_handling policy with the existing preprocessing 
  318   hooks. The name of the new preprocessing hook ist may_skip_whitespace().
  319 - Fixed compatibility issues for CW9.4 in the Wave test aplication.
  320 - Added get_errorcode() member to the wave exception classes allowing to 
  321   get back the reason for the exception.
  322 - Added boost::wave::is_recoverable(cpp_exception const&) alowing to decide,
  323   whether it is possible to continue after a cpp_exception has been thrown.
  324   This is a temporary hack to overcome the current limitation of the library
  325   not allowing to do generic error recovery. It allows to recover from 75% of
  326   the generated errors types.
  327 - The --timer command line option for the Wave driver now prints the elapsed 
  328   time correctly even if a preprcessing error occured.
  329 - Fixed an error recovery problem which skipped one token after continuing in
  330   case this was a pp directive.
  331 - Added the --autooutput (-E) option to the Wave driver applet which redirects 
  332   the generated output to a file named after the input file changing the file 
  333   extension to '.i'.
  334 - Changed all throw's to boost::throw_exception.
  335 - Added the possibility to configure the command keyword for the wave specific 
  336   #pragma directives. It is now possible to define a string literal via
  337   BOOST_WAVE_PRAGMA_COMMAND, which will be recognized and all corresponding
  338   #pragma's are dispatched to the interpret_pragma() preprocessing hook.
  339   The default value for BOOST_WAVE_PRAGMA_COMMAND is "wave", just to ensure 
  340   complete backward compatibility.
  341 - Added missing #pragma warning(pop) directives.
  342 - Fixed a bug wrt error propagation in the expression parser.
  343 - Fixed an assertion fired when cpp_token is used to process the quick_start 
  344   sample.
  345 - Fixed a (Windows specific) bug which triggered a boost::file_system exception
  346   under certain conditions.
  347 - Switched to Re2C V0.9.11
  348 - Fixed a problem with the new '-E' (--autooutput) option.
  349 - Added better error reporting for duplicate macro definitions to the Wave 
  350   tool. Added the macro_handling_exception type containing the corresponding 
  351   macro name via the new (virtual) get_related_name() function.
  352 - Added the get_severity() function to the exceptions thrown by the Wave
  353   library.
  354 - Extended the copyright notice to include the year 2006.
  355   
  356 Mon Dec  5 22:05:22 CST 2005
  357 Boost V1.33.1
  358 - Version 1.2.1
  359 - Fixed bug reported as Sourceforge bug 1274584.
  360 - Switched to Re2C V0.9.9.
  361 - Fixed a bug where the 'parameters' and 'definition' parameters to the 
  362   defined_macro callback of the preprocessing hooks were always empty (thanks
  363   to Stefan Seefeld for reporting).
  364 - Fixed missing namespace specifiers in token definition macros (thanks to 
  365   Jozsef Mihalicza for reporting).
  366 - Enabled --preserved and --long_long modes by default for the cpp_tokens 
  367   sample.
  368 - Newline tokens reported a wrong line number (offset by one) when using the
  369   Re2C generated lexer (thanks to Jozsef Mihalicza for pointing this out).
  370 - Changed file positions to carry 'unsigned int' line and column numbers.
  371 - Fixed tokens of a generated #line directive to carry the correct column 
  372   numbers.
  373 - Tokens now contain the correct filename, line and column numbers even if
  374   a #line directive was encountered.
  375 - Fixed wrong line numbering in reference comments of the tests t_5_002.cpp and 
  376   t_5_035.cpp.
  377 - Made sure, that preprocessor expression errors get ignored for 'passive' 
  378   #elif branches.
  379 - Fixed an issue reported by the gcc debug stl.
  380 - Added the <vc-7_1-stlport><*><rtti>off directive to all of the V1 Jamfiles.
  381 
  382 Wed Aug 17 20:21:00 CST 2005
  383 Boost V1.33.0
  384 Version 1.2
  385 - Fixed name clash wrt T_DIVIDE on FreeBSD.
  386 - Fixed documentation of the different language_support flags.
  387 - The support for long long suffixes is no longer bound to the variadics mode,
  388   it has to be enabled by the new long_long mode (default in C99).
  389 - Fixed compilation if BOOST_WAVE_DUMP_PARSE_TREE is defined.
  390 - Fixed lexer error message wrt long_long mode.
  391 - Stefan Seefeld fixed a bug in the lexer, where include_next was assumed for
  392   included files containg a "include_" in their name.
  393 - Fixed some trigraph token id's in the lexers.
  394 - Added column information to the re2c generated lexer.
  395 - Added tests for the different lexers.
  396 - Fixed the found_include_directive preprocessing hook to carry the information
  397   about #include_next directives as well.
  398 - Separated the different lexer tests.
  399 - Fixed a bug in the whitespace eater.
  400 - Fixed a bug where Wave emitted the found C++ comments in --preserve mode even
  401   if these were found inside of disabled #if/#endif blocks.
  402 - Removed the function local static grammars to avoid possible raise conditions
  403   and to make CW8.3 happy.
  404 - Unified lexer interface, adjusted namespaces.
  405 - Added lexer testcases to the regression tests.
  406 - Fixed test cases to scale to 64 bit platforms.
  407 - Disabled the MS specific extensions in the lexer tests in a platform related
  408   way.
  409 - Added special handling of the eof tokens inside the lexer iterator classes
  410   for Comeau.
  411 - Applied a workaround proposed by David Abrahams to make the slex lexer work 
  412   on the CodeWarrior platforms.
  413   
  414 Sun May  8 17:22:59 WEDT 2005
  415 Version 1.1.17
  416 - Added ill_formed_character_literal and ill_formed_integer_literal errors.
  417 - Improved error handling and diagnostics for integer overflow in #if/#elif
  418   expressions.
  419 - Fixed a bug in the testwave application which prevented the correct 
  420   recognition of expected errors under certain circumstances.
  421 - Fixed a portability problem (for gcc 3.3.x) in the testwave application.
  422 - Enforced that #if/#endif are balanced file wise.
  423 - Changed the command line arguments for the Wave testrun to use absolute 
  424   directories.
  425 - Changed the test application to return a value != zero if one of the given 
  426   config files were not found.
  427 - Fixed a command line parsing problem caused by a change in the parameter
  428   handling inside in the program_options library.
  429 - Switched to the most recent version of re2c (V0.9.7.dev).
  430 - Fixed a como compilation error and several como --a warnings.
  431 - The T_EOF token doesn't carry the value of the previous token anymore.
  432 - Added operator==() to the token classes to fix the ambiguity error reported
  433   by the True64 compiler.
  434 - Improved the error message, when empty arguments are used in pure C++ mode.
  435 - Added character literal out of range testing and an additional corresponding 
  436   error message.
  437 - Fixed parsing of long character literals (such as '\x1234').
  438 - Fixed almost all problems diagnosed by the Boost inspection report.
  439 - Several fixes to make the True64 compiler happy.
  440 - Added the long long suffix handling to the C99 mode (LL/ll).
  441 - Fixed a bug in the slex regex specifications.
  442 
  443 Thu Apr  7 10:07:45 WEDT 2005
  444 Version 1.1.16
  445 - Fixed a bug in the white space eating component, which prevented a C++ 
  446   comment to be suppressed if it followed after another whitespace.
  447 - Fixed the inconsistencies between the documentation and the behaviour wrt the 
  448   different include search paths. See the Wave driver docs for details of how
  449   the '-I', '-I-', and '-S' options work.
  450 - Allowed to specify more than one config file ('@' syntax) on the command line
  451   of the wave driver executable.
  452 - Changed copyrights in all files to reflect the acceptance of Wave into Boost.
  453 - Unknown preprocessing directives were not recognised as such anymore.
  454 - If comments shouldn't be preserved all C++ comments are replaced by newline
  455   tokens (instead of beeing igored completely).
  456 - Fixed a bug in the white space eater component.
  457 - Fixed a bug which reported wrong line numbers for error encountered during 
  458   retokenisation (concatination).
  459 - Fixed a bug in the unescaping code.
  460 - Fixed a compilation error of the testwave executable (added a missing 
  461   namespace specifier).
  462 - Added a missing header to make cpp.re.cpp compile on CW.
  463 - The predefined macro __BASE_FILE__ now returns a properly escaped file name 
  464   string.
  465 - Fixed the function boost::wave::util::impl::unescape_lit().
  466 - Added the Wave unit test framework. For now it contains about 60 unit tests
  467   executed by a special test driver (testwave).
  468 - Added the '$F' replacement string to the testwave application. This allows
  469   to handle file paths sensitive comparison of the expected and real results.
  470 - Fixed a minor problem in the whitespace eating component.
  471 - Added optional trigraph conversion.
  472 - Changed all size_t, time_t etc. to std::size_t, std::time_t etc (for CW).
  473 - If the comments should not be preserved every C comment containing at minimum 
  474   one newline is now converted to a newline token.
  475 - Added the lexed_tokens sample.
  476 - Fixed warnings and errors reported by the CodeWarrior compiler.
  477 - Added the '$V' replacement string to the testwave application. It expands to 
  478   the current BOOST_LIB_VERSION.
  479 - Diagnosed the attempt to redefine the alternative operators as and, or etc.
  480 - Improved error handling.
  481 - Disabled the flex_string class for VC7, enabled to fallback to std::string 
  482   for this compiler.
  483 - Renamed files to comply with the Boost rules.
  484 - Added the first part of the MCPP validation suite to the Wave unit tests.
  485 - Added even more missing "using namespace std;" statements for functions from
  486   the C runtime library. The Wave test suite now contains more than 100 unit
  487   tests.
  488 - Added the $P/$P(basename) replacement string to the testwave application 
  489   which expands to the full path of the current file ($P) or to the current 
  490   directory/basename ($P(basename)).
  491 - Fixed a bunch of portability problmes revealed by the regression tests on
  492   different platforms. Thanks to Stefan Slapeda for his support to make it work
  493   on the cw-9_4 toolset (win32).
  494   
  495 Tue Mar 22 14:52:45 WEST 2005
  496 Version 1.1.15
  497 - Fixed a bug where the complete set of C99 predefined macros were pre-defined
  498   when in C++ mode and variadics were enabled.
  499 - When in variadics or C99 mode the __BASE_FILE__ predefined macro expanded to
  500   <Unknown>.
  501 - Added the --listincludes option to the Wave driver executable which allows to
  502   log the file names of the include files opened.
  503 - Fixed a gcc warning in token_cache.hpp (unused variable end).
  504 - Changed the logic behind #include_next. It now starts searching with the 
  505   next directory after the directory the current file (the file containing the 
  506   #include_next directive) is located in.
  507 - Changed the signature of the undefined_macro preprocessing hook to take the 
  508   token itself and not the macro name only. This is important to pass the full
  509   context information about the position of the #undef directive to the 
  510   user provided hook (thanks to Stefan Seefeld for pointing that out).
  511 - Fixed several broken links in the Context Policy topic.
  512 - Fixed a bug in the handling of the #include_next directive inside of 
  513   non-evaluated #if blocks.
  514 - Fixed a bug in the #include_next handling code (thanks to Stefan Seefeld).
  515 - Changed the signature of the opened_include_file() preprocessing hook which 
  516   now receives not only the absolute file name of the openend include file but
  517   additionally gets passed the (possibly) relative path of the openend include
  518   file. This concrete format of the relative path depends on the format of the
  519   include search directory given to the library.
  520 - Added a new preprocessing hook 'found_include_directive()' which gets called
  521   for every #include directive (even for those where the file to include 
  522   doesn't exist) and which gets passed the (expanded) token sequence found 
  523   after the #include directive token.
  524 - The file names passed to the preprocessing hooks are now normalised.
  525 - Changed the opened_include_file() preprocessing hook to receive the correct
  526   relative path even if the included file was found in the current directory.
  527 - Fixed a bug which reported 'defined(or)' as invalid (similarly all the other
  528   alternative bit operation token types).
  529 - Fixed a bug which prevented to define variadic macros from the command line.
  530 - Added a 'preserve comments' mode to preserve the comments in the input stream
  531   not inserted into macro definitions.
  532 - Added a new --preserve (-p) command line switch to the wave driver 
  533   application to allow comments to be preserved in the generated output stream.
  534   
  535 Mon Feb 21 09:30:04 WEST 2005
  536 Version 1.1.14 (Fixes in response to the Boost review)
  537 
  538 Wave was accepted into Boost! 
  539 
  540 With special thanks to Tom Brinkman, who volunteered to be the review manager.
  541 
  542 With thanks to David Abrahams, Beman Dewes, Reece Dunn, Larry Evans, 
  543 Doug Gregor, Joel de Guzman, Baptiste Lepilleur, Andy Little, Paul Mensonides, 
  544 Dan Nuffer, Andreas Pokorny, Vladimir Prus, Gennadiy Rozental, Michiel Salters, 
  545 Jonathan Turkanis, Chris Uzdavinis, Pavel Vozenilek, Michael Walter for bug 
  546 reports, fixes and hints.
  547 
  548 - Added support for the MS extensions #region and #endregion, which simply get
  549   ignored by Wave. The support for these is enabled only, when the pp constant
  550   BOOST_WAVE_SUPPORT_MS_EXTENSIONS is defined. Otherwise these get flagged as 
  551   an illegal preprocessor directive (as before).
  552 - Fixed a problem, where the replacement text for a #pragma directive got lost
  553   if this directive was on the last line of a processed (include-)file.
  554 - Changed the default value for BOOST_WAVE_SUPPORT_MS_EXTENSIONS for non-
  555   Windows systems to zero.
  556 - Updated outdated external links in the documentation.
  557 - Fixed certain grammatical and stylistic quirks in the documentation.
  558 - Fixed a problem in libs/wave/build/Jamfile.v2 (as reported by Larry Evans).
  559   Fixed the Jamfile.v2 in the samples directories accordingly.
  560 - Added the '<toolset>vc-7_1:<rtti>off' to all Jamfile.v2 files to adjust for 
  561   the internal buffer overflow bug in the VC7.1 compiler (reported by Joel de 
  562   Guzman).
  563 - Changed the '<toolset>vc-7_1:<rtti>off' to '<toolset>vc-7.1:<rtti>off' as
  564   required by the Boost.Build.v2 library (suggested by Vladimir Prus).
  565 - Finally fixed the Jamfile.v2 file (after a suggestion from Reece Dunn)
  566 - Fixed the column number reported for tokens for Slex lexer based 
  567   configurations (reported by Baptiste Lepilleur).
  568 - Added the __BASE_FILE__ predefined macro, which contains a string literal 
  569   of the main file name to preprocess (the one the context<> template was
  570   created with). (suggested by Pavel Vozenilek)
  571 - Used the boost::reverse_iterator instead of the std::reverse_iterator
  572   for the flex_string class to allow compilation of Wave with VC7.0
  573   (as suggested by Reece Dunn).
  574 - Fixed a problem in the include_path template, which throwed a 
  575   boost::filesystem exception whenever a character was used in a file name
  576   to include, which is marked as illegal by the default name checker of the
  577   boost::filesystem::path.
  578   
  579 Version 1.1.13 (Boost review candidate 2, bug fixed version)
  580 - Fixed a problem, where the context<> template referenced temporary iterator
  581   objects from the underlying stream (thanks to Michiel Salters for reporting
  582   this).
  583 - Fixed a bug in the re2c lexer, which allowed to dereference the end iterator 
  584   of the underlying input stream (thanks to Doug Gregor for pointing this out).
  585 - Fixed several assertions fired by the iterator checking code of the VC8 stl.
  586 
  587 Version 1.1.12 (Boost review candidate)
  588 - A rough performance analysis showed, that 30% of the time is spent parsing 
  589   the input for pp directives (cpp_grammar), 35% of the time is spent inside
  590   the flex_string code, mainly in the copy constructor and assignment 
  591   operator, 15% of the time is spent inside the list and vector member 
  592   functions, 10% is spent for memory allocation but only 1% of the time is 
  593   spent in the re2c lexer.
  594 - Identified a performance problem, where the token_cache was instantiated
  595   for every created lexer object, but needed to be initialised only once.
  596 - Added #include <wave_version.hpp> to wave_config.hpp
  597 - Fixed problems reported by the gcc 3.4.1 compiler.
  598 - Adjusted Jamfiles for the new toolset names introduced in Boost V1.32.
  599 
  600 Version 1.1.11
  601 - Updated copyrights.
  602 - Fixed some bugs introduced by the latest refactoring.
  603 - Tried to fix the expansion of macros, which replacement-list terminates in a 
  604   partial macro expansion. No success so far.
  605 
  606 Version 1.1.10
  607 - Refactored some of the macro map (macro namespace) code (added comments, 
  608   splitted into separate files),
  609 - Fixed some typename errors in cpp_macromap.hpp (thanks to Vladimir Prus).
  610 - Fixed the BoostBuild V2 Jamfiles (thanks to Vladimir Prus).
  611 
  612 Version 1.1.9
  613 - Moved all of the #pragma wave option(value) operators out of the wavelib into 
  614   the wave driver program. Removed enable_trace() and trace_flags() policy
  615   functions. Renamed trace_policy into context_policy.
  616 - Added the defined_macro() and undefined_macro() preprocessing hooks to allow
  617   easily to build macro cross referencers and such.
  618 
  619 Version 1.1.8
  620 - Replaced the usage of the string::erase() and string::insert() functions, 
  621   which were the only non-const string member functions used.
  622 - Token pasting is now well defined in variadics mode (was in C++0x mode only).
  623 - Changed the timing code in the wave driver to include the parsing of 
  624   files included by the --forceinclude command line switch.
  625 - Performance measurements (very informal) [sec], the files are some of the
  626   preprocessor specific test cases from Paul Mensonides chaos_pp library.
  627 
  628                         std::string   flex_string   const_string   const_string
  629                                                       12 Byte        28 Byte
  630     arithmetic.cpp        2.543          1.742         0.951           1.001
  631     array.cpp             2.453          1.762         0.951           1.011
  632     comparison.cpp        0.560          0.340         0.270           0.280
  633     control.cpp           0.590          0.340         0.290           0.300
  634     debug.cpp             0.370          0.310         0.190           0.190
  635     detection.cpp         0.050          0.060         0.030           0.030
  636     extended.cpp          0.370          0.260         0.190           0.190
  637     facilities.cpp        0.610          0.340         0.290           0.300
  638     iteration.cpp         1.081          0.550         0.410           0.450
  639     list.cpp              1.742          1.141         0.811           0.851
  640     logical.cpp           0.070          0.200         0.040           0.040
  641     punctuation.cpp       0.030          0.080         0.020           0.020
  642     repetition.cpp        1.392          0.851         0.650           0.690
  643     selection.cpp         0.440          0.270         0.210           0.220
  644     slot.cpp              0.680          0.350         0.240           0.270
  645     tuple.cpp             0.420          0.240         0.190           0.210
  646                       
  647 
  648 Wed Aug 25 13:23:27 WEDT 2004
  649 Version 1.1.7
  650 - Branched for Boost Release.
  651 - Removed several features from the code base:
  652   . removed C++0x support
  653   . removed TST support
  654 - Fixed the program_option validator syntax, which has changed since the last 
  655   update.
  656 - Removed misleading configuration options from the cpp_config.hpp file, 
  657   because the application will have to use the same config options as were used
  658   during the compilation of the library.
  659 - Changed the naming convention of typedef'd types in the library. Removed the 
  660   _t suffix, wherever possible.
  661 - Updated the documentation to reflect the removal of the C++0x features.
  662 
  663 - Changed the licensing scheme to:
  664 // Copyright 2004 Joe Coder. Distributed under the Boost
  665 // Software License, Version 1.0. (See accompanying file
  666 // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  667 
  668 Mon May 24 10:02:47 WEDT 2004
  669 Version 1.1.6
  670 - Fixed a incompatibility with the new program_options version.
  671 
  672 Version 1.1.5
  673 Version 1.0.6
  674 - Fixed a bug, which reported an #include statement as ill formed, if it was 
  675   followed by an empty C comment only. This was an error in the cpp.re regular 
  676   expression for C comments. Additionally, since this change simplified the 
  677   Re2C generated lexer a lot it was possible to remove the compiler workaround 
  678   for the VC7.1 compiler which prevented the optimization of this lexer.
  679   
  680 Mon Mar 29 09:36:59 WEDT 2004
  681 - Corrected the signature of the main() functions (was main(int, char const*[])).
  682 
  683 Sun Mar 28 12:55:59 WEDT 2004
  684 Version 1.1.4
  685 - Fixed a problem, where the first returned token was lost, whenever a 
  686   --forceinclude file was given.
  687 - Adjusted the Wave driver and the other samples to use the new program_options 
  688   library syntax (V1.1.x only).
  689   
  690 Mon Mar  1 19:14:21 WEST 2004
  691 Version 1.1.2
  692 Version 1.0.4
  693 - Fixed a problem, which does not report an error, if in a #define statement in 
  694   between a macro name and its replacement list were no whitespace given.
  695 - Fixed a bug, which generated an unexpected exception of the $ character in the 
  696   input.
  697 - Macro definitions, which differ by whitespace only (one definition contains 
  698   whitespace at a certain position, the other definition does not) are correctly 
  699   reported as a warning now.
  700 - Fixed a problem, where different formal argument names during macro 
  701   redefinition were not flagged as a warning.
  702 - A wide character string used in a #line directive wasn't flagged as an error. 
  703   
  704 Sun Feb 29 19:10:14 WEST 2004
  705 Used the test suite distributed with the mcpp V2.4 preprocessor to fix a bunch
  706 of mostly minor issues:
  707 - Fixed trigraph backslash followed by a newline handling (??/ \n) in the 
  708   re2c (C/C++ and IDL) scanners.
  709 - Fixed a digraph/trigraph token type handling problem during macro expansion.
  710 - Fixed a digraph/trigraph token type problem during handling of the null 
  711   preprocessor directive.
  712 - Fixed several signed/unsigned conversion bugs in the expression evaluator.
  713 - Fixed the || and && operators in the expression evaluator to stop evaluation,
  714   as only the outcome of the overall expression is determined.
  715 - Fixed the expression evaluation engine to detect divide by zero errors.
  716 - Fixed a bug with operator || and && arithmetic (the deduced type was wrong).
  717 - Fixed a bug with the unary operators ! and - which IN conjunction with an 
  718   arithmetic operation yielded A wrong result type.
  719 - Fixed a bug, which reported a macro definition as an invalid redefinition, if
  720   it was different from the original definition only by different whitespaces.
  721 - Fixed a bug, which reported the redefinition of one of the alternative tokens
  722   as 'and', 'bit_and' etc. as invalid.
  723 - Fixed a bug in the character literal parser, which prevented the recognition
  724   of multibyte character literals.
  725 
  726 - Moved the cpp_token_ids.hpp header into the main wave.hpp header, because the
  727   values defined therein aren't changeable by the user anyway.
  728 - Fixed some spelling errors in the documentation (thanks to Rob Stewart).
  729 
  730 Tue Feb  3 20:20:16 WEST 2004
  731 - Fixed the problem, that macro definitions in a config file were flagged as 
  732   an error, if there was any whitespace in between the -D and the macro name
  733   (same problem existed for -P).
  734   
  735 Fri Jan 30 20:28:27 WEST 2004
  736 - Fixed a missing boostification in the trace support header.
  737 - Added a missing std:: namespace qualification to the list_includes.cpp sample 
  738   file.
  739 - Fixed line ending problems with the cpp.re and idl.re files.
  740 - Added quick_start sample.
  741 
  742 Sun Jan 25 20:26:45 WEST 2004
  743 This version was submitted to Boost as the review candidate (V1.1.0)
  744 - Fixed invalid explicit instantiation syntax as reported by the Comeau 
  745   compiler.
  746 - Added a missing header to flex_string.hpp.
  747 
  748 Sat Jan 24 19:47:44 WEST 2004
  749 - Completely decoupled the used lexer from the preprocessor.
  750 - Unfortunately had to change the template interface of the context class. It 
  751   now instead of the token type takes the type of the lexer to use.
  752 - Reintroduced the cpp_tokens, list_includes and waveidl samples. 
  753   . cpp_tokens is based on the SLex lexer
  754   . list_includes shows the usage of the include file tracing capability
  755   . waveidl uses the Re2C based IDL lexer in conjunction with the default token
  756     type
  757   
  758 Tue Jan 13 20:43:04 WEST 2004
  759 - Fixed several compilation issues under linux (gcc 3.2.3, gcc 3.3, gcc 3.3.2, 
  760   gcc 3.4, Intel V7.1)
  761 - Fixed a compatibility problem with Spirit versions older than V1.7.
  762 
  763 Mon Jan 12 20:39:50 WEST 2004
  764 - Boostified the code base:
  765   . Moved code into namespace boost.
  766   . Prefixed all pp constants with "BOOST_".
  767   . Refactured the directory structure.
  768 - Removed IDL mode and SLex lexer from the code base. These will be re-added as 
  769   samples.
  770 - Changed the Wave configuration system to be more flexible (all 
  771      #if defined(BOOST_WAVE_...) changed to #if BOOST_WAVE_... != 0),
  772   which allows to configure the library without changing the code base itself
  773   
  774 Sat Jan 10 18:17:50 WEST 2004
  775 - Incorporated Andrei Alexandrescu's latest changes to the flex_string class, 
  776   which resulted in an overall spedd gain of about 5-10%.
  777   
  778 Wed Jan  7 17:46:45 WEST 2004
  779 - Found a major performance hole! The achieved general speedup is about 50-70%.
  780 - Added missing old MS specific extensions to the re2c lexer (_based, 
  781   _declspec, _cdecl, _fastcall, _stdcall, _inline and _asm).
  782 - Added support for #include_next (as implemented by gcc).
  783 - Fixed compilation problems with gcc 3.3.1
  784 - Avoid to look up in symbol table of a potential macro name twice.
  785 - Added the Spirit SLex lexer sample to the Wave source tree, because it was 
  786   removed from the Spirit distribution.
  787 - Removed the configuration option, which allowed to reverse the names stored 
  788   in the symbol tables.
  789 - Implemented experimental support for using a TST (ternary search tree) as the
  790   container for the symbol tables.
  791    
  792 Sun Jan  5 12:30:50     2004
  793 - Released V1.0.0
  794 
  795 Sun Jan  4 00:11:50     2004
  796 - Removed tabs from the flex_string.hpp file.
  797 - Modified the input_functor.hpp file to sqeeze out some milliseconds at 
  798   runtime.
  799 - The --timer option now prints the overall elapsed time even if an error 
  800   occured.
  801 - Added support for #pragma once.
  802 
  803 Fri Jan  2 22:58:54     2004
  804 - Fixed a bug in the code, which predefines the preprocessor constants.
  805 - Fixed a bug in intlit_grammar<> initialisation code.
  806 
  807 Thu Jan  1 21:15:03     2004
  808 - Fixed a bug while predefining a macro with a value through the commmand line.
  809 - Fixed a bug, which reported a macro definition as illegal, if the redefined 
  810   macro was a function like macro with parameters.
  811 - Fixed a bug, if concatenation of two tokens resulted in a C++ comment start 
  812   token.
  813   
  814 Thu Jan  1 15:01:54     2004
  815 - Finished license migration.
  816 
  817 Wed Dec 31 12:23:55     2003
  818 - Changed the copyright and licensing policiy to be Boost compatible.
  819 
  820 Wed Dec 31 12:01:14     2003
  821 - Fixed a problem while compiling certain headers from the Microsoft Windows 
  822   SDK:
  823         #define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\
  824         nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
  825         CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,\
  826         nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
  827   where essentially is no whitespace between the parameter list and the macro
  828   replacement list.
  829 - Fixed a problem with the MS extension __declspec, which now is recognized
  830   correctly.
  831   
  832 Sat Dec 27 14:48:29     2003
  833 - Fixed remaining problems with assign/assign_a.
  834 - Fixed some gcc warnings about signed/unsigned comparision mismatch.
  835 
  836 Tue Nov 11 20:51:41 WEST 2003
  837 - Changed the IDL mode to recognize identifiers only. All keywords (except 
  838   'true' and 'false') are returned as identifiers. This allows for easy 
  839   extension of the IDL language. The drawback is, that after preprocessing 
  840   there needs to be just another lexing stage, which recognizes the keywords.
  841 - Fixed a possible problem, when in between a #if/#elif directive and a 
  842   subsequent opening parenthesis Wave finds no whitespace:
  843     #if(_WIN_VER >= 0x0500)
  844   is now recognized correctly. 
  845   (This problem was pointed out by Porter Schermerhorn).
  846   
  847 Sun Nov  9 21:05:23 WEST 2003
  848 - Started to work on implementation of an IDL lexer for the TAO idl compiler.
  849   . Branched off the Re2C C++ lexer and related files as a starting point for 
  850     the new IDL lexer. Added connfiguration means to allow compile time
  851     decision, in which mode to operatoe (C++ or IDL).
  852   . Implemented the Re2C based IDL lexing component.
  853   . Fixed all occurences of non-IDL tokens (as T_COLON_COLON and T_ELLIPSIS)
  854 
  855 Sat Nov  8 20:05:52 WEST 2003
  856 - Version 1.0.0
  857 - Munged the email addresses embedded within the source files.
  858 - Adjusted for the new actor names in Spirit (assign_a and append_a).
  859 
  860 Thu Aug 21 16:54:20     2003
  861 - Removed the internally used macro 'countof()' to avoid possible nameclashes 
  862   with user code.
  863 - Fixed a bug, which prevented the execution of the concatination operator '##'
  864   while expanding object-like macros.
  865   
  866 Tue Aug  5 10:04:00     2003
  867 - Fixed a false assertion, if a #pragma directive started with some whitespace 
  868   on the line.
  869 - Added the #pragma wave timer() directive to allow rough timings during 
  870   processing. This is done on top of a new callback hook for unrecognized 
  871   #pragma's, which allows to easily add new pragma commands without changing 
  872   the Wave library.
  873 - Fixed a bug in the whitespace insertion engine, which prevented the insertion 
  874   of a whitespace token in between two consecutive identifier tokens or a 
  875   integer literal token followed by an identifier token.
  876 - Fixed a bug during macro concatenation, which allowed to concatenate 
  877   unrelated tokens from the input stream:
  878     #define CAT(a, b) PRIMITIVE_CAT(a, b)
  879     #define PRIMITIVE_CAT(a, b) a ## b
  880     #define X() B
  881     #define ABC 1
  882     CAT(A, X() C) // AB C
  883     CAT(A, X()C)  // correct: AB C, was 1
  884 - Fixed a 64 bit portability problem.
  885 - Added pragma wave timer(suspend) and wave timer(resume)
  886 - Fixed a ODR problem with static initialization data for predefined macros.
  887 - Ported the iterators to the new iterator_adaptors.
  888 - Updated the documentation to reflect the recent changes
  889 
  890 Sun Jun 29 12:35:00     2003
  891 - Fixed 64 bit compatibility warnings.
  892 - Fixed a bug, which prevented the correct recognition of a #line directive, if
  893   only the filename part of this directive was generated by a macro expansion.
  894 - Fixed a bug during macro expansion of conditional expressions, which 
  895   prevented the correct expansion of certain scoped macros.
  896   
  897 Fri Jun 27 09:50:14     2003
  898 - Changed the output of the overall elapsed time (option --timer) to cerr.
  899 - Added a configuration constant WAVE_REVERSE_MACRONAMES_FOR_SYMBOLTABLE, which
  900   reverses the macro names while storing them into the symbol table, which 
  901   allows to speed up name lookup especially, if the macro names are very long
  902   and if these share a common prefix.
  903 - Fixed a very subtle bug, which prevented the recognition of fully qualified
  904   macro names during the macro expansion of conditionals expressions (for 
  905   #if/#elif).
  906 - Improved the error output for the illformed pp expression error.
  907   
  908 Thu Jun 26 08:20:30     2003
  909 - Done a complete spell check of the source code comments.
  910 
  911 Wed Jun 25 20:33:52     2003
  912 - Changed the conditional expression engine to work with integer numeric 
  913   literals only. Distinguished signed and unsigned literals.
  914 - Importing a region twice is allowed now.
  915 - Fixed a bug, which does not removed all placeholder tokens from a expanded 
  916   token sequence while evaluating conditional expressions (C++0x mode only).
  917 
  918 Wed Jun 25 15:01:51     2003
  919 - Changed the conditional expression engine to respect the type of numeric 
  920   literals, now expressions like '#if 1 / 10 == 0' evaluate correctly (to true
  921   :-)
  922 - Fixed a bug, where macro names referring to global macros (as ::A::B) were 
  923   not correctly recognized under certain circumstances.
  924 - Empty parameter lists for macros with ellipses only sometimes generated a 
  925   placemarker token in the output:
  926     #define STR(...) #__VA_ARGS__
  927     STR()   // resulted in "§" instead of "" .
  928 
  929 Wed Jun 25 08:35:06     2003
  930 - Fixed several gcc compilation errors (missing typename's etc.)
  931 - Fixed a compilation problem, if Wave is built on top of the SLEX scanner.
  932 - Reformatted the --timer output from pure seconds to a more reasonable format.
  933 
  934 Fri Jun 20 19:33:30     2003
  935 - Changed the enable_tracing function of the tracing_policies to take a 
  936   trace_flags variable instead of a bool, to allow to control tracing with more
  937   granulation.
  938 - Added the tracing_enabled function to the tracing_policies, which returns the 
  939   current tracing status.
  940 - Updated the documentation of the tracing policies.
  941 
  942 Thu Jun 19 21:45:39     2003
  943 - Reactivated the list_includes sample with the help of the new include file 
  944   tracing facility.
  945 
  946 Thu Jun 19 17:55:35     2003
  947 - Eliminated the TraceT template parameter from the macromap<> template.
  948 - Added two hooks to the trace policy to allow to trace the opening and 
  949   closing of include files.
  950 
  951 Thu Jun 19 14:08:10     2003
  952 - Added the command line option --timer, which enables the output to std::cout
  953   of the overall elapsed time during the preprocessing of the given file.
  954 
  955 Fri Jun 13 09:11:29     2003
  956 - Emitted an error message, if an ellipses was found as a formal macro 
  957   parameter and variadics were disabled.
  958 - Fixed a false error message, that the last line was not terminated with a 
  959   newline, which occured, if no output was generated by the last line of the
  960   source file.
  961   
  962 Thu Jun 12 15:20:22     2003
  963 - Fixed the recent change in argument expansion for the variadics/C99/C++0x 
  964   mode.
  965 - Fixed a problem, where an additional whitespace between _Pragma and the 
  966   opening parenthesis resulted in a false error message.
  967 - Used a pool allocator for the token sequence containers (std::list<>'s),
  968   which gives a speed gain of more than 60% (while profiling the Order 
  969   library).
  970   
  971 Wed Jun 11 22:18:54     2003
  972 - Fixed a macro scoping/expansion problem, when a macro returned a full scope
  973   which is continued on the call site to form a full qualified name, the name 
  974   wasn't recognized correctly:
  975     # region A
  976     #  define MACRO 1
  977     #  region B
  978     #   define MACRO 2
  979     #  endregion
  980     # endregion
  981     # define ID(x) x
  982     ID(A)::MACRO     // 1
  983     ID(A::B)::MACRO  // 2, was expanded to A::B::MACRO
  984 - Changed the expansion of macro arguments such, that these will be expanded 
  985   only, if the result is to be used for substitution during the expansion
  986   of the replacement list.
  987   
  988 Wed Jun 11 14:40:29     2003
  989 - Included a whitespace eating finite state machine (FSM) for minimal 
  990   whitespace in the generated output. This was suggested by Paul Mensonides.
  991 - Updated the acknowledgement section
  992 
  993 Wed Jun  4 08:03:04     2003
  994 - Fixed a bug reported by Faisal Vali, which prevented the correct evaluation 
  995   of conditional expressions, if these referenced macro names, which expanded 
  996   to a sequence containing non-expandable tokens.
  997 - Fixed the above bug for #elif directives too (in the first place this was 
  998   fixed for #if directives only)
  999   
 1000 Mon May 26 22:15:40     2003
 1001 - Added missing copyrights in several files.
 1002 - Fixed false output, if a unknown _Pragma were encountered.
 1003 - Fixed a macro expansion problem with qualified names, were constructs like
 1004   the following were not expanded correctly:
 1005     #define ID(x) x
 1006     #region SCOPE
 1007     #  define TEST 1
 1008     #endregion
 1009     ID(SCOPE::) TEST    // should expand to 1
 1010 - Changed #import semantics for macros from copy semantics to reference 
 1011   semantics, i.e. macros are now considered to be implicitly imported into the 
 1012   scope, where they are defined. If a macro is imported into another scope and 
 1013   the original macro is undefined, the imported macro still exists. Further, 
 1014   if the imported macro is expanded, then while rescanning the original macro 
 1015   is disabled too:
 1016     #region A
 1017     #  define B(x) x
 1018     #endregion
 1019     #import A
 1020     B    (A::B) (*) // A::B(*)
 1021     A::B (B)    (*) // B(*)
 1022     B    (B)    (*) // B(*)
 1023     A::B (A::B) (*) // A::B(*)
 1024 - Fixed a recently introduced problem, where placemarker tokens slipped through 
 1025   to the output under certain conditions (in variadics/C99/C++0x modes only).
 1026 
 1027 Mon May 19 16:30:49     2003
 1028 - Fixed a bug, which prevented the recognition of the __lparen__, __rparen__ or 
 1029   __comma__ alternative tokens, if these were the first token after an emitted
 1030   #line directive (reported by Vesa Karvonen).
 1031 - Added an optimization, that only those tokens are considered for a macro 
 1032   expansion, which may result in an expansion.
 1033   
 1034 Tue May 13 18:16:26     2003
 1035 - Fixed a newly introduced problem, where a omitted argument consisting out 
 1036   of whitespace only were failed to be replaced by a placemarker token. This 
 1037   lead to problems with constructs like the following:
 1038     #define paste(a, b, c) a ## b ## c
 1039     paste(1, , 3)  // should expand to 13, but expanded to 1## 3
 1040 - Fixed a problem with the tracing support, which throwed an unexpected 
 1041   exception if there were too few arguments given while expanding a macro.
 1042 - Allowed to open and to import the global scope ('#region ::' and 
 1043   '#import ::').
 1044 - Fixed a bug, if more than one file was given with a --forceinclude command 
 1045   line option.
 1046 
 1047 Sat May 10 21:30:29     2003
 1048 - Added __STDC_FULL_REGION__ and __STDC_CURRENT_REGION__ to the list of not 
 1049   undefinable macros.
 1050 - In normal C++ mode and C99 mode the #ifdef/#ifndef and the operator defined()
 1051   should not support qualified names. This is fixed now.
 1052 - Updated the documentation.
 1053 - Fixed minor gcc -Wall compilation warnings.
 1054 - Added better error support for qualified names used as arguments for #ifdef,
 1055   #ifndef and operator defined().
 1056   
 1057 Sat May 10 09:51:18     2003
 1058 - Removed the feature, that the comma before the ellipsis parameter in a macro
 1059   definition may be omitted.
 1060 - Resolved an issue with the expansion of qualified macros, when these 
 1061   qualified names were partially generated by a previous macro expansion
 1062 - Allowed to specify fully qualified names as arguments to the #region directive
 1063   
 1064 Wed May  7 22:44:21     2003
 1065 - Changed the names of __SCOPE__ and __FULL_SCOPE__ predefined macros to 
 1066   __STDC_CURRENT_REGION__ and __STDC_FULL_REGION__ resp. The names are subject 
 1067   to change if the #region keyword actually will be renamed to #scope/#module
 1068   or whatever.
 1069 - In C++0x mode it is now possible to omit the last comma before a variadics
 1070   ellipsis in a macro definition:
 1071     #define cat_i(a, b, c, d, e ...) a ## b ## c ## d ## e 
 1072 - Fixed a bug in the stringize code, where an ellipsis to stringize resulted in
 1073   stringizing of the first ellipsis parameter only. Preserved the original 
 1074   whitespace delimiting in between the ellipsis arguments.
 1075 - Introduced the wave::language_support enum for convenient switching of the 
 1076   supported language features throughout the library.
 1077 - Fixed a bug, which prevented the definition of the predefined macro 
 1078   __WAVE_HAS_VARRIADICS__, if --variadics were given on the command line.
 1079   
 1080 Tue May  6 15:49:45     2003
 1081 - Made predefined macros available at every macro scope without qualification.
 1082 - Predefined a new macro in C++0x mode: __STDC_GLOBAL__, which is defined at 
 1083   global macro scope only and equals to '1' (integer literal).
 1084 - In C++0x mode there are two new predefined macros: 
 1085     __SCOPE__:      expands to the last part of the qualified name of the 
 1086                     current macro scope
 1087     __FULL_SCOPE__: expands to the full qualified name of the current macro 
 1088                     scope 
 1089     
 1090 Mon May  5 23:02:48     2003
 1091 - Fixed a problem in the new well defined token pasting code, which occured for
 1092   constructs like the following:
 1093     #define is_empty(...) is_empty_ ## __VA_ARGS__ ## _other
 1094   i.e. where two or more '##' operators were contained in the replacement text.
 1095 - Implemented __comma__, __lparen__ and __rparen__ alternative pp-tokens, which 
 1096   may be used as the ',', '(' and ')' tokens during preprocessing. These are 
 1097   only converted to there respective string representation in a special 
 1098   translation phase after preprocessing. This was proposed by Vesa Karvonen.
 1099 - Changed the macro scoping rules to: "If a qualified name does not find a 
 1100   nested name, it is not a qualified name to the preprocessor." This seems to 
 1101   be the simplest usable solution for the possible ambiguities.
 1102 - Fixed a bug in the macro expansion engine in C++0x mode, where the skipping 
 1103   of whitespace inside of a qualified name wasn't consistent.
 1104 
 1105 Sun May  4 10:48:53     2003
 1106 - Fixed a bug in the expression grammar, which prevented 'not' to be recognized
 1107   as a valid operator.
 1108 - Qualified names are now supported as parameters to #ifdef and #ifndef too.
 1109 - Remove one specialization of the macro expansion engine. It gets instantiated
 1110   only twice now (for the main input iterator and for list<>'s  of tokens.
 1111 - Simplified the required explicit specialization of the defined_grammar
 1112   template. It has to be explicitely instantiated by providing the token type
 1113   only (just as for the explicit instantiations of the other grammars).
 1114 
 1115 Fri May  2 22:44:27     2003
 1116 - Qualified names are now allowed as parameters to the operator defined() in 
 1117   C++0x mode.
 1118 - Separated the defined() functionality into a separate translation unit to 
 1119   work around a VC7.1 ICE.
 1120   
 1121 Fri May  2 15:38:26     2003
 1122 - The C++0x mode now has a special set of predefined macros.
 1123 - The predefined macro __WAVE_HAS_VARIADICS__ is now defined in C99 and C++0x 
 1124   modes too (--variadics is implied for these modes).
 1125 - Updated the documentation to reflect the recent changes and additions.
 1126 - In C++0x mode Wave now supports macro scopes:
 1127     - new keywords #region/#endregion/#import
 1128     - qualified macro names
 1129 - In C++0x mode Wave now supports token pasting of unrelated tokens. These are
 1130   concatenated, the result is re-tokenized and inserted into the output stream.
 1131 - Fixed a minor bug in the macro expansion engine, if a qualified function-like
 1132   macro was found in an object-like context.
 1133 - Fixed an issue with well defined token pasting of unrelated tokens.
 1134 
 1135 Tue Apr 29 08:47:37     2003
 1136 - Fixed a bug in the macro expansion engine, which prevented the expansion 
 1137   of a certain macro under specific conditions (if the left of two tokens to 
 1138   concatenate were a disabled one (T_NONREPLACABLE_IDENTIFIER), then the 
 1139   resulting token was disabled too).
 1140 - Added additional diagnostics to the Wave driver to disambiguate the C99 and 
 1141   C++0x modes.
 1142 - Implemented a new API function and a corresponding Wave driver command line
 1143   option, which allows to specify one or more include files to be preprocessed
 1144   before the regular file is preprocessed (the files are processed as normal
 1145   input and all the resulting output is included, before processing the regular 
 1146   input file). The Wave driver command line option is --forceinclude (-F).
 1147 - Wave now compiles the Order library from Vesa Karvonen.
 1148   
 1149 Mon Apr 28 07:57:10     2003
 1150 - Fixed a bug in the macro expansion engine.
 1151 - Removed a lot of (not needed) whitespace in the generated output (but still 
 1152   not optimal).
 1153 
 1154 Sat Apr 26 20:30:53     2003
 1155 - Fixed a bug in the initialization code of the Slex lexer while working in 
 1156   C99 mode (reported by Reece Dunn).
 1157 
 1158 Fri Apr 18 08:37:35     2003
 1159 - Fixed the handling of option_value's inside of pragma directives:
 1160     _Pragma("wave option(option_value)")
 1161   inside which all all whitespaces were deleted.
 1162 - Started to implement experimental macro scoping.
 1163 
 1164 Thu Apr 10 10:20:07     2003
 1165 - Fixed a problem with the #pragma wave stop(), where only the first token 
 1166   inside the stop directive was output, when the preprocessor stops in result
 1167   of this pragma.
 1168 - Implemented a new #pragma wave system(command), which spawns a new operation
 1169   system command exactly as specified inside the system directive, intercepts
 1170   the stdout output of this process, retokenizes this output and inserts the
 1171   generated token sequence in place of the original #pragma or operator _Pragma.
 1172   Please note that the generated output is _not_ subject to any macro expansion
 1173   before its insertion as the replacement of the pragma itself. If you need to 
 1174   macro expand the replacement text, you always may force this by writing:
 1175     #define SCAN(x) x
 1176     SCAN(_Pragma("wave system(...)"))
 1177   which re-scans the replacement once.
 1178 - Replaced the Wave position_iterator with the boost::spirit::position_iterator
 1179   (without any problems!).
 1180   
 1181 Mon Apr  7 10:45:30     2003
 1182 - Fixed macro_trace_policies::expand_object_like_macro not to be called with 
 1183   the formal arguments as one of its parameters.
 1184 - Updated the documentation to reflect the changes needed for the tracing 
 1185   stuff.
 1186   
 1187 Mon Mar 31 19:07:05     2003
 1188 - Fixed variadics support in the trace output.
 1189 - Fixed preprocessing of operator _Pragma() before it's execution.
 1190 - Added _Pragma("wave stop(errmsg)") (#pragma wave stop(errmsg)) to allow 
 1191   diagnostics output from inside macro expansion.
 1192 - Fixed operator _Pragma for unknown pragmas (these are simply put through to
 1193   the output).
 1194 - Implemented a maximal possible include nesting depth to avoid an out of 
 1195   memory error. The initial value for this is configurable through the compile 
 1196   time constant WAVE_MAX_INCLUDE_LEVEL_DEPTH, which defaults to 1024, if not 
 1197   given.
 1198   Additionally this may be enlarged through a new command line option:
 1199   -n/--nesting (Wave driver only).
 1200 
 1201 Sun Mar 30 20:40:17     2003
 1202 - Implemented the predefined macro __INCLUDE_LEVEL__, which expands to a 
 1203   decimal integer constant that represents the depth of nesting in include 
 1204   files. The value of this macro is incremented on every '#include' directive 
 1205   and decremented at every end of file. 
 1206 - Implemented the operator _Pragma(). It is recognized in C99 mode and whenever 
 1207   variadics are enabled.
 1208   
 1209 Sun Mar 30 08:30:12     2003
 1210 - Changed the tracing format to be more readable.
 1211 - Changed the tracing #pragma's to
 1212     enable tracing:     #pragma wave trace(enable)
 1213     disable tracing:    #pragma wave trace(disable)
 1214   or
 1215     enable tracing:     #pragma wave trace(1)
 1216     disable tracing:    #pragma wave trace(0)
 1217 - Changed the semantics of the -t (--traceto) switch. Without any -t switch 
 1218   there isn't generated any trace output at all, even, if the corresponding
 1219   #pragma directives are found. To output the trace info to a file, the 
 1220   '-t file' syntax may be used, to output to std::cerr, the '-t-' (or '-t -')
 1221   syntax may be used.
 1222 
 1223 Fri Mar 28 17:27:25     2003
 1224 - Added a new template parameter to the wave::context<> object, which allows
 1225   to specify a policy for controlling the macro expansion tracing. The default
 1226   macro_trace_policy does no tracing at all. This way one can add specific
 1227   macro expansion tracing facilities to the library.
 1228 - #pragma directives starting with a STDC identifier are no longer not macro 
 1229   expanded in C++ mode, in C++ mode these are now expanded as usual, in C99 
 1230   mode not.
 1231 - The tracing can be enabled/disabled from inside the preprocessed stream by
 1232   inserting a special #pragma directive:
 1233     enable tracing:     #pragma wave_option(trace: enable)
 1234     disable tracing:    #pragma wave_option(trace: disable)
 1235 - The Wave driver now allows to specify a destination for the macro expansion 
 1236   tracing trough a new command line switch: '-t path' or '--traceto path'. If
 1237   this option isn't given, the trace output goes to stderr.
 1238 - The Wave driver now allows to specify the name of the file, where the 
 1239   preprocessed result stream is to be saved: '-o path' or '--output path'. If 
 1240   this option is not given, the output goes to stdout.
 1241   
 1242 Wed Mar 26 20:39:11     2003
 1243 - Fixed a problem with alternative tokens (as 'and', 'or' etc.) and trigraph
 1244   tokens, which were not correctly recognized inside #if/#elif expressions.
 1245 - Alternative tokens ('and', 'or' etc.) are no longer subject to a possible 
 1246   macro redefinition.
 1247 - Fixed the special handling of 'true' and 'false' during the macro expansion 
 1248   of #if/#elif expressions.
 1249 
 1250 Tue Mar 25 12:12:35     2003
 1251 - Released Wave V0.9.1
 1252 
 1253 Mon Mar 24 13:34:27     2003
 1254 - Implemented placemarkers, i.e. Wave now supports empty arguments during macro 
 1255   invocations. This must be enabled by means of a new pp constant:
 1256   WAVE_SUPPORT_VARIADICS_PLACEMARKERS which must be defined to enable the 
 1257   placemarker and variadics code and by defining the command line option 
 1258   '--variadics' (Wave driver only).
 1259 - Implemented variadics, i.e. Wave now supports macros with variable parameter 
 1260   counts. This must be enabled by means of the pp constant:
 1261   WAVE_SUPPORT_VARIADICS_PLACEMARKERS which must be defined to enable the 
 1262   placemarker and variadics code and by defining the command line option 
 1263   '--variadics' (Wave driver only).
 1264 - Implemented a C99 mode. This mode enables variadics and placemarkers by 
 1265   default and rejects some specific C++ tokens (as the alternate keywords and 
 1266   '::', '->*', '.*'). This mode must be enabled by the means of the pp constant
 1267   WAVE_SUPPORT_VARIADICS_PLACEMARKERS (see above). The C99 mode is enabled by 
 1268   the command line switch '--c99' (Wave driver only).
 1269   This involved some changes in the C99/C++ lexers.
 1270   
 1271 Fri Mar 21 16:02:10     2003
 1272 - Fixed a bug in the macro expansion engine, which prevented the expansion of
 1273   macros, which name was concatenated out of a identifier and a integer 
 1274   followed directly by another identifier:
 1275     #define X() X_ ## 0R()  // note: _zero_ followed by 'R'
 1276     #define X_0R() ...
 1277     X() // expanded to:  X_0R(), but should expand to ...
 1278   This is a problem resulting from the fact, that the Standard requires the 
 1279   preprocessor to act on so called pp-tokens, but Wave acts on C++ tokens.
 1280   
 1281 Thu Mar 20 21:39:21     2003
 1282 - Fixed a problem with expression parsing (#if/#elif constant expressions), 
 1283   which failed to produce an error message for expressions like
 1284     #if 1 2 3 4 5
 1285   i.e. where the token sequence starts with a valid constant expression, but 
 1286   the remainder of the line contained other tokens than whitespace.
 1287 - Integrated the flex_string class from Andrei Alexandrescu (published on the
 1288   CUJ site) to get COW-string behaviour for the token values and position 
 1289   filename strings. This resulted in a major overall speedup (about 2-3 times 
 1290   faster in dependency of the complexity of pp usage in the input stream).
 1291 - Fixed a bug, which reported ill formed #if/#else expressions as errors, even 
 1292   if the current if block status (conditional compilation status) is false.
 1293 - Added a warning, if the last line of a file does not end with a newline.
 1294 - Improved error recognition and handling for malformed preprocessor directives
 1295 
 1296 Mon Mar 17 19:53:29     2003
 1297 - Fixed a concatenation problem: constructs like a##b##c where expanded 
 1298   incorrectly.
 1299 - Optimized the recognition of pp directives: 
 1300     - the parser is used only, if the next non-whitespace token starts a pp 
 1301       directive 
 1302     - null directives now are recognized without calling the parser
 1303     - the parser isn't called anymore, if the if_block_status is false and no
 1304       conditional pp directive (#if etc.) is to be recognized.
 1305   These optimizations give a speed improvement by upto 40%.
 1306 - Removed adjacent whitespace during macro expansion (needs to be revised, 
 1307   since there is some whitespace left, which may be removed)
 1308     
 1309 Sun Mar 16 23:19:11     2003
 1310 - Fixed a problem with include paths given on the command line, if the file
 1311   to preprocess was not given as a full path (driver executable).
 1312 - Fixed a problem with path names containing blanks (driver executable).
 1313 - Cleaned command line and argument handling (driver executable).
 1314 - Fixed a severe memory leak.
 1315 - Fixed a bug, if a C++ keyword was used as a macro name or macro parameter 
 1316   name, which prevented the macro recognition and expansion to function 
 1317   properly.
 1318 - Implemented the WAVE_SUPPORT_MS_EXTENSIONS compiler switch for the re2c 
 1319   generated lexer too.
 1320 - Fixed a problem, which caused an internal T_PLACEHOLDER token to show up 
 1321   outside the macro replacement engine.
 1322 - Fixed a problem with macro #include directives, which prevents to find the 
 1323   file to include, if after the macro expansion the token sequence representing 
 1324   the filename began or ended with at least one whitespace token.
 1325 - Fixed a problem, which caused a false error message if the '#' character was
 1326   to be concatenated with an arbitrary other token.
 1327 - The concatenation of a whitespace token with an arbitrary other token was 
 1328   reported as illegal token pasting (but it is certainly not).
 1329    
 1330 Sat Mar 15 21:43:56     2003
 1331 - Added a default constructor to the wave::util::file_position template.
 1332 - Report the concatenation of unrelated tokens as an error.
 1333 - Finished the documentation.
 1334 
 1335 Fri Mar 14 20:14:18     2003
 1336 - More work on documentation
 1337 - Changed file_position to expose accessor functions (the member variables are
 1338   marked as private now). This opens up the possibility to provide another 
 1339   file_position implementation, which may be optimized in some way.
 1340 - Fixed a problem with the token name table, the alternate and trigraph token
 1341   names were printed incorrectly.
 1342 - Fixed a bug, which prevented the correct recognition of 'defined X' (without 
 1343   parenthesises).
 1344 - Fixed a bug, which allowed to redefine and undefine the predefined name 
 1345   'defined'.
 1346 - Fixed a bug, which prevents the correct recognition of a macro based #include 
 1347   directive, if it expands to something like #include <...>.
 1348 - Fixed a bug, which prevented the recognition of duplicate macro parameter
 1349   names.
 1350 - Removed the insertion of additional whitespace inside of string literals 
 1351   (during stringizing).
 1352   
 1353 Wed Mar 12 19:16:40     2003
 1354 - Fixed a bug, which prevented the instantiation of the wave::context object 
 1355   with auxiliary iterators. The token type isn't coupled anymore with the 
 1356   iterator type.
 1357   This required some changes in the interface:
 1358     - The wave::context object now has three template parameters (the iterator
 1359       type, the token type and the input policy type)
 1360     - The token type does not have the iterator type as it's template parameter
 1361       anymore.
 1362 - Implemented a new position_iterator template on top of the iterator_adaptor<>
 1363   template to make it work even for input_iterator type iterators.
 1364 - Fixed a bug in the regular expressions for the Slex lexer.
 1365 - The function 'set_sys_include_delimiter()' was renamed to 
 1366   'set_sysinclude_delimiter()' to better fit the naming scheme of the other 
 1367   functions.
 1368 - Wrote more documentation
 1369 - Unified the different token definitions of the lexers, so that there is only
 1370   one token type left. This required some changes in the interface:
 1371     - There is no need anymore to explicitly specify the namespace of the token
 1372       type to use.
 1373 - Added the command line option -P to the Wave driver program, which predefines 
 1374   a macro (i.e. defines it such, that is _not_ undefinable through an #undef
 1375   directive from inside the preprocessed program).
 1376 
 1377 Sat Mar  8 07:46:43     2003
 1378 - Released Wave 0.9.0
 1379 
 1380 Thu Mar  6 20:02:44     2003
 1381 - Compiled Wave with IntelV7.0/DinkumwareSTL (from VC6sp5)
 1382 - Fixed new compilation problems with gcc -Wall
 1383 - Fixed the list_includes and cpp_tokens samples to compile and link correctly.
 1384 - Fixed a bug, where a wrong filename was reported by the generated #line 
 1385   directive.
 1386 - Fixed a bug, where the __FILE__ macro was expanded without '\"' around the
 1387   filename.
 1388 - The generated #line directives and the expanded __FILE__ macro now report
 1389   the filename in a native (to the system) format. Additionally the generated
 1390   string literals are now escaped correctly.
 1391 
 1392 Wed Mar  5 21:11:14     2003
 1393 - Reorganized the directory structure to mirror the namespace structure of the
 1394   library
 1395 - Fixed a bug, where the complete input after the first found #include 
 1396   directive were eaten up.
 1397 - Fixed a bug, where the __LINE__ macro expanded to a incorrect linenumber, if
 1398   the __LINE__ macro was encountered on a line after a '\\' '\n' sequence.
 1399 
 1400 Tue Mar  4 11:50:24     2003
 1401 - The new name of the project is 'Wave'.
 1402 - Adjusted namespaces, comments etc. to reflect the new name.
 1403 - Added the command line option -U [--undefine], which allows to remove one of 
 1404   the predefined macros (except __LINE__, __FILE__, __DATE__, __TIME__, 
 1405   __STDC__ and __cplusplus)
 1406 
 1407 Sun Mar  2 20:10:04     2003
 1408 - Fixed a bug while expanding macros without any definition part (empty macros)
 1409 - The pp-iterator will not emit a newline for every recognized preprocessing
 1410   directive anymore. The generated output is much more condensed this way. 
 1411 - The pp-iterator now emits #line directives at appropriate places.
 1412 - Added an additional parser to the library, which may be used to parse macros
 1413   given in the command line syntax, i.e. something like 'MACRO(x)=definition'.
 1414 - Added the possibility to the cpp driver sample, to add macros from the 
 1415   command line through the -D command line switch.
 1416 - Martin Wille contributed a test script to allow automatic testing of the 
 1417   cpp driver sample by feeding all files contained in the test_files directory
 1418   through the cpp driver and comparing the generated output with the 
 1419   corresponding expectations.
 1420 - Added config file support to allow for predefined option sets (for instance
 1421   for the emulation of other compilers)
 1422 - Changed the way, how include paths are defined. It resembles now the 
 1423   behaviour of gcc. 
 1424   Any directories specified with '-I' options before an eventually given '-I-' 
 1425   option are searched only for the case of '#include "file"', they are not 
 1426   searched for '#include <file>' directives. If additional directories are 
 1427   specified with '-I' options after a '-I-' option was given, these directories 
 1428   are searched for all '#include' directives. In addition, the '-I-' option 
 1429   inhibits the use of the current directory as the first search directory for 
 1430   '#include "file"'. Therefore, the current directory is searched only if it is 
 1431   requested explicitly with '-I.'. Specifying both '-I-' and '-I.' allows to 
 1432   control precisely which directories are searched before the current one 
 1433   and which are searched after.
 1434 - Added config file support to the cpp driver.
 1435 - stored not only the current 'name' of a file (given eventually by a #line
 1436   directive) but in parallel the actual full file system name of this file too.
 1437   
 1438 Tue Feb 25 21:44:19     2003
 1439 - Fixed the warnings emitted by gcc -Wall.
 1440 - Fixed a bug in the cpp grammar, which causes to failing the recognition of 
 1441   certain preprocessor directives if at the end of this directive were placed 
 1442   a C++ comment.
 1443 - Simplified and extended the insertion of whitespace tokens at places, where
 1444   otherwise two adjacent tokens would form a new different token, if 
 1445   retokenized.
 1446 
 1447 Mon Feb 24 19:13:46     2003
 1448 - defined() functionality was broken
 1449 - added missing typename keywords
 1450 - added missing using namespace statements, where appropriate
 1451 - added a warning, when a predefined macro is to be undefined (by an #undef 
 1452   directive)
 1453 - removed the 'compile in C mode' hack for the re2c generated lexer (VC7.1 
 1454   (final beta) is not able to compile it with optimizations switched on 
 1455   anyway :( )
 1456 - compiled with gcc 3.2 and Intel V7.0 (20030129Z)
 1457 
 1458 Sun Feb 23 23:39:33  2003
 1459 - Fixed a couple of 'missing typename' bugs (thanks to Martin Wille)
 1460 - Added code to insert whitespace at places, where otherwise two adjacent 
 1461   tokens would form a new different token, if retokenized.
 1462 - Fixed a severe macro expansion bug.
 1463 - Added the handling of invalid or not allowed universal character values 
 1464   inside of string literals and character literals.
 1465 
 1466 Sat Feb 22 20:52:06  2003
 1467 - Bumped version to 0.9.0
 1468 - Added test for invalid or not allowed universal character values (see
 1469   C++ Standard 2.2.2 [lex.charset] and Annex E)
 1470 - Fixed a bug with newlines between a macro name and the opening parenthesis 
 1471   during the macro expansion and a bug with newlines inside the parameter list
 1472   during the macro expansion.
 1473 - Added the following predefined macros:
 1474     __SPIRIT_PP__
 1475         expands to the version number of the pp-iterator lib (i.e. 0x0090 for 
 1476         V0.9.0)
 1477     __SPIRIT_PP_VERSION__
 1478         expands to the full version number of the pp-iterator lib (i.e.
 1479         0x00900436 for V0.9.0.436)
 1480     __SPIRIT_PP_VERSION_STR__
 1481         expands to the full version string of the pp-iterator lib (i.e. 
 1482         "0.9.0.436")
 1483   
 1484 Fri Feb 21 22:09:04  2003 (feature complete!)
 1485 - Allowed to optionally compile the Re2c generated lexer in 'C' mode, because 
 1486   at least the VC7.1 (final beta) compiler has problems to compile it in 'C++'
 1487   mode with optimizations switch on
 1488 - Implemented #error and #warning (optional) directives (C++ standard 16.5). 
 1489   Additionally there are now allowed the following preprocessor configuration 
 1490   constants:
 1491     CPP_PREPROCESS_ERROR_MESSAGE_BODY
 1492         if defined, preprocesses the message body of #error and #warning  
 1493         directives to allow for better diagnostics.
 1494     CPP_SUPPORT_WARNING_DIRECTIVE
 1495         if defined, then the #warning directive will be recognized such, that
 1496         a warning with the given message will be issued
 1497 - Adjusted the error handling for the Re2c generated C++ lexer, so that any
 1498   error inside the lexer is now propagated as an cpplexer_exception.
 1499 - Implemented the #line directive (C++ standard 16.4)
 1500 - Implemented #pragma directive (C++ standard 16.6)
 1501   Additionally there are now allowed the following preprocessor configuration 
 1502   constants:
 1503     CPP_RETURN_PRAGMA_DIRECTIVES
 1504         if defined, then the whole pragma directive is returned as a token
 1505         sequence to the caller, if not defined the whole pragma directive is 
 1506         skipped
 1507     CPP_PREPROCESS_PRAGMA_BODY
 1508         if defined, then the #pragma body will be preprocessed 
 1509 - Implemented #include directive with macro arguments (C++ standard 16.2.4)
 1510 - Made the namespace structure finer granulated to leave only the main 
 1511   interface classes in the main namespace cpp. All other classes are moved into
 1512   sub-namespaces to reflect the logical dependencies
 1513 - Reorganized the public interface of the context<> template class, made all
 1514   non relevant functions into the protected.
 1515 - Implemented predefined macros (__LINE__ et.al.) (C++ standard 16.8)
 1516 - Further documentation work
 1517   
 1518 Wed Feb 19 23:44:47  2003
 1519 - Corrected a lot of bugs in the macro expansion engine, which now should be 
 1520   conformant to the C++ standard.
 1521 - # (null) directive (C++ standard 16.7)
 1522 
 1523 Sun Feb 16 08:40:38  2003
 1524 - Added a macro expansion engine which expands macros with arguments 
 1525   C++ standard 16.3 [cpp.replace]
 1526 - Added a new sample: cpp_tokens. This sample preprocesses a given file and
 1527   prints out the string representations of all tokens returned from the pp 
 1528   iterator
 1529 - Added documentation (to be continued!)
 1530 - Added a couple of small test files to test elementary functionality
 1531   (the tests mainly were contributed by Paul Mensonides)
 1532 - The main cpp sample is now a simple preprocessor driver program, which 
 1533   outputs the string representation of the preprocessed input stream. Use 
 1534   cpp --help to get a hint, how to use it.
 1535 - Fixed a bug in the preprocessor grammar which failed to recognize a pp 
 1536   statement, if there was a C++ comment at the end of the line
 1537 - Added '#' operator (C++ standard 16.3.2) [cpp.stringize]
 1538 - Fixed a bug in the slex based C++ lexer to handle the concatenation 
 1539   characters correctly ('\\' followed by a '\n')
 1540 
 1541 Sun Feb  9 23:01:00  2003
 1542 - Improved error handling for #if et.al.
 1543 - Fixed a pair of lexer errors
 1544 - Implemented the #if/#elif statements, the sample now contains a complete C++ 
 1545   expression evaluation engine (for the calculation of the outcome of the 
 1546   #if/#elif statement conditions)
 1547 - Implemented macro replacement (with parameters)
 1548 - Implemented the '##' [cpp.concat] operator
 1549 - Implemented the defined() [cpp.cond] operator
 1550 
 1551 Sun Feb  2 23:28:24  2003
 1552 - Implemented the  #define, #undef, #ifdef, #ifndef, #else and #endif 
 1553   statements
 1554 - Added optional parse tree output as xml stream (controlled through the config
 1555   pp constant CPP_DUMP_PARSE_TREE)
 1556 
 1557 Fri Jan 31 21:30:55  2003
 1558 - Fixed different minor issues and a border case (#include statement at the 
 1559   last line of a included file)
 1560 
 1561 Wed Jan 29 21:13:32  2003
 1562 - Fixed exception handling to report the correct error position
 1563 - Fixed another bug in the stream position calculation scheme
 1564 - Added a more elaborate sample 'list_includes' which lists the dependency
 1565   information for a given source file (see test/list_includes/readme.txt).
 1566 
 1567 Sat Jan 18 22:01:03  2003
 1568 - Fixed a bug in the stream position calculation scheme
 1569 - Made cpp::exceptions more standard conformant (added 'throw()' at appropriate 
 1570   places)
 1571 - Overall housekeeping :-)
 1572 
 1573 Wed Jan 15 21:54:20  2003
 1574 Changes since project start (still 0.5.0)
 1575 - Added #include <...> and #include "..." functionality
 1576 - pp directives are now generally recognized 
 1577 - Decoupled the C++ lexers and the pp grammar to separate compilation
 1578   units (optionally) to speed up compilation (a lot!)
 1579 
 1580 Thu Jan  2 12:39:30  2003
 1581 A completely new version 0.5.0 of the C preprocessor was started. It's a 
 1582 complete rewrite of the existing code base. The main differences are:
 1583 - The preprocessor is now implemented as an iterator, which returns the 
 1584   current preprocessed token from the input stream.
 1585 - The preprocessing of include files isn't implemented through recursion
 1586   anymore. This follows directly from the first change. As a result of this
 1587   change the internal error handling is simplified.
 1588 - The C preprocessor iterator itself is feeded by a new unified C++ lexer 
 1589   iterator. BTW, this C++ lexer iterator could be used standalone and is not 
 1590   tied to the C preprocessor. There are two different C++ lexers implemented 
 1591   now, which are functionally completely identical. These expose a similar
 1592   interface, so the C preprocessor could be used with both of them.
 1593 - The C++ lexers integrated into the C preprocessor by now are:
 1594     Slex:   A spirit based table driven regular expression lexer (the slex 
 1595             engine originally was written by Dan Nuffer and is available as a
 1596             separate Spirit sample).
 1597     Re2c:   A C++ lexer generated with the help of the re2c tool. This C++
 1598             lexer was written as a sample by Dan Nuffer too.
 1599   It isn't hard to plug in additional different C++ lexers. There are plans to
 1600   integrate a third one written by Juan Carlos Arevalo-Baeza, which is 
 1601   available as a Spirit sample.
 1602   
 1603 -------------------------------------------------------------------------------
 1604 Tue Feb 12 22:29:50  2002
 1605 Changes from 0.2.3 to 0.2.4:
 1606 - Moved XML dumping functions to the main Spirit directory
 1607 - Fixed operator '##', it was not correctly implemented somehow :-(
 1608 
 1609 Sun Feb 10 21:07:19  2002
 1610 Changes from 0.2.2 to 0.2.3:
 1611 - Implemented concatenation operator '##' (cpp.concat)
 1612 - Removed defined() functionality for Intel compiler (it ICE's) until this 
 1613   issue is resolved
 1614 - Separated code for dumping a parse tree to XML for inclusion in the main
 1615   Spirit headers
 1616 
 1617 Thu Jan 17 23:51:21  2002
 1618 Changes from 0.2.1 to 0.2.2:
 1619 - Fixes to compile with gcc 2.95.2 and gcc 3.0.2 (thanks Dan Nuffer)
 1620 - Reformatted the grammars to conform to a single formatting guideline
 1621 - Assigned explicit rule_id's to the rules of cpp_grammar, so that the 
 1622   access code to the embedded definition class is not needed anymore
 1623 - Fixed a remaining const problem
 1624 
 1625 Tue Jan 15 23:40:40  2002
 1626 Changes from 0.2.0 to 0.2.1:
 1627 - Corrected handling of defined() operator
 1628 - In preprocessing conditionals undefined identifiers now correctly
 1629   replaced by '0'
 1630 - Fixed several const problems
 1631 - Added parse_node_iterator for traversing one node in a parse_tree
 1632   without going deeper down the hierarchy than one level (this is useful,
 1633   if all inspected tokens arranged along a single node in the parse tree.
 1634   The main difference to the parse_tree_iterator is, that the underlying
 1635   iterator generally can be adjusted correctly after advancing the attached
 1636   parse_node_iterator
 1637 - Fixed a problem with gcc 2.95.2, which doesn't have a <sstream> header
 1638 - Prepared usage of slex for lexer states
 1639 
 1640 Sun Jan 13 10:21:16  2002
 1641 Changes from 0.1.0 to 0.2.0:
 1642 - Added operator 'defined()'
 1643 - Added directive '#warning'
 1644 - Corrected error reporting
 1645 - Added command line option -I- for finer control of the searched include
 1646   directories (-I and -I- should now work as in gcc, see readme.html for 
 1647   more info)
 1648 - Corrected conditional preprocessing (should be fully functional now)
 1649 - Fixed existing code base for changes made in parse tree support
 1650 - Moved parse tree utility functions to a separate header (prepared for 
 1651   inclusion to the Spirit main library)