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