Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: downloads/boost_1_34_1/libs/wave/ChangeLog @ 33

Last change on this file since 33 was 29, checked in by landauf, 16 years ago

updated boost from 1_33_1 to 1_34_1

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