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.

3 lines
29 KiB

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>InferModules__EradicateChecks (infer.InferModules__EradicateChecks)</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">infer</a></span></nav><header><h1><span class="keyword">Module</span> <span class="module-path">InferModules__EradicateChecks</span></h1></header><p>Module for the checks called by Eradicate.</p><div class="spec val" id="val-return_nonnull_silent"><a href="#val-return_nonnull_silent" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>return_nonnull_silent : bool</code></div><div class="doc"></div></div><div class="spec val" id="val-get_field_annotation"><a href="#val-get_field_annotation" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>get_field_annotation : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR__Typ/index.html#type-typ">InferIR__Typ.typ</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR__Typ/index.html#type-typ">InferIR__Typ.typ</a><span class="keyword"> * </span><a href="../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a>) option</code></div><div class="doc"></div></div><div class="spec val" id="val-report_error"><a href="#val-report_error" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>report_error : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/index.html#type-err_instance">InferModules.TypeErr.err_instance</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> option <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"></div></div><div class="spec val" id="val-explain_expr"><a href="#val-explain_expr" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>explain_expr : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span class="keyword">&#8209;&gt;</span> string option</code></div><div class="doc"></div></div><div class="spec val" id="val-classify_procedure"><a href="#val-classify_procedure" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>classify_procedure : <a href="../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> <span class="keyword">&#8209;&gt;</span> string</code></div><div class="doc"><p>Classify a procedure.</p></div></div><div class="spec val" id="val-is_virtual"><a href="#val-is_virtual" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>is_virtual : (<a href="../../InferIR/InferIR/Mangled/index.html#type-t">InferIR.Mangled.t</a><span class="keyword"> * </span><span class="type-var">'a</span><span class="keyword"> * </span><span class="type-var">'b</span>) list <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-check_field_access"><a href="#val-check_field_access" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_field_access : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check an access (read or write) to a field.</p></div></div><div class="spec val" id="val-check_array_access"><a href="#val-check_array_access" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_array_access : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> bool <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check an access to an array</p></div></div><div class="spec type" id="type-from_call"><a href="#type-from_call" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>from_call</code><code></code><code><span class="keyword"> = </span></code><table class="variant"><tr id="type-from_call.From_condition" class="anchored"><td class="def constructor"><a href="#type-from_call.From_condition" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">From_condition</span></code></td><td class="doc"><p>(** Direct condition *)</p></td></tr><tr id="type-from_call.From_instanceof" class="anchored"><td class="def constructor"><a href="#type-from_call.From_instanceof" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">From_instanceof</span></code></td><td class="doc"><p>(** x instanceof C *)</p></td></tr><tr id="type-from_call.From_is_false_on_null" class="anchored"><td class="def constructor"><a href="#type-from_call.From_is_false_on_null" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">From_is_false_on_null</span></code></td><td class="doc"><p>(** returns false on null *)</p></td></tr><tr id="type-from_call.From_is_true_on_null" class="anchored"><td class="def constructor"><a href="#type-from_call.From_is_true_on_null" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">From_is_true_on_null</span></code></td><td class="doc"><p>(** returns true on null *)</p></td></tr><tr id="type-from_call.From_optional_isPresent" class="anchored"><td class="def constructor"><a href="#type-from_call.From_optional_isPresent" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">From_optional_isPresent</span></code></td><td class="doc"><p>(** x.isPresent *)</p></td></tr><tr id="type-from_call.From_containsKey" class="anchored"><td class="def constructor"><a href="#type-from_call.From_containsKey" class="anchor"></a><code><span class="keyword">| </span></code><code><span class="constructor">From_containsKey</span></code></td><td class="doc"><p>(** x.containsKey *)</p></td></tr></table><code></code></div><div class="doc"><p>Where the condition is coming from</p></div></div><div class="spec val" id="val-compare_from_call"><a href="#val-compare_from_call" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>compare_from_call : <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> int</code></div><div class="doc"></div></div><div class="spec val" id="val-equal_from_call"><a href="#val-equal_from_call" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>equal_from_call : <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> bool</code></div><div class="doc"></div></div><div class="spec val" id="val-check_condition"><a href="#val-check_condition" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_condition : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> bool <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a> <span class="keyword">&#8209;&gt;</span> bool <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/Idenv/index.html#type-t">InferModules.Idenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/Printer/LineReader/index.html#type-t">InferModules.Printer.LineReader.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check the normalized &quot;is zero&quot; or &quot;is not zero&quot; condition of a prune instruction.</p></div></div><div class="spec val" id="val-check_zero"><a href="#val-check_zero" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_zero : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a> <span class="keyword">&#8209;&gt;</span> bool <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/Idenv/index.html#type-t">InferModules.Idenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/Printer/LineReader/index.html#type-t">InferModules.Printer.LineReader.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check an &quot;is zero&quot; condition.</p></div></div><div class="spec val" id="val-check_nonzero"><a href="#val-check_nonzero" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_nonzero : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a> <span class="keyword">&#8209;&gt;</span> bool <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-from_call">from_call</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/Idenv/index.html#type-t">InferModules.Idenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/Printer/LineReader/index.html#type-t">InferModules.Printer.LineReader.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check an &quot;is not zero&quot; condition.</p></div></div><div class="spec val" id="val-check_field_assignment"><a href="#val-check_field_assignment" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_field_assignment : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'c</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'c</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'d</span> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'e</span><span class="keyword"> * </span><a href="../../InferIR/InferIR/Annot/Item/index.html#type-t">InferIR.Annot.Item.t</a>) option <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'c</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'d</span><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a><span class="keyword"> * </span><a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> list) <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a><span class="keyword"> * </span><span class="type-var">'f</span>) <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check an assignment to a field.</p></div></div><div class="spec val" id="val-check_constructor_initialization"><a href="#val-check_constructor_initialization" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_constructor_initialization : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span class="keyword"> * </span><span class="type-var">'a</span> <a href="../InferModules/TypeState/index.html#type-t">InferModules.TypeState.t</a>) <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.List.t <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Lazy.t <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a><span class="keyword"> * </span><span class="type-var">'b</span> <a href="../InferModules/TypeState/index.html#type-t">InferModules.TypeState.t</a>) <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.List.t <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Lazy.t <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check that nonnullable fields are initialized in constructors.</p></div></div><div class="spec val" id="val-check_return_annotation"><a href="#val-check_return_annotation" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_return_annotation : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'a</span><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a><span class="keyword"> * </span><span class="type-var">'b</span>) option <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/AnnotatedSignature/index.html#type-t">InferModules.AnnotatedSignature.t</a> <span class="keyword">&#8209;&gt;</span> bool <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check the annotations when returning from a method.</p></div></div><div class="spec val" id="val-check_call_receiver"><a href="#val-check_call_receiver" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_call_receiver : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> ((<a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span class="keyword"> * </span><span class="type-var">'b</span>)<span class="keyword"> * </span><span class="type-var">'c</span>) list <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'a</span> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'b</span> <span class="keyword">&#8209;&gt;</span> (<span class="type-var">'c</span><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a><span class="keyword"> * </span><span class="type-var">'d</span> list) <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <span class="type-var">'e</span><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a><span class="keyword"> * </span><span class="type-var">'f</span>) <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check the receiver of a virtual call.</p></div></div><div class="spec type" id="type-resolved_param"><a href="#type-resolved_param" class="anchor"></a><div class="def type"><code><span class="keyword">type </span>resolved_param</code><code></code><code><span class="keyword"> = </span></code><code>{</code><table class="record"><tr id="type-resolved_param.num" class="anchored"><td class="def field"><a href="#type-resolved_param.num" class="anchor"></a><code>num : int;</code></td></tr><tr id="type-resolved_param.formal" class="anchored"><td class="def field"><a href="#type-resolved_param.formal" class="anchor"></a><code>formal : <a href="../../InferIR/InferIR/Mangled/index.html#type-t">InferIR.Mangled.t</a><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a><span class="keyword"> * </span><a href="../../InferIR/InferIR/Typ/index.html#type-t">InferIR.Typ.t</a>;</code></td></tr><tr id="type-resolved_param.actual" class="anchored"><td class="def field"><a href="#type-resolved_param.actual" class="anchor"></a><code>actual : <a href="../../InferIR/InferIR/Exp/index.html#type-t">InferIR.Exp.t</a><span class="keyword"> * </span><a href="../InferModules/TypeAnnotation/index.html#type-t">InferModules.TypeAnnotation.t</a>;</code></td></tr><tr id="type-resolved_param.propagates_nullable" class="anchored"><td class="def field"><a href="#type-resolved_param.propagates_nullable" class="anchor"></a><code>propagates_nullable : bool;</code></td></tr></table><code>}</code><code></code></div><div class="doc"></div></div><div class="spec val" id="val-check_call_parameters"><a href="#val-check_call_parameters" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_call_parameters : <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/ProcAttributes/index.html#type-t">InferIR.ProcAttributes.t</a> <span class="keyword">&#8209;&gt;</span> <a href="index.html#type-resolved_param">resolved_param</a> <a href="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.List.t <span class="keyword">&#8209;&gt;</span> <a href="../../InferBase/InferBase/Location/index.html#type-t">InferBase.Location.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/TypeErr/InstrRef/index.html#type-t">InferModules.TypeErr.InstrRef.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Check the parameters of a call.</p></div></div><div class="spec val" id="val-check_overridden_annotations"><a href="#val-check_overridden_annotations" class="anchor"></a><div class="def val"><code><span class="keyword">val </span>check_overridden_annotations : (<a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/Node/index.html#type-t">InferIR.Procdesc.Node.t</a>) <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Tenv/index.html#type-t">InferIR.Tenv.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../../InferIR/InferIR/Procdesc/index.html#type-t">InferIR.Procdesc.t</a> <span class="keyword">&#8209;&gt;</span> <a href="../InferModules/AnnotatedSignature/index.html#type-t">InferModules.AnnotatedSignature.t</a> <span class="keyword">&#8209;&gt;</span> unit</code></div><div class="doc"><p>Checks if the annotations are consistent with the inherited class or with the
implemented interfaces</p></div></div></body></html>