MimIR 0.1
MimIR is my Intermediate Representation
Loading...
Searching...
No Matches
mim::plug::direct::DS2CPS Class Reference

Converts direct style function to cps functions. More...

#include <mim/plug/direct/pass/ds2cps.h>

Inheritance diagram for mim::plug::direct::DS2CPS:
[legend]

Public Member Functions

 DS2CPS (PassMan &man)
 
Ref rewrite (Ref) override
 
- Public Member Functions inherited from mim::RWPass< DS2CPS, Lam >
 RWPass (PassMan &man, std::string_view name)
 
bool inspect () const override
 Should the PassMan even consider this pass?
 
Lamcurr_mut () const
 
- Public Member Functions inherited from mim::Pass
 Pass (PassMan &, std::string_view name)
 
virtual ~Pass ()=default
 
Worldworld ()
 
PassManman ()
 
const PassManman () const
 
std::string_view name () const
 
size_t index () const
 
virtual Ref rewrite (const Var *var)
 
virtual Ref rewrite (const Proxy *proxy)
 
virtual undo_t analyze (Ref)
 
virtual undo_t analyze (const Var *)
 
virtual undo_t analyze (const Proxy *)
 
virtual bool fixed_point () const
 
virtual void enter ()
 Invoked just before Pass::rewriteing PassMan::curr_mut's body.
 
virtual void prepare ()
 Invoked once before entering the main rewrite loop.
 
const Proxyproxy (Ref type, Defs ops, u32 tag=0)
 
const Proxyisa_proxy (Ref def, u32 tag=0)
 Check whether given def is a Proxy whose Proxy::pass matches this Pass's IPass::index.
 
const Proxyas_proxy (Ref def, u32 tag=0)
 

Detailed Description

Converts direct style function to cps functions.

To do so, for each (non-type-level) ds function a corresponding cps function is created:

f: [a: A] -> B
f_cps: Cn [a: A, Cn B]

Only the type signature of the function is changed and the body is wrapped in the newly added return continuation. (Technical detail: the arguments are substituted to fit the new function)

In a second distinct but connected step, the call sites are converted: For a direct style call f args, the call to the cps function cps2ds_dep ... f_cps args is introduced. The underlying substitution is f -> cps2ds_dep ... f_cps.

Definition at line 21 of file ds2cps.h.

Constructor & Destructor Documentation

◆ DS2CPS()

mim::plug::direct::DS2CPS::DS2CPS ( PassMan & man)
inline

Definition at line 23 of file ds2cps.h.

Member Function Documentation

◆ rewrite()

Ref mim::plug::direct::DS2CPS::rewrite ( Ref def)
overridevirtual

Reimplemented from mim::Pass.

Definition at line 11 of file ds2cps.cpp.

References mim::World::app(), mim::Def::world(), and mim::Pass::world().


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