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.

9 lines
28 KiB

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>InferIR__PredSymb (InferIR.InferIR__PredSymb)</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__PredSymb</span></h1></header><p>The Smallfoot Intermediate Language: Predicate Symbols</p><div class="spec module" id="module-F"><a href="#module-F" class="anchor"></a><div class="def module"><code><span class="keyword">module </span>F = Format</code></div><div class="doc"></div></div><h3>Programs and Types</h3><div class="spec type" id="type-func_attribute"><a href="#type-func_attribute" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>func_attribute</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-func_attribute.FA_sentinel" class="anchored"><td class="def constructor"><a href="#type-func_attribute.FA_sentinel" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">FA_sentinel</span><span class="keyword"> of </span>int<span class="keyword"> * </span>int</code></td></tr></table><code></code></div><div class="doc"></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_func_attribute"><a href="#val-compare_func_attribute" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_func_attribute : <a href="index.html#type-func_attribute">func_attribute</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-func_attribute">func_attribute</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-pp_func_attribute"><a href="#val-pp_func_attribute" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>pp_func_attribute : <a href="index.html#module-F">F</a>.formatter <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-func_attribute">func_attribute</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"></div></div><div class="spec val" id="val-get_sentinel_func_attribute_value"><a href="#val-get_sentinel_func_attribute_value" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_sentinel_func_attribute_value : <a href="index.html#type-func_attribute">func_attribute</a> list <span class="keyword">&#8209;&gt;</span> (int<span class="keyword"> * </span>int) option</code></div><div class="doc"><p>Return the value of the FA_sentinel attribute in <code class="code">attr_list</code> if it is found</p></div></div><div class="spec type" id="type-access"><a href="#type-access" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>access</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-access.Default" class="anchored"><td class="def constructor"><a href="#type-access.Default" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Default</span></code></td></tr><tr id="type-access.Public" class="anchored"><td class="def constructor"><a href="#type-access.Public" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Public</span></code></td></tr><tr id="type-access.Private" class="anchored"><td class="def constructor"><a href="#type-access.Private" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Private</span></code></td></tr><tr id="type-access.Protected" class="anchored"><td class="def constructor"><a href="#type-access.Protected" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Protected</span></code></td></tr></table><code></code></div><div class="doc"><p>Visibility modifiers.</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_access"><a href="#val-compare_access" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_access : <a href="index.html#type-access">access</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-access">access</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-equal_access"><a href="#val-equal_access" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal_access : <a href="index.html#type-access">access</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-access">access</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-string_of_access"><a href="#val-string_of_access" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>string_of_access : <a href="index.html#type-access">access</a> <span class="keyword">&#8209;&gt;</span> string</code></div><div class="doc"></div></div><div class="spec type" id="type-mem_kind"><a href="#type-mem_kind" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>mem_kind</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-mem_kind.Mmalloc" class="anchored"><td class="def constructor"><a href="#type-mem_kind.Mmalloc" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Mmalloc</span></code></td><td class="doc"><p>(** memory allocated with malloc *)</p></td></tr><tr id="type-mem_kind.Mnew" class="anchored"><td class="def constructor"><a href="#type-mem_kind.Mnew" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Mnew</span></code></td><td class="doc"><p>(** memory allocated with new *)</p></td></tr><tr id="type-mem_kind.Mnew_array" class="anchored"><td class="def constructor"><a href="#type-mem_kind.Mnew_array" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Mnew_array</span></code></td><td class="doc"><p>(** memory allocated with new<code class="code"></code> *)</p></td></tr><tr id="type-mem_kind.Mobjc" class="anchored"><td class="def constructor"><a href="#type-mem_kind.Mobjc" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Mobjc</span></code></td><td class="doc"><p>(** memory allocated with objective-c alloc *)</p></td></tr></table><code></code></div><div class="doc"></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_mem_kind"><a href="#val-compare_mem_kind" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_mem_kind : <a href="index.html#type-mem_kind">mem_kind</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-mem_kind">mem_kind</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec type" id="type-resource"><a href="#type-resource" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>resource</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-resource.Rmemory" class="anchored"><td class="def constructor"><a href="#type-resource.Rmemory" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Rmemory</span><span class="keyword"> of </span><a href="index.html#type-mem_kind">mem_kind</a></code></td></tr><tr id="type-resource.Rfile" class="anchored"><td class="def constructor"><a href="#type-resource.Rfile" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Rfile</span></code></td></tr><tr id="type-resource.Rignore" class="anchored"><td class="def constructor"><a href="#type-resource.Rignore" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Rignore</span></code></td></tr><tr id="type-resource.Rlock" class="anchored"><td class="def constructor"><a href="#type-resource.Rlock" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Rlock</span></code></td></tr></table><code></code></div><div class="doc"><p>resource that can be allocated</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_resource"><a href="#val-compare_resource" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_resource : <a href="index.html#type-resource">resource</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-resource">resource</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec type" id="type-res_act_kind"><a href="#type-res_act_kind" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>res_act_kind</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-res_act_kind.Racquire" class="anchored"><td class="def constructor"><a href="#type-res_act_kind.Racquire" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Racquire</span></code></td></tr><tr id="type-res_act_kind.Rrelease" class="anchored"><td class="def constructor"><a href="#type-res_act_kind.Rrelease" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Rrelease</span></code></td></tr></table><code></code></div><div class="doc"><p>kind of resource action</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_res_act_kind"><a href="#val-compare_res_act_kind" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_res_act_kind : <a href="index.html#type-res_act_kind">res_act_kind</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-res_act_kind">res_act_kind</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-equal_res_act_kind"><a href="#val-equal_res_act_kind" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal_res_act_kind : <a href="index.html#type-res_act_kind">res_act_kind</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-res_act_kind">res_act_kind</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec type" id="type-dangling_kind"><a href="#type-dangling_kind" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>dangling_kind</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-dangling_kind.DAuninit" class="anchored"><td class="def constructor"><a href="#type-dangling_kind.DAuninit" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">DAuninit</span></code></td><td class="doc"><p>(** pointer is dangling because it is uninitialized *)</p></td></tr><tr id="type-dangling_kind.DAaddr_stack_var" class="anchored"><td class="def constructor"><a href="#type-dangling_kind.DAaddr_stack_var" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">DAaddr_stack_var</span></code></td><td class="doc"><p>(** pointer is dangling because it is the address of a stack variable which went out of scope *)</p></td></tr><tr id="type-dangling_kind.DAminusone" class="anchored"><td class="def constructor"><a href="#type-dangling_kind.DAminusone" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">DAminusone</span></code></td><td class="doc"><p>(** pointer is -1 *)</p></td></tr></table><code></code></div><div class="doc"><p>kind of dangling pointers</p></div></div><div class="spec type" id="type-path_pos"><a href="#type-path_pos" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>path_pos</code><code><span class="keyword"> = </span><a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span class="keyword"> * </span>int</code><code></code></div><div class="doc"><p>position in a path: proc name, node id</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_path_pos"><a href="#val-compare_path_pos" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_path_pos : <a href="index.html#type-path_pos">path_pos</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-path_pos">path_pos</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-equal_path_pos"><a href="#val-equal_path_pos" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal_path_pos : <a href="index.html#type-path_pos">path_pos</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-path_pos">path_pos</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec type" id="type-res_action"><a href="#type-res_action" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>res_action</code><code></code><code><span class="keyword"> = </span></code><code>{</code><table class="record"><tr id="type-res_action.ra_kind" class="anchored"><td class="def field"><a href="#type-res_action.ra_kind" class="anchor"></a><code>ra_kind : <a href="index.html#type-res_act_kind">res_act_kind</a>;</code></td><td class="doc"><p>(** kind of action *)</p></td></tr><tr id="type-res_action.ra_res" class="anchored"><td class="def field"><a href="#type-res_action.ra_res" class="anchor"></a><code>ra_res : <a href="index.html#type-resource">resource</a>;</code></td><td class="doc"><p>(** kind of resource *)</p></td></tr><tr id="type-res_action.ra_pname" class="anchored"><td class="def field"><a href="#type-res_action.ra_pname" class="anchor"></a><code>ra_pname : <a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a>;</code></td><td class="doc"><p>(** name of the procedure used to acquire/release the resource *)</p></td></tr><tr id="type-res_action.ra_loc" class="anchored"><td class="def field"><a href="#type-res_action.ra_loc" class="anchor"></a><code>ra_loc : <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a>;</code></td><td class="doc"><p>(** location of the acquire/release *)</p></td></tr><tr id="type-res_action.ra_vpath" class="anchored"><td class="def field"><a href="#type-res_action.ra_vpath" class="anchor"></a><code>ra_vpath : <a href="../InferIR/DecompiledExp/index.html#type-vpath">InferIR.DecompiledExp.vpath</a>;</code></td><td class="doc"><p>(** vpath of the resource value *)</p></td></tr></table><code>}</code><code></code></div><div class="doc"><p>acquire/release action on a resource</p></div></div><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><span class="keyword"> = </span></code><table class="variant"><tr id="type-t.Aresource" class="anchored"><td class="def constructor"><a href="#type-t.Aresource" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aresource</span><span class="keyword"> of </span><a href="index.html#type-res_action">res_action</a></code></td><td class="doc"><p>(** resource acquire/release *)</p></td></tr><tr id="type-t.Aautorelease" class="anchored"><td class="def constructor"><a href="#type-t.Aautorelease" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aautorelease</span></code></td></tr><tr id="type-t.Adangling" class="anchored"><td class="def constructor"><a href="#type-t.Adangling" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Adangling</span><span class="keyword"> of </span><a href="index.html#type-dangling_kind">dangling_kind</a></code></td><td class="doc"><p>(** dangling pointer *)</p></td></tr><tr id="type-t.Aundef" class="anchored"><td class="def constructor"><a href="#type-t.Aundef" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aundef</span><span class="keyword"> of </span><a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span class="keyword"> * </span><a href="../InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a><span class="keyword"> * </span><a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a><span class="keyword"> * </span><a href="index.html#type-path_pos">path_pos</a></code></td></tr><tr id="type-t.Alocked" class="anchored"><td class="def constructor"><a href="#type-t.Alocked" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Alocked</span></code></td></tr><tr id="type-t.Aunlocked" class="anchored"><td class="def constructor"><a href="#type-t.Aunlocked" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aunlocked</span></code></td></tr><tr id="type-t.Adiv0" class="anchored"><td class="def constructor"><a href="#type-t.Adiv0" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Adiv0</span><span class="keyword"> of </span><a href="index.html#type-path_pos">path_pos</a></code></td><td class="doc"><p>(** value appeared in second argument of division at given path position *)</p></td></tr><tr id="type-t.Aobjc_null" class="anchored"><td class="def constructor"><a href="#type-t.Aobjc_null" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aobjc_null</span></code></td><td class="doc"><p>(** attributed exp is null due to a call to a method with given path as null receiver *)</p></td></tr><tr id="type-t.Aretval" class="anchored"><td class="def constructor"><a href="#type-t.Aretval" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aretval</span><span class="keyword"> of </span><a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span class="keyword"> * </span><a href="../InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a></code></td><td class="doc"><p>(** value was returned from a call to the given procedure, plus the annots of the return value *)</p></td></tr><tr id="type-t.Aobserver" class="anchored"><td class="def constructor"><a href="#type-t.Aobserver" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aobserver</span></code></td><td class="doc"><p>(** denotes an object registered as an observers to a notification center *)</p></td></tr><tr id="type-t.Aunsubscribed_observer" class="anchored"><td class="def constructor"><a href="#type-t.Aunsubscribed_observer" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Aunsubscribed_observer</span></code></td><td class="doc"><p>(** denotes an object unsubscribed from observers of a notification center *)</p></td></tr><tr id="type-t.Awont_leak" class="anchored"><td class="def constructor"><a href="#type-t.Awont_leak" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">Awont_leak</span></code></td><td class="doc"><p>(** value do not participate in memory leak analysis *)</p></td></tr></table><code></code></div><div class="doc"><p>Attributes are nary function symbols that are applied to expression arguments in Apred and
Anpred atomic formulas. Many operations don't make much sense for nullary predicates, and are
generally treated as no-ops. The first argument is treated specially, as the &quot;anchor&quot; of the
predicate application. For example, adding or removing an attribute uses the anchor to identify
the atom to operate on. Also, abstraction and normalization operations treat the anchor
specially and maintain more information on it than other arguments. Therefore when attaching an
attribute to an expression, that expression should be the first argument, optionally followed by
additional related expressions.</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-equal"><a href="#val-equal" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal : <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> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-mem_alloc_pname"><a href="#val-mem_alloc_pname" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>mem_alloc_pname : <a href="index.html#type-mem_kind">mem_kind</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a></code></div><div class="doc"><p>name of the allocation function for the given memory kind</p></div></div><div class="spec val" id="val-mem_dealloc_pname"><a href="#val-mem_dealloc_pname" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>mem_dealloc_pname : <a href="index.html#type-mem_kind">mem_kind</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a></code></div><div class="doc"><p>name of the deallocation function for the given memory kind</p></div></div><div class="spec type" id="type-category"><a href="#type-category" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>category</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-category.ACresource" class="anchored"><td class="def constructor"><a href="#type-category.ACresource" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACresource</span></code></td></tr><tr id="type-category.ACautorelease" class="anchored"><td class="def constructor"><a href="#type-category.ACautorelease" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACautorelease</span></code></td></tr><tr id="type-category.AClock" class="anchored"><td class="def constructor"><a href="#type-category.AClock" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">AClock</span></code></td></tr><tr id="type-category.ACdiv0" class="anchored"><td class="def constructor"><a href="#type-category.ACdiv0" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACdiv0</span></code></td></tr><tr id="type-category.ACobjc_null" class="anchored"><td class="def constructor"><a href="#type-category.ACobjc_null" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACobjc_null</span></code></td></tr><tr id="type-category.ACundef" class="anchored"><td class="def constructor"><a href="#type-category.ACundef" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACundef</span></code></td></tr><tr id="type-category.ACretval" class="anchored"><td class="def constructor"><a href="#type-category.ACretval" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACretval</span></code></td></tr><tr id="type-category.ACobserver" class="anchored"><td class="def constructor"><a href="#type-category.ACobserver" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACobserver</span></code></td></tr><tr id="type-category.ACwontleak" class="anchored"><td class="def constructor"><a href="#type-category.ACwontleak" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">ACwontleak</span></code></td></tr></table><code></code></div><div class="doc"><p>Categories of attributes</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_category"><a href="#val-compare_category" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_category : <a href="index.html#type-category">category</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-category">category</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div></details></div><div class="spec val" id="val-equal_category"><a href="#val-equal_category" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal_category : <a href="index.html#type-category">category</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-category">category</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-to_category"><a href="#val-to_category" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_category : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-category">category</a></code></div><div class="doc"><p>Return the category to which the attribute belongs.</p></div></div><div class="spec val" id="val-is_undef"><a href="#val-is_undef" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>is_undef : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-to_string"><a href="#val-to_string" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>to_string : <a href="../../InferStdlib/InferStdlib/Pp/index.html#type-env">InferStdlib.Pp.env</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> string</code></div><div class="doc"><p>convert the attribute to a string</p></div></div><div class="spec val" id="val-d_attribute"><a href="#val-d_attribute" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>d_attribute : <a href="index.html#type-t">t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Dump an attribute.</p></div></div></body></html>