From 450fbdb74deeb97b2633e50dcd9215d71f5387dc Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 19 Jul 2025 11:47:03 -0500 Subject: [PATCH] pretty printing -- copmlete for xo::ast::GeneralizedExpression --- include/xo/refcnt/pretty_refcnt.hpp | 91 +++++++++++++++-------------- 1 file changed, 46 insertions(+), 45 deletions(-) diff --git a/include/xo/refcnt/pretty_refcnt.hpp b/include/xo/refcnt/pretty_refcnt.hpp index ecf53aba..8c1903f1 100644 --- a/include/xo/refcnt/pretty_refcnt.hpp +++ b/include/xo/refcnt/pretty_refcnt.hpp @@ -10,66 +10,67 @@ namespace xo { namespace print { +#ifndef ppdetail_atomic template <> struct ppdetail { - static bool print_upto(ppstate * pps, const xo::ref::Refcount * x) { - return ppdetail_atomic::print_upto(pps, x); - } - static void print_pretty(ppstate * pps, const xo::ref::Refcount * x) { - ppdetail_atomic::print_pretty(pps, x); + static bool print_pretty(const ppindentinfo & ppii, const xo::ref::Refcount * x) { + return ppdetail_atomic::print_pretty(ppii, x); } }; +#endif template struct ppdetail> { - static bool print_upto(ppstate * pps, const rp & x) { - if (auto p = x.get()) { - return ppdetail::print_upto(pps, *p); + static bool print_pretty(const ppindentinfo & ppii, const rp & x) { + if (ppii.upto()) { + if (auto p = x.get()) { + return ppdetail::print_pretty(ppii, *p); + } else { + /* note: degenerate case here, since never write newline for nullptr */ + + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + + return ppii.pps()->has_margin(); + } } else { - /* note: degenerate case here, since never write newline for nullptr */ - - pps->write("write(reflect::type_name()); - pps->write(">"); - - return pps->has_margin(); - } - } - - static void print_pretty(ppstate * pps, const rp & x) { - if (auto p = x.get()) { - ppdetail::print_pretty(pps, *p); - } else { - pps->write("write(reflect::type_name()); - pps->write(">"); + if (auto p = x.get()) { + ppdetail::print_pretty(ppii, *p); + } else { + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + } + return false; } } }; template struct ppdetail> { - static bool print_upto(ppstate * pps, const bp & x) { - if (auto p = x.get()) { - return ppdetail::print_upto(pps, *p); + static bool print_pretty(const ppindentinfo & ppii, const bp & x) { + if (ppii.upto()) { + if (auto p = x.get()) { + return ppdetail::print_pretty(ppii, *p); + } else { + /* note: degenerate case here, since never write newline for nullptr */ + + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + + return ppii.pps()->has_margin(); + } } else { - /* note: degenerate case here, since never write newline for nullptr */ - - pps->write("write(reflect::type_name()); - pps->write(">"); - - return pps->has_margin(); - } - } - - static void print_pretty(ppstate * pps, const bp & x) { - if (auto p = x.get()) { - ppdetail::print_pretty(pps, *p); - } else { - pps->write("write(reflect::type_name()); - pps->write(">"); + if (auto p = x.get()) { + ppdetail::print_pretty(ppii, *p); + } else { + ppii.pps()->write("write(reflect::type_name()); + ppii.pps()->write(">"); + } + return false; } } };