This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.
<!DOCTYPE html>
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><title>InferIR__Exp (InferIR.InferIR__Exp)</title><linkrel="stylesheet"href="../../odoc.css"/><metacharset="utf-8"/><metaname="viewport"content="width=device-width,initial-scale=1.0"/><metaname="generator"content="doc-ock-html v1.0.0-1-g1fc9bf0"/></head><body><navid="top"><ahref="../index.html">Up</a>—<spanclass="package">package <ahref="../index.html">InferIR</a></span></nav><header><h1><spanclass="keyword">Module</span><spanclass="module-path">InferIR__Exp</span></h1></header><p>The Smallfoot Intermediate Language: Expressions</p><divclass="spec module"id="module-F"><ahref="#module-F"class="anchor"></a><divclass="def module"><code><spanclass="keyword">module </span>F = Format</code></div><divclass="doc"></div></div><divclass="spec type"id="type-closure"><ahref="#type-closure"class="anchor"></a><divclass="def type"><code><spanclass="keyword">type </span>closure</code><code></code><code><spanclass="keyword"> = </span></code><code>{</code><tableclass="record"><trid="type-closure.name"class="anchored"><tdclass="def field"><ahref="#type-closure.name"class="anchor"></a><code>name : <ahref="../InferIR/Typ/Procname/index.html#type-t">InferIR.Typ.Procname.t</a>;</code></td></tr><trid="type-closure.captured_vars"class="anchored"><tdclass="def field"><ahref="#type-closure.captured_vars"class="anchor"></a><code>captured_vars : (<ahref="index.html#type-t">t</a><spanclass="keyword"> * </span><ahref="../InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a><spanclass="keyword"> * </span><ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a>) list;</code></td></tr></table><code>}</code><code></code></div><divclass="doc"></div></div><divclass="spec type"id="type-sizeof_data"><ahref="#type-sizeof_data"class="anchor"></a><divclass="def type"><code><spanclass="keyword">type </span>sizeof_data</code><code></code><code><spanclass="keyword"> = </span></code><code>{</code><tableclass="record"><trid="type-sizeof_data.typ"class="anchored"><tdclass="def field"><ahref="#type-sizeof_data.typ"class="anchor"></a><code>typ : <ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a>;</code></td></tr><trid="type-sizeof_data.nbytes"class="anchored"><tdclass="def field"><ahref="#type-sizeof_data.nbytes"class="anchor"></a><code>nbytes : int option;</code></td></tr><trid="type-sizeof_data.dynamic_length"class="anchored"><tdclass="def field"><ahref="#type-sizeof_data.dynamic_length"class="anchor"></a><code>dynamic_length : <ahref="index.html#type-t">t</a> option;</code></td></tr><trid="type-sizeof_data.subtype"class="anchored"><tdclass="def field"><ahref="#type-sizeof_data.subtype"class="anchor"></a><code>subtype : <ahref="../InferIR/Subtype/index.html#type-t">InferIR.Subtype.t</a>;</code></td></tr></table><code>}</code><code></code></div><divclass="doc"><p>This records information about a <codeclass="code">sizeof(typ)</code> expression.</p><p><codeclass="code">nbytes</code> represents the result of the evaluation of <codeclass="code">sizeof(typ)</code> if it is statically known.</p><p>If <codeclass="code">typ</code> is of the form <codeclass="code">Tarray elt (Some static_length)</code>, then <codeclass="code">dynamic_length</code> is the number
of elements of type <codeclass="code">elt</code> in the array. The <codeclass="code">dynamic_length</code>, tracked by symbolic execution, may
differ from the <codeclass="code">static_length</code> obtained from the type definition, e.g. when an array is
over-allocated.</p><p>If <codeclass="code">typ</code> is a struct type, the <codeclass="code">dynamic_length</code> is that of the final extensible array, if any.</p></div></div><divclass="spec type"id="type-t"><ahref="#type-t"class="anchor"></a><divclass="def type"><code><spanclass="keyword">type </span>t</code><code></code><code><spanclass="keyword"> = </span></code><tableclass="variant"><trid="type-t.Var"class="anchored"><tdclass="def constructor"><ahref="#type-t.Var"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Var</span><spanclass="keyword"> of </span><ahref="../InferIR/Ident/index.html#type-t">InferIR.Ident.t</a></code></td><tdclass="doc"><p>(** Pure variable: it is not an lvalue *)</p></td></tr><trid="type-t.UnOp"class="anchored"><tdclass="def constructor"><ahref="#type-t.UnOp"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">UnOp</span><spanclass="keyword"> of </span><ahref="../InferIR/Unop/index.html#type-t">InferIR.Unop.t</a><spanclass="keyword"> * </span><ahref="index.html#type-t">t</a><spanclass="keyword"> * </span><ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> option</code></td><tdclass="doc"><p>(** Unary operator with type of the result if known *)</p></td></tr><trid="type-t.BinOp"class="anchored"><tdclass="def constructor"><ahref="#type-t.BinOp"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">BinOp</span><spanclass="keyword"> of </span><ahref="../InferIR/Binop/index.html#type-t">InferIR.Binop.t</a><spanclass="keyword"> * </span><ahref="index.html#type-t">t</a><spanclass="keyword"> * </span><ahref="index.html#type-t">t</a></code></td><tdclass="doc"><p>(** Binary operator *)</p></td></tr><trid="type-t.Exn"class="anchored"><tdclass="def constructor"><ahref="#type-t.Exn"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Exn</span><spanclass="keyword"> of </span><ahref="index.html#type-t">t</a></code></td><tdclass="doc"><p>(** Exception *)</p></td></tr><trid="type-t.Closure"class="anchored"><tdclass="def constructor"><ahref="#type-t.Closure"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Closure</span><spanclass="keyword"> of </span><ahref="index.html#type-closure">closure</a></code></td><tdclass="doc"><p>(** Anonymous function *)</p></td></tr><trid="type-t.Const"class="anchored"><tdclass="def constructor"><ahref="#type-t.Const"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Const</span><spanclass="keyword"> of </span><ahref="../InferIR/Const/index.html#type-t">InferIR.Const.t</a></code></td><tdclass="doc"><p>(** Constants *)</p></td></tr><trid="type-t.Cast"class="anchored"><tdclass="def constructor"><ahref="#type-t.Cast"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Cast</span><spanclass="keyword"> of </span><ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a><spanclass="keyword"> * </span><ahref="index.html#type-t">t</a></code></td><tdclass="doc"><p>(** Type cast *)</p></td></tr><trid="type-t.Lvar"class="anchored"><tdclass="def constructor"><ahref="#type-t.Lvar"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Lvar</span><spanclass="keyword"> of </span><ahref="../InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a></code></td><tdclass="doc"><p>(** The address of a program variable *)</p></td></tr><trid="type-t.Lfield"class="anchored"><tdclass="def constructor"><ahref="#type-t.Lfield"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Lfield</span><spanclass="keyword"> of </span><ahref="index.html#type-t">t</a><spanclass="keyword"> * </span><ahref="../InferIR/Typ/Fieldname/index.html#type-t">InferIR.Typ.Fieldname.t</a><spanclass="keyword"> * </span><ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a></code></td><tdclass="doc"><p>(** A field offset, the type is the surrounding struct type *)</p></td></tr><trid="type-t.Lindex"class="anchored"><tdclass="def constructor"><ahref="#type-t.Lindex"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Lindex</span><spanclass="keyword"> of </span><ahref="index.html#type-t">t</a><spanclass="keyword"> * </span><ahref="index.html#type-t">t</a></code></td><tdclass="doc"><p>(** An array index offset: <codeclass="code">exp1[exp2]</code> *)</p></td></tr><trid="type-t.Sizeof"class="anchored"><tdclass="def constructor"><ahref="#type-t.Sizeof"class="anchor"></a><code><spanclass="keyword">| </span></code><code><spanclass="constructor">Sizeof</span><spanclass="keyword"> of </span><ahref="index.html#type-sizeof_data">sizeof_data</a></code></td></tr></table><code></code></div><divclass="doc"><p>Program expressions.</p></div></div><divclass="spec include"><divclass="doc"></div><detailsopen="open"><summary><spanclass="def"><code><spanclass="keyword">include </span><spanclass="keyword">sig</span> ... <spanclass="keyword">end</span></code></span></summary><divclass="spec val"id="val-compare_closure"><ahref="#val-compare_closure"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>compare_closure : <ahref="index.html#type-closure">closure</a><spanclass="keyword">‑></span><ahref="index.html#type-closure">closure</a><spanclass="keyword">‑></span> int</code></div><divclass="doc"></div></div><divclass="spec val"id="val-compare_sizeof_data"><ahref="#val-compare_sizeof_data"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>compare_sizeof_data : <ahref="index.html#type-sizeof_data">sizeof_data</a><spanclass="keyword">‑></span><ahref="index.html#type-sizeof_data">sizeof_data</a><spanclass="keyword">‑></span> int</code></div><divclass="doc"></div></div><divclass="spec val"id="val-compare"><ahref="#val-compare"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>compare : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> int</code></div><divclass="doc"></div></div></details></div><divclass="spec val"id="val-equal"><ahref="#val-equal"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>equal : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"><p>Equality for expressions.</p></div></div><divclass="spec module"id="module-Set"><ahref="#module-Set"class="anchor"></a><divclass="def module"><code><spanclass="keyword">module </span>Set : <ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Set.S<spanclass="keyword"> with </span><spanclass="keyword">type </span><ahref="index.html#module-Set">Set</a>.elt<spanclass="keyword"> = </span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Set of expressions.</p></div></div><divclass="spec module"id="module-Map"><ahref="#module-Map"class="anchor"></a><divclass="def module"><code><spanclass="keyword">module </span>Map : <ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Map.S<spanclass="keyword"> with </span><spanclass="keyword">type </span><ahref="index.html#module-Map">Map</a>.key<spanclass="keyword"> = </span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Map with expression keys.</p></div></div><divclass="spec module"id="module-Hash"><ahref="#module-Hash"class="anchor"></a><divclass="def module"><code><spanclass="keyword">module </span>Hash : <ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Caml.Hashtbl.S<spanclass="keyword"> with </span><spanclass="keyword">type </span><ahref="index.html#module-Hash">Hash</a>.key<spanclass="keyword"> = </span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Hashtable with expression keys.</p></div></div><divclass="spec val"id="val-is_null_literal"><ahref="#val-is_null_literal"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>is_null_literal : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"></div></div><divclass="spec val"id="val-is_this"><ahref="#val-is_this"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>is_this : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"><p>return true if <codeclass="code">exp</code> is the special this/self expression</p></div></div><divclass="spec val"id="val-is_zero"><ahref="#val-is_zero"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>is_zero : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"></div></div><h3>Utility Functions for Expressions</h3><divclass="spec val"id="val-texp_to_typ"><ahref="#val-texp_to_typ"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>texp_to_typ : <ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a> option <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a></code></div><divclass="doc"><p>Turn an expression representing a type into the type it represents
If not a sizeof, return the default type if given, otherwise raise an exception</p></div></div><divclass="spec val"id="val-root_of_lexp"><ahref="#val-root_of_lexp"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>root_of_lexp : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Return the root of <codeclass="code">lexp</code>.</p></div></div><divclass="spec val"id="val-get_undefined"><ahref="#val-get_undefined"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>get_undefined : bool <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Get an expression "undefined", the boolean indicates
whether the undefined value goest into the footprint</p></div></div><divclass="spec val"id="val-pointer_arith"><ahref="#val-pointer_arith"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>pointer_arith : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"><p>Checks whether an expression denotes a location using pointer arithmetic.
Currently, catches array - indexing expressions such as a<codeclass="code">i</code> only.</p></div></div><divclass="spec val"id="val-has_local_addr"><ahref="#val-has_local_addr"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>has_local_addr : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"><p>returns true if the expression operates on address of local variable</p></div></div><divclass="spec val"id="val-zero"><ahref="#val-zero"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>zero : <ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Integer constant 0</p></div></div><divclass="spec val"id="val-null"><ahref="#val-null"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>null : <ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Null constant</p></div></div><divclass="spec val"id="val-one"><ahref="#val-one"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>one : <ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Integer constant 1</p></div></div><divclass="spec val"id="val-minus_one"><ahref="#val-minus_one"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>minus_one : <ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Integer constant -1</p></div></div><divclass="spec val"id="val-int"><ahref="#val-int"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>int : <ahref="../InferIR/IntLit/index.html#type-t">InferIR.IntLit.t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create integer constant</p></div></div><divclass="spec val"id="val-float"><ahref="#val-float"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>float : float <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create float constant</p></div></div><divclass="spec val"id="val-bool"><ahref="#val-bool"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>bool : bool <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create integer constant corresponding to the boolean value</p></div></div><divclass="spec val"id="val-eq"><ahref="#val-eq"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>eq : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create expression <codeclass="code">e1 == e2</code></p></div></div><divclass="spec val"id="val-ne"><ahref="#val-ne"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>ne : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create expression <codeclass="code">e1 != e2</code></p></div></div><divclass="spec val"id="val-le"><ahref="#val-le"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>le : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create expression <codeclass="code">e1 <= e2</code></p></div></div><divclass="spec val"id="val-lt"><ahref="#val-lt"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>lt : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"><p>Create expression <codeclass="code">e1 < e2</code></p></div></div><divclass="spec val"id="val-free_vars"><ahref="#val-free_vars"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>free_vars : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="../InferIR/Ident/index.html#type-t">InferIR.Ident.t</a><ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Sequence.t</code></div><divclass="doc"><p>all the idents appearing in the expression</p></div></div><divclass="spec val"id="val-gen_free_vars"><ahref="#val-gen_free_vars"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>gen_free_vars : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> (unit,<ahref="../InferIR/Ident/index.html#type-t">InferIR.Ident.t</a>)<ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Sequence.Generator.t</code></div><divclass="doc"></div></div><divclass="spec val"id="val-ident_mem"><ahref="#val-ident_mem"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>ident_mem : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="../InferIR/Ident/index.html#type-t">InferIR.Ident.t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"><p>true if the identifier appears in the expression</p></div></div><divclass="spec val"id="val-program_vars"><ahref="#val-program_vars"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>program_vars : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><ahref="../InferIR/Pvar/index.html#type-t">InferIR.Pvar.t</a><ahref="../../InferStdlib/InferStdlib/index.html#module-IStd">InferStdlib.IStd</a>.Sequence.t</code></div><divclass="doc"><p>all the program variables appearing in the expression</p></div></div><divclass="spec val"id="val-fold_captured"><ahref="#val-fold_captured"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>fold_captured : f:(<spanclass="type-var">'a</span><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><spanclass="type-var">'a</span>) <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span><spanclass="type-var">'a</span><spanclass="keyword">‑></span><spanclass="type-var">'a</span></code></div><divclass="doc"><p>Fold over the expressions captured by this expression.</p></div></div><divclass="spec val"id="val-pp_printenv"><ahref="#val-pp_printenv"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>pp_printenv : <ahref="../../InferStdlib/InferStdlib/Pp/index.html#type-env">InferStdlib.Pp.env</a><spanclass="keyword">‑></span> (<ahref="../../InferStdlib/InferStdlib/Pp/index.html#type-env">InferStdlib.Pp.env</a><spanclass="keyword">‑></span><ahref="index.html#module-F">F</a>.formatter <spanclass="keyword">‑></span><ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a><spanclass="keyword">‑></span> unit) <spanclass="keyword">‑></span><ahref="index.html#module-F">F</a>.formatter <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> unit</code></div><divclass="doc"></div></div><divclass="spec val"id="val-pp"><ahref="#val-pp"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>pp : <ahref="index.html#module-F">F</a>.formatter <spanclass="keyword">‑></span><ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> unit</code></div><divclass="doc"></div></div><divclass="spec val"id="val-to_string"><ahref="#val-to_string"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>to_string : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> string</code></div><divclass="doc"></div></div><divclass="spec val"id="val-is_objc_block_closure"><ahref="#val-is_objc_block_closure"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>is_objc_block_closure : <ahref="index.html#type-t">t</a><spanclass="keyword">‑></span> bool</code></div><divclass="doc"></div></div><divclass="spec val"id="val-zero_of_type"><ahref="#val-zero_of_type"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>zero_of_type : <ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a> option</code></div><divclass="doc"><p>Returns the zero value of a type, for int, float and ptr types</p></div></div><divclass="spec val"id="val-zero_of_type_exn"><ahref="#val-zero_of_type_exn"class="anchor"></a><divclass="def val"><code><spanclass="keyword">val </span>zero_of_type_exn : <ahref="../InferIR/Typ/index.html#type-t">InferIR.Typ.t</a><spanclass="keyword">‑></span><ahref="index.html#type-t">t</a></code></div><divclass="doc"></div></div></body></html>