This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>ClosuresSubstitution (infer.Backend.ClosuresSubstitution)</title><linkrel="stylesheet"href="../../../odoc.css"/><metacharset="utf-8"/><metaname="generator"content="odoc 1.5.1"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><scriptsrc="../../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><divclass="content"><header><nav><ahref="../index.html">Up</a>–<ahref="../../index.html">infer</a>»<ahref="../index.html">Backend</a>» ClosuresSubstitution</nav><h1>Module <code>Backend.ClosuresSubstitution</code></h1></header><divclass="spec module"id="module-L"><ahref="#module-L"class="anchor"></a><code><spanclass="keyword">module</span> L = <ahref="../../IBase/index.html#module-Logging">IBase.Logging</a></code></div><dl><dtclass="spec module"id="module-ExpClosure"><ahref="#module-ExpClosure"class="anchor"></a><code><spanclass="keyword">module</span><ahref="ExpClosure/index.html">ExpClosure</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></dt><dd><p>value domain, with the following concretization function <code>gamma</code>:</p></dd></dl><divclass="spec module"id="module-VDom"><ahref="#module-VDom"class="anchor"></a><code><spanclass="keyword">module</span><ahref="VDom/index.html">VDom</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-CFG"><ahref="#module-CFG"class="anchor"></a><code><spanclass="keyword">module</span> CFG = <ahref="../../Absint/ProcCfg/index.html#module-Normal">Absint.ProcCfg.Normal</a></code></div><divclass="spec module"id="module-Domain"><ahref="#module-Domain"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Domain/index.html">Domain</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec value"id="val-get_var"><ahref="#val-get_var"class="anchor"></a><code><spanclass="keyword">val</span> get_var : <ahref="Domain/index.html#type-t">Domain.t</a><span>-></span><ahref="../../IR/Var/index.html#type-t">IR.Var.t</a><span>-></span><ahref="Domain/index.html#type-value">Domain.value</a></code></dt><dtclass="spec value"id="val-eval_expr"><ahref="#val-eval_expr"class="anchor"></a><code><spanclass="keyword">val</span> eval_expr : <ahref="Domain/index.html#type-t">Domain.t</a><span>-></span><ahref="../../IR/Exp/index.html#type-t">IR.Exp.t</a><span>-></span><ahref="Domain/index.html#type-value">Domain.value</a></code></dt><dtclass="spec value"id="val-eval_instr"><ahref="#val-eval_instr"class="anchor"></a><code><spanclass="keyword">val</span> eval_instr : <ahref="Domain/index.html#type-t">Domain.t</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a><span>-></span><ahref="Domain/index.html#type-t">Domain.t</a></code></dt></dl><divclass="spec module"id="module-TransferFunctions"><ahref="#module-TransferFunctions"class="anchor"></a><code><spanclass="keyword">module</span><ahref="TransferFunctions/index.html">TransferFunctions</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><divclass="spec module"id="module-Analyzer"><ahref="#module-Analyzer"class="anchor"></a><code><spanclass="keyword">module</span><ahref="Analyzer/index.html">Analyzer</a> : <spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></div><dl><dtclass="spec value"id="val-get_invariant_at_node"><ahref="#val-get_invariant_at_node"class="anchor"></a><code><spanclass="keyword">val</span> get_invariant_at_node : <ahref="Analyzer/index.html#type-invariant_map">Analyzer.invariant_map</a><span>-></span><ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="Domain/index.html#type-t">Domain.t</a></code></dt><dtclass="spec value"id="val-replace_closure_call"><ahref="#val-replace_closure_call"class="anchor"></a><code><spanclass="keyword">val</span> replace_closure_call : <ahref="../../Absint__ProcCfg/DefaultNode/index.html#type-t">CFG.Node.t</a><span>-></span><ahref="Domain/index.html#type-t">Domain.t</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a></code></dt><dtclass="spec value"id="val-replace_closure_param"><ahref="#val-replace_closure_param"class="anchor"></a><code><spanclass="keyword">val</span> replace_closure_param : <ahref="../../Absint__ProcCfg/DefaultNode/index.html#type-t">CFG.Node.t</a><span>-></span><ahref="Domain/index.html#type-t">Domain.t</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a></code></dt><dd><p><code>replace_closure_param</code> propagates closures to function parameters, so that more functions are specialized by <code>CCallSpecializedWithClosures.process</code>. Note that unlike <code>replace_closure_call</code> running at the analysis phase, <code>replace_closure_param</code> should run before <code>CCallSpecializedWithClosures.process</code> at the capture phase.</p></dd></dl><dl><dtclass="spec value"id="val-process_common"><ahref="#val-process_common"class="anchor"></a><code><spanclass="keyword">val</span> process_common : <span>(<ahref="../../IR/Procdesc/Node/index.html#type-t">IR.Procdesc.Node.t</a><span>-></span><ahref="Domain/index.html#type-t">Domain.t</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a><span>-></span><ahref="../../IR/Sil/index.html#type-instr">IR.Sil.instr</a>)</span><span>-></span><ahref="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-process_closure_call"><ahref="#val-process_closure_call"class="anchor"></a><code><spanclass="keyword">val</span> process_closure_call : <ahref="../Summary/index.html#type-t">Summary.t</a><span>-></span> unit</code></dt><dtclass="spec value"id="val-process_closure_param"><ahref="#val-process_closure_param"class="anchor"></a><code><spanclass="keyword">val</span> process_closure_param : <ahref="../../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a><span>-></span> unit</code></dt></dl></div></body></html>