@@ -4676,9 +4676,9 @@ class parser {
4676
4676
*---------------------------------------------------------------------------*/
4677
4677
4678
4678
inline void enable_tracing (parser &parser, std::ostream &os) {
4679
- size_t prev_pos = 0 ;
4680
4679
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);
4682
4682
auto pos = static_cast <size_t >(s - c.s );
4683
4683
auto backtrack = (pos < prev_pos ? " *" : " " );
4684
4684
std::string indent;
@@ -4695,7 +4695,7 @@ inline void enable_tracing(parser &parser, std::ostream &os) {
4695
4695
}
4696
4696
os << " E " << pos + 1 << backtrack << " \t " << indent << " ┌" << name
4697
4697
<< " #" << c.trace_ids .back () << std::endl;
4698
- prev_pos = static_cast <size_t >(pos);
4698
+ trace_data = static_cast <size_t >(pos);
4699
4699
},
4700
4700
[&](auto &ope, auto s, auto , auto &sv, auto &c, auto &, auto len,
4701
4701
auto &) {
@@ -4727,7 +4727,8 @@ inline void enable_tracing(parser &parser, std::ostream &os) {
4727
4727
<< c.trace_ids .back () << choice.str () << token << matched
4728
4728
<< std::endl;
4729
4729
},
4730
- [&](auto &) {}, [&](auto &) {});
4730
+ [&](auto &trace_data) { trace_data = static_cast <size_t >(0 ); },
4731
+ [&](auto &) {});
4731
4732
}
4732
4733
4733
4734
/* -----------------------------------------------------------------------------
0 commit comments