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.
|
|
|
|
<!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> — <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">‑></span> <a href="index.html#type-t">t</a> <span class="keyword">‑></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">‑></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">‑></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">‑></span> init:<span class="type-var">'accum</span> <span class="keyword">‑></span> f:(<span class="type-var">'accum</span> <span class="keyword">‑></span> <a href="Node/index.html#type-t">Node.t</a> <span class="keyword">‑></span> <a href="../InferIR/Sil/index.html#type-instr">InferIR.Sil.instr</a> <span class="keyword">‑></span> <span class="type-var">'accum</span>) <span class="keyword">‑></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">‑></span> f:(<a href="../InferIR/Sil/index.html#type-instr">InferIR.Sil.instr</a> <span class="keyword">‑></span> <span class="type-var">'a</span> option) <span class="keyword">‑></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">‑></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">‑></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">‑></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">‑></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">‑></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">‑></span> <a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">‑></span> <a href="../InferIR/Exp/index.html#type-closure">InferIR.Exp.closure</a> option list <span class="keyword">‑></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">‑></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>
|