|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r63798 - in branches/release: . boost boost/algorithm/string boost/archive boost/bimap boost/config boost/detail boost/filesystem boost/functional/hash boost/fusion boost/gil boost/graph boost/integer boost/interprocess boost/intrusive boost/io boost/iostreams boost/math boost/msm boost/numeric/ublas boost/program_options boost/property_tree boost/python boost/range boost/regex boost/serialization boost/signals boost/signals2 boost/spirit boost/spirit/home boost/spirit/home/karma boost/spirit/home/karma/binary boost/spirit/home/karma/operator boost/spirit/home/lex/lexer/lexertl boost/spirit/home/qi/nonterminal boost/spirit/home/support boost/spirit/include boost/statechart boost/system boost/thread boost/tr1 boost/type_traits boost/unordered boost/utility boost/uuid boost/variant boost/wave doc libs libs/array/doc libs/array/test libs/bimap libs/config libs/config/test libs/filesystem libs/functional/hash libs/fusion libs/graph_parallel libs/integer libs/interprocess libs/intrusive libs/iostreams libs/math libs/mpl/doc/refmanual libs/mpl/doc/src/refmanual libs/msm libs/numeric/ublas libs/numeric/ublas/doc libs/program_options libs/property_tree libs/python libs/python/doc/v2 libs/range libs/range/doc libs/regex libs/serialization libs/serialization/test libs/signals libs/signals2 libs/spirit libs/spirit/classic/example libs/spirit/doc libs/spirit/doc/karma libs/spirit/doc/lex libs/spirit/example libs/spirit/example/karma libs/spirit/example/lex libs/spirit/example/qi libs/spirit/example/qi/calc6 libs/spirit/example/qi/calc7 libs/spirit/example/qi/mini_c libs/spirit/example/scheme/example/scheme libs/spirit/example/scheme/example/sexpr libs/spirit/example/scheme/input libs/spirit/example/scheme/output libs/spirit/example/scheme/qi libs/spirit/example/scheme/test/qi libs/spirit/phoenix libs/spirit/test libs/spirit/test/qi libs/statechart libs/static_assert libs/system libs/thread libs/timer libs/tr1 libs/type_traits libs/unordered libs/utility libs/utility/swap/test libs/uuid libs/wave more more/getting_started status tools tools/bcp tools/boostbook tools/build/v2 tools/build/v2/tools tools/inspect tools/jam tools/quickbook tools/regression tools/release tools/wave
From: hartmut.kaiser_at_[hidden]
Date: 2010-07-09 17:47:00
Author: hkaiser
Date: 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
New Revision: 63798
URL: http://svn.boost.org/trac/boost/changeset/63798
Log:
Spirit: merging from trunk
Added:
branches/release/boost/spirit/include/support_attributes_fwd.hpp
- copied unchanged from r63681, /trunk/boost/spirit/include/support_attributes_fwd.hpp
branches/release/libs/spirit/example/Jamfile
- copied unchanged from r63693, /trunk/libs/spirit/example/Jamfile
Properties modified:
branches/release/ (props changed)
branches/release/INSTALL (props changed)
branches/release/Jamroot (props changed)
branches/release/LICENSE_1_0.txt (props changed)
branches/release/boost/ (props changed)
branches/release/boost-build.jam (props changed)
branches/release/boost.css (props changed)
branches/release/boost.png (props changed)
branches/release/boost/algorithm/string/ (props changed)
branches/release/boost/archive/ (props changed)
branches/release/boost/array.hpp (props changed)
branches/release/boost/bimap/ (props changed)
branches/release/boost/config/ (props changed)
branches/release/boost/config.hpp (props changed)
branches/release/boost/detail/ (props changed)
branches/release/boost/detail/endian.hpp (props changed)
branches/release/boost/filesystem/ (props changed)
branches/release/boost/filesystem.hpp (props changed)
branches/release/boost/functional/hash/ (props changed)
branches/release/boost/fusion/ (props changed)
branches/release/boost/gil/ (props changed)
branches/release/boost/graph/ (props changed)
branches/release/boost/integer/ (props changed)
branches/release/boost/interprocess/ (props changed)
branches/release/boost/intrusive/ (props changed)
branches/release/boost/io/ (props changed)
branches/release/boost/iostreams/ (props changed)
branches/release/boost/math/ (props changed)
branches/release/boost/math_fwd.hpp (props changed)
branches/release/boost/msm/ (props changed)
branches/release/boost/numeric/ublas/ (props changed)
branches/release/boost/numeric/ublas/functional.hpp (props changed)
branches/release/boost/program_options/ (props changed)
branches/release/boost/property_tree/ (props changed)
branches/release/boost/python/ (props changed)
branches/release/boost/range/ (props changed)
branches/release/boost/regex/ (props changed)
branches/release/boost/serialization/ (props changed)
branches/release/boost/signals/ (props changed)
branches/release/boost/signals2/ (props changed)
branches/release/boost/spirit/ (props changed)
branches/release/boost/spirit/home/ (props changed)
branches/release/boost/spirit/home/karma/ (props changed)
branches/release/boost/spirit/home/support/attributes.hpp (contents, props changed)
branches/release/boost/statechart/ (props changed)
branches/release/boost/system/ (props changed)
branches/release/boost/thread/ (props changed)
branches/release/boost/thread.hpp (props changed)
branches/release/boost/tr1/ (props changed)
branches/release/boost/type_traits/ (props changed)
branches/release/boost/unordered/ (props changed)
branches/release/boost/utility/ (props changed)
branches/release/boost/utility/value_init.hpp (props changed)
branches/release/boost/uuid/ (props changed)
branches/release/boost/variant/ (props changed)
branches/release/boost/version.hpp (props changed)
branches/release/boost/wave/ (props changed)
branches/release/bootstrap.bat (props changed)
branches/release/bootstrap.sh (props changed)
branches/release/doc/ (props changed)
branches/release/index.htm (props changed)
branches/release/index.html (props changed)
branches/release/libs/ (props changed)
branches/release/libs/array/doc/array.xml (props changed)
branches/release/libs/array/test/array0.cpp (props changed)
branches/release/libs/array/test/array2.cpp (props changed)
branches/release/libs/bimap/ (props changed)
branches/release/libs/config/ (props changed)
branches/release/libs/config/test/boost_no_com_value_init.ipp (props changed)
branches/release/libs/filesystem/ (props changed)
branches/release/libs/functional/hash/ (props changed)
branches/release/libs/fusion/ (props changed)
branches/release/libs/graph_parallel/ (props changed)
branches/release/libs/integer/ (props changed)
branches/release/libs/interprocess/ (props changed)
branches/release/libs/intrusive/ (props changed)
branches/release/libs/iostreams/ (props changed)
branches/release/libs/libraries.htm (props changed)
branches/release/libs/maintainers.txt (props changed)
branches/release/libs/math/ (props changed)
branches/release/libs/mpl/doc/refmanual/broken-compiler-workarounds.html (props changed)
branches/release/libs/mpl/doc/refmanual/categorized-index-concepts.html (props changed)
branches/release/libs/mpl/doc/refmanual/cfg-no-preprocessed-headers.html (props changed)
branches/release/libs/mpl/doc/refmanual/composition-and-argument-binding.html (props changed)
branches/release/libs/mpl/doc/refmanual/data-types-concepts.html (props changed)
branches/release/libs/mpl/doc/refmanual/data-types-miscellaneous.html (props changed)
branches/release/libs/mpl/doc/refmanual/extensible-associative-sequence.html (props changed)
branches/release/libs/mpl/doc/refmanual/inserter-class.html (props changed)
branches/release/libs/mpl/doc/refmanual/tag-dispatched-metafunction.html (props changed)
branches/release/libs/mpl/doc/refmanual/trivial-metafunctions-summary.html (props changed)
branches/release/libs/mpl/doc/src/refmanual/Iterators-Iterator.rst (props changed)
branches/release/libs/msm/ (props changed)
branches/release/libs/numeric/ublas/ (props changed)
branches/release/libs/numeric/ublas/doc/ (props changed)
branches/release/libs/program_options/ (props changed)
branches/release/libs/property_tree/ (props changed)
branches/release/libs/python/ (props changed)
branches/release/libs/python/doc/v2/args.html (props changed)
branches/release/libs/python/doc/v2/return_internal_reference.html (props changed)
branches/release/libs/range/ (props changed)
branches/release/libs/range/doc/ (props changed)
branches/release/libs/regex/ (props changed)
branches/release/libs/serialization/ (props changed)
branches/release/libs/serialization/test/ (props changed)
branches/release/libs/serialization/test/A.cpp (props changed)
branches/release/libs/serialization/test/A.hpp (props changed)
branches/release/libs/serialization/test/A.ipp (props changed)
branches/release/libs/serialization/test/B.hpp (props changed)
branches/release/libs/serialization/test/C.hpp (props changed)
branches/release/libs/serialization/test/D.hpp (props changed)
branches/release/libs/serialization/test/J.hpp (props changed)
branches/release/libs/serialization/test/Jamfile.v2 (props changed)
branches/release/libs/serialization/test/base.hpp (props changed)
branches/release/libs/serialization/test/binary_archive.hpp (props changed)
branches/release/libs/serialization/test/binary_warchive.hpp (props changed)
branches/release/libs/serialization/test/derived2.hpp (props changed)
branches/release/libs/serialization/test/dll_a.cpp (props changed)
branches/release/libs/serialization/test/dll_base.cpp (props changed)
branches/release/libs/serialization/test/dll_derived2.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_array_binary_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_base.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_base.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_binary_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived1.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived1.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived2.cpp (props changed)
branches/release/libs/serialization/test/polymorphic_derived2.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_text_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_text_warchive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_xml_archive.hpp (props changed)
branches/release/libs/serialization/test/polymorphic_xml_warchive.hpp (props changed)
branches/release/libs/serialization/test/portable_binary_archive.hpp (props changed)
branches/release/libs/serialization/test/test_array.cpp (props changed)
branches/release/libs/serialization/test/test_binary.cpp (props changed)
branches/release/libs/serialization/test/test_bitset.cpp (props changed)
branches/release/libs/serialization/test/test_check.cpp (props changed)
branches/release/libs/serialization/test/test_class_info_load.cpp (props changed)
branches/release/libs/serialization/test/test_class_info_save.cpp (props changed)
branches/release/libs/serialization/test/test_codecvt_null.cpp (props changed)
branches/release/libs/serialization/test/test_complex.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail1.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail1_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail2.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail2_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail3.cpp (props changed)
branches/release/libs/serialization/test/test_const_load_fail3_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_pass.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn1.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn1_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn2.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn2_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn3.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn3_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn4.cpp (props changed)
branches/release/libs/serialization/test/test_const_save_warn4_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_contained_class.cpp (props changed)
branches/release/libs/serialization/test/test_cyclic_ptrs.cpp (props changed)
branches/release/libs/serialization/test/test_decl.hpp (props changed)
branches/release/libs/serialization/test/test_delete_pointer.cpp (props changed)
branches/release/libs/serialization/test/test_deque.cpp (props changed)
branches/release/libs/serialization/test/test_derived.cpp (props changed)
branches/release/libs/serialization/test/test_derived_class.cpp (props changed)
branches/release/libs/serialization/test/test_derived_class_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_diamond.cpp (props changed)
branches/release/libs/serialization/test/test_dll_exported.cpp (props changed)
branches/release/libs/serialization/test/test_dll_plugin.cpp (props changed)
branches/release/libs/serialization/test/test_dll_simple.cpp (props changed)
branches/release/libs/serialization/test/test_exported.cpp (props changed)
branches/release/libs/serialization/test/test_inclusion.cpp (props changed)
branches/release/libs/serialization/test/test_iterators.cpp (props changed)
branches/release/libs/serialization/test/test_iterators_base64.cpp (props changed)
branches/release/libs/serialization/test/test_list.cpp (props changed)
branches/release/libs/serialization/test/test_list_ptrs.cpp (props changed)
branches/release/libs/serialization/test/test_map.cpp (props changed)
branches/release/libs/serialization/test/test_mi.cpp (props changed)
branches/release/libs/serialization/test/test_mult_archive_types.cpp (props changed)
branches/release/libs/serialization/test/test_multiple_inheritance.cpp (props changed)
branches/release/libs/serialization/test/test_multiple_ptrs.cpp (props changed)
branches/release/libs/serialization/test/test_new_operator.cpp (props changed)
branches/release/libs/serialization/test/test_no_rtti.cpp (props changed)
branches/release/libs/serialization/test/test_non_default_ctor.cpp (props changed)
branches/release/libs/serialization/test/test_non_default_ctor2.cpp (props changed)
branches/release/libs/serialization/test/test_non_intrusive.cpp (props changed)
branches/release/libs/serialization/test/test_not_serializable.cpp (props changed)
branches/release/libs/serialization/test/test_null_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_nvp.cpp (props changed)
branches/release/libs/serialization/test/test_object.cpp (props changed)
branches/release/libs/serialization/test/test_optional.cpp (props changed)
branches/release/libs/serialization/test/test_pimpl.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic2.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic2.hpp (props changed)
branches/release/libs/serialization/test/test_polymorphic2imp.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic_A.cpp (props changed)
branches/release/libs/serialization/test/test_polymorphic_A.hpp (props changed)
branches/release/libs/serialization/test/test_primitive.cpp (props changed)
branches/release/libs/serialization/test/test_private_base.cpp (props changed)
branches/release/libs/serialization/test/test_private_ctor.cpp (props changed)
branches/release/libs/serialization/test/test_recursion.cpp (props changed)
branches/release/libs/serialization/test/test_registered.cpp (props changed)
branches/release/libs/serialization/test/test_reset_object_address.cpp (props changed)
branches/release/libs/serialization/test/test_set.cpp (props changed)
branches/release/libs/serialization/test/test_shared_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_shared_ptr_132.cpp (props changed)
branches/release/libs/serialization/test/test_shared_ptr_multi_base.cpp (props changed)
branches/release/libs/serialization/test/test_simple_class.cpp (props changed)
branches/release/libs/serialization/test/test_simple_class_ptr.cpp (props changed)
branches/release/libs/serialization/test/test_singleton.cpp (props changed)
branches/release/libs/serialization/test/test_smart_cast.cpp (props changed)
branches/release/libs/serialization/test/test_split.cpp (props changed)
branches/release/libs/serialization/test/test_static_warning.cpp (props changed)
branches/release/libs/serialization/test/test_tools.hpp (props changed)
branches/release/libs/serialization/test/test_tracking.cpp (props changed)
branches/release/libs/serialization/test/test_traits_fail.cpp (props changed)
branches/release/libs/serialization/test/test_traits_pass.cpp (props changed)
branches/release/libs/serialization/test/test_unregistered.cpp (props changed)
branches/release/libs/serialization/test/test_utf8_codecvt.cpp (props changed)
branches/release/libs/serialization/test/test_valarray.cpp (props changed)
branches/release/libs/serialization/test/test_variant.cpp (props changed)
branches/release/libs/serialization/test/test_vector.cpp (props changed)
branches/release/libs/serialization/test/test_void_cast.cpp (props changed)
branches/release/libs/serialization/test/text_archive.hpp (props changed)
branches/release/libs/serialization/test/text_warchive.hpp (props changed)
branches/release/libs/serialization/test/xml_archive.hpp (props changed)
branches/release/libs/serialization/test/xml_warchive.hpp (props changed)
branches/release/libs/signals/ (props changed)
branches/release/libs/signals2/ (props changed)
branches/release/libs/spirit/ (props changed)
branches/release/libs/spirit/classic/example/ (props changed)
branches/release/libs/spirit/doc/ (props changed)
branches/release/libs/spirit/example/ (props changed)
branches/release/libs/spirit/phoenix/ (props changed)
branches/release/libs/spirit/test/ (props changed)
branches/release/libs/spirit/test/qi/optional.cpp (props changed)
branches/release/libs/statechart/ (props changed)
branches/release/libs/static_assert/ (props changed)
branches/release/libs/system/ (props changed)
branches/release/libs/thread/ (props changed)
branches/release/libs/timer/ (props changed)
branches/release/libs/tr1/ (props changed)
branches/release/libs/type_traits/ (props changed)
branches/release/libs/unordered/ (props changed)
branches/release/libs/utility/ (props changed)
branches/release/libs/utility/swap.html (props changed)
branches/release/libs/utility/swap/test/std_bitset.cpp (props changed)
branches/release/libs/utility/value_init.htm (props changed)
branches/release/libs/utility/value_init_test.cpp (props changed)
branches/release/libs/uuid/ (props changed)
branches/release/libs/wave/ (props changed)
branches/release/more/ (props changed)
branches/release/more/getting_started/ (props changed)
branches/release/rst.css (props changed)
branches/release/status/ (props changed)
branches/release/status/Jamfile.v2 (props changed)
branches/release/tools/ (props changed)
branches/release/tools/bcp/ (props changed)
branches/release/tools/boostbook/ (props changed)
branches/release/tools/build/v2/ (props changed)
branches/release/tools/build/v2/tools/ (props changed)
branches/release/tools/inspect/ (props changed)
branches/release/tools/jam/ (props changed)
branches/release/tools/quickbook/ (props changed)
branches/release/tools/regression/ (props changed)
branches/release/tools/release/ (props changed)
branches/release/tools/wave/ (props changed)
Text files modified:
branches/release/boost/spirit/home/karma/binary/padding.hpp | 2
branches/release/boost/spirit/home/karma/operator/sequence.hpp | 7 +
branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp | 17 ++++
branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp | 53 --------------
branches/release/boost/spirit/home/support/attributes.hpp | 140 +++++++++++++++++++++++++++++----------
branches/release/boost/spirit/home/support/attributes_fwd.hpp | 28 ++++++++
branches/release/boost/spirit/home/support/meta_compiler.hpp | 4
branches/release/boost/spirit/include/version.hpp | 2
branches/release/libs/spirit/doc/karma/directive.qbk | 2
branches/release/libs/spirit/doc/lex/quick_reference.qbk | 2
branches/release/libs/spirit/doc/what_s_new.qbk | 17 ++++
branches/release/libs/spirit/example/karma/Jamfile | 6 +
branches/release/libs/spirit/example/karma/calc2_ast.hpp | 23 ++++--
branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp | 23 ++++-
branches/release/libs/spirit/example/karma/complex_number_easier.cpp | 2
branches/release/libs/spirit/example/karma/num_list3.cpp | 4
branches/release/libs/spirit/example/karma/simple_columns_directive.hpp | 2
branches/release/libs/spirit/example/lex/Jamfile | 8 ++
branches/release/libs/spirit/example/qi/Jamfile | 4
branches/release/libs/spirit/example/qi/adapt_template_struct.cpp | 2
branches/release/libs/spirit/example/qi/boost_array.cpp | 19 ++--
branches/release/libs/spirit/example/qi/calc6/calc6c.hpp | 9 +
branches/release/libs/spirit/example/qi/calc7/calc7c.hpp | 7 +
branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp | 10 +-
branches/release/libs/spirit/example/qi/parse_date.cpp | 2
branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp | 8 +
branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp | 2
branches/release/libs/spirit/example/scheme/input/sexpr.hpp | 2
branches/release/libs/spirit/example/scheme/output/sexpr.hpp | 2
branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp | 2
branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp | 6
branches/release/libs/spirit/test/qi/symbols.cpp | 26 +++---
32 files changed, 285 insertions(+), 158 deletions(-)
Modified: branches/release/boost/spirit/home/karma/binary/padding.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/binary/padding.hpp (original)
+++ branches/release/boost/spirit/home/karma/binary/padding.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -75,7 +75,7 @@
bool result = true;
while (result && count-- != 0)
- result = detail::generate_to(sink, 0);
+ result = detail::generate_to(sink, '\0');
if (result)
result = karma::delimit_out(sink, d); // always do post-delimiting
Modified: branches/release/boost/spirit/home/karma/operator/sequence.hpp
==============================================================================
--- branches/release/boost/spirit/home/karma/operator/sequence.hpp (original)
+++ branches/release/boost/spirit/home/karma/operator/sequence.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -29,6 +29,8 @@
#include <boost/type_traits/is_same.hpp>
#include <boost/mpl/bitor.hpp>
#include <boost/mpl/int.hpp>
+#include <boost/mpl/and.hpp>
+#include <boost/mpl/not.hpp>
#include <boost/fusion/include/transform.hpp>
#include <boost/mpl/accumulate.hpp>
@@ -98,7 +100,10 @@
template <typename Attribute>
inline typename enable_if<
- fusion::traits::is_sequence<Attribute>, std::size_t
+ mpl::and_<
+ fusion::traits::is_sequence<Attribute>
+ , mpl::not_<traits::is_container<Attribute> > >
+ , std::size_t
>::type
attr_size(Attribute const& attr)
{
Modified: branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp
==============================================================================
--- branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp (original)
+++ branches/release/boost/spirit/home/lex/lexer/lexertl/token.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -543,6 +543,23 @@
}
};
+ ///////////////////////////////////////////////////////////////////////////
+ // Overload debug output for a single token, this integrates lexer tokens
+ // with Qi's simple_trace debug facilities
+ template <typename Iterator, typename Attribute, typename HasState>
+ struct token_printer_debug<lex::lexertl::token<Iterator, Attribute, HasState> >
+ {
+ typedef lex::lexertl::token<Iterator, Attribute, HasState> token_type;
+
+ template <typename Out>
+ static void print(Out& out, token_type const& val)
+ {
+ out << '<';
+ spirit::traits::print_token(out, val.value());
+ out << '>';
+ }
+ };
+
}}}
#endif
Modified: branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp
==============================================================================
--- branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp (original)
+++ branches/release/boost/spirit/home/qi/nonterminal/simple_trace.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -40,62 +40,11 @@
{
namespace detail
{
- struct token_printer_aux_for_chars
- {
- template<typename Char>
- static void print(std::ostream& o, Char c)
- {
- using namespace std; // allow for ADL to find the proper iscntrl
-
- if (c == static_cast<Char>('\a'))
- o << "\\a";
- else if (c == static_cast<Char>('\b'))
- o << "\\b";
- else if (c == static_cast<Char>('\f'))
- o << "\\f";
- else if (c == static_cast<Char>('\n'))
- o << "\\n";
- else if (c == static_cast<Char>('\r'))
- o << "\\r";
- else if (c == static_cast<Char>('\t'))
- o << "\\t";
- else if (c == static_cast<Char>('\v'))
- o << "\\v";
- else if (c < 127 && iscntrl(c))
- o << "\\" << std::oct << static_cast<int>(c);
- else
- o << static_cast<char>(c);
- }
- };
-
- // for token types where the comparison with char constants wouldn't work
- struct token_printer_aux_for_other_types
- {
- template<typename Char>
- static void print(std::ostream& o, Char c)
- {
- o << c;
- }
- };
-
- template <typename Char>
- struct token_printer_aux
- : mpl::if_<
- mpl::and_<
- is_convertible<Char, char>, is_convertible<char, Char> >
- , token_printer_aux_for_chars
- , token_printer_aux_for_other_types>::type
- {};
-
template<typename Char>
inline void token_printer(std::ostream& o, Char c)
{
// allow to customize the token printer routine
-#if !defined(BOOST_SPIRIT_DEBUG_TOKEN_PRINTER)
- token_printer_aux<Char>::print(o, c);
-#else
- BOOST_SPIRIT_DEBUG_TOKEN_PRINTER(o, c);
-#endif
+ spirit::traits::print_token(o, c);
}
}
Modified: branches/release/boost/spirit/home/support/attributes.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/attributes.hpp (original)
+++ branches/release/boost/spirit/home/support/attributes.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -187,9 +187,6 @@
///////////////////////////////////////////////////////////////////////////
// return the type currently stored in the given variant
- template <typename T, typename Enable = void>
- struct variant_which;
-
template <BOOST_VARIANT_ENUM_PARAMS(typename T)>
struct variant_which<boost::variant<BOOST_VARIANT_ENUM_PARAMS(T)> >
{
@@ -797,31 +794,6 @@
namespace detail
{
- // for stl container data types
- template <typename Out, typename T>
- void print_attribute_impl(Out& out, T const& val, mpl::true_)
- {
- out << '[';
- if (!val.empty())
- {
- for (typename T::const_iterator i = val.begin(); i != val.end(); ++i)
- {
- if (i != val.begin())
- out << ", ";
- print_attribute(out, *i);
- }
-
- }
- out << ']';
- }
-
- // for non-fusion data types
- template <typename Out, typename T>
- void print_attribute_impl2(Out& out, T const& val, mpl::false_)
- {
- out << val;
- }
-
template <typename Out>
struct print_fusion_sequence
{
@@ -843,29 +815,64 @@
Out& out;
mutable bool is_first;
};
+ }
+
+ template <typename Out, typename T, typename Enable>
+ struct print_attribute_debug
+ {
+ // for stl container data types
+ template <typename T_>
+ static void call_impl(Out& out, T_ const& val, mpl::true_)
+ {
+ out << '[';
+ if (!val.empty())
+ {
+ for (typename T_::const_iterator i = val.begin(); i != val.end(); ++i)
+ {
+ if (i != val.begin())
+ out << ", ";
+ print_attribute(out, *i);
+ }
+
+ }
+ out << ']';
+ }
+
+ // for non-fusion data types
+ template <typename T_>
+ static void call_impl2(Out& out, T_ const& val, mpl::false_)
+ {
+ out << val;
+ }
// for fusion data types
- template <typename Out, typename T>
- void print_attribute_impl2(Out& out, T const& val, mpl::true_)
+ template <typename T_>
+ static void call_impl2(Out& out, T_ const& val, mpl::true_)
{
out << '[';
- fusion::for_each(val, print_fusion_sequence<Out>(out));
+ fusion::for_each(val, detail::print_fusion_sequence<Out>(out));
out << ']';
}
// for non-stl container data types
- template <typename Out, typename T>
- void print_attribute_impl(Out& out, T const& val, mpl::false_)
+ template <typename T_>
+ static void call_impl(Out& out, T_ const& val, mpl::false_)
{
- print_attribute_impl2(out, val, fusion::traits::is_sequence<T>());
+ call_impl2(out, val, fusion::traits::is_sequence<T_>());
}
- }
+
+ // main entry point
+ static void call(Out& out, T const& val)
+ {
+ call_impl(out, val
+ , mpl::and_<is_container<T>, not_is_variant<T, void> >());
+ }
+ };
template <typename Out, typename T>
inline void print_attribute(Out& out, T const& val)
{
- detail::print_attribute_impl(out, val,
- mpl::and_<is_container<T>, not_is_variant<T, void> >());
+ print_attribute_debug<Out, T>::call(out, val);
}
template <typename Out, typename T>
@@ -876,6 +883,65 @@
else
out << "<empty>";
}
+
+ ///////////////////////////////////////////////////////////////////////////
+ // generate debug output for lookahead token (character) stream
+ namespace detail
+ {
+ struct token_printer_debug_for_chars
+ {
+ template<typename Out, typename Char>
+ static void print(Out& o, Char c)
+ {
+ using namespace std; // allow for ADL to find the proper iscntrl
+
+ if (c == static_cast<Char>('\a'))
+ o << "\\a";
+ else if (c == static_cast<Char>('\b'))
+ o << "\\b";
+ else if (c == static_cast<Char>('\f'))
+ o << "\\f";
+ else if (c == static_cast<Char>('\n'))
+ o << "\\n";
+ else if (c == static_cast<Char>('\r'))
+ o << "\\r";
+ else if (c == static_cast<Char>('\t'))
+ o << "\\t";
+ else if (c == static_cast<Char>('\v'))
+ o << "\\v";
+ else if (c < 127 && iscntrl(c))
+ o << "\\" << std::oct << static_cast<int>(c);
+ else
+ o << static_cast<char>(c);
+ }
+ };
+
+ // for token types where the comparison with char constants wouldn't work
+ struct token_printer_debug
+ {
+ template<typename Out, typename T>
+ static void print(Out& o, T const& val)
+ {
+ o << val;
+ }
+ };
+ }
+
+ template <typename T, typename Enable>
+ struct token_printer_debug
+ : mpl::if_<
+ mpl::and_<
+ is_convertible<T, char>, is_convertible<char, T> >
+ , detail::token_printer_debug_for_chars
+ , detail::token_printer_debug>::type
+ {};
+
+ template <typename Out, typename T>
+ inline void print_token(Out& out, T const& val)
+ {
+ // allow to customize the token printer routine
+ token_printer_debug<T>::print(out, val);
+ }
}}}
///////////////////////////////////////////////////////////////////////////////
Modified: branches/release/boost/spirit/home/support/attributes_fwd.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/attributes_fwd.hpp (original)
+++ branches/release/boost/spirit/home/support/attributes_fwd.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -107,6 +107,18 @@
extract_from(Attribute const& attr, Context& ctx);
///////////////////////////////////////////////////////////////////////////
+ // return the type currently stored in the given variant
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename Enable = void>
+ struct variant_which;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Determine, whether T is a variant like type
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename T, typename Domain>
+ struct not_is_variant;
+
+ ///////////////////////////////////////////////////////////////////////////
// Clear data efficiently
///////////////////////////////////////////////////////////////////////////
template <typename T, typename Enable = void>
@@ -150,6 +162,22 @@
template <typename Iterator, typename Enable = void>
struct compare_iterators;
+
+ ///////////////////////////////////////////////////////////////////////////
+ // Print the given attribute of type T to the stream given as Out
+ ///////////////////////////////////////////////////////////////////////////
+ template <typename Out, typename T, typename Enable = void>
+ struct print_attribute_debug;
+
+ template <typename Out, typename T>
+ void print_attribute(Out& out, T const& val);
+
+ template <typename Char, typename Enable = void>
+ struct token_printer_debug;
+
+ template<typename Out, typename T>
+ void print_token(Out& out, T const& val);
+
}}}
#endif
Modified: branches/release/boost/spirit/home/support/meta_compiler.hpp
==============================================================================
--- branches/release/boost/spirit/home/support/meta_compiler.hpp (original)
+++ branches/release/boost/spirit/home/support/meta_compiler.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -21,6 +21,7 @@
#include <boost/spirit/home/support/unused.hpp>
#include <boost/spirit/home/support/assert_msg.hpp>
#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/remove_reference.hpp>
namespace boost { namespace spirit
{
@@ -217,7 +218,8 @@
template <typename Domain, typename Expr>
struct matches :
proto::matches<
- typename proto::result_of::as_expr<Expr>::type,
+ typename proto::result_of::as_expr<
+ typename remove_reference<Expr>::type>::type,
typename meta_compiler<Domain>::meta_grammar
>
{
Modified: branches/release/boost/spirit/include/version.hpp
==============================================================================
--- branches/release/boost/spirit/include/version.hpp (original)
+++ branches/release/boost/spirit/include/version.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -15,6 +15,6 @@
//
///////////////////////////////////////////////////////////////////////////////
#define SPIRIT_VERSION 0x2040
-#define SPIRIT_PIZZA_VERSION CATFISH_WITH_RASPBERRY_JELLY // :-)
+#define SPIRIT_PIZZA_VERSION IANS_MEATZA // :-)
#endif
Modified: branches/release/libs/spirit/doc/karma/directive.qbk
==============================================================================
--- branches/release/libs/spirit/doc/karma/directive.qbk (original)
+++ branches/release/libs/spirit/doc/karma/directive.qbk 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -614,7 +614,7 @@
}}
(for more details see the section describing the compilation process of the
-__boost_proto__ expression into the corresponding parser expressions).
+__boost_proto__ expression into the corresponding generator expressions).
[table
[[Expression] [Semantics]]
Modified: branches/release/libs/spirit/doc/lex/quick_reference.qbk
==============================================================================
--- branches/release/libs/spirit/doc/lex/quick_reference.qbk (original)
+++ branches/release/libs/spirit/doc/lex/quick_reference.qbk 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -99,7 +99,7 @@
[variablelist Spirit.Lex specific Phoenix placeholders
[[`_start, _end`] [Iterators pointing to the begin and the end of the
matched input sequence.]]
- [[`_pass`] [Assign `false` to `_pass` to force the current match to fail.]]
+ [[`_pass`] [Assign `lex::pass_flags::pass_fail` to `_pass` to force the current match to fail.]]
[[`_tokenid`] [The token id of the matched token.]]
[[`_val`] [The token value of the matched token.]]
[[`_state`] [The lexer state the token has been matched in.]]
Modified: branches/release/libs/spirit/doc/what_s_new.qbk
==============================================================================
--- branches/release/libs/spirit/doc/what_s_new.qbk (original)
+++ branches/release/libs/spirit/doc/what_s_new.qbk 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -38,7 +38,6 @@
* Added strict mode to __karma__, leaving the current behavior (unchanged) as
relaxed mode. Added __karma__ compile time directives `strict[]` and
`relaxed[]` allowing to switch between the two.
-* Added __karma__ debug mode.
[heading Bug Fixes]
@@ -60,6 +59,22 @@
doesn't always make sense as it normally would eat up all supplied attribute
values).
* Fixed debug output for variants where a variant element is an STL sequence.
+* Fixed a problem in multi_pass, avoiding to loose a character at end of input
+ when switching iterators.
+
+[heading What's changed in __lex__ from V2.3 (Boost V1.43.0) to V2.4 (Boost V1.44.0)]
+
+[heading New Lexer Features]
+
+* The lexer is now well integrated with the debug output generated by Qi's
+ simple_trace utility. Tokens are printed as: '<' matched sequence '>'.
+
+[heading Lexer Bug Fixes]
+
+* Fixed a problem with using lex::_val as a rvalue in lexer semantic
+ expressions.
+* Token values are now available for introspection (as an iterator_range)
+ inside lexer semantic expressions as well.
[endsect] [/ spirit_2_4]
Modified: branches/release/libs/spirit/example/karma/Jamfile
==============================================================================
--- branches/release/libs/spirit/example/karma/Jamfile (original)
+++ branches/release/libs/spirit/example/karma/Jamfile 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -6,7 +6,11 @@
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#==============================================================================
project spirit-karma-example
- : requirements <toolset>gcc:<c++-template-depth>300 : :
+ : requirements
+ <toolset>gcc:<c++-template-depth>300
+ <toolset>darwin:<cxxflags>-ftemplate-depth-300
+ :
+ :
;
exe actions_example : actions.cpp ;
Modified: branches/release/libs/spirit/example/karma/calc2_ast.hpp
==============================================================================
--- branches/release/libs/spirit/example/karma/calc2_ast.hpp (original)
+++ branches/release/libs/spirit/example/karma/calc2_ast.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -19,10 +19,11 @@
#define SPIRIT_EXAMPLE_CALC2_AST_APR_30_2008_1011AM
#include <boost/variant.hpp>
-#include <boost/variant/get.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_function.hpp>
#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/spirit/include/karma_domain.hpp>
+#include <boost/spirit/include/support_attributes_fwd.hpp>
///////////////////////////////////////////////////////////////////////////////
// Our AST
@@ -82,16 +83,24 @@
return boost::get<T>(expr.expr);
}
- // the specialization below tells Spirit to handle expression_ast as if it
- // where a 'real' variant
namespace spirit { namespace traits
{
- template <typename T>
- struct not_is_variant;
-
+ // the specialization below tells Spirit to handle expression_ast as
+ // if it where a 'real' variant (if used with Spirit.Karma)
template <>
- struct not_is_variant<expression_ast>
+ struct not_is_variant<expression_ast, karma::domain>
: mpl::false_ {};
+
+ // the specialization of variant_which allows to generically extract
+ // the current type stored in the given variant like type
+ template <>
+ struct variant_which<expression_ast>
+ {
+ static int call(expression_ast const& v)
+ {
+ return v.which();
+ }
+ };
}}
}
Modified: branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp
==============================================================================
--- branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp (original)
+++ branches/release/libs/spirit/example/karma/calc2_ast_vm.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -18,11 +18,12 @@
#if !defined(SPIRIT_EXAMPLE_CALC2_AST_APR_30_2008_1011AM)
#define SPIRIT_EXAMPLE_CALC2_AST_APR_30_2008_1011AM
-#include <boost/variant/recursive_variant.hpp>
-#include <boost/variant/get.hpp>
+#include <boost/variant.hpp>
#include <boost/spirit/include/phoenix_operator.hpp>
#include <boost/spirit/include/phoenix_function.hpp>
#include <boost/spirit/include/phoenix_statement.hpp>
+#include <boost/spirit/include/karma_domain.hpp>
+#include <boost/spirit/include/support_attributes_fwd.hpp>
///////////////////////////////////////////////////////////////////////////////
// Our AST
@@ -86,12 +87,22 @@
// where a 'real' variant
namespace spirit { namespace traits
{
- template <typename T>
- struct not_is_variant;
-
+ // the specialization below tells Spirit to handle expression_ast as
+ // if it where a 'real' variant (if used with Spirit.Karma)
template <>
- struct not_is_variant<expression_ast>
+ struct not_is_variant<expression_ast, karma::domain>
: mpl::false_ {};
+
+ // the specialization of variant_which allows to generically extract
+ // the current type stored in the given variant like type
+ template <>
+ struct variant_which<expression_ast>
+ {
+ static int call(expression_ast const& v)
+ {
+ return v.which();
+ }
+ };
}}
}
Modified: branches/release/libs/spirit/example/karma/complex_number_easier.cpp
==============================================================================
--- branches/release/libs/spirit/example/karma/complex_number_easier.cpp (original)
+++ branches/release/libs/spirit/example/karma/complex_number_easier.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -70,7 +70,7 @@
// Begin grammar
(
!double_(0.0) << '(' << double_ << ", " << double_ << ')'
- | omit[double_] << double_ << omit[double_]
+ | omit[double_] << double_
),
// End grammar
Modified: branches/release/libs/spirit/example/karma/num_list3.cpp
==============================================================================
--- branches/release/libs/spirit/example/karma/num_list3.cpp (original)
+++ branches/release/libs/spirit/example/karma/num_list3.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -112,8 +112,10 @@
double real(*it);
if (++it != end)
vc.push_back(client::complex(real, *it));
- else
+ else {
vc.push_back(client::complex(real));
+ break;
+ }
}
std::cout << "-------------------------\n";
Modified: branches/release/libs/spirit/example/karma/simple_columns_directive.hpp
==============================================================================
--- branches/release/libs/spirit/example/karma/simple_columns_directive.hpp (original)
+++ branches/release/libs/spirit/example/karma/simple_columns_directive.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -117,7 +117,7 @@
namespace boost { namespace spirit { namespace karma
{
// This is the factory function object invoked in order to create
- // an instance of our iter_pos_parser.
+ // an instance of our simple_columns_generator.
template <typename Subject, typename Modifiers>
struct make_directive<custom_generator::tag::columns, Subject, Modifiers>
{
Modified: branches/release/libs/spirit/example/lex/Jamfile
==============================================================================
--- branches/release/libs/spirit/example/lex/Jamfile (original)
+++ branches/release/libs/spirit/example/lex/Jamfile 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -5,8 +5,14 @@
# Distributed under the Boost Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#==============================================================================
+project spirit-lexer-example
+ : requirements
+ <toolset>gcc:<c++-template-depth>300
+ <toolset>darwin:<cxxflags>-ftemplate-depth-300
+ :
+ :
+ ;
-project spirit-lexer-example ;
exe example1 : example1.cpp ;
exe example2 : example2.cpp ;
Modified: branches/release/libs/spirit/example/qi/Jamfile
==============================================================================
--- branches/release/libs/spirit/example/qi/Jamfile (original)
+++ branches/release/libs/spirit/example/qi/Jamfile 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -5,7 +5,9 @@
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#==============================================================================
project spirit-qi-example
- : requirements <toolset>gcc:<c++-template-depth>300
+ : requirements
+ <toolset>gcc:<c++-template-depth>300
+ <toolset>darwin:<cxxflags>-ftemplate-depth-300
:
:
;
Modified: branches/release/libs/spirit/example/qi/adapt_template_struct.cpp
==============================================================================
--- branches/release/libs/spirit/example/qi/adapt_template_struct.cpp (original)
+++ branches/release/libs/spirit/example/qi/adapt_template_struct.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -39,7 +39,7 @@
namespace boost { namespace spirit { namespace traits
{
template <typename A, typename B>
- struct transform_attribute<client::data<A, B>, fusion::vector<A&, B&> >
+ struct transform_attribute<client::data<A, B>, fusion::vector<A&, B&>, qi::domain>
{
typedef fusion::vector<A&, B&> type;
Modified: branches/release/libs/spirit/example/qi/boost_array.cpp
==============================================================================
--- branches/release/libs/spirit/example/qi/boost_array.cpp (original)
+++ branches/release/libs/spirit/example/qi/boost_array.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -32,14 +32,15 @@
: arr_(arr), current_(0) {}
// expose a push_back function compatible with std containers
- void push_back(typename array_type::value_type const& val)
+ bool push_back(typename array_type::value_type const& val)
{
// if the array is full, we need to bail out
- // there is currently no other way of making the parsing fail
+ // returning false will fail the parse
if (current_ >= N)
- boost::throw_exception(std::runtime_error("too bad..."));
- else
- arr_[current_++] = val;
+ return false;
+
+ arr_[current_++] = val;
+ return true;
}
array_type& arr_;
@@ -86,10 +87,10 @@
struct push_back_container<
client::detail::adapt_array<boost::array<T, N> >, T>
{
- static void call(client::detail::adapt_array<boost::array<T, N> >& c
+ static bool call(client::detail::adapt_array<boost::array<T, N> >& c
, T const& val)
{
- c.push_back(val);
+ return c.push_back(val);
}
};
}}}
@@ -108,8 +109,8 @@
qi::rule<iterator_type, adapted_type(), ascii::space_type> r = *qi::int_;
- bool result = qi::phrase_parse(iter, end, r, ascii::space
- , client::adapt_array(arr));
+ adapted_type attr = client::adapt_array(arr);
+ bool result = qi::phrase_parse(iter, end, r, ascii::space, attr);
if (result)
std::cout << "Parsed: " << arr[0] << ", " << arr[1] << std::endl;
Modified: branches/release/libs/spirit/example/qi/calc6/calc6c.hpp
==============================================================================
--- branches/release/libs/spirit/example/qi/calc6/calc6c.hpp (original)
+++ branches/release/libs/spirit/example/qi/calc6/calc6c.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -38,13 +38,16 @@
lexeme
[
vars [_val = _1]
- >> !(alnum | '_') // make sure we have whole words
+ >> !(alnum | '_') // make sure we have whole words
]
;
var_decl =
- "var"
- > !var_ref // make sure the variable isn't redeclared
+ lexeme[
+ "var"
+ >> !(alnum | '_') // make sure we have whole words
+ ]
+ > !var_ref // make sure the variable isn't redeclared
> identifier [add_var(_1, ref(nvars))]
> (';' | '=' > assignment_rhs(ref(nvars)-1))
;
Modified: branches/release/libs/spirit/example/qi/calc7/calc7c.hpp
==============================================================================
--- branches/release/libs/spirit/example/qi/calc7/calc7c.hpp (original)
+++ branches/release/libs/spirit/example/qi/calc7/calc7c.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -43,8 +43,11 @@
;
var_decl =
- "var"
- > !var_ref // make sure the variable isn't redeclared
+ lexeme[
+ "var"
+ >> !(alnum | '_') // make sure we have whole words
+ ]
+ > !var_ref // make sure the variable isn't redeclared
> identifier [add_var(_1, ref(nvars))]
> (';' | '=' > assignment_rhs(ref(nvars)-1))
;
Modified: branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp
==============================================================================
--- branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp (original)
+++ branches/release/libs/spirit/example/qi/mini_c/mini_cc.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -31,14 +31,16 @@
lexeme
[
vars [_val = _1]
- >> !(alnum | '_') // make sure we have whole words
+ >> !(alnum | '_') // make sure we have whole words
]
;
var_decl =
- "int"
- >> !(alnum | '_') // make sure we have whole words
- > !var_ref // make sure the variable isn't redeclared
+ lexeme[
+ "int"
+ >> !(alnum | '_') // make sure we have whole words
+ ]
+ > !var_ref // make sure the variable isn't redeclared
> identifier [add_var(_1)]
> (';' | '=' > assignment_rhs(ref(nvars)-1))
;
Modified: branches/release/libs/spirit/example/qi/parse_date.cpp
==============================================================================
--- branches/release/libs/spirit/example/qi/parse_date.cpp (original)
+++ branches/release/libs/spirit/example/qi/parse_date.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -28,7 +28,7 @@
// a fusion sequence consisting out of three integers as its attribute.
template<>
struct transform_attribute<
- boost::gregorian::date, fusion::vector<int, int, int> >
+ boost::gregorian::date, fusion::vector<int, int, int>, qi::domain>
{
typedef fusion::vector<int, int, int> date_parts;
Modified: branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp (original)
+++ branches/release/libs/spirit/example/scheme/example/scheme/factorial1.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -11,7 +11,7 @@
#include <iostream>
#include <fstream>
-void ignore_bom(std::ifstream& in)
+bool ignore_bom(std::ifstream& in, char const* filename)
{
// Ignore the BOM marking the beginning of a UTF-8 file in Windows
char c = in.peek();
@@ -24,9 +24,10 @@
{
std::cerr << "Error: Unexpected characters from input file: "
<< filename << std::endl;
- return 1;
+ return false;
}
}
+ return true;
}
///////////////////////////////////////////////////////////////////////////////
@@ -43,7 +44,8 @@
<< filename << std::endl;
return -1;
}
- ignore_bom(in);
+ if (!ignore_bom(in, filename))
+ return -1;
using scheme::interpreter;
using scheme::function;
Modified: branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp (original)
+++ branches/release/libs/spirit/example/scheme/example/sexpr/sexpr_error_test.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -45,7 +45,7 @@
test("(abc \n(\"a string 456) \ndef)", "missing double quote.sexpr");
test("(abc \n(\"a string\" 0xggg) \ndef)", "erronoeus hex.sexpr");
test("(abc \n(\"a \\zstring\" 999) \ndef)", "erronoeus escape.sexpr");
- test("(abc \n(\"a \uzstring\" 999) \ndef)", "erronoeus escape.sexpr");
+ test("(abc \n(\"a \\uzstring\" 999) \ndef)", "erronoeus escape.sexpr");
return 0;
}
Modified: branches/release/libs/spirit/example/scheme/input/sexpr.hpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/input/sexpr.hpp (original)
+++ branches/release/libs/spirit/example/scheme/input/sexpr.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -122,12 +122,12 @@
byte_str = lexeme['#' > +hex2 > '#'];
start.name("sexpr");
- start.name("sexpr");
list.name("list");
atom.name("atom");
symbol.name("symbol");
integer.name("integer");
byte_str.name("byte_str");
+
on_error<fail>(start, error_handler(_1, _2, _3, _4));
}
Modified: branches/release/libs/spirit/example/scheme/output/sexpr.hpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/output/sexpr.hpp (original)
+++ branches/release/libs/spirit/example/scheme/output/sexpr.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -72,7 +72,7 @@
rule<OutputIterator, utf8_symbol_range()> symbol;
rule<OutputIterator, utf8_string_range()> string_;
rule<OutputIterator, binary_range()> byte_str;
- rule<OutputIterator, nil()> nil;
+ rule<OutputIterator, scheme::nil()> nil;
rule<OutputIterator, space_type, utree()> ref_;
};
}}
Modified: branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp (original)
+++ branches/release/libs/spirit/example/scheme/qi/qiexpr_generator.hpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -159,7 +159,7 @@
delimiting_rule_type start, alternative, permutation, sequence, term;
delimiting_rule_type grammar_, rule_;
delimiting_rule_type rule_name, primitive0_rule, alternative_rule;
- rule<OutputIterator, nil()> nil;
+ rule<OutputIterator, scheme::nil()> nil;
rule<OutputIterator, scheme::utf8_string()> literal;
rule<OutputIterator, scheme::utf8_symbol(std::string)> symbol;
rule<OutputIterator, scheme::utf8_symbol()> any_symbol;
Modified: branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp
==============================================================================
--- branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp (original)
+++ branches/release/libs/spirit/example/scheme/test/qi/qi_interpreter.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -50,9 +50,6 @@
int new_rule()
{
rules[index];
- std::stringstream str;
- str << qi::what(expr);
- rules[index].name(str.str());
return index++;
}
@@ -60,6 +57,9 @@
void define_rule(int id, Expr const& expr)
{
rules[id] = expr;
+ std::stringstream str;
+ str << qi::what(expr);
+ rules[id].name(str.str());
}
Rule const& operator[](int id) const
Modified: branches/release/libs/spirit/test/qi/symbols.cpp
==============================================================================
--- branches/release/libs/spirit/test/qi/symbols.cpp (original)
+++ branches/release/libs/spirit/test/qi/symbols.cpp 2010-07-09 17:46:57 EDT (Fri, 09 Jul 2010)
@@ -345,20 +345,20 @@
first = str; last = str + 2;
BOOST_TEST(!sym.prefix_find(first, last) && first == str);
}
-
- {
- // remove bug
-
- std::string s;
- symbols<char, double> vars;
-
- vars.add("l1", 12.0);
- vars.add("l2", 0.0);
- vars.remove("l2");
- vars.find("l1");
- double* d = vars.find("l1");
+
+ {
+ // remove bug
+
+ std::string s;
+ symbols<char, double> vars;
+
+ vars.add("l1", 12.0);
+ vars.add("l2", 0.0);
+ vars.remove("l2");
+ vars.find("l1");
+ double* d = vars.find("l1");
BOOST_TEST(d != 0);
- }
+ }
return boost::report_errors();
}
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk