You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

10 lines
23 KiB

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>InferIR__Procdesc (InferIR.InferIR__Procdesc)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><meta name="generator" content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><nav id="top"><a href="../index.html">Up</a> &mdash; <span class="package">package <a href="../index.html">InferIR</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">InferIR__Procdesc</span></h1></header><div class="spec module" id="module-Node"><a href="#module-Node" class="anchor"></a><div class="def module"><code><span class="keyword">module </span><a href="Node/index.html">Node</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div><div class="doc"><p>node of the control flow graph</p></div></div><div class="spec module" id="module-IdMap"><a href="#module-IdMap" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>IdMap : <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Map.S<span class="keyword"> with </span><span class="keyword">type </span><a href="index.html#module-IdMap">IdMap</a>.key<span class="keyword"> = </span><a href="Node/index.html#type-id">Node.id</a></code></div><div class="doc"><p>Map with node id keys.</p></div></div><div class="spec module" id="module-NodeHash"><a href="#module-NodeHash" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>NodeHash : <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Hashtbl.S<span class="keyword"> with </span><span class="keyword">type </span><a href="index.html#module-NodeHash">NodeHash</a>.key<span class="keyword"> = </span><a href="Node/index.html#type-t">Node.t</a></code></div><div class="doc"><p>Hash table with nodes as keys.</p></div></div><div class="spec module" id="module-NodeMap"><a href="#module-NodeMap" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>NodeMap : <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Map.S<span class="keyword"> with </span><span class="keyword">type </span><a href="index.html#module-NodeMap">NodeMap</a>.key<span class="keyword"> = </span><a href="Node/index.html#type-t">Node.t</a></code></div><div class="doc"><p>Map over nodes.</p></div></div><div class="spec module" id="module-NodeSet"><a href="#module-NodeSet" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>NodeSet : <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Set.S<span class="keyword"> with </span><span class="keyword">type </span><a href="index.html#module-NodeSet">NodeSet</a>.elt<span class="keyword"> = </span><a href="Node/index.html#type-t">Node.t</a></code></div><div class="doc"><p>Set of nodes.</p></div></div><p>procedure descriptions</p><div class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>t</code><code></code><code></code></div><div class="doc"><p>proc description</p></div></div><div class="spec include"><div class="doc"></div><details open="open"><summary><span class="def"><code><span class="keyword">include </span><span class="keyword">sig</span> ... <span class="keyword">end</span></code></span></summary><div class="spec val" id="val-compare"><a href="#val-compare" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-append_locals"><a href="#val-append_locals" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>append_locals : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span>
and add it to the procdesc.</p></div></div><div class="spec val" id="val-did_preanalysis"><a href="#val-did_preanalysis" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>did_preanalysis : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"><p>true if we ran the preanalysis on the CFG associated with <code class="code">t</code></p></div></div><div class="spec val" id="val-fold_instrs"><a href="#val-fold_instrs" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>fold_instrs : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> init:<span class="type-var">'accum</span> <span class="keyword">&#8209;&gt;</span> f:(<span class="type-var">'accum</span> <span class="keyword">&#8209;&gt;</span> <a href="Node/index.html#type-t">Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/Sil/index.html#type-instr">InferIR.Sil.instr</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'accum</span>) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'accum</span></code></div><div class="doc"><p>fold over all nodes and their instructions</p></div></div><div class="spec val" id="val-find_map_instrs"><a href="#val-find_map_instrs" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>find_map_instrs : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> f:(<a href="../InferIR/Sil/index.html#type-instr">InferIR.Sil.instr</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option) <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> option</code></div><div class="doc"></div></div><div class="spec val" id="val-from_proc_attributes"><a href="#val-from_proc_attributes" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>from_proc_attributes : <a href="../InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Use <code class="code">Cfg.create_proc_desc</code> if you are adding a proc desc to a cfg</p></div></div><div class="spec val" id="val-get_access"><a href="#val-get_access" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_access : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/PredSymb/index.html#type-access">InferIR.PredSymb.access</a></code></div><div class="doc"><p>Return the visibility attribute</p></div></div><div class="spec val" id="val-get_attributes"><a href="#val-get_attributes" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_attributes : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a></code></div><div class="doc"><p>Get the attributes of the procedure.</p></div></div><div class="spec val" id="val-get_captured"><a href="#val-get_captured" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_captured : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../InferIR/Mangled/index.html#type-t">InferIR.Mangled.t</a><span class="keyword"> * </span><a href="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a>) list</code></div><div class="doc"><p>Return name and type of block's captured variables</p></div></div><div class="spec val" id="val-get_exit_node"><a href="#val-get_exit_node" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_exit_node : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <a href="Node/index.html#type-t">Node.t</a></code></div><div class="doc"></div></div><div class="spec val" id="val-get_formals"><a href="#val-get_formals" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_formals : <a href="index.html#type-t">t</a> <span cl
(name, typ) where name is a parameter. The resulting procdesc is isomorphic but
all the type of the parameters are replaced in the instructions according to the list.
The virtual calls are also replaced to match the parameter types</p></div></div><div class="spec val" id="val-specialize_with_block_args"><a href="#val-specialize_with_block_args" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>specialize_with_block_args : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/Exp/index.html#type-closure">InferIR.Exp.closure</a> option list <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-t">t</a></code></div><div class="doc"><p>Creates a copy of a procedure description given a list of possible closures
that are passed as arguments to the method. The resulting procdesc is isomorphic but
a) the block parameters are replaces with the closures
b) the parameters of the method are extended with parameters for the captured variables
in the closures</p></div></div><div class="spec val" id="val-is_connected"><a href="#val-is_connected" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>is_connected : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> (unit, [ `Join | `Other ]) <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Result.t</code></div><div class="doc"><p>checks whether a cfg for the given procdesc is connected or not</p></div></div></body></html>