Call Statements

Status: implemented

const assert = (...a) => a[0] ? undefined : (() => { throw a[1]; })();
const at = (a, i) => {
    assert(i < a.length, "out of range");
    return a.at(i);
};
export default at([1, 2, 3], 2);

A call written as a statement, f(x);, is evaluated where it stands and its value discarded, as in JavaScript. In a pure language the one thing a discarded call can do is fail, which makes the statement the assertion form: assert(i < a.length, "out of range"); is nothing where the assertion holds, and the assertion's failure where it does not. sergey-shandar approved the design in #3095, as DESIGN.md §12 requires.

It stands wherever a const does: at the module level, before the exports and among the exported consts, in a function's body, in a guard's block, in a loop's block and in a case's block. It is ended as every statement is, by ; or where JavaScript inserts one (module structure), so f(1) f(2) on one line is refused at the second f, as JavaScript refuses it.

It is a const nothing can read. f(x); is const _ = f(x);, where _ is a name no statement can read: the two are one AST, and the call is anchored as an unread const is, at the root of its block (the anchoring rule). In the EDAG that is the , node, the graph the comma operator makes of a discarded operand (comma), so f(x); return y; and return (f(x), y); are one graph. A guard's block and a case's block are block roots of their own, so if (c) { assert(a); return 1; } establishes assert(a) only where c is truthy, as JavaScript does (bodies and guards). The FunctionalScript writer spells the anchor as a const of its block, as it spells every anchor: assert(a); comes back as const $1=assert($0);.

The value is any call: of a name, f(x);; of a member, o.f(x);; a guarded call, f?.(x); and o.f?.(x);; a chain whose last step is a call, o?.f(x).g(y);; a call of a call, f(x)(y);; and a static function's, Object.is(a, b);. Any other value is refused at the statement's name (unexpected token): an operator's result discarded, x;, x.y;, f(x).y; or f(x) + 1;, is almost always a mistake, and a read made only for its failure is spelled as a const or a comma operand. The conversions, Number(x); and String(x);, are refused the same way: each is an operator, not a call (operators and functions). A result meant to be used and forgotten, xs.concat(ys); written for return xs.concat(ys);, compiles: the meaning is JavaScript's, and such a warning is a linter's, which ESLint's no-unused-expressions, exempting calls, does not give by default.

The statement begins with a name: an identifier, or from or as, the words a statement may begin with where it is no keyword's. A statement opening with anything else is not read. (, [ and a backtick would continue the statement before it where no ; ends it — JavaScript reads f on one line and (g)(x) on the next as f(g)(x), and a backtick there as the tagged template f`x`, which the grammar refuses at its head — so the grammar could not tell them from a new statement with one symbol, and (0, o.f)(x);, (f(x)); and `a`.trim(); are refused, never split into a statement JavaScript would not see. A prefix opens an operator's result, refused as any is. A literal continues nothing before it, so a call on one, "a".trim();, has no such hazard; it is left out because no module calls a member of a constant for its failure, and whether to admit it is open (refused constructs: st.literal-call). A reserved word, var, for or else, begins no statement either, and is refused at the word. The design first proposed admitting the two ( spellings, and was amended for the reason above; the comma spells the detached call where a value stands, const r = (0, o.f)(x);.

"use strict";, JavaScript's directive, stays refused as it was: a module is strict already, so it does nothing, and whether to admit it as the nothing it is is a question of its own, open (refused constructs: st.directive).

The one assignment the language has, to a loop's variable in its block, x = value;, is the statement it was (loops); anywhere else an assignment is refused at its =.

Examples

The compiler demo offers the programs callStatements in module.f.js, each with its real output.

The demo on this page runs sample.f.js, this page's example as a function of one number — a call statement in a body: an assertion that holds for 2 and fails for 5 — with every output fjs compile makes of it: the expression graph (EDAG), the Rust and the WebAssembly that Rust builds to. Its Run button calls the default export with 2 and 5, as JavaScript and as WebAssembly, and shows what each call returned or threw.

const assert = (...a) => a[0] ? undefined : (() => { throw a[1]; })();
const at = (a, i) => {
    assert(i < a.length, "out of range");
    return a.at(i);
};
export default (...a) => at([1, 2, 3], a[0]);

Reference

Demo

In FunctionalScript

fjs compile accepts this module, and it runs as JavaScript and as WebAssembly alike.

A FunctionalScript module and what fjs compile makes of it: the expression graph it lowers to, the Rust it compiles to on the NaNVM runtime, and the WebAssembly that Rust builds to. Run calls its default export with 2, then 5, first as the JavaScript it already is and then as WebAssembly, and shows what each call returned or threw and how long one call takes, timed over 1000 calls.

FunctionalScript source:

/**
 * The example of [`README.md`](./README.md) (Call Statements) as a function
 * of one number, for the page's WASM demo: a call statement in a body: an
 * assertion that holds for `2` and fails for `5`.
 *
 * @module
 */

/** @type {(...a: readonly unknown[]) => undefined} */
const assert = (...a) => a[0] ? undefined : (() => { throw a[1]; })();
/** @type {(a: readonly number[], i: number) => number | undefined} */
const at = (a, i) => {
    assert(i < a.length, "out of range");
    return a.at(i);
};
/** @type {(...a: readonly number[]) => unknown} */
export default (...a) => at([1, 2, 3], a[0]);

Expression graph (EDAG) that fjs compile lowers it to:

=>lengthframe 0body0=>()=>lengthframe 0body2=>,()callee...frame 0[]=>lengthbody0?:,anchorresult[]01?:condthenelse.undefinedthrow()callee...frame 0[].()objkey...arg 0"at"[][]012123.objidxrest0.objidxrest0throwvalue[]01<"out of range"[]0arg 1.objidxrest1<leftrightarg 1..objkeyarg 0"length"

The same graph, as fjs compile writes it to a .edag.data.js file:

const $0=["rest"];const $1=["arg",1];const $2=["arg",0];export default ["{}",[[":","default",["=>",0,[["=>",2,[["=>",0,[],["?:",[".",$0,0],["undefined"],["throw",[".",$0,1]]]]],[",",[["()",["frame",0],[["<",$1,[".",$2,"length"]],"out of range"]],[".",$2,"at",["|()",[$1]]]]]]],["()",["frame",0],[["[]",[1,2,3]],[".",["rest"],0]]]]]]];

Rust that fjs compile writes from it, on the NaNVM runtime:

// @generated by `fjs compile`. Do not edit: recompile the source module instead.

use nanvm_lib::vm::unstable::{f64_any, string_any, string_key};
use nanvm_lib::vm::{Any, IStaticFunction, Nullish, ToAny, ToArray, ToObject};

#[rustfmt::skip]
#[allow(clippy::if_same_then_else)]
pub fn module<A: IStaticFunction>(runtime: Any<A>) -> Result<Any<A>, Any<A>> {
    let _b6: Any<A> = A::static_function(|_self, _args| {
        let _b369: Any<A> = _args.rest(0).to_any();
        if Any::<A>::to_boolean((Any::dot(_b369.clone(), f64_any(0x0000000000000000)).end())?) { Ok(Nullish::Undefined.to_any()) } else { Err((Any::dot(_b369.clone(), f64_any(0x3ff0000000000000)).end())?) }
    }, 0, [runtime.clone()].to_array(), Some("(...$0)=>$0[0]?undefined:(()=>{throw $0[1];})()")).to_any();
    Ok([(string_key("default"), {
        let _b15: Any<A> = A::static_function(|_self, _args| {
            let _b1288: Any<A> = (Any::call(A::frame(_self)[0].clone(), [(Any::lt(_args.argument(1), (Any::dot(_args.argument(0), string_any("length")).end())?))?, string_any("out of range")].to_array().to_any()))?;
            Any::dot(_args.argument(0), string_any("at")).end_call(&A::frame(_self)[1], || Ok([_args.argument(1)].to_array().to_any()))
        }, 2, [_b6.clone(), runtime.clone()].to_array(), Some("($1,$2)=>{const $3=$0($2<$1.length,\"out of range\");return $1.at($2);}")).to_any();
        A::static_function(|_self, _args| {
            let _b1194: Any<A> = _args.rest(0).to_any();
            Any::call(A::frame(_self)[0].clone(), [[f64_any(0x3ff0000000000000), f64_any(0x4000000000000000), f64_any(0x4008000000000000)].to_array().to_any(), (Any::dot(_b1194.clone(), f64_any(0x0000000000000000)).end())?].to_array().to_any())
        }, 0, [_b15.clone(), runtime.clone()].to_array(), Some("(...$1)=>$0([1,2,3],$1[0])")).to_any()
    })].to_object().to_any())
}

WebAssembly text (WAT) of the functions compiled from this source, without the NaNVM runtime:

  (func $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#1}::{closure#0}>" (;560;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i64)
    global.get $__stack_pointer
    i32.const 144
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          local.get 1
          i32.load8_u
          local.tee 5
          i32.const 255
          i32.ne
          br_if 0 (;@3;)
          local.get 0
          i64.const 1
          i64.store
          local.get 0
          local.get 1
          i64.load offset=16
          i64.store offset=16
          local.get 0
          local.get 1
          i64.load offset=8
          i64.store offset=8
          br 1 (;@2;)
        end
        local.get 4
        local.get 1
        i64.load offset=24
        i64.store offset=40
        local.get 4
        local.get 5
        i32.store8 offset=16
        local.get 4
        local.get 1
        i64.load offset=16 align=1
        i64.store offset=32 align=1
        local.get 4
        local.get 1
        i64.load offset=9 align=1
        i64.store offset=25 align=1
        local.get 4
        local.get 1
        i64.load offset=1 align=1
        i64.store offset=17 align=1
        local.get 4
        i32.const 48
        i32.add
        local.get 4
        i32.const 16
        i32.add
        local.get 2
        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::is_nullish
        block ;; label = @3
          local.get 4
          i32.load8_u offset=48
          local.tee 1
          i32.const 255
          i32.eq
          br_if 0 (;@3;)
          local.get 0
          local.get 4
          i32.load8_u offset=51
          i32.store8 offset=11
          local.get 0
          local.get 4
          i32.load16_u offset=49 align=1
          i32.store16 offset=9 align=1
          local.get 4
          i64.load offset=52 align=4
          local.set 6
          local.get 0
          local.get 4
          i32.load offset=60
          i32.store offset=20
          local.get 0
          local.get 6
          i64.store offset=12 align=4
          local.get 0
          local.get 1
          i32.store8 offset=8
          local.get 0
          i64.const 1
          i64.store
          local.get 4
          local.get 4
          i64.load offset=40
          i64.store offset=72
          local.get 4
          local.get 4
          i64.load offset=32
          i64.store offset=64
          local.get 4
          local.get 4
          i64.load offset=24
          i64.store offset=56
          local.get 4
          local.get 4
          i64.load offset=16
          i64.store offset=48
          local.get 4
          local.get 2
          i32.store offset=80
          local.get 4
          i32.const 48
          i32.add
          call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
          local.get 4
          i32.const 64
          i32.add
          call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
          br 1 (;@2;)
        end
        local.get 4
        i32.const 56
        i32.add
        local.get 3
        i32.const 1
        call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
        local.get 4
        i32.const 0
        i32.store8 offset=88
        local.get 4
        i64.const 4294967296
        i64.store offset=48
        local.get 4
        local.get 4
        i32.const 88
        i32.add
        i32.store offset=72
        local.get 4
        i32.const 8
        i32.add
        local.get 4
        i32.const 48
        i32.add
        call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 1>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
        local.get 4
        local.get 4
        i32.load offset=12
        local.tee 5
        i32.store offset=108
        local.get 4
        local.get 4
        i32.load offset=8
        local.tee 1
        i32.store offset=104
        block ;; label = @3
          local.get 4
          i32.load8_u offset=88
          i32.const 1
          i32.ne
          br_if 0 (;@3;)
          local.get 1
          local.get 1
          i32.load
          i32.const -1
          i32.add
          local.tee 0
          i32.store
          local.get 0
          br_if 2 (;@1;)
          local.get 4
          i32.const 104
          i32.add
          call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
          br 2 (;@1;)
        end
        local.get 1
        i32.eqz
        br_if 1 (;@1;)
        local.get 4
        local.get 5
        i32.store offset=96
        local.get 4
        local.get 1
        i32.store offset=92
        local.get 4
        i32.const 6
        i32.store8 offset=88
        local.get 4
        local.get 4
        i64.load offset=40
        i64.store offset=128
        local.get 4
        local.get 4
        i64.load offset=32
        i64.store offset=120
        local.get 4
        local.get 4
        i64.load offset=24
        i64.store offset=112
        local.get 4
        local.get 4
        i64.load offset=16
        i64.store offset=104
        local.get 0
        local.get 4
        i32.const 104
        i32.add
        local.get 2
        local.get 4
        i32.const 88
        i32.add
        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::call
      end
      local.get 4
      i32.const 144
      i32.add
      global.set $__stack_pointer
      return
    end
    i32.const 1057428
    i32.const 43
    local.get 4
    i32.const 143
    i32.add
    i32.const 1057412
    i32.const 1057472
    call $core::result::unwrap_failed
    unreachable
  )
  (func $nanvm_demos::samples::call_statements::module::<nanvm_lib::naive::Naive> (;643;) (type 1) (param i32 i32)
    (local i32 i32 i64 i32 i32 i32 i32 i32)
    global.get $__stack_pointer
    i32.const 144
    i32.sub
    local.tee 2
    global.set $__stack_pointer
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          local.get 1
                          i32.load8_u
                          local.tee 3
                          br_table 6 (;@5;) 6 (;@5;) 0 (;@11;) 1 (;@10;) 2 (;@9;) 3 (;@8;) 4 (;@7;) 5 (;@6;) 6 (;@5;)
                        end
                        local.get 1
                        i64.load offset=8
                        local.set 4
                        br 8 (;@2;)
                      end
                      local.get 1
                      i32.load offset=4
                      local.tee 5
                      local.get 5
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 6
                      i32.store
                      local.get 6
                      i32.eqz
                      br_if 8 (;@1;)
                      br 6 (;@3;)
                    end
                    local.get 1
                    i32.load offset=4
                    local.tee 5
                    local.get 5
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 6
                    i32.store
                    local.get 6
                    i32.eqz
                    br_if 7 (;@1;)
                    local.get 1
                    i64.load8_u offset=12
                    i64.const 32
                    i64.shl
                    local.get 1
                    i64.load32_u offset=8
                    i64.or
                    local.set 4
                    br 6 (;@2;)
                  end
                  local.get 1
                  i32.load offset=4
                  local.tee 5
                  local.get 5
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 6
                  i32.store
                  local.get 6
                  br_if 4 (;@3;)
                  br 6 (;@1;)
                end
                local.get 1
                i32.load offset=4
                local.tee 5
                local.get 5
                i32.load
                i32.const 1
                i32.add
                local.tee 6
                i32.store
                local.get 6
                br_if 3 (;@3;)
                br 5 (;@1;)
              end
              local.get 1
              i32.load offset=4
              local.tee 5
              local.get 5
              i32.load
              i32.const 1
              i32.add
              local.tee 6
              i32.store
              local.get 6
              i32.eqz
              br_if 4 (;@1;)
              br 1 (;@4;)
            end
            local.get 1
            i32.load8_u offset=1
            local.set 6
          end
          br 1 (;@2;)
        end
        local.get 1
        i64.load32_u offset=8
        local.set 4
      end
      local.get 2
      i32.const 0
      i32.store8 offset=32
      local.get 2
      local.get 4
      i64.store offset=104
      local.get 2
      local.get 5
      i32.store offset=100
      local.get 2
      local.get 6
      i32.store8 offset=97
      local.get 2
      local.get 3
      i32.store8 offset=96
      local.get 2
      i64.const 4294967296
      i64.store offset=88
      local.get 2
      local.get 2
      i32.const 32
      i32.add
      i32.store offset=112
      local.get 2
      i32.const 24
      i32.add
      local.get 2
      i32.const 88
      i32.add
      call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 1>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
      local.get 2
      local.get 2
      i32.load offset=28
      local.tee 6
      i32.store offset=68
      local.get 2
      local.get 2
      i32.load offset=24
      local.tee 5
      i32.store offset=64
      block ;; label = @2
        block ;; label = @3
          local.get 2
          i32.load8_u offset=32
          i32.const 1
          i32.ne
          br_if 0 (;@3;)
          local.get 5
          local.get 5
          i32.load
          i32.const -1
          i32.add
          local.tee 1
          i32.store
          local.get 1
          br_if 1 (;@2;)
          local.get 2
          i32.const 64
          i32.add
          call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
          br 1 (;@2;)
        end
        local.get 5
        i32.eqz
        br_if 0 (;@2;)
        local.get 2
        i32.const 184
        i32.const 0
        local.get 5
        local.get 6
        i32.const 1066266
        i32.const 47
        call $<nanvm_lib::naive::function::Function>::new
        local.tee 5
        i32.store offset=36
        local.get 2
        i32.const 7
        i32.store8 offset=32
        local.get 2
        i32.const 0
        i32.store16 offset=60
        local.get 2
        i32.const 1066166
        i32.store offset=56
        local.get 2
        i32.const 1066159
        i32.store offset=52
        local.get 2
        i32.const 88
        i32.add
        local.get 2
        i32.const 52
        i32.add
        call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              local.get 2
              i32.load8_u offset=88
              local.tee 6
              i32.const 255
              i32.ne
              br_if 0 (;@5;)
              local.get 2
              i32.load offset=96
              local.set 7
              local.get 2
              i32.load offset=92
              local.set 8
              local.get 5
              local.get 5
              i32.load
              i32.const 1
              i32.add
              local.tee 6
              i32.store
              local.get 6
              i32.eqz
              br_if 4 (;@1;)
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              local.get 3
                              br_table 6 (;@7;) 6 (;@7;) 0 (;@13;) 1 (;@12;) 2 (;@11;) 3 (;@10;) 4 (;@9;) 5 (;@8;) 6 (;@7;)
                            end
                            local.get 1
                            i64.load offset=8
                            local.set 4
                            br 9 (;@3;)
                          end
                          local.get 1
                          i32.load offset=4
                          local.tee 6
                          local.get 6
                          i32.load
                          i32.const 1
                          i32.add
                          local.tee 9
                          i32.store
                          local.get 9
                          i32.eqz
                          br_if 10 (;@1;)
                          br 7 (;@4;)
                        end
                        local.get 1
                        i32.load offset=4
                        local.tee 6
                        local.get 6
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 9
                        i32.store
                        local.get 9
                        i32.eqz
                        br_if 9 (;@1;)
                        local.get 1
                        i64.load8_u offset=12
                        i64.const 32
                        i64.shl
                        local.get 1
                        i64.load32_u offset=8
                        i64.or
                        local.set 4
                        br 7 (;@3;)
                      end
                      local.get 1
                      i32.load offset=4
                      local.tee 6
                      local.get 6
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 9
                      i32.store
                      local.get 9
                      i32.eqz
                      br_if 8 (;@1;)
                      br 5 (;@4;)
                    end
                    local.get 1
                    i32.load offset=4
                    local.tee 6
                    local.get 6
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 9
                    i32.store
                    local.get 9
                    i32.eqz
                    br_if 7 (;@1;)
                    br 4 (;@4;)
                  end
                  local.get 1
                  i32.load offset=4
                  local.tee 6
                  local.get 6
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 9
                  i32.store
                  local.get 9
                  i32.eqz
                  br_if 6 (;@1;)
                  br 1 (;@6;)
                end
                local.get 1
                i32.load8_u offset=1
                local.set 9
              end
              br 2 (;@3;)
            end
            local.get 2
            local.get 2
            i32.load8_u offset=91
            i32.store8 offset=67
            local.get 2
            local.get 2
            i32.load16_u offset=89 align=1
            i32.store16 offset=65 align=1
            local.get 2
            local.get 2
            i32.load offset=100
            i32.store offset=76
            local.get 2
            local.get 2
            i64.load offset=92 align=4
            i64.store offset=68 align=4
            local.get 2
            local.get 6
            i32.store8 offset=64
            i32.const 1065572
            i32.const 43
            local.get 2
            i32.const 64
            i32.add
            i32.const 1065556
            i32.const 1065616
            call $core::result::unwrap_failed
            unreachable
          end
          local.get 1
          i64.load32_u offset=8
          local.set 4
        end
        local.get 2
        i32.const 0
        i32.store8 offset=52
        local.get 2
        local.get 4
        i64.store offset=120
        local.get 2
        local.get 6
        i32.store offset=116
        local.get 2
        local.get 9
        i32.store8 offset=113
        local.get 2
        local.get 3
        i32.store8 offset=112
        local.get 2
        i64.const 0
        i64.store offset=104
        local.get 2
        local.get 5
        i32.store offset=100
        local.get 2
        i32.const 7
        i32.store8 offset=96
        local.get 2
        i64.const 8589934592
        i64.store offset=88
        local.get 2
        local.get 2
        i32.const 52
        i32.add
        i32.store offset=128
        local.get 2
        i32.const 16
        i32.add
        local.get 2
        i32.const 88
        i32.add
        call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
        local.get 2
        local.get 2
        i32.load offset=20
        local.tee 6
        i32.store offset=68
        local.get 2
        local.get 2
        i32.load offset=16
        local.tee 5
        i32.store offset=64
        block ;; label = @3
          block ;; label = @4
            local.get 2
            i32.load8_u offset=52
            i32.const 1
            i32.ne
            br_if 0 (;@4;)
            local.get 5
            local.get 5
            i32.load
            i32.const -1
            i32.add
            local.tee 1
            i32.store
            local.get 1
            br_if 1 (;@3;)
            local.get 2
            i32.const 64
            i32.add
            call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
            br 1 (;@3;)
          end
          local.get 5
          i32.eqz
          br_if 0 (;@3;)
          local.get 2
          i32.const 185
          i32.const 2
          local.get 5
          local.get 6
          i32.const 1066313
          i32.const 69
          call $<nanvm_lib::naive::function::Function>::new
          local.tee 5
          i32.store offset=68
          local.get 2
          i32.const 7
          i32.store8 offset=64
          local.get 5
          local.get 5
          i32.load
          i32.const 1
          i32.add
          local.tee 6
          i32.store
          local.get 6
          i32.eqz
          br_if 2 (;@1;)
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              local.get 3
                              br_table 6 (;@7;) 6 (;@7;) 0 (;@13;) 1 (;@12;) 2 (;@11;) 3 (;@10;) 4 (;@9;) 5 (;@8;) 6 (;@7;)
                            end
                            local.get 1
                            i64.load offset=8
                            local.set 4
                            br 8 (;@4;)
                          end
                          local.get 1
                          i32.load offset=4
                          local.tee 6
                          local.get 6
                          i32.load
                          i32.const 1
                          i32.add
                          local.tee 9
                          i32.store
                          local.get 9
                          i32.eqz
                          br_if 10 (;@1;)
                          br 6 (;@5;)
                        end
                        local.get 1
                        i32.load offset=4
                        local.tee 6
                        local.get 6
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 9
                        i32.store
                        local.get 9
                        i32.eqz
                        br_if 9 (;@1;)
                        local.get 1
                        i64.load8_u offset=12
                        i64.const 32
                        i64.shl
                        local.get 1
                        i64.load32_u offset=8
                        i64.or
                        local.set 4
                        br 6 (;@4;)
                      end
                      local.get 1
                      i32.load offset=4
                      local.tee 6
                      local.get 6
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 9
                      i32.store
                      local.get 9
                      i32.eqz
                      br_if 8 (;@1;)
                      br 4 (;@5;)
                    end
                    local.get 1
                    i32.load offset=4
                    local.tee 6
                    local.get 6
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 9
                    i32.store
                    local.get 9
                    i32.eqz
                    br_if 7 (;@1;)
                    br 3 (;@5;)
                  end
                  local.get 1
                  i32.load offset=4
                  local.tee 6
                  local.get 6
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 9
                  i32.store
                  local.get 9
                  i32.eqz
                  br_if 6 (;@1;)
                  br 1 (;@6;)
                end
                local.get 1
                i32.load8_u offset=1
                local.set 9
              end
              br 1 (;@4;)
            end
            local.get 1
            i64.load32_u offset=8
            local.set 4
          end
          local.get 2
          i32.const 0
          i32.store8 offset=87
          local.get 2
          local.get 4
          i64.store offset=120
          local.get 2
          local.get 6
          i32.store offset=116
          local.get 2
          local.get 9
          i32.store8 offset=113
          local.get 2
          local.get 3
          i32.store8 offset=112
          local.get 2
          local.get 5
          i32.store offset=100
          local.get 2
          i32.const 7
          i32.store8 offset=96
          local.get 2
          i64.const 8589934592
          i64.store offset=88
          local.get 2
          local.get 2
          i32.const 87
          i32.add
          i32.store offset=128
          local.get 2
          i32.const 8
          i32.add
          local.get 2
          i32.const 88
          i32.add
          call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
          local.get 2
          local.get 2
          i32.load offset=12
          local.tee 5
          i32.store offset=56
          local.get 2
          local.get 2
          i32.load offset=8
          local.tee 3
          i32.store offset=52
          block ;; label = @4
            block ;; label = @5
              local.get 2
              i32.load8_u offset=87
              i32.const 1
              i32.ne
              br_if 0 (;@5;)
              local.get 3
              local.get 3
              i32.load
              i32.const -1
              i32.add
              local.tee 1
              i32.store
              local.get 1
              br_if 1 (;@4;)
              local.get 2
              i32.const 52
              i32.add
              call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
              br 1 (;@4;)
            end
            local.get 3
            i32.eqz
            br_if 0 (;@4;)
            i32.const 186
            i32.const 0
            local.get 3
            local.get 5
            i32.const 1066382
            i32.const 26
            call $<nanvm_lib::naive::function::Function>::new
            local.set 3
            local.get 2
            i32.const 64
            i32.add
            call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
            local.get 2
            i32.const 0
            i32.store8 offset=52
            local.get 2
            local.get 3
            i32.store offset=108
            local.get 2
            i32.const 7
            i32.store8 offset=104
            local.get 2
            local.get 7
            i32.store offset=100
            local.get 2
            local.get 8
            i32.store offset=96
            local.get 2
            i64.const 4294967296
            i64.store offset=88
            local.get 2
            local.get 2
            i32.const 52
            i32.add
            i32.store offset=120
            local.get 2
            local.get 2
            i32.const 88
            i32.add
            call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), 1>, core::result::Result<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)>>::to_rc_slice"
            local.get 2
            local.get 2
            i32.load offset=4
            local.tee 5
            i32.store offset=68
            local.get 2
            local.get 2
            i32.load
            local.tee 3
            i32.store offset=64
            block ;; label = @5
              block ;; label = @6
                local.get 2
                i32.load8_u offset=52
                i32.const 1
                i32.ne
                br_if 0 (;@6;)
                local.get 3
                local.get 3
                i32.load
                i32.const -1
                i32.add
                local.tee 1
                i32.store
                local.get 1
                br_if 1 (;@5;)
                local.get 2
                i32.const 64
                i32.add
                call $"<alloc::rc::Rc<[(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)]>>::drop_slow"
                br 1 (;@5;)
              end
              local.get 3
              i32.eqz
              br_if 0 (;@5;)
              local.get 0
              local.get 5
              i32.store offset=16
              local.get 0
              local.get 3
              i32.store offset=12
              local.get 0
              i32.const 5
              i32.store8 offset=8
              local.get 0
              i64.const 0
              i64.store
              local.get 2
              i32.const 32
              i32.add
              call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              local.get 1
              call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              local.get 2
              i32.const 144
              i32.add
              global.set $__stack_pointer
              return
            end
            i32.const 1057428
            i32.const 43
            local.get 2
            i32.const 143
            i32.add
            i32.const 1057412
            i32.const 1057472
            call $core::result::unwrap_failed
            unreachable
          end
          i32.const 1057428
          i32.const 43
          local.get 2
          i32.const 143
          i32.add
          i32.const 1057412
          i32.const 1057472
          call $core::result::unwrap_failed
          unreachable
        end
        i32.const 1057428
        i32.const 43
        local.get 2
        i32.const 143
        i32.add
        i32.const 1057412
        i32.const 1057472
        call $core::result::unwrap_failed
        unreachable
      end
      i32.const 1057428
      i32.const 43
      local.get 2
      i32.const 143
      i32.add
      i32.const 1057412
      i32.const 1057472
      call $core::result::unwrap_failed
      unreachable
    end
    unreachable
  )
  (func $"<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#0} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;644;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i64 i32)
    global.get $__stack_pointer
    i32.const 160
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    local.get 4
    local.get 3
    i32.store offset=12
    local.get 4
    local.get 2
    i32.store offset=8
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    local.get 2
                    i32.load
                    local.tee 5
                    i32.const -1
                    i32.eq
                    br_if 0 (;@8;)
                    local.get 4
                    local.get 3
                    i32.store offset=24
                    local.get 4
                    local.get 2
                    i32.store offset=20
                    local.get 4
                    i32.const 6
                    i32.store8 offset=16
                    local.get 2
                    local.get 5
                    i32.const 2
                    i32.add
                    local.tee 5
                    i32.store
                    local.get 5
                    i32.eqz
                    br_if 0 (;@8;)
                    local.get 4
                    local.get 2
                    i32.store offset=84
                    local.get 4
                    i32.const 6
                    i32.store8 offset=80
                    local.get 4
                    local.get 3
                    i64.extend_i32_u
                    i64.store offset=88
                    local.get 4
                    i64.const 0
                    i64.store offset=120
                    local.get 4
                    i32.const 2
                    i32.store8 offset=112
                    local.get 4
                    i32.const 32
                    i32.add
                    local.get 4
                    i32.const 80
                    i32.add
                    local.get 4
                    i32.const 112
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=32
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=48
                      i64.store offset=16
                      local.get 0
                      local.get 4
                      i64.load offset=40
                      i64.store offset=8
                      br 4 (;@5;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=56
                    i64.store offset=136
                    local.get 4
                    local.get 4
                    i64.load offset=48
                    i64.store offset=128
                    local.get 4
                    local.get 4
                    i64.load offset=40
                    i64.store offset=120
                    local.get 4
                    local.get 4
                    i64.load offset=32
                    i64.store offset=112
                    local.get 4
                    i32.const 80
                    i32.add
                    local.get 4
                    i32.const 112
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                    block ;; label = @9
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=80
                        i32.const 255
                        i32.eq
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=88
                        i64.store offset=72
                        local.get 4
                        local.get 4
                        i64.load offset=80
                        i64.store offset=64
                        br 1 (;@9;)
                      end
                      local.get 4
                      i32.const 256
                      i32.store16 offset=64
                    end
                    local.get 4
                    i32.const 112
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 128
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    block ;; label = @9
                      local.get 4
                      i32.const 64
                      i32.add
                      call $<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>::dispatch::<nanvm_lib::vm::boolean_coercion::BooleanCoercion>
                      br_if 0 (;@9;)
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              block ;; label = @14
                                block ;; label = @15
                                  block ;; label = @16
                                    block ;; label = @17
                                      local.get 4
                                      i32.load8_u offset=16
                                      local.tee 5
                                      br_table 6 (;@11;) 6 (;@11;) 0 (;@17;) 1 (;@16;) 2 (;@15;) 3 (;@14;) 4 (;@13;) 5 (;@12;) 6 (;@11;)
                                    end
                                    local.get 4
                                    i64.load offset=24
                                    local.set 6
                                    br 10 (;@6;)
                                  end
                                  local.get 4
                                  i32.load offset=20
                                  local.tee 3
                                  local.get 3
                                  i32.load
                                  i32.const 1
                                  i32.add
                                  local.tee 7
                                  i32.store
                                  local.get 7
                                  i32.eqz
                                  br_if 7 (;@8;)
                                  br 8 (;@7;)
                                end
                                local.get 4
                                i32.load offset=20
                                local.tee 3
                                local.get 3
                                i32.load
                                i32.const 1
                                i32.add
                                local.tee 7
                                i32.store
                                local.get 7
                                i32.eqz
                                br_if 6 (;@8;)
                                local.get 4
                                i64.load8_u offset=28
                                i64.const 32
                                i64.shl
                                local.get 4
                                i64.load32_u offset=24
                                i64.or
                                local.set 6
                                br 8 (;@6;)
                              end
                              local.get 4
                              i32.load offset=20
                              local.tee 3
                              local.get 3
                              i32.load
                              i32.const 1
                              i32.add
                              local.tee 7
                              i32.store
                              local.get 7
                              br_if 6 (;@7;)
                              br 5 (;@8;)
                            end
                            local.get 4
                            i32.load offset=20
                            local.tee 3
                            local.get 3
                            i32.load
                            i32.const 1
                            i32.add
                            local.tee 7
                            i32.store
                            local.get 7
                            br_if 5 (;@7;)
                            br 4 (;@8;)
                          end
                          local.get 4
                          i32.load offset=20
                          local.tee 3
                          local.get 3
                          i32.load
                          i32.const 1
                          i32.add
                          local.tee 7
                          i32.store
                          local.get 7
                          i32.eqz
                          br_if 3 (;@8;)
                          br 1 (;@10;)
                        end
                        local.get 4
                        i32.load8_u offset=17
                        local.set 7
                      end
                      br 3 (;@6;)
                    end
                    local.get 0
                    i32.const 256
                    i32.store16 offset=8
                    i64.const 0
                    local.set 6
                    br 5 (;@3;)
                  end
                  unreachable
                end
                local.get 4
                i64.load32_u offset=24
                local.set 6
              end
              local.get 4
              local.get 6
              i64.store offset=152
              local.get 4
              local.get 3
              i32.store offset=148
              local.get 4
              local.get 7
              i32.store8 offset=145
              local.get 4
              local.get 5
              i32.store8 offset=144
              local.get 4
              i64.const 4607182418800017408
              i64.store offset=120
              local.get 4
              i32.const 2
              i32.store8 offset=112
              local.get 0
              i32.const 8
              i32.add
              local.set 3
              local.get 4
              i32.const 80
              i32.add
              local.get 4
              i32.const 144
              i32.add
              local.get 4
              i32.const 112
              i32.add
              call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
              local.get 4
              i32.load8_u offset=80
              i32.const 255
              i32.ne
              br_if 1 (;@4;)
              local.get 3
              local.get 4
              i64.load offset=96
              i64.store offset=8
              local.get 3
              local.get 4
              i64.load offset=88
              i64.store
            end
            local.get 0
            i64.const 1
            i64.store
            local.get 4
            i32.const 16
            i32.add
            call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
            local.get 2
            local.get 2
            i32.load
            i32.const -1
            i32.add
            local.tee 3
            i32.store
            local.get 3
            i32.eqz
            br_if 2 (;@2;)
            br 3 (;@1;)
          end
          local.get 4
          local.get 4
          i64.load offset=104
          i64.store offset=136
          local.get 4
          local.get 4
          i64.load offset=96
          i64.store offset=128
          local.get 4
          local.get 4
          i64.load offset=88
          i64.store offset=120
          local.get 4
          local.get 4
          i64.load offset=80
          i64.store offset=112
          local.get 4
          i32.const 144
          i32.add
          local.get 4
          i32.const 112
          i32.add
          call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
          block ;; label = @4
            block ;; label = @5
              local.get 4
              i32.load8_u offset=144
              i32.const 255
              i32.eq
              br_if 0 (;@5;)
              local.get 3
              local.get 4
              i64.load offset=152
              i64.store offset=8
              local.get 3
              local.get 4
              i64.load offset=144
              i64.store
              br 1 (;@4;)
            end
            local.get 0
            i32.const 256
            i32.store16 offset=8
          end
          local.get 4
          i32.const 112
          i32.add
          call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
          local.get 4
          i32.const 128
          i32.add
          call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
          i64.const 1
          local.set 6
        end
        local.get 0
        local.get 6
        i64.store
        local.get 4
        i32.const 16
        i32.add
        call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
        local.get 2
        local.get 2
        i32.load
        i32.const -1
        i32.add
        local.tee 3
        i32.store
        local.get 3
        br_if 1 (;@1;)
      end
      local.get 4
      i32.const 8
      i32.add
      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
    end
    local.get 4
    i32.const 160
    i32.add
    global.set $__stack_pointer
  )
  (func $"<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#1} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;645;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i64 i32)
    global.get $__stack_pointer
    i32.const 240
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    local.get 1
    i32.load
    local.set 1
    local.get 4
    local.get 3
    i32.store offset=12
    local.get 4
    local.get 2
    i32.store offset=8
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            local.get 1
            i32.load offset=16
            i32.eqz
            br_if 0 (;@4;)
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            local.get 1
                            i32.load offset=12
                            local.tee 2
                            i32.load8_u offset=8
                            local.tee 5
                            br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
                          end
                          local.get 2
                          i64.load offset=16
                          local.set 6
                          br 10 (;@1;)
                        end
                        local.get 2
                        i32.load offset=12
                        local.tee 3
                        local.get 3
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 7
                        i32.store
                        local.get 7
                        i32.eqz
                        br_if 7 (;@3;)
                        br 8 (;@2;)
                      end
                      local.get 2
                      i32.load offset=12
                      local.tee 3
                      local.get 3
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 7
                      i32.store
                      local.get 7
                      i32.eqz
                      br_if 6 (;@3;)
                      local.get 2
                      i64.load8_u offset=20
                      i64.const 32
                      i64.shl
                      local.get 2
                      i64.load32_u offset=16
                      i64.or
                      local.set 6
                      br 8 (;@1;)
                    end
                    local.get 2
                    i32.load offset=12
                    local.tee 3
                    local.get 3
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 7
                    i32.store
                    local.get 7
                    br_if 6 (;@2;)
                    br 5 (;@3;)
                  end
                  local.get 2
                  i32.load offset=12
                  local.tee 3
                  local.get 3
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 7
                  i32.store
                  local.get 7
                  br_if 5 (;@2;)
                  br 4 (;@3;)
                end
                local.get 2
                i32.load offset=12
                local.tee 3
                local.get 3
                i32.load
                i32.const 1
                i32.add
                local.tee 2
                i32.store
                local.get 2
                i32.eqz
                br_if 3 (;@3;)
                br 1 (;@5;)
              end
              local.get 2
              i32.load8_u offset=9
              local.set 2
            end
            br 3 (;@1;)
          end
          i32.const 0
          i32.const 0
          i32.const 1063408
          call $core::panicking::panic_bounds_check
          unreachable
        end
        unreachable
      end
      local.get 2
      i64.load32_u offset=16
      local.set 6
    end
    local.get 4
    local.get 6
    i64.store offset=64
    local.get 4
    local.get 3
    i32.store offset=60
    local.get 4
    local.get 2
    i32.store8 offset=57
    local.get 4
    local.get 5
    i32.store8 offset=56
    local.get 4
    i32.const 88
    i32.add
    local.get 4
    i32.const 8
    i32.add
    i32.const 1
    call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
    local.get 4
    i32.const 120
    i32.add
    local.get 4
    i32.const 8
    i32.add
    i32.const 0
    call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
    local.get 4
    i32.const 0
    i32.store16 offset=112
    local.get 4
    i32.const 1067680
    i32.store offset=108
    local.get 4
    i32.const 1067674
    i32.store offset=104
    local.get 4
    i32.const 168
    i32.add
    local.get 4
    i32.const 104
    i32.add
    call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    local.get 4
                    i32.load8_u offset=168
                    local.tee 3
                    i32.const 255
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 4
                    local.get 4
                    i64.load offset=172 align=4
                    i64.store offset=220 align=4
                    local.get 4
                    i32.const 3
                    i32.store8 offset=216
                    local.get 4
                    i32.const 136
                    i32.add
                    local.get 4
                    i32.const 120
                    i32.add
                    local.get 4
                    i32.const 216
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=136
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=152
                      i64.store offset=16
                      local.get 0
                      local.get 4
                      i64.load offset=144
                      i64.store offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      local.get 4
                      i32.const 88
                      i32.add
                      call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                      local.get 4
                      i32.const 56
                      i32.add
                      call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                      br 6 (;@3;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=160
                    i64.store offset=192
                    local.get 4
                    local.get 4
                    i64.load offset=152
                    i64.store offset=184
                    local.get 4
                    local.get 4
                    i64.load offset=144
                    i64.store offset=176
                    local.get 4
                    local.get 4
                    i64.load offset=136
                    i64.store offset=168
                    local.get 4
                    i32.const 216
                    i32.add
                    local.get 4
                    i32.const 168
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                    block ;; label = @9
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=216
                        i32.const 255
                        i32.eq
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=224
                        i64.store offset=112
                        local.get 4
                        local.get 4
                        i64.load offset=216
                        i64.store offset=104
                        br 1 (;@9;)
                      end
                      local.get 4
                      i32.const 256
                      i32.store16 offset=104
                    end
                    local.get 4
                    i32.const 168
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 184
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 168
                    i32.add
                    local.get 4
                    i32.const 88
                    i32.add
                    local.get 4
                    i32.const 104
                    i32.add
                    call $nanvm_lib::vm::any::relational::compare::<nanvm_lib::naive::Naive>
                    local.get 4
                    i32.load8_u offset=169
                    local.set 3
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=168
                      local.tee 2
                      i32.const 255
                      i32.eq
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=176 align=2
                      i64.store offset=16 align=2
                      local.get 0
                      local.get 4
                      i64.load offset=170 align=2
                      i64.store offset=10 align=2
                      local.get 0
                      local.get 3
                      i32.store8 offset=9
                      local.get 0
                      local.get 2
                      i32.store8 offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      local.get 4
                      i32.const 56
                      i32.add
                      call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                      br 6 (;@3;)
                    end
                    local.get 4
                    i32.const 0
                    i32.store16 offset=128
                    local.get 4
                    i32.const 1067692
                    i32.store offset=124
                    local.get 4
                    i32.const 1067680
                    i32.store offset=120
                    local.get 4
                    i32.const 168
                    i32.add
                    local.get 4
                    i32.const 120
                    i32.add
                    call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
                    local.get 4
                    i32.load8_u offset=168
                    local.tee 2
                    i32.const 255
                    i32.ne
                    br_if 1 (;@7;)
                    local.get 4
                    i64.load offset=172 align=4
                    local.set 6
                    local.get 4
                    i32.const 0
                    i32.store8 offset=120
                    local.get 4
                    local.get 6
                    i64.store offset=196 align=4
                    local.get 4
                    i32.const 3
                    i32.store8 offset=192
                    local.get 4
                    local.get 3
                    i32.const 255
                    i32.and
                    i32.const 255
                    i32.eq
                    i32.store8 offset=177
                    local.get 4
                    i64.const 8589934592
                    i64.store offset=168
                    local.get 4
                    local.get 4
                    i32.const 120
                    i32.add
                    i32.store offset=208
                    local.get 4
                    i32.const 1
                    i32.store8 offset=176
                    local.get 4
                    local.get 4
                    i32.const 168
                    i32.add
                    call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
                    local.get 4
                    local.get 4
                    i32.load offset=4
                    local.tee 5
                    i32.store offset=220
                    local.get 4
                    local.get 4
                    i32.load
                    local.tee 3
                    i32.store offset=216
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=120
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 3
                      local.get 3
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 5 (;@4;)
                      local.get 4
                      i32.const 216
                      i32.add
                      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                      br 5 (;@4;)
                    end
                    local.get 3
                    i32.eqz
                    br_if 4 (;@4;)
                    local.get 4
                    i32.const 40
                    i32.add
                    local.set 2
                    local.get 4
                    local.get 5
                    i32.store offset=80
                    local.get 4
                    local.get 3
                    i32.store offset=76
                    local.get 4
                    i32.const 6
                    i32.store8 offset=72
                    local.get 4
                    i32.const 32
                    i32.add
                    local.get 4
                    i32.const 56
                    i32.add
                    local.get 4
                    i32.const 72
                    i32.add
                    call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::call
                    block ;; label = @9
                      local.get 4
                      i64.load offset=32
                      i64.const 1
                      i64.ne
                      br_if 0 (;@9;)
                      local.get 0
                      i64.const 1
                      i64.store
                      local.get 0
                      local.get 2
                      i64.load offset=8
                      i64.store offset=16
                      local.get 0
                      local.get 2
                      i64.load
                      i64.store offset=8
                      br 6 (;@3;)
                    end
                    local.get 4
                    local.get 2
                    i64.load offset=8
                    i64.store offset=24
                    local.get 4
                    local.get 2
                    i64.load
                    i64.store offset=16
                    local.get 4
                    i32.const 120
                    i32.add
                    local.get 4
                    i32.const 8
                    i32.add
                    i32.const 0
                    call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
                    local.get 4
                    i32.const 0
                    i32.store16 offset=96
                    local.get 4
                    i32.const 1067694
                    i32.store offset=92
                    local.get 4
                    i32.const 1067692
                    i32.store offset=88
                    local.get 4
                    i32.const 168
                    i32.add
                    local.get 4
                    i32.const 88
                    i32.add
                    call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
                    local.get 4
                    i32.load8_u offset=168
                    local.tee 3
                    i32.const 255
                    i32.ne
                    br_if 2 (;@6;)
                    local.get 4
                    local.get 4
                    i64.load offset=172 align=4
                    i64.store offset=220 align=4
                    local.get 4
                    i32.const 3
                    i32.store8 offset=216
                    local.get 4
                    i32.const 168
                    i32.add
                    local.get 4
                    i32.const 120
                    i32.add
                    local.get 4
                    i32.const 216
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    local.get 1
                    i32.load offset=16
                    local.tee 3
                    i32.const 1
                    i32.le_u
                    br_if 3 (;@5;)
                    local.get 0
                    local.get 4
                    i32.const 168
                    i32.add
                    local.get 1
                    i32.load offset=12
                    i32.const 24
                    i32.add
                    local.get 4
                    i32.const 8
                    i32.add
                    call $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#1}::{closure#0}>"
                    local.get 4
                    i32.const 16
                    i32.add
                    call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.load offset=8
                    local.tee 0
                    local.get 0
                    i32.load
                    i32.const -1
                    i32.add
                    local.tee 0
                    i32.store
                    local.get 0
                    br_if 7 (;@1;)
                    br 6 (;@2;)
                  end
                  local.get 4
                  local.get 4
                  i32.load8_u offset=171
                  i32.store8 offset=139
                  local.get 4
                  local.get 4
                  i32.load16_u offset=169 align=1
                  i32.store16 offset=137 align=1
                  local.get 4
                  local.get 4
                  i32.load offset=180
                  i32.store offset=148
                  local.get 4
                  local.get 4
                  i64.load offset=172 align=4
                  i64.store offset=140 align=4
                  local.get 4
                  local.get 3
                  i32.store8 offset=136
                  i32.const 1065572
                  i32.const 43
                  local.get 4
                  i32.const 136
                  i32.add
                  i32.const 1065556
                  i32.const 1065616
                  call $core::result::unwrap_failed
                  unreachable
                end
                local.get 4
                local.get 4
                i32.load8_u offset=171
                i32.store8 offset=219
                local.get 4
                local.get 4
                i32.load16_u offset=169 align=1
                i32.store16 offset=217 align=1
                local.get 4
                local.get 4
                i32.load offset=180
                i32.store offset=228
                local.get 4
                local.get 4
                i64.load offset=172 align=4
                i64.store offset=220 align=4
                local.get 4
                local.get 2
                i32.store8 offset=216
                i32.const 1065572
                i32.const 43
                local.get 4
                i32.const 216
                i32.add
                i32.const 1065556
                i32.const 1065616
                call $core::result::unwrap_failed
                unreachable
              end
              local.get 4
              local.get 4
              i32.load8_u offset=171
              i32.store8 offset=219
              local.get 4
              local.get 4
              i32.load16_u offset=169 align=1
              i32.store16 offset=217 align=1
              local.get 4
              local.get 4
              i32.load offset=180
              i32.store offset=228
              local.get 4
              local.get 4
              i64.load offset=172 align=4
              i64.store offset=220 align=4
              local.get 4
              local.get 3
              i32.store8 offset=216
              i32.const 1065572
              i32.const 43
              local.get 4
              i32.const 216
              i32.add
              i32.const 1065556
              i32.const 1065616
              call $core::result::unwrap_failed
              unreachable
            end
            i32.const 1
            local.get 3
            i32.const 1063408
            call $core::panicking::panic_bounds_check
            unreachable
          end
          i32.const 1057428
          i32.const 43
          local.get 4
          i32.const 239
          i32.add
          i32.const 1057412
          i32.const 1057472
          call $core::result::unwrap_failed
          unreachable
        end
        local.get 4
        i32.load offset=8
        local.tee 0
        local.get 0
        i32.load
        i32.const -1
        i32.add
        local.tee 0
        i32.store
        local.get 0
        br_if 1 (;@1;)
      end
      local.get 4
      i32.const 8
      i32.add
      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
    end
    local.get 4
    i32.const 240
    i32.add
    global.set $__stack_pointer
  )
  (func $"<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#2} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;646;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i32 i64 i32)
    global.get $__stack_pointer
    i32.const 224
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    local.get 1
    i32.load
    local.set 1
    local.get 4
    local.get 3
    i32.store offset=20
    local.get 4
    local.get 2
    i32.store offset=16
    local.get 2
    local.get 2
    i32.load
    i32.const 1
    i32.add
    local.tee 5
    i32.store
    block ;; label = @1
      local.get 5
      i32.eqz
      br_if 0 (;@1;)
      local.get 4
      local.get 3
      i32.store offset=32
      local.get 4
      local.get 2
      i32.store offset=28
      local.get 4
      i32.const 6
      i32.store8 offset=24
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            local.get 1
            i32.load offset=16
            i32.eqz
            br_if 0 (;@4;)
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            local.get 1
                            i32.load offset=12
                            local.tee 5
                            i32.load8_u offset=8
                            local.tee 6
                            br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
                          end
                          local.get 5
                          i64.load offset=16
                          local.set 7
                          br 9 (;@2;)
                        end
                        local.get 5
                        i32.load offset=12
                        local.tee 1
                        local.get 1
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 8
                        i32.store
                        local.get 8
                        i32.eqz
                        br_if 9 (;@1;)
                        br 7 (;@3;)
                      end
                      local.get 5
                      i32.load offset=12
                      local.tee 1
                      local.get 1
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 8
                      i32.store
                      local.get 8
                      i32.eqz
                      br_if 8 (;@1;)
                      local.get 5
                      i64.load8_u offset=20
                      i64.const 32
                      i64.shl
                      local.get 5
                      i64.load32_u offset=16
                      i64.or
                      local.set 7
                      br 7 (;@2;)
                    end
                    local.get 5
                    i32.load offset=12
                    local.tee 1
                    local.get 1
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 8
                    i32.store
                    local.get 8
                    br_if 5 (;@3;)
                    br 7 (;@1;)
                  end
                  local.get 5
                  i32.load offset=12
                  local.tee 1
                  local.get 1
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 8
                  i32.store
                  local.get 8
                  br_if 4 (;@3;)
                  br 6 (;@1;)
                end
                local.get 5
                i32.load offset=12
                local.tee 1
                local.get 1
                i32.load
                i32.const 1
                i32.add
                local.tee 5
                i32.store
                local.get 5
                i32.eqz
                br_if 5 (;@1;)
                br 1 (;@5;)
              end
              local.get 5
              i32.load8_u offset=9
              local.set 5
            end
            br 2 (;@2;)
          end
          i32.const 0
          i32.const 0
          i32.const 1063408
          call $core::panicking::panic_bounds_check
          unreachable
        end
        local.get 5
        i64.load32_u offset=16
        local.set 7
      end
      local.get 4
      local.get 7
      i64.store offset=48
      local.get 4
      local.get 1
      i32.store offset=44
      local.get 4
      local.get 5
      i32.store8 offset=41
      local.get 4
      local.get 6
      i32.store8 offset=40
      local.get 4
      i32.const 0
      i32.store8 offset=200
      local.get 4
      i64.const 4613937818241073152
      i64.store offset=184
      local.get 4
      i32.const 2
      i32.store8 offset=176
      local.get 4
      i64.const 4611686018427387904
      i64.store offset=168
      local.get 4
      i32.const 2
      i32.store8 offset=160
      local.get 4
      i64.const 4607182418800017408
      i64.store offset=152
      local.get 4
      i32.const 2
      i32.store8 offset=144
      local.get 4
      i64.const 12884901888
      i64.store offset=136
      local.get 4
      local.get 4
      i32.const 200
      i32.add
      i32.store offset=192
      local.get 4
      i32.const 8
      i32.add
      local.get 4
      i32.const 136
      i32.add
      call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 3>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
      local.get 4
      local.get 4
      i32.load offset=12
      local.tee 5
      i32.store offset=108
      local.get 4
      local.get 4
      i32.load offset=8
      local.tee 1
      i32.store offset=104
      block ;; label = @2
        block ;; label = @3
          local.get 4
          i32.load8_u offset=200
          i32.const 1
          i32.ne
          br_if 0 (;@3;)
          local.get 1
          local.get 1
          i32.load
          i32.const -1
          i32.add
          local.tee 2
          i32.store
          local.get 2
          br_if 1 (;@2;)
          local.get 4
          i32.const 104
          i32.add
          call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
          br 1 (;@2;)
        end
        local.get 1
        i32.eqz
        br_if 0 (;@2;)
        local.get 4
        local.get 5
        i32.store offset=96
        local.get 4
        local.get 1
        i32.store offset=92
        local.get 4
        i32.const 6
        i32.store8 offset=88
        local.get 2
        local.get 2
        i32.load
        i32.const 1
        i32.add
        local.tee 1
        i32.store
        local.get 1
        i32.eqz
        br_if 1 (;@1;)
        local.get 4
        local.get 2
        i32.store offset=204
        local.get 4
        i32.const 6
        i32.store8 offset=200
        local.get 4
        local.get 3
        i64.extend_i32_u
        i64.store offset=208
        local.get 4
        i64.const 0
        i64.store offset=144
        local.get 4
        i32.const 2
        i32.store8 offset=136
        local.get 4
        i32.const 104
        i32.add
        local.get 4
        i32.const 200
        i32.add
        local.get 4
        i32.const 136
        i32.add
        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                local.get 4
                i32.load8_u offset=104
                i32.const 255
                i32.ne
                br_if 0 (;@6;)
                local.get 0
                local.get 4
                i64.load offset=120
                i64.store offset=16
                local.get 0
                local.get 4
                i64.load offset=112
                i64.store offset=8
                local.get 0
                i64.const 1
                i64.store
                local.get 4
                i32.const 88
                i32.add
                call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                local.get 4
                i32.const 40
                i32.add
                call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                local.get 4
                i32.const 24
                i32.add
                call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                local.get 2
                local.get 2
                i32.load
                i32.const -1
                i32.add
                local.tee 3
                i32.store
                local.get 3
                i32.eqz
                br_if 1 (;@5;)
                br 2 (;@4;)
              end
              local.get 4
              local.get 4
              i64.load offset=128
              i64.store offset=160
              local.get 4
              local.get 4
              i64.load offset=120
              i64.store offset=152
              local.get 4
              local.get 4
              i64.load offset=112
              i64.store offset=144
              local.get 4
              local.get 4
              i64.load offset=104
              i64.store offset=136
              local.get 4
              i32.const 200
              i32.add
              local.get 4
              i32.const 136
              i32.add
              call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
              i32.const 1
              local.set 3
              i32.const 0
              local.set 1
              block ;; label = @6
                local.get 4
                i32.load8_u offset=200
                local.tee 5
                i32.const 255
                i32.eq
                br_if 0 (;@6;)
                local.get 4
                local.get 4
                i64.load offset=202 align=2
                i64.store offset=72
                local.get 4
                local.get 4
                i64.load offset=208 align=2
                i64.store offset=78 align=2
                local.get 4
                i32.load8_u offset=201
                local.set 3
                local.get 5
                local.set 1
              end
              local.get 4
              i32.const 136
              i32.add
              call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
              local.get 4
              i32.const 152
              i32.add
              call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
              local.get 4
              local.get 4
              i64.load offset=96
              i64.store offset=152
              local.get 4
              local.get 4
              i64.load offset=88
              i64.store offset=144
              local.get 4
              i32.const 0
              i32.store8 offset=88
              local.get 4
              local.get 3
              i32.store8 offset=161
              local.get 4
              local.get 1
              i32.store8 offset=160
              local.get 4
              i64.const 8589934592
              i64.store offset=136
              local.get 4
              local.get 4
              i64.load offset=72
              i64.store offset=162 align=2
              local.get 4
              local.get 4
              i64.load offset=78 align=2
              i64.store offset=168 align=2
              local.get 4
              local.get 4
              i32.const 88
              i32.add
              i32.store offset=176
              local.get 4
              local.get 4
              i32.const 136
              i32.add
              call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
              local.get 4
              local.get 4
              i32.load offset=4
              local.tee 1
              i32.store offset=204
              local.get 4
              local.get 4
              i32.load
              local.tee 3
              i32.store offset=200
              block ;; label = @6
                local.get 4
                i32.load8_u offset=88
                i32.const 1
                i32.ne
                br_if 0 (;@6;)
                local.get 3
                local.get 3
                i32.load
                i32.const -1
                i32.add
                local.tee 2
                i32.store
                local.get 2
                br_if 3 (;@3;)
                local.get 4
                i32.const 200
                i32.add
                call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                br 3 (;@3;)
              end
              local.get 3
              i32.eqz
              br_if 2 (;@3;)
              local.get 4
              local.get 1
              i32.store offset=64
              local.get 4
              local.get 3
              i32.store offset=60
              local.get 4
              i32.const 6
              i32.store8 offset=56
              local.get 0
              local.get 4
              i32.const 40
              i32.add
              local.get 4
              i32.const 56
              i32.add
              call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::call
              local.get 4
              i32.const 24
              i32.add
              call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              local.get 2
              local.get 2
              i32.load
              i32.const -1
              i32.add
              local.tee 3
              i32.store
              local.get 3
              br_if 1 (;@4;)
            end
            local.get 4
            i32.const 16
            i32.add
            call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
          end
          local.get 4
          i32.const 224
          i32.add
          global.set $__stack_pointer
          return
        end
        i32.const 1057428
        i32.const 43
        local.get 4
        i32.const 223
        i32.add
        i32.const 1057412
        i32.const 1057472
        call $core::result::unwrap_failed
        unreachable
      end
      i32.const 1057428
      i32.const 43
      local.get 4
      i32.const 223
      i32.add
      i32.const 1057412
      i32.const 1057472
      call $core::result::unwrap_failed
      unreachable
    end
    unreachable
  )

Emergent Testing

Idle. Press Run to start the suite.

  • ./expression-statements/proof.f.mjs
  • ./proof.f.mjs