MimIR
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::Zonker Class Reference

#include <mim/rewrite.h>

Inheritance diagram for mim::Zonker:
[legend]

Public Member Functions

const Def * lookup (const Def *old_def) final
 Lookup old_def by searching in reverse through the stack of maps.
C'tor
 Zonker (World &world)
rewrite
const Def * rewrite (const Def *) final
const Def * rewrite_mut (Def *mut) final
const Def * rewire_mut (Def *)
Public Member Functions inherited from mim::Rewriter
template<class D = Def>
D * curr_mut () const
 Rewriter (World &world)
virtual ~Rewriter ()
void reset ()
World & world ()
void push (Vars old_vars={}, Vars new_vars={})
void pop ()
void bind_old (const Var *var)
 Adds the old var - if any - to the innermost scope.
void bind_new (const Var *var)
 Adds the new var - if any - to the innermost scope.
void bind (const Var *old_var, const Var *new_var)
const Def * map (const Def *old_def, const Def *new_def)
const Def * map (const Def *old_def, Defs new_defs)
const Def * map (Defs old_defs, const Def *new_def)
const Def * map (Defs old_defs, Defs new_defs)
virtual const Def * rewrite_imm (const Def *)
virtual const Def * rewrite_stub (Def *, Def *)
const Def * rewrite_stub (Def *old_mut, Def *new_mut, fe::View< size_t > new2old)
 Like above, but new_mut may have a different number of ops than old_mut: new_mut->op(i) is rewritten from old_mut->op(new2old[i]).
virtual DefVec rewrite (Defs)
virtual const Def * rewrite_imm_Lit (const Lit *)
virtual const Def * rewrite_imm_Axm (const Axm *)
virtual const Def * rewrite_imm_Var (const Var *)
virtual const Def * rewrite_imm_Proxy (const Proxy *)
virtual const Def * rewrite_imm_Type (const Type *)
virtual const Def * rewrite_imm_Level (const Level *)
virtual const Def * rewrite_imm_LMax (const LMax *)
virtual const Def * rewrite_imm_LSucc (const LSucc *)
virtual const Def * rewrite_imm_Pi (const Pi *)
virtual const Def * rewrite_imm_Lam (const Lam *)
virtual const Def * rewrite_imm_App (const App *)
virtual const Def * rewrite_imm_Sigma (const Sigma *)
virtual const Def * rewrite_imm_Tuple (const Tuple *)
virtual const Def * rewrite_imm_Extract (const Extract *)
virtual const Def * rewrite_imm_Insert (const Insert *)
virtual const Def * rewrite_imm_Arr (const Arr *)
virtual const Def * rewrite_imm_Pack (const Pack *)
virtual const Def * rewrite_imm_Join (const Join *)
virtual const Def * rewrite_imm_Inj (const Inj *)
virtual const Def * rewrite_imm_Match (const Match *)
virtual const Def * rewrite_imm_Variant (const Variant *)
virtual const Def * rewrite_imm_Top (const Top *)
virtual const Def * rewrite_imm_Bot (const Bot *)
virtual const Def * rewrite_imm_Reform (const Reform *)
virtual const Def * rewrite_imm_Rule (const Rule *)
virtual const Def * rewrite_imm_Single (const Single *)
virtual const Def * rewrite_imm_Wrap (const Wrap *)
virtual const Def * rewrite_imm_Nat (const Nat *)
virtual const Def * rewrite_imm_Idx (const Idx *)
virtual const Def * rewrite_imm_Nom (const Nom *)
virtual const Def * rewrite_imm_Name (const Name *)
virtual const Def * rewrite_imm_Struc (const Struc *)
virtual const Def * rewrite_mut_Hole (Hole *)
virtual const Def * rewrite_mut_Pi (Pi *)
virtual const Def * rewrite_mut_Lam (Lam *)
virtual const Def * rewrite_mut_Sigma (Sigma *)
virtual const Def * rewrite_mut_Arr (Arr *)
virtual const Def * rewrite_mut_Pack (Pack *)
virtual const Def * rewrite_mut_Variant (Variant *)
virtual const Def * rewrite_mut_Rule (Rule *)
virtual const Def * rewrite_imm_Seq (const Seq *seq)
virtual const Def * rewrite_mut_Seq (Seq *seq)

Friends

void swap (Zonker &z1, Zonker &z2) noexcept

Additional Inherited Members

Protected Member Functions inherited from mim::Rewriter
Def2Def & old2new ()
 The map of the innermost push() scope.
bool has_intersection (const Def *old_def)
 Does old_def depend on the old Vars of any scope?
auto enter (Def *new_mut)
 Updates curr_mut() to new_mut and restores it at the end of the scope.
const Def * seal (Def *old_mut, Def *new_mut)
 The tail of rewrite_stub: immutabilizes new_mut in hindsight, as rewriting may have made it vacuous.
Protected Attributes inherited from mim::Rewriter
fe::Vector< Scope > scopes_

Detailed Description

Definition at line 173 of file rewrite.h.

Constructor & Destructor Documentation

◆ Zonker()

mim::Zonker::Zonker ( World & world)
inline

Definition at line 177 of file rewrite.h.

References mim::Rewriter::Rewriter(), and mim::Rewriter::world().

Referenced by swap.

Member Function Documentation

◆ lookup()

const Def * mim::Zonker::lookup ( const Def * old_def)
finalvirtual

Lookup old_def by searching in reverse through the stack of maps.

Returns
nullptr if nothing was found.

Reimplemented from mim::Rewriter.

Definition at line 311 of file rewrite.cpp.

References mim::Def::isa_mut(), and mim::Rewriter::old2new().

◆ rewire_mut()

◆ rewrite()

const Def * mim::Zonker::rewrite ( const Def * def)
finalvirtual

Reimplemented from mim::Rewriter.

Definition at line 320 of file rewrite.cpp.

References mim::Def::isa_mut(), mim::Def::needs_zonk(), and mim::Rewriter::rewrite().

Referenced by rewire_mut(), and mim::Def::zonk().

◆ rewrite_mut()

const Def * mim::Zonker::rewrite_mut ( Def * mut)
inlinefinalvirtual

Reimplemented from mim::Rewriter.

Definition at line 186 of file rewrite.h.

References mim::Rewriter::map().

◆ swap

void swap ( Zonker & z1,
Zonker & z2 )
friend

Definition at line 190 of file rewrite.h.

References mim::Rewriter::Rewriter(), swap, and Zonker().

Referenced by swap.


The documentation for this class was generated from the following files: