<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Pulselib__PulseTopl (infer.Pulselib__PulseTopl)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.1"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> – <a href="../index.html">infer</a> &#x00BB; Pulselib__PulseTopl</nav><h1>Module <code>Pulselib__PulseTopl</code></h1></header><dl><dt class="spec type" id="type-value"><a href="#type-value" class="anchor"></a><code><span class="keyword">type</span> value</code><code> = <a href="../Pulselib/PulseAbstractValue/index.html#type-t">Pulselib.PulseAbstractValue.t</a></code></dt><dt class="spec type" id="type-event"><a href="#type-event" class="anchor"></a><code><span class="keyword">type</span> event</code><code> = </code><table class="variant"><tr id="type-event.ArrayWrite" class="anchored"><td class="def constructor"><a href="#type-event.ArrayWrite" class="anchor"></a><code>| </code><code><span class="constructor">ArrayWrite</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-event.aw_array" class="anchored"><td class="def field"><a href="#type-event.aw_array" class="anchor"></a><code>aw_array : <a href="index.html#type-value">value</a>;</code></td></tr><tr id="type-event.aw_index" class="anchored"><td class="def field"><a href="#type-event.aw_index" class="anchor"></a><code>aw_index : <a href="index.html#type-value">value</a>;</code></td></tr></table><code>}</code></td></tr><tr id="type-event.Call" class="anchored"><td class="def constructor"><a href="#type-event.Call" class="anchor"></a><code>| </code><code><span class="constructor">Call</span> <span class="keyword">of</span> </code><code>{</code><table class="record"><tr id="type-event.return" class="anchored"><td class="def field"><a href="#type-event.return" class="anchor"></a><code>return : <span><a href="index.html#type-value">value</a> option</span>;</code></td></tr><tr id="type-event.arguments" class="anchored"><td class="def field"><a href="#type-event.arguments" class="anchor"></a><code>arguments : <span><a href="index.html#type-value">value</a> list</span>;</code></td></tr><tr id="type-event.procname" class="anchored"><td class="def field"><a href="#type-event.procname" class="anchor"></a><code>procname : <a href="../IR/Procname/index.html#type-t">IR.Procname.t</a>;</code></td></tr></table><code>}</code></td></tr></table></dt><dt class="spec type" id="type-state"><a href="#type-state" class="anchor"></a><code><span class="keyword">type</span> state</code></dt></dl><div><div class="spec include"><div class="doc"><dl><dt class="spec value" id="val-compare_state"><a href="#val-compare_state" class="anchor"></a><code><span class="keyword">val</span> compare_state : <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> int</code></dt><dt class="spec value" id="val-equal_state"><a href="#val-equal_state" class="anchor"></a><code><span class="keyword">val</span> equal_state : <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> bool</code></dt></dl></div></div></div><dl><dt class="spec value" id="val-start"><a href="#val-start" class="anchor"></a><code><span class="keyword">val</span> start : unit <span>&#45;&gt;</span> <a href="index.html#type-state">state</a></code></dt><dd><p>Return the initial state of <code>Topl.automaton ()</code>.</p></dd></dl><dl><dt class="spec value" id="val-small_step"><a href="#val-small_step" class="anchor"></a><code><span class="keyword">val</span> small_step : <a href="../IBase/Location/index.html#type-t">IBase.Location.t</a> <span>&#45;&gt;</span> <a href="../Pulselib/PulsePathCondition/index.html#type-t">Pulselib.PulsePathCondition.t</a> <span>&#45;&gt;</span> <a href="index.html#type-event">event</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a></code></dt><dt class="spec value" id="val-large_step"><a href="#val-large_step" class="anchor"></a><code><span class="keyword">val</span> large_step : <span>call_location:<a href="../IBase/Location/index.html#type-t">IBase.Location.t</a></span> <span>&#45;&gt;</span> <span>callee_proc_name:<a href="../IR/Procname/index.html#type-t">IR.Procname.t</a></span> <span>&#45;&gt;</span> <span>substitution:<span><span>(<a href="index.html#type-value">value</a> * <a href="../Pulselib/PulseValueHistory/index.html#type-t">Pulselib.PulseValueHistory.t</a>)</span> <a href="../Pulselib__PulseAbstractValue/index.html#module-Map">Pulselib.PulseAbstractValue.Map</a>.t</span></span> <span>&#45;&gt;</span> <span>condition:<a href="../Pulselib/PulsePathCondition/index.html#type-t">Pulselib.PulsePathCondition.t</a></span> <span>&#45;&gt;</span> <span>callee_prepost:<a href="index.html#type-state">state</a></span> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a></code></dt><dd><p><code>large_step ~substitution ~condition state ~callee_prepost</code> updates <code>state</code> according to <code>callee_prepost</code>. The abstract values in <code>condition</code> and <code>state</code> are in one scope, and those in <code>callee_prepost</code> in another scope: the <code>substitution</code> maps from the callee scope to the condition&amp;state scope.</p></dd></dl><dl><dt class="spec value" id="val-filter_for_summary"><a href="#val-filter_for_summary" class="anchor"></a><code><span class="keyword">val</span> filter_for_summary : <a href="../Pulselib/PulsePathCondition/index.html#type-t">Pulselib.PulsePathCondition.t</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a></code></dt><dd><p>Remove from state those parts that are inconsistent with the path condition. (We do a cheap check to not introduce inconsistent Topl states, but they mey become inconsistent because the program path condition is updated later.)</p></dd></dl><dl><dt class="spec value" id="val-simplify"><a href="#val-simplify" class="anchor"></a><code><span class="keyword">val</span> simplify : <span>keep:<a href="../Pulselib__PulseAbstractValue/index.html#module-Set">Pulselib.PulseAbstractValue.Set</a>.t</span> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a></code></dt><dd><p>Keep only a subset of abstract values. This is used for extracting summaries.</p></dd></dl><dl><dt class="spec value" id="val-report_errors"><a href="#val-report_errors" class="anchor"></a><code><span class="keyword">val</span> report_errors : <a href="../IR/Procdesc/index.html#type-t">IR.Procdesc.t</a> <span>&#45;&gt;</span> <a href="../Absint/Errlog/index.html#type-t">Absint.Errlog.t</a> <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> unit</code></dt><dd><p>Calls <code>Reporting.log_issue</code> with error traces, if any.</p></dd></dl><dl><dt class="spec value" id="val-pp_state"><a href="#val-pp_state" class="anchor"></a><code><span class="keyword">val</span> pp_state : Stdlib.Format.formatter <span>&#45;&gt;</span> <a href="index.html#type-state">state</a> <span>&#45;&gt;</span> unit</code></dt></dl></div></body></html>