|
|
const Def * | tuple () const |
|
const Def * | index () const |
|
const Def * | value () const |
|
World & | world () const |
|
flags_t | flags () const |
|
u32 | gid () const |
|
hash_t | hash () const |
|
node_t | node () const |
|
std::string_view | node_name () const |
|
const Def * | type () const |
|
const Def * | unfold_type () const |
| Yields the type of this Def and builds a new Type (UInc n) if necessary.
|
|
bool | is_term () const |
| Yields true if this:T and T:(Type 0) .
|
|
Ref | arity () const |
|
std::optional< nat_t > | isa_lit_arity () const |
|
nat_t | as_lit_arity () const |
|
template<size_t N = std::dynamic_extent> |
auto | ops () const |
|
const Def * | op (size_t i) const |
|
size_t | num_ops () const |
|
Def * | set (size_t i, const Def *def) |
| Successively set from left to right.
|
|
Def * | reset (size_t i, const Def *def) |
| Successively reset from left to right.
|
|
Def * | set (Defs ops) |
| Def::set ops all at once.
|
|
Def * | reset (Defs ops) |
| Def::reset ops all at once.
|
|
Def * | unset () |
| Unsets all Def::ops; works even, if not set at all or partially.
|
|
Def * | set_type (const Def *) |
|
void | unset_type () |
|
void | update () |
| Resolves Infers of this Def's type.
|
|
bool | is_set () const |
| Yields true if empty or the last op is set.
|
|
Defs | extended_ops () const |
|
const Def * | extended_op (size_t i) const |
|
size_t | num_extended_ops () const |
|
Defs | partial_ops () const |
|
const Def * | partial_op (size_t i) const |
|
size_t | num_partial_ops () const |
|
const Uses & | uses () const |
|
size_t | num_uses () const |
|
unsigned | dep () const |
|
bool | has_dep (Dep d) const |
|
bool | has_dep (unsigned u) const |
|
bool | dep_const () const |
|
nat_t | num_projs () const |
|
nat_t | num_tprojs () const |
| As above but yields 1, if Flags::scalarize_threshold is exceeded.
|
|
const Def * | proj (nat_t a, nat_t i) const |
| Similar to World::extract while assuming an arity of a , but also works on Sigmas and Arrays.
|
|
const Def * | proj (nat_t i) const |
| As above but takes Def::num_projs as arity.
|
|
const Def * | tproj (nat_t i) const |
| As above but takes Def::num_tprojs.
|
|
template<nat_t A = -1_n, class F > |
auto | projs (F f) const |
| Splits this Def via Def::projections into an Array (if A == -1_n ) or std::array (otherwise).
|
|
template<class F > |
auto | tprojs (F f) const |
|
template<class F > |
auto | projs (nat_t a, F f) const |
|
template<nat_t A = -1_n> |
auto | projs () const |
|
auto | tprojs () const |
|
auto | projs (nat_t a) const |
|
nat_t | num_vars () |
|
nat_t | num_tvars () |
|
Ref | var (nat_t a, nat_t i) |
|
Ref | var (nat_t i) |
|
Ref | tvar (nat_t i) |
|
template<nat_t A = std::dynamic_extent, class F > |
auto | vars (F f) |
|
template<class F > |
auto | tvars (F f) |
|
template<nat_t A = std::dynamic_extent> |
auto | vars () |
|
auto | tvars () |
|
template<class F > |
auto | vars (nat_t a, F f) |
|
auto | vars (nat_t a) |
|
Ref | var () |
| Not necessarily a Var: E.g., if the return type is [] , this will yield () .
|
|
const Var * | has_var () |
| Only returns not nullptr , if Var of this mutable has ever been created.
|
|
const Var * | has_var () const |
| As above if this is a mutable.
|
|
Muts | local_muts () const |
|
Vars | local_vars () const |
|
Vars | free_vars () const |
|
Vars | free_vars () |
|
bool | is_open () const |
| Has free_vars()?
|
|
bool | is_closed () const |
| Has no free_vars()?
|
|
Muts | fv_consumers () |
|
bool | is_external () const |
|
void | make_external () |
|
void | make_internal () |
|
void | transfer_external (Def *to) |
|
template<class T = Def> |
const T * | isa_imm () const |
|
template<class T = Def> |
const T * | as_imm () const |
|
template<class T = Def, class R > |
const T * | isa_imm (R(T::*f)() const) const |
|
template<class T = Def, bool invert = false> |
T * | isa_mut () const |
| If this is *mut*able, it will cast const ness away and perform a dynamic_cast to T .
|
|
template<class T = Def, bool invert = false> |
T * | as_mut () const |
| Asserts that this is a mutable, casts const ness away and performs a static_cast to T .
|
|
Dbg | dbg () const |
|
Loc | loc () const |
|
Sym | sym () const |
|
std::string | unique_name () const |
| name + "_" + Def::gid
|
|
template<bool Ow = false> |
const Def * | set (Loc l) const |
|
template<bool Ow = false> |
Def * | set (Loc l) |
|
template<bool Ow = false> |
const Def * | set (Sym s) const |
|
template<bool Ow = false> |
Def * | set (Sym s) |
|
template<bool Ow = false> |
const Def * | set (std::string s) const |
|
template<bool Ow = false> |
Def * | set (std::string s) |
|
template<bool Ow = false> |
const Def * | set (Loc l, Sym s) const |
|
template<bool Ow = false> |
Def * | set (Loc l, Sym s) |
|
template<bool Ow = false> |
const Def * | set (Loc l, std::string s) const |
|
template<bool Ow = false> |
Def * | set (Loc l, std::string s) |
|
template<bool Ow = false> |
const Def * | set (Dbg d) const |
|
template<bool Ow = false> |
Def * | set (Dbg d) |
|
const Def * | debug_prefix (std::string) const |
|
const Def * | debug_suffix (std::string) const |
|
Def * | stub (World &w, Ref type) |
|
Def * | stub (Ref type) |
|
Ref | rebuild (World &w, Ref type, Defs ops) const |
| Def::rebuilds this Def while using new_op as substitute for its i'th Def::op.
|
|
Ref | rebuild (Ref type, Defs ops) const |
|
virtual const Def * | immutabilize () |
| Tries to make an immutable from a mutable.
|
|
const Def * | refine (size_t i, const Def *new_op) const |
|
DefVec | reduce (const Def *arg) const |
| Rewrites Def::ops by substituting this mutable's Var with arg .
|
|
DefVec | reduce (const Def *arg) |
|
virtual void | check () |
|
void | dump () const |
|
void | dump (int max) const |
|
void | write (int max) const |
|
void | write (int max, const char *file) const |
|
std::ostream & | stream (std::ostream &, int max) const |
|
void | dot (std::ostream &os, uint32_t max=0xFFFFFF, bool types=false) const |
|
void | dot (const char *file=nullptr, uint32_t max=0xFFFFFF, bool types=false) const |
| Same as above but write to file or std::cout if file is nullptr .
|
|
void | dot (const std::string &file, uint32_t max=0xFFFFFF, bool types=false) const |
|
const Insert * | set (Loc l) const |
|
Insert * | set (Loc l) |
|
const Insert * | set (Sym s) const |
|
Insert * | set (Sym s) |
|
const Insert * | set (std::string s) const |
|
Insert * | set (std::string s) |
|
const Insert * | set (Loc l, Sym s) const |
|
Insert * | set (Loc l, Sym s) |
|
const Insert * | set (Loc l, std::string s) const |
|
Insert * | set (Loc l, std::string s) |
|
const Insert * | set (Dbg d) const |
|
Insert * | set (Dbg d) |
|
Creates a new Tuple / Pack by inserting Insert::value at position Insert::index into Insert::tuple.
- Attention
- This is a functional Insert. The Insert::tuple itself remains untouched. The Insert itself is a new Tuple / Pack which contains the inserted Insert::value.
Definition at line 178 of file tuple.h.