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

Recurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map. More...

#include <mim/rewrite.h>

Inheritance diagram for mim::Rewriter:
[legend]

Public Member Functions

Construction & Destruction
 Rewriter (std::unique_ptr< World > &&ptr)
 
 Rewriter (World &world)
 
virtual ~Rewriter ()=default
 
void reset (std::unique_ptr< World > &&ptr)
 
void reset ()
 
Getters
Worldworld ()
 
Push / Pop
virtual void push ()
 
virtual void pop ()
 
Map / Lookup

Map old_def to new_def and returns new_def.

virtual const Defmap (const Def *old_def, const Def *new_def)
 
const Defmap (const Def *old_def, Defs new_defs)
 
const Defmap (Defs old_defs, const Def *new_def)
 
const Defmap (Defs old_defs, Defs new_defs)
 
virtual const Deflookup (const Def *old_def)
 Lookup old_def by searching in reverse through the stack of maps.
 
rewrite

Recursively rewrite old Defs.

virtual const Defrewrite (const Def *)
 
virtual const Defrewrite_imm (const Def *)
 
virtual const Defrewrite_mut (Def *)
 
virtual const Defrewrite_stub (Def *, Def *)
 
virtual DefVec rewrite (Defs)
 
virtual const Defrewrite_imm_Seq (const Seq *seq)
 
virtual const Defrewrite_mut_Seq (Seq *seq)
 

Protected Attributes

std::deque< Def2Defold2news_
 

Friends

void swap (Rewriter &rw1, Rewriter &rw2) noexcept
 

Detailed Description

Recurseivly rebuilds part of a program into the provided World w.r.t. Rewriter::map.

This World may be different than the World we started with.

Definition at line 18 of file rewrite.h.

Constructor & Destructor Documentation

◆ Rewriter() [1/2]

mim::Rewriter::Rewriter ( std::unique_ptr< World > && ptr)
inline

◆ Rewriter() [2/2]

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

Definition at line 27 of file rewrite.h.

References push(), and world().

◆ ~Rewriter()

virtual mim::Rewriter::~Rewriter ( )
virtualdefault

Member Function Documentation

◆ lookup()

virtual const Def * mim::Rewriter::lookup ( const Def * old_def)
inlinevirtual

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

Returns
nullptr if nothing was found.

Reimplemented in mim::Zonker.

Definition at line 69 of file rewrite.h.

References old2news_.

Referenced by rewrite(), and mim::VarRewriter::rewrite().

◆ map() [1/4]

virtual const Def * mim::Rewriter::map ( const Def * old_def,
const Def * new_def )
inlinevirtual

◆ map() [2/4]

const Def * mim::Rewriter::map ( const Def * old_def,
Defs new_defs )

Definition at line 17 of file rewrite.cpp.

References old2news_, mim::World::tuple(), and world().

◆ map() [3/4]

const Def * mim::Rewriter::map ( Defs old_defs,
const Def * new_def )

Definition at line 20 of file rewrite.cpp.

References old2news_, mim::World::tuple(), and world().

◆ map() [4/4]

const Def * mim::Rewriter::map ( Defs old_defs,
Defs new_defs )

Definition at line 23 of file rewrite.cpp.

References old2news_, mim::World::tuple(), and world().

◆ pop()

virtual void mim::Rewriter::pop ( )
inlinevirtual

◆ push()

virtual void mim::Rewriter::push ( )
inlinevirtual

◆ reset() [1/2]

void mim::Rewriter::reset ( )
inline

Definition at line 38 of file rewrite.h.

References old2news_, pop(), and push().

Referenced by reset().

◆ reset() [2/2]

void mim::Rewriter::reset ( std::unique_ptr< World > && ptr)
inline

Definition at line 33 of file rewrite.h.

References reset().

◆ rewrite() [1/2]

◆ rewrite() [2/2]

DefVec mim::Rewriter::rewrite ( Defs ops)
virtual

Definition at line 60 of file rewrite.cpp.

References rewrite().

◆ rewrite_imm()

const Def * mim::Rewriter::rewrite_imm ( const Def * old_def)
virtual

Definition at line 39 of file rewrite.cpp.

References CODE_IMM, map(), MIM_IMM_NODE, and mim::Def::node().

Referenced by rewrite(), and mim::VarRewriter::rewrite().

◆ rewrite_imm_Seq()

const Def * mim::Rewriter::rewrite_imm_Seq ( const Seq * seq)
virtual

◆ rewrite_mut()

const Def * mim::Rewriter::rewrite_mut ( Def * old_mut)
virtual

Reimplemented in mim::VarRewriter, and mim::Zonker.

Definition at line 48 of file rewrite.cpp.

References CODE_MUT, MIM_MUT_NODE, and mim::Def::node().

Referenced by rewrite(), and mim::VarRewriter::rewrite_mut().

◆ rewrite_mut_Seq()

◆ rewrite_stub()

const Def * mim::Rewriter::rewrite_stub ( Def * old_mut,
Def * new_mut )
virtual

◆ world()

Friends And Related Symbol Documentation

◆ swap

void swap ( Rewriter & rw1,
Rewriter & rw2 )
friend

Definition at line 96 of file rewrite.h.

References Rewriter(), and swap.

Referenced by mim::ReplManPhase::apply(), mim::RWPhase::start(), and swap.

Member Data Documentation

◆ old2news_

std::deque<Def2Def> mim::Rewriter::old2news_
protected

Definition at line 107 of file rewrite.h.

Referenced by lookup(), mim::Zonker::lookup(), map(), map(), map(), map(), mim::Zonker::map(), pop(), push(), and reset().


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