xo-reader2: print TypeRef belonging to DVariabe
This commit is contained in:
parent
10d3a49a52
commit
e24a6bbdfd
3 changed files with 36 additions and 1 deletions
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <xo/reflect/TypeDescr.hpp>
|
||||
#include <xo/flatstring/flatstring.hpp>
|
||||
#include <xo/indentlog/print/pretty.hpp>
|
||||
|
||||
namespace xo {
|
||||
namespace scm {
|
||||
|
|
@ -22,6 +23,7 @@ namespace xo {
|
|||
using TypeDescr = xo::reflect::TypeDescr;
|
||||
using type_var = flatstring<20>;
|
||||
using prefix_type = flatstring<8>;
|
||||
using ppindentinfo = xo::print::ppindentinfo;
|
||||
|
||||
public:
|
||||
TypeRef() = default;
|
||||
|
|
@ -54,6 +56,9 @@ namespace xo {
|
|||
/** resolve TypeRef by supplying final type-description **/
|
||||
void resolve(TypeDescr td) noexcept { td_ = td; }
|
||||
|
||||
/** pretty-printer support **/
|
||||
bool pretty(const ppindentinfo & ppii) const;
|
||||
|
||||
private:
|
||||
/** unique (probably generated) name for type at this location **/
|
||||
type_var id_;
|
||||
|
|
@ -64,6 +69,18 @@ namespace xo {
|
|||
TypeDescr td_;
|
||||
};
|
||||
} /*namespace scm*/
|
||||
|
||||
namespace print {
|
||||
/** pretty printer in <xo/indentlog/print/pretty.hpp> relies on this specialization
|
||||
* to handle TypeRef instances
|
||||
**/
|
||||
template <>
|
||||
struct ppdetail<xo::scm::TypeRef> {
|
||||
static inline bool print_pretty(const ppindentinfo & ppii, const xo::scm::TypeRef x) {
|
||||
return x.pretty(ppii);
|
||||
}
|
||||
};
|
||||
}
|
||||
} /*namespace xo*/
|
||||
|
||||
/* end TypeRef.hpp */
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@
|
|||
|
||||
#include "DVariable.hpp"
|
||||
#include "exprtype.hpp"
|
||||
#include <xo/indentlog/print/quoted.hpp>
|
||||
|
||||
namespace xo {
|
||||
using xo::facet::typeseq;
|
||||
|
|
@ -38,6 +39,8 @@ namespace xo {
|
|||
bool
|
||||
DVariable::pretty(const ppindentinfo & ppii) const
|
||||
{
|
||||
using xo::print::quot;
|
||||
|
||||
auto name = (name_
|
||||
? std::string_view(*name_)
|
||||
: std::string_view(""));
|
||||
|
|
@ -45,7 +48,8 @@ namespace xo {
|
|||
return ppii.pps()->pretty_struct
|
||||
(ppii,
|
||||
"DVariable",
|
||||
refrtag("name", name));
|
||||
refrtag("name", quot(name)),
|
||||
refrtag("typeref", typeref_));
|
||||
}
|
||||
|
||||
} /*namespace scm*/
|
||||
|
|
|
|||
|
|
@ -4,6 +4,8 @@
|
|||
**/
|
||||
|
||||
#include "TypeRef.hpp"
|
||||
#include <xo/indentlog/print/pretty.hpp>
|
||||
#include <xo/indentlog/print/quoted.hpp>
|
||||
|
||||
namespace xo {
|
||||
namespace scm {
|
||||
|
|
@ -62,6 +64,18 @@ namespace xo {
|
|||
return (td_ != nullptr);
|
||||
}
|
||||
|
||||
bool
|
||||
TypeRef::pretty(const ppindentinfo & ppii) const
|
||||
{
|
||||
using xo::print::quot;
|
||||
|
||||
return ppii.pps()->pretty_struct
|
||||
(ppii,
|
||||
"TypeRef",
|
||||
refrtag("id", quot(id_)),
|
||||
refrtag("td", td_));
|
||||
}
|
||||
|
||||
} /*namespace scm*/
|
||||
} /*namespace xo*/
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue