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.

2 lines
7.4 KiB

This file contains ambiguous Unicode characters!

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>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>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; <a href="../index.html">Pulselib</a> &#x00BB; 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="../PulseAbstractValue/index.html#type-t">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="../PulsePathCondition/index.html#type-t">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="../PulseValueHistory/index.html#type-t">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="../PulsePathCondition/index.html#type-t">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="../PulsePathCondition/index.html#type-t">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>