diff --git a/peglib.h b/peglib.h index 2b08b92..8f63818 100644 --- a/peglib.h +++ b/peglib.h @@ -4676,9 +4676,9 @@ private: *---------------------------------------------------------------------------*/ inline void enable_tracing(parser &parser, std::ostream &os) { - size_t prev_pos = 0; parser.enable_trace( - [&](auto &ope, auto s, auto, auto &, auto &c, auto &, auto &) { + [&](auto &ope, auto s, auto, auto &, auto &c, auto &, auto &trace_data) { + auto prev_pos = std::any_cast(trace_data); auto pos = static_cast(s - c.s); auto backtrack = (pos < prev_pos ? "*" : ""); std::string indent; @@ -4695,7 +4695,7 @@ inline void enable_tracing(parser &parser, std::ostream &os) { } os << "E " << pos + 1 << backtrack << "\t" << indent << "┌" << name << " #" << c.trace_ids.back() << std::endl; - prev_pos = static_cast(pos); + trace_data = static_cast(pos); }, [&](auto &ope, auto s, auto, auto &sv, auto &c, auto &, auto len, auto &) { @@ -4727,7 +4727,8 @@ inline void enable_tracing(parser &parser, std::ostream &os) { << c.trace_ids.back() << choice.str() << token << matched << std::endl; }, - [&](auto &) {}, [&](auto &) {}); + [&](auto &trace_data) { trace_data = static_cast(0); }, + [&](auto &) {}); } /*-----------------------------------------------------------------------------