$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69168 - branches/quickbook-filenames/tools/quickbook/src
From: dnljms_at_[hidden]
Date: 2011-02-22 15:30:14
Author: danieljames
Date: 2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
New Revision: 69168
URL: http://svn.boost.org/trac/boost/changeset/69168
Log:
Use phoenix for some actions.
Text files modified: 
   branches/quickbook-filenames/tools/quickbook/src/actions.cpp                |    10 +++                                     
   branches/quickbook-filenames/tools/quickbook/src/actions.hpp                |    12 ++++                                    
   branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp  |    21 +++++---                                
   branches/quickbook-filenames/tools/quickbook/src/doc_info_grammar.cpp       |    35 ++++++--------                          
   branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp           |    25 +++++-----                              
   branches/quickbook-filenames/tools/quickbook/src/phrase_element_grammar.cpp |    11 ++--                                    
   branches/quickbook-filenames/tools/quickbook/src/value_tags.hpp             |     4                                         
   branches/quickbook-filenames/tools/quickbook/src/values_parse.hpp           |    93 +++++++++++++++------------------------ 
   8 files changed, 101 insertions(+), 110 deletions(-)
Modified: branches/quickbook-filenames/tools/quickbook/src/actions.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/actions.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/actions.cpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -1596,14 +1596,20 @@
         phrase.swap(out);
     }
 
-    void phrase_to_docinfo_action::operator()(iterator first, iterator last) const
+    void phrase_to_docinfo_action_impl::operator()(iterator first, iterator last,
+            value::tag_type tag) const
     {
         if(!actions.output_pre(actions.phrase)) return;
 
         std::string encoded;
         actions.phrase.swap(encoded);
         actions.values.builder.insert(
-            qbk_bbk_value(first, last, encoded, actions.values.builder.release_tag()));
+            qbk_bbk_value(first, last, encoded, tag));
+    }
+
+    void phrase_to_docinfo_action_impl::operator()(iterator first, iterator last) const
+    {
+        return (*this)(first, last, actions.values.builder.release_tag());
     }
     
     void phrase_to_value_action::operator()(iterator first, iterator last) const
Modified: branches/quickbook-filenames/tools/quickbook/src/actions.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/actions.hpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/actions.hpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -16,12 +16,14 @@
 #include <stack>
 #include <algorithm>
 #include <boost/filesystem/v3/operations.hpp>
+#include <boost/spirit/include/phoenix1_functions.hpp>
 #include <boost/foreach.hpp>
 #include <boost/tuple/tuple.hpp>
 #include "fwd.hpp"
 #include "collector.hpp"
 #include "template_stack.hpp"
 #include "utils.hpp"
+#include "values.hpp"
 
 #ifdef BOOST_MSVC
 // disable copy/assignment could not be generated, unreferenced formal params
@@ -725,15 +727,21 @@
         quickbook::actions& actions;
     };
 
-    struct phrase_to_docinfo_action
+    struct phrase_to_docinfo_action_impl
     {
-        phrase_to_docinfo_action(quickbook::actions& actions)
+    	template <typename Arg1, typename Arg2, typename Arg3 = void>
+    	struct result { typedef void type; };
+    
+        phrase_to_docinfo_action_impl(quickbook::actions& actions)
             : actions(actions) {}
 
         void operator()(iterator first, iterator last) const;
+        void operator()(iterator first, iterator last, value::tag_type) const;
 
         quickbook::actions& actions;
     };
+    
+    typedef phoenix::function<phrase_to_docinfo_action_impl> phrase_to_docinfo_action;
 
     struct phrase_to_value_action
     {
Modified: branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/block_element_grammar.cpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -16,10 +16,12 @@
 #include <boost/spirit/include/classic_assign_actor.hpp>
 #include <boost/spirit/include/classic_if.hpp>
 #include <boost/spirit/include/classic_clear_actor.hpp>
+#include <boost/spirit/include/phoenix1_primitives.hpp>
 
 namespace quickbook
 {
     namespace cl = boost::spirit::classic;
+    namespace ph = phoenix;
 
     struct block_element_grammar_local
     {
@@ -46,7 +48,7 @@
         local.element_id =
             !(  ':'
             >>  (   cl::if_p(qbk_since(105u)) [space]
-                >>  (+(cl::alnum_p | '_'))      [actions.values.entry(general_tags::element_id)]
+                >>  (+(cl::alnum_p | '_'))      [actions.values.entry(ph::arg1, ph::arg2, general_tags::element_id)]
                 |   cl::eps_p                   [actions.element_id_warning]
                 )
             )
@@ -79,7 +81,7 @@
             ;
 
         local.end_section =
-                cl::eps_p                       [actions.values.entry(block_tags::end_section)]
+                cl::eps_p                       [actions.values.entry(ph::arg1, ph::arg2, block_tags::end_section)]
                                                 [actions.end_section]
             ;
 
@@ -216,20 +218,21 @@
 
         local.template_ =
                space
-            >> local.template_id                [actions.values.reset][actions.values.entry]
+            >> local.template_id                [actions.values.reset()]
+                                                [actions.values.entry(ph::arg1, ph::arg2)]
             >> actions.values.scoped[
             !(
                 space >> '['
                 >> *(
                         space
-                    >>  local.template_id       [actions.values.entry]
+                    >>  local.template_id       [actions.values.entry(ph::arg1, ph::arg2)]
                     )
                 >> space >> ']'
             )
             ]
             >>  (   cl::eps_p(*cl::blank_p >> cl::eol_p)
-                >>  local.template_body         [actions.values.entry(template_tags::block)]
-                |   local.template_body         [actions.values.entry(template_tags::phrase)]
+                >>  local.template_body         [actions.values.entry(ph::arg1, ph::arg2, template_tags::block)]
+                |   local.template_body         [actions.values.entry(ph::arg1, ph::arg2, template_tags::phrase)]
                 )                               [actions.template_body]
             ;
 
@@ -245,7 +248,7 @@
 
         local.variablelist =
                 (cl::eps_p(*cl::blank_p >> cl::eol_p) | space)
-            >>  (*(cl::anychar_p - eol))        [actions.values.entry(table_tags::title)]
+            >>  (*(cl::anychar_p - eol))        [actions.values.entry(ph::arg1, ph::arg2, table_tags::title)]
             >>  (+eol)                          [actions.output_pre]
             >>  *local.varlistentry
             >>  cl::eps_p                       [actions.variablelist]
@@ -297,7 +300,7 @@
                 (cl::eps_p(*cl::blank_p >> cl::eol_p) | space)
             >>  local.element_id_1_5
             >>  (cl::eps_p(*cl::blank_p >> cl::eol_p) | space)
-            >>  (*(cl::anychar_p - eol))        [actions.values.entry(table_tags::title)]
+            >>  (*(cl::anychar_p - eol))        [actions.values.entry(ph::arg1, ph::arg2, table_tags::title)]
             >>  (+eol)                          [actions.output_pre]
             >>  *local.table_row
             >>  cl::eps_p                       [actions.table]
@@ -364,7 +367,7 @@
             [   cl::eps_p                       [actions.inner_phrase_pre]
             >>  phrase
             >>  cl::eps_p                       [actions.inner_phrase_post]
-            ]                                   [actions.docinfo_value]
+            ]                                   [actions.docinfo_value(ph::arg1, ph::arg2)]
             ;
     }
 }
Modified: branches/quickbook-filenames/tools/quickbook/src/doc_info_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/doc_info_grammar.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/doc_info_grammar.cpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -16,6 +16,7 @@
 #include <boost/spirit/include/classic_loops.hpp>
 #include <boost/spirit/include/classic_symbols.hpp>
 #include <boost/spirit/include/classic_chset.hpp>
+#include <boost/spirit/include/phoenix1_primitives.hpp>
 
 namespace quickbook
 {
@@ -98,12 +99,11 @@
             space
             >> '[' >> space
             >> (local.doc_types >> cl::eps_p)
-                                            [actions.values.reset]
-                                            [actions.values.entry(doc_info_tags::type)]
+                                            [actions.values.reset()]
+                                            [actions.values.entry(ph::arg1, ph::arg2, doc_info_tags::type)]
             >> hard_space
             >>  (  *(~cl::eps_p(cl::ch_p('[') | ']' | cl::eol_p) >> local.char_)
-                )                           [actions.values.tag(doc_info_tags::title)]
-                                            [actions.docinfo_value]
+                )                           [actions.docinfo_value(ph::arg1, ph::arg2, doc_info_tags::title)]
             >>  !(
                     space >> '[' >>
                         local.quickbook_version
@@ -115,7 +115,7 @@
                 >>  space
                 >>  (   local.doc_attributes
                                             [local.assign_attribute]
-                                            [actions.values.tag]
+                                            [actions.values.tag(ph::arg1)]
                     |   (+(cl::alnum_p | '_' | '-'))
                                             [local.fallback_attribute]
                                             [actions.error("Unrecognized document attribute: '%s'.")]
@@ -126,7 +126,7 @@
                 >>  ']'
                 >>  +cl::eol_p
                 )
-            >>  space                       [actions.values.sort]
+            >>  space                       [actions.values.sort()]
             >>  ']'
             >>  +cl::eol_p
             ;
@@ -145,7 +145,7 @@
 
         // TODO: Restrictions on doc_id and doc_dirname?
 
-        local.doc_simple = (*(~cl::eps_p(']') >> local.char_)) [actions.docinfo_value];
+        local.doc_simple = (*(~cl::eps_p(']') >> local.char_)) [actions.docinfo_value(ph::arg1, ph::arg2)];
         local.attribute_rules[doc_info_attributes::version] = &local.doc_simple;
         local.attribute_rules[doc_info_attributes::id] = &local.doc_simple;
         local.attribute_rules[doc_info_attributes::dirname] = &local.doc_simple;
@@ -166,19 +166,17 @@
             *actions.values.scoped(doc_info_attributes::copyright)
             [
                 +(  local.doc_copyright_year
-                                            [actions.values.entry(doc_info_tags::copyright_year)]
+                                            [actions.values.entry(ph::arg1, ph::arg2, doc_info_tags::copyright_year)]
                 >>  space
                 >>  !(  '-'
                     >>  space
                     >>  local.doc_copyright_year
-                                            [actions.values.entry(doc_info_tags::copyright_year_end)]
+                                            [actions.values.entry(ph::arg1, ph::arg2, doc_info_tags::copyright_year_end)]
                     )
                 >>  !cl::ch_p(',')
                 )
             >>  space
-            >>  local.doc_copyright_holder
-                                            [actions.values.tag(doc_info_tags::copyright_name)]
-                                            [actions.docinfo_value]
+            >>  local.doc_copyright_holder  [actions.docinfo_value(ph::arg1, ph::arg2, doc_info_tags::copyright_name)]
             >>  !cl::ch_p(',')
             >>  space
             ]
@@ -186,7 +184,7 @@
 
         local.attribute_rules[doc_info_attributes::copyright] = &local.doc_copyright;
 
-        local.doc_phrase = simple_phrase[actions.docinfo_value];
+        local.doc_phrase = simple_phrase[actions.docinfo_value(ph::arg1, ph::arg2)];
         local.attribute_rules[doc_info_attributes::purpose] = &local.doc_phrase;
         local.attribute_rules[doc_info_attributes::license] = &local.doc_phrase;
 
@@ -194,12 +192,10 @@
                 '['
             >>   space
             >>  (*(~cl::eps_p(',') >> local.char_))
-                                            [actions.values.tag(doc_info_tags::author_surname)]
-                                            [actions.docinfo_value]
+                                            [actions.docinfo_value(ph::arg1, ph::arg2, doc_info_tags::author_surname)]
             >>  ',' >> space
             >>  (*(~cl::eps_p(']') >> local.char_))
-                                            [actions.values.tag(doc_info_tags::author_first)]
-                                            [actions.docinfo_value]
+                                            [actions.docinfo_value(ph::arg1, ph::arg2, doc_info_tags::author_first)]
             >>  ']'
             ;
 
@@ -230,11 +226,10 @@
         local.doc_biblioid =
                 actions.values.scoped(doc_info_attributes::biblioid)
                 [
-                    (+cl::alnum_p)          [actions.values.entry(doc_info_tags::biblioid_class)]
+                    (+cl::alnum_p)          [actions.values.entry(ph::arg1, ph::arg2, doc_info_tags::biblioid_class)]
                 >>  hard_space
                 >>  (+(~cl::eps_p(']') >> local.char_))
-                                            [actions.values.tag(doc_info_tags::biblioid_value)]
-                                            [actions.docinfo_value]
+                                            [actions.docinfo_value(ph::arg1, ph::arg2, doc_info_tags::biblioid_value)]
                 ]
             ;
 
Modified: branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/main_grammar.cpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -19,11 +19,12 @@
 #include <boost/spirit/include/classic_clear_actor.hpp>
 #include <boost/spirit/include/classic_if.hpp>
 #include <boost/spirit/include/classic_loops.hpp>
+#include <boost/spirit/include/phoenix1_primitives.hpp>
 
 namespace quickbook
 {
     namespace cl = boost::spirit::classic;
-    
+
     template <typename Rule, typename Action>
     inline void
     simple_markup(
@@ -172,7 +173,7 @@
             >>  local.element
             >>  cl::eps_p(local.check_element(element_info::in_block))
                                                 [actions.inside_paragraph]
-                                                [actions.values.reset]
+                                                [actions.values.reset()]
             >>  (   local.element_rule
                 >>  (   (space >> ']')          [actions.element]
                     |   cl::eps_p               [actions.error]
@@ -236,18 +237,18 @@
             ;
 
         local.template_ =
-                cl::eps_p                       [actions.values.reset]
-            >>  !cl::str_p("`")                 [actions.values.entry(template_tags::escape)]
+                cl::eps_p                       [actions.values.reset()]
+            >>  !cl::str_p("`")                 [actions.values.entry(ph::arg1, ph::arg2, template_tags::escape)]
             >>
             ( (
                 (cl::eps_p(cl::punct_p)
                     >> actions.templates.scope
-                )                               [actions.values.entry(template_tags::identifier)]
+                )                               [actions.values.entry(ph::arg1, ph::arg2, template_tags::identifier)]
                 >> !local.template_args
             ) | (
                 (actions.templates.scope
                     >> cl::eps_p(hard_space)
-                )                               [actions.values.entry(template_tags::identifier)]
+                )                               [actions.values.entry(ph::arg1, ph::arg2, template_tags::identifier)]
                 >> space
                 >> !local.template_args
             ) )
@@ -267,8 +268,8 @@
 
         local.template_arg_1_4 =
             (   cl::eps_p(*cl::blank_p >> cl::eol_p)
-            >>  local.template_inner_arg_1_4    [actions.values.entry(template_tags::block)]
-            |   local.template_inner_arg_1_4    [actions.values.entry(template_tags::phrase)]
+            >>  local.template_inner_arg_1_4    [actions.values.entry(ph::arg1, ph::arg2, template_tags::block)]
+            |   local.template_inner_arg_1_4    [actions.values.entry(ph::arg1, ph::arg2, template_tags::phrase)]
             )                               
             ;
 
@@ -284,8 +285,8 @@
 
         local.template_arg_1_5 =
             (   cl::eps_p(*cl::blank_p >> cl::eol_p)
-            >>  local.template_arg_1_5_content  [actions.values.entry(template_tags::block)]
-            |   local.template_arg_1_5_content  [actions.values.entry(template_tags::phrase)]
+            >>  local.template_arg_1_5_content  [actions.values.entry(ph::arg1, ph::arg2, template_tags::block)]
+            |   local.template_arg_1_5_content  [actions.values.entry(ph::arg1, ph::arg2, template_tags::phrase)]
             )
             ;
 
@@ -382,7 +383,7 @@
             >>  space
             >>  (   local.element
                 >>  cl::eps_p(local.check_element(element_info::in_phrase))
-                                                [actions.values.reset]
+                                                [actions.values.reset()]
                 >>  local.element_rule
                 >>  cl::eps_p(space >> ']')     [actions.element]
                 |   local.template_
@@ -396,7 +397,7 @@
             >>  local.element
             >>  cl::eps_p(local.check_element(element_info::in_conditional))
                                                 [actions.inside_paragraph]
-                                                [actions.values.reset]
+                                                [actions.values.reset()]
             >>  (   local.element_rule
                 >>  (   (space >> ']')          [actions.element]
                     |   cl::eps_p               [actions.error]
Modified: branches/quickbook-filenames/tools/quickbook/src/phrase_element_grammar.cpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/phrase_element_grammar.cpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/phrase_element_grammar.cpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -15,6 +15,7 @@
 #include <boost/spirit/include/classic_assign_actor.hpp>
 #include <boost/spirit/include/classic_clear_actor.hpp>
 #include <boost/spirit/include/classic_if.hpp>
+#include <boost/spirit/include/phoenix1_primitives.hpp>
 
 namespace quickbook
 {
@@ -46,7 +47,7 @@
 
         local.cond_phrase =
                 blank
-            >>  macro_identifier                [actions.values.entry]
+            >>  macro_identifier                [actions.values.entry(ph::arg1, ph::arg2)]
             >>  actions.scoped_cond_phrase[extended_phrase]
             ;
 
@@ -60,21 +61,21 @@
                         (+(
                             *cl::space_p
                         >>  +(cl::anychar_p - (cl::space_p | phrase_end | '['))
-                        ))                      [actions.values.entry]
+                        ))                      [actions.values.entry(ph::arg1, ph::arg2)]
                     >>  hard_space
                     >>  *actions.values.scoped[
                             '['
                         >>  (*(cl::alnum_p | '_')) 
-                                                [actions.values.entry]
+                                                [actions.values.entry(ph::arg1, ph::arg2)]
                         >>  space
                         >>  (*(cl::anychar_p - (phrase_end | '[')))
-                                                [actions.values.entry]
+                                                [actions.values.entry(ph::arg1, ph::arg2)]
                         >>  ']'
                         >>  space
                         ]
                 ].else_p [
                         (*(cl::anychar_p - phrase_end))
-                                                [actions.values.entry]
+                                                [actions.values.entry(ph::arg1, ph::arg2)]
                 ]
             >>  cl::eps_p(']')                  [actions.image]
             ;
Modified: branches/quickbook-filenames/tools/quickbook/src/value_tags.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/value_tags.hpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/value_tags.hpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -18,7 +18,7 @@
 
 #define QUICKBOOK_VALUE_TAGS(tags_name, start_index, values) \
     struct tags_name { \
-        enum { \
+        enum tags_name##_enum { \
             previous_index = start_index - 1, \
             BOOST_PP_SEQ_ENUM(values), \
             end_index \
@@ -43,7 +43,7 @@
 
 #define QUICKBOOK_VALUE_NAMED_TAGS(tags_name, start_index, values) \
     struct tags_name { \
-        enum { \
+        enum tags_name##_enum { \
             previous_index = start_index - 1 \
             BOOST_PP_SEQ_FOR_EACH(QUICKBOOK_VALUE_NAMED_ENUM, _, values), \
             end_index \
Modified: branches/quickbook-filenames/tools/quickbook/src/values_parse.hpp
==============================================================================
--- branches/quickbook-filenames/tools/quickbook/src/values_parse.hpp	(original)
+++ branches/quickbook-filenames/tools/quickbook/src/values_parse.hpp	2011-02-22 15:30:11 EST (Tue, 22 Feb 2011)
@@ -11,9 +11,11 @@
 
 #include "values.hpp"
 #include <boost/spirit/include/classic_core.hpp>
+#include <boost/spirit/include/phoenix1_functions.hpp>
 
 namespace quickbook {
     namespace cl = boost::spirit::classic;
+    namespace ph = phoenix;
 
     struct value_builder_save
     {
@@ -158,64 +160,41 @@
         value::tag_type tag_;
     };
 
-    /* value_scoped_list_gen
-     */
-
-    struct value_string_entry {
-        value_string_entry(value_builder& b, std::string const& v, value::tag_type t = value::no_tag)
-            : b(b), v(v), tag_(t) {}
-
-        template <typename Iterator>
-        void operator()(Iterator, Iterator) const {
-            b.insert(bbk_value(v, tag_));
-        }
-
-        value_builder& b;
-        std::string v;
-        value::tag_type tag_;
-    };
-
     struct value_entry
     {
-        value_entry(value_builder& b, value::tag_type t = value::no_tag)
-            : b(b), tag_(t) {}
-
-        template <typename Iterator>
-        void operator()(Iterator begin, Iterator end) const {
-            b.insert(qbk_value(begin, end, tag_));
-        }
-        
-        value_string_entry operator()(std::string const& value) {
-            return value_string_entry(b, value, tag_);
-        }
+        template <typename Arg1, typename Arg2 = void, typename Arg3 = void, typename Arg4 = void>
+        struct result {
+            typedef void type;
+        };
 
-        value_string_entry operator()(value::tag_type tag, std::string const& value) {
-            return value_string_entry(b, value, tag);
-        }
+        value_entry(value_builder& b)
+            : b(b) {}
 
-        value_entry operator()(value::tag_type const& value) {
-            return value_entry(b, value);
+        template <typename Iterator>
+        void operator()(Iterator begin, Iterator end,
+                value::tag_type tag = value::no_tag) const
+        {
+            b.insert(qbk_value(begin, end, tag));
         }
 
-        value_builder& b;
-        value::tag_type tag_;
-    };
-
-    struct value_fixed_tag {
-        value_fixed_tag(value_builder& b, value::tag_type v)
-            : b(b), v(v) {}
-
         template <typename Iterator>
-        void operator()(Iterator, Iterator) const {
-            b.set_tag(v);
+        void operator()(Iterator begin, Iterator,
+                std::string const& v,
+                value::tag_type tag = value::no_tag) const
+        {
+            b.insert(qbk_value(v, begin.get_position(), tag));
         }
 
         value_builder& b;
-        value::tag_type v;
     };
 
     struct value_tag
     {
+        template <typename Arg>
+        struct result {
+            typedef void type;
+        };
+
         value_tag(value_builder& b)
             : b(b) {}
 
@@ -223,20 +202,17 @@
             b.set_tag(value);
         }
 
-        value_fixed_tag operator()(value::tag_type value) {
-            return value_fixed_tag(b, value);
-        }
-
         value_builder& b;
     };
 
     struct value_reset
     {
+        typedef void result_type;
+    
         value_reset(value_builder& b)
             : b(b) {}
 
-        template <typename Iterator>
-        void operator()(Iterator, Iterator) const {
+        void operator()() const {
             b.reset();
         }
 
@@ -245,11 +221,12 @@
     
     struct value_sort
     {
+        typedef void result_type;
+    
         value_sort(value_builder& b)
             : b(b) {}
 
-        template <typename Iterator>
-        void operator()(Iterator, Iterator) const {
+        void operator()() const {
             b.sort_list();
         }
 
@@ -261,10 +238,10 @@
         value_parser()
             : builder()
             , save(builder)
-            , reset(builder)
             , scoped(builder)
-            , tag(builder)
             , entry(builder)
+            , reset(builder)
+            , tag(builder)
             , sort(builder)
             {}
     
@@ -272,11 +249,11 @@
 
         value_builder builder;
         value_save_gen save;
-        value_reset reset;
         value_scoped_list_gen scoped;
-        value_tag tag;
-        value_entry entry;
-        value_sort sort;
+        ph::function<value_entry> entry;
+        ph::function<value_reset> reset;
+        ph::function<value_tag> tag;
+        ph::function<value_sort> sort;
     };
 }