@@ -4676,9 +4676,9 @@ class parser {
46764676 *---------------------------------------------------------------------------*/
46774677
46784678inline void enable_tracing (parser &parser, std::ostream &os) {
4679- size_t prev_pos = 0 ;
46804679 parser.enable_trace (
4681- [&](auto &ope, auto s, auto , auto &, auto &c, auto &, auto &) {
4680+ [&](auto &ope, auto s, auto , auto &, auto &c, auto &, auto &trace_data) {
4681+ auto prev_pos = std::any_cast<size_t >(trace_data);
46824682 auto pos = static_cast <size_t >(s - c.s );
46834683 auto backtrack = (pos < prev_pos ? " *" : " " );
46844684 std::string indent;
@@ -4695,7 +4695,7 @@ inline void enable_tracing(parser &parser, std::ostream &os) {
46954695 }
46964696 os << " E " << pos + 1 << backtrack << " \t " << indent << " ┌" << name
46974697 << " #" << c.trace_ids .back () << std::endl;
4698- prev_pos = static_cast <size_t >(pos);
4698+ trace_data = static_cast <size_t >(pos);
46994699 },
47004700 [&](auto &ope, auto s, auto , auto &sv, auto &c, auto &, auto len,
47014701 auto &) {
@@ -4727,7 +4727,8 @@ inline void enable_tracing(parser &parser, std::ostream &os) {
47274727 << c.trace_ids .back () << choice.str () << token << matched
47284728 << std::endl;
47294729 },
4730- [&](auto &) {}, [&](auto &) {});
4730+ [&](auto &trace_data) { trace_data = static_cast <size_t >(0 ); },
4731+ [&](auto &) {});
47314732}
47324733
47334734/* -----------------------------------------------------------------------------
0 commit comments