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

Extends Rewriter for variable substitution. More...

#include <mim/rewrite.h>

Inheritance diagram for mim::VarRewriter:
[legend]

Public Member Functions

Construction
 VarRewriter (World &world)
 VarRewriter (const Var *var, const Def *arg)
VarRewriter & add (const Var *var, const Def *arg)
 Substitutes arg for var.
rewrite
const Def * rewrite (const Def *) final
const Def * rewrite_mut (Def *) final
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 * lookup (const Def *old_def)
 Lookup old_def by searching in reverse through the stack of maps.
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 (VarRewriter &vrw1, VarRewriter &vrw2) 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

Extends Rewriter for variable substitution.

See also
Rewriter

Definition at line 142 of file rewrite.h.

Constructor & Destructor Documentation

◆ VarRewriter() [1/2]

◆ VarRewriter() [2/2]

mim::VarRewriter::VarRewriter ( const Var * var,
const Def * arg )
inline

Definition at line 148 of file rewrite.h.

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

Member Function Documentation

◆ add()

VarRewriter & mim::VarRewriter::add ( const Var * var,
const Def * arg )
inline

Substitutes arg for var.

Definition at line 154 of file rewrite.h.

References mim::Rewriter::bind_old(), mim::Rewriter::map(), and VarRewriter().

Referenced by VarRewriter().

◆ rewrite()

const Def * mim::VarRewriter::rewrite ( const Def * old_def)
finalvirtual

◆ rewrite_mut()

const Def * mim::VarRewriter::rewrite_mut ( Def * mut)
finalvirtual

Reimplemented from mim::Rewriter.

Definition at line 302 of file rewrite.cpp.

References mim::Rewriter::bind_old(), mim::Def::has_var(), and mim::Rewriter::rewrite_mut().

Referenced by rewrite().

◆ swap

void swap ( VarRewriter & vrw1,
VarRewriter & vrw2 )
friend

Definition at line 167 of file rewrite.h.

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

Referenced by swap.


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