From 15c01a454c59bea16b08970343f06258457fc514 Mon Sep 17 00:00:00 2001 From: Hartmut Kaiser Date: Sat, 26 May 2012 14:47:03 +0000 Subject: [PATCH] Wave: merging from trunk for V1.50 [SVN r78634] --- ChangeLog | 1064 +++++++++-------- include/boost/wave.hpp | 2 +- include/boost/wave/cpp_context.hpp | 2 +- include/boost/wave/cpp_exceptions.hpp | 2 +- include/boost/wave/cpp_iteration_context.hpp | 62 +- include/boost/wave/cpp_throw.hpp | 2 +- .../boost/wave/cpplexer/convert_trigraphs.hpp | 2 +- .../boost/wave/cpplexer/cpp_lex_interface.hpp | 2 +- .../cpplexer/cpp_lex_interface_generator.hpp | 2 +- .../boost/wave/cpplexer/cpp_lex_iterator.hpp | 2 +- include/boost/wave/cpplexer/cpp_lex_token.hpp | 2 +- .../wave/cpplexer/cpplexer_exceptions.hpp | 2 +- .../wave/cpplexer/detect_include_guards.hpp | 2 +- include/boost/wave/cpplexer/re2clex/aq.hpp | 2 +- .../boost/wave/cpplexer/re2clex/cpp_re.hpp | 2 +- .../wave/cpplexer/re2clex/cpp_re2c_lexer.hpp | 2 +- .../boost/wave/cpplexer/re2clex/scanner.hpp | 2 +- include/boost/wave/cpplexer/token_cache.hpp | 2 +- .../wave/cpplexer/validate_universal_char.hpp | 2 +- .../boost/wave/grammars/cpp_chlit_grammar.hpp | 2 +- .../wave/grammars/cpp_defined_grammar.hpp | 2 +- .../wave/grammars/cpp_defined_grammar_gen.hpp | 2 +- .../wave/grammars/cpp_expression_grammar.hpp | 2 +- .../grammars/cpp_expression_grammar_gen.hpp | 2 +- .../wave/grammars/cpp_expression_value.hpp | 2 +- include/boost/wave/grammars/cpp_grammar.hpp | 2 +- .../boost/wave/grammars/cpp_grammar_gen.hpp | 2 +- .../wave/grammars/cpp_intlit_grammar.hpp | 2 +- .../wave/grammars/cpp_literal_grammar_gen.hpp | 2 +- .../wave/grammars/cpp_predef_macros_gen.hpp | 2 +- .../grammars/cpp_predef_macros_grammar.hpp | 2 +- .../boost/wave/grammars/cpp_value_error.hpp | 2 +- include/boost/wave/language_support.hpp | 2 +- include/boost/wave/preprocessing_hooks.hpp | 2 +- include/boost/wave/token_ids.hpp | 2 +- include/boost/wave/util/cpp_ifblock.hpp | 2 +- include/boost/wave/util/cpp_include_paths.hpp | 2 +- include/boost/wave/util/cpp_iterator.hpp | 624 +++++----- include/boost/wave/util/cpp_macromap.hpp | 2 +- .../boost/wave/util/cpp_macromap_predef.hpp | 2 +- .../boost/wave/util/cpp_macromap_utils.hpp | 2 +- include/boost/wave/util/file_position.hpp | 2 +- .../wave/util/filesystem_compatibility.hpp | 69 +- include/boost/wave/util/functor_input.hpp | 2 +- .../wave/util/insert_whitespace_detection.hpp | 2 +- include/boost/wave/util/interpret_pragma.hpp | 2 +- include/boost/wave/util/iteration_context.hpp | 22 +- include/boost/wave/util/macro_definition.hpp | 2 +- include/boost/wave/util/macro_helpers.hpp | 2 +- include/boost/wave/util/pattern_parser.hpp | 2 +- include/boost/wave/util/symbol_table.hpp | 2 +- .../wave/util/time_conversion_helper.hpp | 2 +- .../boost/wave/util/transform_iterator.hpp | 2 +- .../boost/wave/util/unput_queue_iterator.hpp | 2 +- include/boost/wave/wave_config.hpp | 2 +- include/boost/wave/wave_config_constant.hpp | 2 +- include/boost/wave/wave_version.hpp | 6 +- include/boost/wave/whitespace_handling.hpp | 2 +- samples/cpp_tokens/cpp_tokens.cpp | 2 +- samples/cpp_tokens/cpp_tokens.hpp | 2 +- samples/cpp_tokens/cpp_tokens_config.hpp | 2 +- .../instantiate_cpp_exprgrammar.cpp | 2 +- .../cpp_tokens/instantiate_cpp_grammar.cpp | 2 +- .../cpp_tokens/instantiate_cpp_literalgrs.cpp | 2 +- .../instantiate_defined_grammar.cpp | 2 +- samples/cpp_tokens/instantiate_slex_lexer.cpp | 2 +- samples/cpp_tokens/slex/cpp_slex_lexer.hpp | 2 +- samples/cpp_tokens/slex/lexer.hpp | 2 +- samples/cpp_tokens/slex_interface.hpp | 2 +- samples/cpp_tokens/slex_iterator.hpp | 2 +- samples/cpp_tokens/slex_token.hpp | 2 +- .../custom_directives/custom_directives.cpp | 2 +- .../custom_directives/custom_directives.hpp | 2 +- .../emit_custom_line_directives.cpp | 2 +- .../emit_custom_line_directives.hpp | 2 +- samples/quick_start/quick_start.cpp | 2 +- src/cpplexer/re2clex/aq.cpp | 2 +- src/cpplexer/re2clex/cpp_re.cpp | 2 +- src/instantiate_cpp_exprgrammar.cpp | 2 +- src/instantiate_cpp_grammar.cpp | 2 +- src/instantiate_cpp_literalgrs.cpp | 2 +- src/instantiate_defined_grammar.cpp | 2 +- src/instantiate_predef_macros.cpp | 2 +- src/instantiate_re2c_lexer.cpp | 2 +- src/instantiate_re2c_lexer_str.cpp | 2 +- src/token_ids.cpp | 2 +- src/wave_config_constant.cpp | 2 +- test/testlexers/cpp_tokens.hpp | 2 +- test/testlexers/test_lexertl_lexer.cpp | 2 +- test/testlexers/test_re2c_lexer.cpp | 2 +- test/testlexers/test_slex_lexer.cpp | 2 +- test/testlexers/test_xlex_lexer.cpp | 2 +- test/testwave/cmd_line_utils.hpp | 2 +- test/testwave/collect_hooks_information.hpp | 2 +- test/testwave/testfiles/t_1_001.cpp | 2 +- test/testwave/testfiles/t_1_002.cpp | 2 +- test/testwave/testfiles/t_1_003.cpp | 2 +- test/testwave/testfiles/t_1_004.cpp | 2 +- test/testwave/testfiles/t_1_005.cpp | 2 +- test/testwave/testfiles/t_1_006.cpp | 2 +- test/testwave/testfiles/t_1_007.cpp | 2 +- test/testwave/testfiles/t_1_008.cpp | 2 +- test/testwave/testfiles/t_1_009.cpp | 2 +- test/testwave/testfiles/t_1_010.cpp | 2 +- test/testwave/testfiles/t_1_011.cpp | 2 +- test/testwave/testfiles/t_1_012.cpp | 2 +- test/testwave/testfiles/t_1_013.cpp | 2 +- test/testwave/testfiles/t_1_014.cpp | 2 +- test/testwave/testfiles/t_1_015.cpp | 2 +- test/testwave/testfiles/t_1_016.cpp | 2 +- test/testwave/testfiles/t_1_017.cpp | 2 +- test/testwave/testfiles/t_1_018.cpp | 2 +- test/testwave/testfiles/t_1_019.cpp | 2 +- test/testwave/testfiles/t_1_020.cpp | 2 +- test/testwave/testfiles/t_1_021.cpp | 2 +- test/testwave/testfiles/t_1_022.cpp | 2 +- test/testwave/testfiles/t_1_023.cpp | 2 +- test/testwave/testfiles/t_1_024.cpp | 2 +- test/testwave/testfiles/t_1_025.cpp | 2 +- test/testwave/testfiles/t_1_026.cpp | 2 +- test/testwave/testfiles/t_1_027.cpp | 2 +- test/testwave/testfiles/t_1_028.cpp | 2 +- test/testwave/testfiles/t_1_029.cpp | 2 +- test/testwave/testfiles/t_1_030.cpp | 2 +- test/testwave/testfiles/t_1_031.cpp | 2 +- test/testwave/testfiles/t_1_032.cpp | 2 +- test/testwave/testfiles/t_1_033.cpp | 2 +- test/testwave/testfiles/t_1_034.cpp | 2 +- test/testwave/testfiles/t_1_035.cpp | 2 +- test/testwave/testfiles/t_1_036.cpp | 2 +- test/testwave/testfiles/t_1_037.cpp | 2 +- test/testwave/testfiles/t_1_038.cpp | 2 +- test/testwave/testfiles/t_2_001.cpp | 2 +- test/testwave/testfiles/t_2_002.cpp | 2 +- test/testwave/testfiles/t_2_003.cpp | 2 +- test/testwave/testfiles/t_2_004.cpp | 2 +- test/testwave/testfiles/t_2_005.cpp | 2 +- test/testwave/testfiles/t_2_006.cpp | 2 +- test/testwave/testfiles/t_2_007.cpp | 2 +- test/testwave/testfiles/t_2_008.cpp | 2 +- test/testwave/testfiles/t_2_009.cpp | 2 +- test/testwave/testfiles/t_2_010.cpp | 2 +- test/testwave/testfiles/t_2_011.cpp | 2 +- test/testwave/testfiles/t_2_012.cpp | 2 +- test/testwave/testfiles/t_2_013.cpp | 2 +- test/testwave/testfiles/t_2_014.cpp | 2 +- test/testwave/testfiles/t_2_015.cpp | 2 +- test/testwave/testfiles/t_2_016.cpp | 2 +- test/testwave/testfiles/t_2_017.cpp | 2 +- test/testwave/testfiles/t_2_018.cpp | 2 +- test/testwave/testfiles/t_2_019.cpp | 2 +- test/testwave/testfiles/t_2_019_001.hpp | 2 +- test/testwave/testfiles/t_2_019_002.hpp | 2 +- test/testwave/testfiles/t_2_019_003.hpp | 2 +- test/testwave/testfiles/t_2_020.cpp | 2 +- test/testwave/testfiles/t_2_021.cpp | 2 +- test/testwave/testfiles/t_2_022.cpp | 23 + test/testwave/testfiles/t_2_022.hpp | 12 + test/testwave/testfiles/t_3_001.cpp | 2 +- test/testwave/testfiles/t_3_002.cpp | 2 +- test/testwave/testfiles/t_3_003.cpp | 2 +- test/testwave/testfiles/t_3_004.cpp | 2 +- test/testwave/testfiles/t_4_001.cpp | 2 +- test/testwave/testfiles/t_4_002.cpp | 2 +- test/testwave/testfiles/t_4_003.cpp | 2 +- test/testwave/testfiles/t_4_004.cpp | 2 +- test/testwave/testfiles/t_5_001.cpp | 2 +- test/testwave/testfiles/t_5_002.cpp | 2 +- test/testwave/testfiles/t_5_003.cpp | 2 +- test/testwave/testfiles/t_5_004.cpp | 2 +- test/testwave/testfiles/t_5_005.cpp | 2 +- test/testwave/testfiles/t_5_006.cpp | 2 +- test/testwave/testfiles/t_5_007.cpp | 2 +- test/testwave/testfiles/t_5_007.hpp | 2 +- test/testwave/testfiles/t_5_008.cpp | 2 +- test/testwave/testfiles/t_5_009.cpp | 2 +- test/testwave/testfiles/t_5_010.cpp | 2 +- test/testwave/testfiles/t_5_011.cpp | 2 +- test/testwave/testfiles/t_5_012.cpp | 2 +- test/testwave/testfiles/t_5_013.cpp | 2 +- test/testwave/testfiles/t_5_014.cpp | 2 +- test/testwave/testfiles/t_5_015.cpp | 2 +- test/testwave/testfiles/t_5_016.cpp | 2 +- test/testwave/testfiles/t_5_017.cpp | 2 +- test/testwave/testfiles/t_5_018.cpp | 2 +- test/testwave/testfiles/t_5_019.cpp | 2 +- test/testwave/testfiles/t_5_020.cpp | 2 +- test/testwave/testfiles/t_5_021.cpp | 2 +- test/testwave/testfiles/t_5_022.cpp | 2 +- test/testwave/testfiles/t_5_023.cpp | 2 +- test/testwave/testfiles/t_5_024.cpp | 2 +- test/testwave/testfiles/t_5_025.cpp | 2 +- test/testwave/testfiles/t_5_026.cpp | 2 +- test/testwave/testfiles/t_5_027.cpp | 2 +- test/testwave/testfiles/t_5_028.cpp | 2 +- test/testwave/testfiles/t_5_029.cpp | 2 +- test/testwave/testfiles/t_5_030.cpp | 2 +- test/testwave/testfiles/t_5_031.cpp | 2 +- test/testwave/testfiles/t_5_031.hpp | 2 +- test/testwave/testfiles/t_5_032.cpp | 2 +- test/testwave/testfiles/t_5_033.cpp | 2 +- test/testwave/testfiles/t_5_034.cpp | 2 +- test/testwave/testfiles/t_5_035.cpp | 2 +- test/testwave/testfiles/t_5_035.hpp | 2 +- test/testwave/testfiles/t_5_035_01.hpp | 2 +- test/testwave/testfiles/t_5_035_02.hpp | 2 +- test/testwave/testfiles/t_5_035_03.hpp | 2 +- test/testwave/testfiles/t_5_035_04.hpp | 2 +- test/testwave/testfiles/t_5_035_05.hpp | 2 +- test/testwave/testfiles/t_5_035_06.hpp | 2 +- test/testwave/testfiles/t_5_035_07.hpp | 2 +- test/testwave/testfiles/t_5_035_08.hpp | 2 +- test/testwave/testfiles/t_5_035_09.hpp | 2 +- test/testwave/testfiles/t_5_035_10.hpp | 2 +- test/testwave/testfiles/t_5_035_11.hpp | 2 +- test/testwave/testfiles/t_5_035_12.hpp | 2 +- test/testwave/testfiles/t_5_035_13.hpp | 2 +- test/testwave/testfiles/t_5_035_14.hpp | 2 +- test/testwave/testfiles/t_5_035_15.hpp | 2 +- test/testwave/testfiles/t_6_001.cpp | 2 +- test/testwave/testfiles/t_6_002.cpp | 2 +- test/testwave/testfiles/t_6_003.cpp | 2 +- test/testwave/testfiles/t_6_004.cpp | 2 +- test/testwave/testfiles/t_6_005.cpp | 2 +- test/testwave/testfiles/t_6_006.cpp | 2 +- test/testwave/testfiles/t_6_007.cpp | 2 +- test/testwave/testfiles/t_6_008.cpp | 2 +- test/testwave/testfiles/t_6_009.cpp | 2 +- test/testwave/testfiles/t_6_010.cpp | 2 +- test/testwave/testfiles/t_6_011.cpp | 2 +- test/testwave/testfiles/t_6_012.cpp | 2 +- test/testwave/testfiles/t_6_013.cpp | 2 +- test/testwave/testfiles/t_6_014.cpp | 2 +- test/testwave/testfiles/t_6_015.cpp | 2 +- test/testwave/testfiles/t_6_016.cpp | 2 +- test/testwave/testfiles/t_6_017.cpp | 2 +- test/testwave/testfiles/t_6_018.cpp | 2 +- test/testwave/testfiles/t_6_019.cpp | 2 +- test/testwave/testfiles/t_6_020.cpp | 2 +- test/testwave/testfiles/t_6_021.cpp | 2 +- test/testwave/testfiles/t_6_022.cpp | 2 +- test/testwave/testfiles/t_6_023.cpp | 2 +- test/testwave/testfiles/t_6_024.cpp | 2 +- test/testwave/testfiles/t_6_025.cpp | 2 +- test/testwave/testfiles/t_6_026.cpp | 2 +- test/testwave/testfiles/t_6_027.cpp | 2 +- test/testwave/testfiles/t_6_028.cpp | 2 +- test/testwave/testfiles/t_6_029.cpp | 2 +- test/testwave/testfiles/t_6_029.hpp | 2 +- test/testwave/testfiles/t_6_030.cpp | 2 +- test/testwave/testfiles/t_6_030.hpp | 2 +- test/testwave/testfiles/t_6_031.cpp | 2 +- test/testwave/testfiles/t_6_032.cpp | 2 +- test/testwave/testfiles/t_6_033.cpp | 2 +- test/testwave/testfiles/t_6_034.cpp | 2 +- test/testwave/testfiles/t_6_035.cpp | 2 +- test/testwave/testfiles/t_6_036.cpp | 2 +- test/testwave/testfiles/t_6_037.cpp | 2 +- test/testwave/testfiles/t_6_038.cpp | 2 +- test/testwave/testfiles/t_6_039.cpp | 2 +- test/testwave/testfiles/t_6_040.cpp | 2 +- test/testwave/testfiles/t_6_041.cpp | 2 +- test/testwave/testfiles/t_6_042.cpp | 2 +- test/testwave/testfiles/t_6_043.cpp | 2 +- test/testwave/testfiles/t_6_044.cpp | 2 +- test/testwave/testfiles/t_6_045.cpp | 2 +- test/testwave/testfiles/t_6_046.cpp | 2 +- test/testwave/testfiles/t_6_047.cpp | 2 +- test/testwave/testfiles/t_6_048.cpp | 2 +- test/testwave/testfiles/t_6_049.cpp | 2 +- test/testwave/testfiles/t_6_050.cpp | 2 +- test/testwave/testfiles/t_6_051.cpp | 2 +- test/testwave/testfiles/t_6_052.cpp | 2 +- test/testwave/testfiles/t_6_053.cpp | 2 +- test/testwave/testfiles/t_6_054.cpp | 2 +- test/testwave/testfiles/t_6_055.cpp | 2 +- test/testwave/testfiles/t_6_056.cpp | 2 +- test/testwave/testfiles/t_6_057.cpp | 2 +- test/testwave/testfiles/t_6_058.cpp | 2 +- test/testwave/testfiles/t_6_059.cpp | 2 +- test/testwave/testfiles/t_6_060.cpp | 2 +- test/testwave/testfiles/t_6_061.cpp | 2 +- test/testwave/testfiles/t_6_062.cpp | 2 +- test/testwave/testfiles/t_6_063.cpp | 2 +- test/testwave/testfiles/t_6_063.hpp | 2 +- test/testwave/testfiles/t_6_064.cpp | 2 +- test/testwave/testfiles/t_6_065.cpp | 2 +- test/testwave/testfiles/t_6_066.cpp | 2 +- test/testwave/testfiles/t_6_066.hpp | 2 +- test/testwave/testfiles/t_6_067.cpp | 2 +- test/testwave/testfiles/t_6_067.hpp | 2 +- test/testwave/testfiles/t_6_068.cpp | 2 +- test/testwave/testfiles/t_6_069.cpp | 2 +- test/testwave/testfiles/t_7_001.cpp | 2 +- test/testwave/testfiles/t_9_001.cpp | 2 +- test/testwave/testfiles/t_9_002.cpp | 2 +- test/testwave/testfiles/t_9_003.cpp | 2 +- test/testwave/testfiles/t_9_004.cpp | 2 +- test/testwave/testfiles/t_9_005.cpp | 2 +- test/testwave/testfiles/t_9_006.cpp | 2 +- test/testwave/testfiles/t_9_007.cpp | 2 +- test/testwave/testfiles/t_9_008.cpp | 2 +- test/testwave/testfiles/t_9_009.cpp | 2 +- test/testwave/testfiles/t_9_010.cpp | 2 +- test/testwave/testfiles/t_9_011.cpp | 2 +- test/testwave/testfiles/t_9_012.cpp | 2 +- test/testwave/testfiles/t_9_013.cpp | 2 +- test/testwave/testfiles/t_9_014.cpp | 2 +- test/testwave/testfiles/t_9_015.cpp | 2 +- test/testwave/testfiles/t_9_016.cpp | 2 +- test/testwave/testfiles/t_9_016.hpp | 2 +- test/testwave/testfiles/t_9_017.cpp | 2 +- test/testwave/testfiles/t_9_018.cpp | 2 +- test/testwave/testfiles/t_9_019.cpp | 2 +- test/testwave/testfiles/t_9_019.hpp | 2 +- test/testwave/testfiles/t_9_020.cpp | 2 +- test/testwave/testfiles/test.cfg | 1 + test/testwave/testwave.cpp | 110 +- test/testwave/testwave_app.cpp | 445 +++---- test/testwave/testwave_app.hpp | 63 +- test/testwave/testwave_app_dll.cpp | 2 +- test/testwave/testwave_dll.cpp | 2 +- tool/cpp.cpp | 306 ++--- tool/cpp.hpp | 2 +- tool/cpp_config.hpp | 2 +- tool/cpp_version.hpp | 6 +- tool/stop_watch.hpp | 2 +- tool/trace_macro_expansion.hpp | 2 +- 328 files changed, 1765 insertions(+), 1676 deletions(-) create mode 100644 test/testwave/testfiles/t_2_022.cpp create mode 100644 test/testwave/testfiles/t_2_022.hpp diff --git a/ChangeLog b/ChangeLog index 76d4558..b895a21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,124 +7,134 @@ LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ------------------------------------------------------------------------------- TODO (known issues): -- Fix expansion of macros, which replacement-list terminates in a partial +- Fix expansion of macros, which replacement-list terminates in a partial macro expansion. -- Fix the re2c lexer for iterators others then string::iterator (or more +- Fix the re2c lexer for iterators others then string::iterator (or more generally for iterators, which aren't random access iterators) - Try to remove the second parameter from the pp_iterator<>::force_include function. -- Fix the trigraph backslash problem in the re2c (C/C++ and IDL) scanners, if +- Fix the trigraph backslash problem in the re2c (C/C++ and IDL) scanners, if there is the end of the (internal) buffer just in between a '??/' and a '\n'. ------------------------------------------------------------------------------- CHANGELOG +Boost V1.50.0 + - V2.3.2 + - Fixed #6758: not all members are initialized by base_iteration_context + constructor. + - Fixed #6838: Adding include file with force_include makes Wave fail to emit + #line directive + - Added support for test of --forceinclude option to testwave executable, + added test case verifying #6838 is fixed. + - Fixed #6870: build wave driver failed + Boost V1.48.0 - V2.3.1 - Added the flag support_option_emit_contnewlines allowing to control whether backslash newline sequences are emitted by the Wave library. The default is - as before: these tokens will be silently ignored (after the token positions + as before: these tokens will be silently ignored (after the token positions have been properly updated). Note: this option is supported by the SLex lexer module only. - Fixed #5887: flex_string.hpp needs to include Boost V1.47.0 - V2.3.0 -- After preprocessing the body of any #pragma wave option() the wave tool now +- After preprocessing the body of any #pragma wave option() the wave tool now concatenates all adjacent string literals into a single string literal. -- Fixed whitespace handling, added a corresponding set of test cases +- Fixed whitespace handling, added a corresponding set of test cases (t_9_020.cpp) - Added a new preprocessing hook: locate_include_file allowing to customize the way include files are located. -- Added new command line option --noexpand/-N to the Wave driver allowing to - suppress macro expansion for a given macro name (works for both, object like - and function like macros). This option has to be used very carefully as it +- Added new command line option --noexpand/-N to the Wave driver allowing to + suppress macro expansion for a given macro name (works for both, object like + and function like macros). This option has to be used very carefully as it not only leaves the whole macro invocation untouched in the generated output - but also removes this macro from consideration for Wave itself. This can - cause unexpected results if the suppressed macro would influence #ifdef's + but also removes this macro from consideration for Wave itself. This can + cause unexpected results if the suppressed macro would influence #ifdef's later on. -- Fixed problem #5554: wave slex parser eof without eol skips the last line. +- Fixed Wave driver to retain all macros defined on the command line in interactive mode. - Fixed #5569: slex CONTLINE token works only for LF line endings Boost V1.46.0 - V2.2.0 - Added recognition of C++0x keywords to Re2C lexers. -- Added --c++0x command line option to Wave to enabling the recognition of +- Added --c++0x command line option to Wave to enabling the recognition of C++0x keywords, converting those to C++0x tokens. -- Adapted all of the library to play well with Boost.Filesystem V3 (which is +- Adapted all of the library to play well with Boost.Filesystem V3 (which is the default from now on). - Added support for extended character and string literals, added test case (which required to add C++0x support to the test application). -- Added proper predefined macros fro --c++0x mode. __cplusplus is currently +- Added proper predefined macros fro --c++0x mode. __cplusplus is currently defined to 201101L, but this will change when the Standard is finalized. -- Fixed a problem with object like macros, which when being adjacent to a +- Fixed a problem with object like macros, which when being adjacent to a parenthesis, caused the parenthesis to disappear when the macro expansion was suppressed by the expanding_object_like_macro() hook function. -- Fixed a bug in pragma option(preserve), missing to set to preserve=1 if +- Fixed a bug in pragma option(preserve), missing to set to preserve=1 if after the previous value was preserve=2. -- Changed the --preserve option of the wave tool to interprete the integer - argument in a slightly different way: - 0: no whitespace is preserved, - 1: only begin of line whitespace is preserved, - 2: only begin of line whitespace and comments are preserved, +- Changed the --preserve option of the wave tool to interprete the integer + argument in a slightly different way: + 0: no whitespace is preserved, + 1: only begin of line whitespace is preserved, + 2: only begin of line whitespace and comments are preserved, 3: all whitespace is preserved - The #pragma wave option(preserve) now supports these arguments: + The #pragma wave option(preserve) now supports these arguments: [0|1|2|3|push|pop]. Boost V1.45.0 - V2.1.0 -- Token pasting is well formed only as long as the formed token(s) are - pp_tokens as defined by the C++0x Standard. Until now, Wave allowed for - non-pp_tokens to be formed in --variadics mode. -- Fixed a problem, which prevented reporting /##/ in a macro definition as +- Token pasting is well formed only as long as the formed token(s) are + pp_tokens as defined by the C++0x Standard. Until now, Wave allowed for + non-pp_tokens to be formed in --variadics mode. +- Fixed a problem, which prevented reporting /##/ in a macro definition as invalid token pasting. - Fixed problem preventing the skipped_token hook to be called for 'inactive' conditional preprocessing directive tokens. Improved overall consistency in reporting skipped tokens to the hooks function when processing conditional preprocessing directives. Added a new test case verifying the skipped_token hook gets called reproducibly (t_2_020.cpp). -- Fixed a problem with the pp hooks 'expanding_object_like_macro' and +- Fixed a problem with the pp hooks 'expanding_object_like_macro' and 'expanding_function_like_macro', which when returning true were stopping all preprocessing instead of just inhibiting the expansion of the macro. -- Fixed a duplicated call to the pp hook skipped_token for preprocessing +- Fixed a duplicated call to the pp hook skipped_token for preprocessing directives inside inactive conditional branches. - Changing exception handling to fix clang++ regression errors. - Replaced assert() with BOOST_ASSERT to pacify the Boost inspect tool. Boost V1.44.0 - V2.0.6 -- Added information about the file type to iteration context. This can be - either main_file, system_header, or user_header depending whether the handled - file is the main file to preprocess, a include file opened from `#include <>`, - or a include file opened from `#include ""`. -- Added support for new Boost visibility macros. Properly exported all +- Added information about the file type to iteration context. This can be + either main_file, system_header, or user_header depending whether the handled + file is the main file to preprocess, a include file opened from `#include <>`, + or a include file opened from `#include ""`. +- Added support for new Boost visibility macros. Properly exported all exceptions, etc. Boost V1.43.0 - V2.0.5 - Fixed the wave driver application to strip leading and trailing whitespace from macro names specified on the command line using -U. -- Fixed line number counting for lines containing nothing but whitespace +- Fixed line number counting for lines containing nothing but whitespace followed by a C++ comment if the next line is a pp directive. - Fixed emitting of a #line directive after returned from an include file. -- A couple of fixes allowing to properly report the current line number in +- A couple of fixes allowing to properly report the current line number in #line directives for different whitespace preserve modes (see --preserve/-p). -- Added new preprocessing hook: emit_line_directive, allowing to customize the +- Added new preprocessing hook: emit_line_directive, allowing to customize the format of the generated #line directive. -- Changed --line/-l command line option of the wave driver application to - accept 0, 1, and 2 as options. The option values 0 and 1 behave as before +- Changed --line/-l command line option of the wave driver application to + accept 0, 1, and 2 as options. The option values 0 and 1 behave as before (disable/enable the generation of #line directives), while the option value 2 will generate the #line directive using the relative filename (instead of the absolute filename emitted from option 1). The default option is value 1. -- Added new example: emit_custom_line_directives, demonstrating the use of the +- Added new example: emit_custom_line_directives, demonstrating the use of the new preprocessing hook. -- Added new preprocessing hook: found_unknown_directive, which is being invoked - whenever an unknown preprocessor directive (i.e. '#' followed by some - identifier) is detected. It allows to interpret the directive and to provide +- Added new preprocessing hook: found_unknown_directive, which is being invoked + whenever an unknown preprocessor directive (i.e. '#' followed by some + identifier) is detected. It allows to interpret the directive and to provide some replacement text. -- Added new example: custom_directives demonstrating the usage of the new +- Added new example: custom_directives demonstrating the usage of the new preprocessing hook. - Fixed #4113: cpp_lexer does not handle qualified backslashes correctly. - Fixed #3106: wave on VS2010 beta compiler generates error. @@ -136,31 +146,31 @@ Boost V1.42.0 Boost V1.41.0 - V2.0.3 - Switched to Re2C V0.13.5 -- Fixed --list_includes/-l command line option of the wave driver tool to +- Fixed --list_includes/-l command line option of the wave driver tool to correctly indent the generated list of included files. - Finally fixed all remaining examples. Everything seems to work fine now. - Specifying a custom token type now works as expected. The new lexer interface introduced in V2.0 broke this part. -- Removed old code related to pre Boost V1.31 (related to V1 of iterator +- Removed old code related to pre Boost V1.31 (related to V1 of iterator library). - Added a new commandline option --macrocounts/-c to the Wave driver application - which lists all macro invocation counts to an optionally specified file + which lists all macro invocation counts to an optionally specified file (default is cout). - Fixed compilation problems caused by recent changes to the multi_pass iterator from Spirit V2.1. -- Added the new preprocessing hooks detected_pragma_once() and - detected_include_guard() which are getting called whenever either a #pragma - once has been detected or if the include guard heuristics detected an +- Added the new preprocessing hooks detected_pragma_once() and + detected_include_guard() which are getting called whenever either a #pragma + once has been detected or if the include guard heuristics detected an include guard for a particular include file. -- Added a new command line option to the wave driver tool: --listguards/-g - allowing to trace all include files which are either contain a #pragma once +- Added a new command line option to the wave driver tool: --listguards/-g + allowing to trace all include files which are either contain a #pragma once or contain include guards. -- Started to elminate g++ struct aliasing warnings (more to fix, mostly in +- Started to elminate g++ struct aliasing warnings (more to fix, mostly in flex_string). Boost V1.40.0 - V2.0.2 -- Fixed a long standing race condition inhibiting to use Wave in multi threaded +- Fixed a long standing race condition inhibiting to use Wave in multi threaded environments. - Incorporated the changes from latest version of the flex_string class (#2946). - Fixed another race condition triggering problems using Wave in multi-threaded @@ -168,41 +178,41 @@ Boost V1.40.0 Boost V1.39.0 - V2.0.1 -- Fixed Wave to compile with BOOST_FILESYSTEM_NO_DEPRECATED defined (i.e. the +- Fixed Wave to compile with BOOST_FILESYSTEM_NO_DEPRECATED defined (i.e. the library doesn't use the deprecated filesystem interface anymore). Boost V1.37.0 -- Updated examples to reflect the recent changes in the used multi_pass +- Updated examples to reflect the recent changes in the used multi_pass iterator. -- Fixed documentation links still pointing to the old Boost CVS (thanks to +- Fixed documentation links still pointing to the old Boost CVS (thanks to Jürgen Hunold for providing the patch). Boost V1.36.0 -- Wave Version 2.0 is a new major release introducing some breaking API changes, - preventing it to be used with Boost versions earlier than V1.36.0. The API - and hook interface have been streamlined for more consistency. See the +- Wave Version 2.0 is a new major release introducing some breaking API changes, + preventing it to be used with Boost versions earlier than V1.36.0. The API + and hook interface have been streamlined for more consistency. See the documentation for more details. -- Added an additional template parameter to the context object, allowing to +- Added an additional template parameter to the context object, allowing to specify any possibly derived type. This change propagates to the preprocessing - hooks, which now get passed the most derived context type as its first + hooks, which now get passed the most derived context type as its first argument allowing to access protected members in the original context type. This fixes ticket #1752. -- Fixed a problem during parsing of #pragma wave directive, where the value +- Fixed a problem during parsing of #pragma wave directive, where the value sequence contained a closing parenthesis. This caused a premature end of the pragma value parsing. -- Fixed handling of support_option_single_line, which was ignored under certain +- Fixed handling of support_option_single_line, which was ignored under certain circumstances. -- Fixed ticket #1766: Wrong evaluation of conditional preprocessor directives - with predefined macros __FILE__, __LINE__ and __INCLUDE_LEVEL__. This bug - triggered an error in constructs like #ifndef __FILE__. Thanks to Daniel +- Fixed ticket #1766: Wrong evaluation of conditional preprocessor directives + with predefined macros __FILE__, __LINE__ and __INCLUDE_LEVEL__. This bug + triggered an error in constructs like #ifndef __FILE__. Thanks to Daniel Wadehn for reporting and supplying a patch. Added corresponding regression test: t_2_018.cpp. - Fixed a bug which reported a valid macro redefinition as invalid if the macro replacement text referred to a second or higher parameter of this macro. -- Fixed a problem in the wave tool to allow two errors to occur while +- Fixed a problem in the wave tool to allow two errors to occur while preprocessing two consecutive tokens. -- Adjusted Spirit header includes to point to conform to the new directory +- Adjusted Spirit header includes to point to conform to the new directory structure, removed support for Spirit versions earlier than V1.7. - Started to migrate to new multi_pass iterators from Spirit V2.0. @@ -211,75 +221,75 @@ Boost V1.35.0 - Changed the return value of the 'evaluated_conditional_expression()' pp hook to 'bool' allowing to force Wave to re-evaluate the current conditional expression. This was suggested by Felipe Magno de Almeida. -- Added a wave::context object as first parameter to all pp hook functions. - This is an interface compatibility breaking change. The new pp-hooks can be - disabled by defining the BOOST_WAVE_USE_DEPRECIATED_PREPROCESSING_HOOKS - compile time constant to something not equal to zero. By default this +- Added a wave::context object as first parameter to all pp hook functions. + This is an interface compatibility breaking change. The new pp-hooks can be + disabled by defining the BOOST_WAVE_USE_DEPRECIATED_PREPROCESSING_HOOKS + compile time constant to something not equal to zero. By default this constant will be defined to zero for Boost V1.35.0 and newer, switching to the new interface by default. - Added optional support for the import keyword (needed for the C++ module - proposal). The identifier import will be recognized as a keyword, if - the compile time constant BOOST_WAVE_SUPPORT_IMPORT_KEYWORD is defined to + proposal). The identifier import will be recognized as a keyword, if + the compile time constant BOOST_WAVE_SUPPORT_IMPORT_KEYWORD is defined to something not equal zero. -- Added new preprocessing hook functions: found_error_directive() and +- Added new preprocessing hook functions: found_error_directive() and found_warning_directive() to be called when #error/#warning directives are encountered. This was suggested by Andreas Sæbjørnsen. - Added a new sample to Wave: hannibal, a partial C++ parser implementation initially written by Danny Havenith (http://havenith-verlinden.nl/hannibal/) who agreed to add this here. Thanks! -- Added new preprocessing hook function: found_line_directive() to be called +- Added new preprocessing hook function: found_line_directive() to be called when a #line directive is encountered. This was suggested by Andreas Sæbjørnsen. - Improved command line handling for the wave applet. -- Incorporated latest bug fixes for the Hannibal sample provided by Danny - Havenith. -- Added loading of a wave.cfg file from anywhere up the filesystem hierarchy - starting from the main input file for the wave driver applet up to the +- Incorporated latest bug fixes for the Hannibal sample provided by Danny + Havenith. +- Added loading of a wave.cfg file from anywhere up the filesystem hierarchy + starting from the main input file for the wave driver applet up to the root of the file system. - Added support_option_emit_pragma_directive to allow to control at runtime, - whether unknown #pragma directives should be emitted or not. To maintain + whether unknown #pragma directives should be emitted or not. To maintain compatibility with earlier versions this option is by default on if the - compile time constant BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES was defined to + compile time constant BOOST_WAVE_EMIT_PRAGMA_DIRECTIVES was defined to be not equal to zero and it is off otherwise. - Enabled XML serialization support. -- Added the throw_exception preprocessing hook, which gets called for every +- Added the throw_exception preprocessing hook, which gets called for every occurring error (whenever an exception would have been thrown). The default - of this new hook function is to throw the corresponding exception, which + of this new hook function is to throw the corresponding exception, which reproduces the old behavior. - Implemented a new preprocessing hook: generated_token(), which get's called whenever a token is about to be returned form the library. This function may - be used to alter the token before it gets returned to the calling + be used to alter the token before it gets returned to the calling application. - Added a new sample 'real_positions' demonstrating the new generated_token() - preprocessing hook and showing how to use Wave with a new token type without + preprocessing hook and showing how to use Wave with a new token type without using a new lexer type. -- Factored out the pure lex_input_interface to simplify writing different lexer +- Factored out the pure lex_input_interface to simplify writing different lexer types for Wave. -- Added the token_statistics sample showing how to use Xpressive to build a +- Added the token_statistics sample showing how to use Xpressive to build a lexer for Wave. -- Changed the list_includes sample to use a lexer which is based on the lexertl +- Changed the list_includes sample to use a lexer which is based on the lexertl library written by Ben Hanson (http://www.benhanson.net/lexertl.html). -- Added a new support_option: insert_whitespace, allowing to switch off +- Added a new support_option: insert_whitespace, allowing to switch off whitespace insertion which is normally (by default) in place to disambiugate C++ tokens, which would otherwise form different tokens in the output. - Added a new commandline option to the Wave applet: --disambiguate, allowing - to control whitespace insertion. The default value for this option is + to control whitespace insertion. The default value for this option is --disambiguate=1, resembling the previous behaviour. Specifying the option --disambiguate=0 allows to suppress whitespace insertion alltogether. -- Added pragma option values push and pop to the line, preserve and output +- Added pragma option values push and pop to the line, preserve and output options allowing to store and restore the current option. The syntax is: #pragma wave options(