19 auto visit(
const ast::AST& value, string_view label) ->
auto& {
return visitor.visit(value, label), *
this; }
20 auto visit(std::nullptr_t value, string_view label) ->
auto& {
return visitor.visit(value, label), *
this; }
21 auto visit(
const string& value, string_view label) ->
auto& {
return visitor.visit(value, label), *
this; }
23 template <
typename T>
auto visit(
const ast::OptionalAnyBase<T>& any_base, string_view label) ->
auto& {
24 if (any_base.raw_ptr() !=
nullptr)
25 return visit(*any_base, label);
26 return visit(
nullptr, label);
29 template <
typename T>
auto maybe(
const ast::OptionalAnyBase<T>& any_base, string_view label) ->
auto& {
30 if (any_base.raw_ptr() !=
nullptr)
31 return visit(*any_base, label);
35 template <
typename T>
auto visit(
const ast::AnyBase<T>& any_base, string_view label) ->
auto& {
36 YUME_ASSERT(any_base.raw_ptr() !=
nullptr,
"AnyBase should never be null");
37 return visit(*any_base, label);
40 template <std::ranges::range Range>
41 requires (!std::convertible_to<Range, const char*>)
42 auto visit(
const Range& iter, string_view label) ->
auto& {
48 template <
typename T>
auto visit(
const optional<T>& opt, string_view label) ->
auto& {
54 template <visitable T>
auto visit(
const T& var, string_view label) ->
auto& {
55 var.visit([
this, label](
auto&& x) { this->visit(std::forward<
decltype(x)>(x), label); });
59 template <
typename T>
auto visit(std::pair<T, string_view>& pair) ->
auto& {
return visit(pair.first, pair.second); }
61 auto visit(std::same_as<bool>
auto value, string_view label) ->
auto& {
62 return visit(value ?
"true" :
"false", label);
65 auto maybe(
bool value, string_view label) ->
auto& {
97 body.
visit([&](
const string& s) { vis.visit(s,
"primitive"); },
98 [&](
const extern_decl_t& s) { vis.visit(s.name,
"extern").maybe(s.varargs,
"varargs"); },
99 [&](
const Compound& s) { vis.visit(s,
"body"); },
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
auto describe() const -> string override
A short, string representation for debugging.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
A statement consisting of multiple other statements, i.e. the body of a function.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
optional< string > parent
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
Body body
If this function declaration refers to a primitive, this field is a string representing the name of t...
{ string name extern_decl_t
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
std::unordered_set< string > annotations
vector< GenericParam > type_args
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
optional< Compound > else_clause
vector< IfClause > clauses
ty::Conv conversion
The conversion steps performed during this cast.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
std::set< string > annotations
auto describe() const -> string override
A short, string representation for debugging.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
auto describe() const -> string override
A short, string representation for debugging.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
vector< GenericParam > type_args
std::unordered_set< string > annotations
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
vector< TypeName > fields
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
vector< AnyTypeOrExpr > type_args
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
void visit(Visitor &visitor) const override
Recursively visit this ast node and all its constituents.
auto to_string() const -> string
auto visit(Us... us) -> decltype(auto)
#define YUME_ASSERT(assertion, message)