Names and Identity

Status: implemented

  • A function carries no name. Its EDAG is ['=>', length, slots, body], name-erased, so the function in { make: () => 0 }.make, in const hello = () => 0 and in export default () => 0 is the same node, ['=>', 0, [], 0], whatever JavaScript would name it (make, hello, default), and no program observes the difference: f.name is refused at the key of ., and entry(f, 'name') is undefined and hasEntry(f, 'name') false, since name is not an enumerable own property (reading an entry at run time), which is the decision that retired the proposals that would have exposed a name. The name a JavaScript engine gives a function it loads from the written output is the writer's spelling, not a result of the program (principles). Empty and rest-only parameter lists both have length === 0.
  • A function has identity, as an object does, and it is JavaScript's: evaluating an arrow makes a new function — once for one written at module level, once per call for one written in a body — and a const holding one is that one function however many references reach it. Under const f = () => 1;, f === f is true; under const g = (y) => () => y;, g(1) === g(1) is false; and (() => 1) === (() => 1) is false, as two separately written objects are two (shared values). Denoting the same function is sameness of meaning, not of identity.

Examples

The compiler demo has no programs for this page yet: its accepted and refused examples are a follow-up.

The demo on this page runs sample.f.js, this page's example as a function of one number — identity, not names: a function is equal to itself, and two written alike are two functions — 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 0 and 1, as JavaScript and as WebAssembly, and shows what each call returned or threw.

const hello = () => 0;
const o = { make: () => 0 };
export default (...a) => [hello === hello, hello === o.make, [hello, o.make][Number(a[0])] === hello];

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 0, then 1, 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) (Names and Identity) as a
 * function of one number, for the page's WASM demo: identity, not names: a
 * function is equal to itself, and two written alike are two functions: the
 * input picks one of them, and the answer says whether it is `hello`.
 *
 * @module
 */

const hello = () => 0;
const o = { make: () => 0 };
/** @type {(...a: readonly number[]) => unknown} */
export default (...a) => [hello === hello, hello === o.make, [hello, o.make][Number(a[0])] === hello];

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

=>lengthframe 0frame 1body0=>{}[]=>lengthbody00{}make[]012=>lengthbody00===leftrightframe 0frame 0===leftrightframe 0.===leftright.frame 0.objkeyframe 1"make".objidx[]01frame 0.Numberoperand.objkeyframe 1"make".objidxrest0

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

const $0=["frame",0];const $1=["frame",1];export default ["{}",[[":","default",["=>",0,[["=>",0,[],0],["{}",[[":","make",["=>",0,[],0]]]]],["[]",[["===",$0,$0],["===",$0,[".",$1,"make"]],["===",[".",["[]",[$0,[".",$1,"make"]]],["Number",[".",["rest"],0]]],$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, strict_eq, string_any, string_key};
use nanvm_lib::vm::{Any, Array, IStaticFunction, 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 _b0: Any<A> = A::static_function(|_self, _args| { Ok(f64_any(0x0000000000000000)) }, 0, Array::default(), Some("()=>0")).to_any();
    Ok([(string_key("default"), {
        let _b2: Any<A> = [(string_key("make"), A::static_function(|_self, _args| { Ok(f64_any(0x0000000000000000)) }, 0, Array::default(), Some("()=>0")).to_any())].to_object().to_any();
        A::static_function(|_self, _args| {
            let _b834: Any<A> = _args.rest(0).to_any();
            Ok([(strict_eq(A::frame(_self)[0].clone(), A::frame(_self)[0].clone()))?, (strict_eq(A::frame(_self)[0].clone(), (Any::dot(A::frame(_self)[1].clone(), string_any("make")).end())?))?, (strict_eq((Any::dot([A::frame(_self)[0].clone(), (Any::dot(A::frame(_self)[1].clone(), string_any("make")).end())?].to_array().to_any(), (Any::number((Any::dot(_b834.clone(), f64_any(0x0000000000000000)).end())?))?).end())?, A::frame(_self)[0].clone()))?].to_array().to_any())
        }, 0, [_b0.clone(), _b2.clone()].to_array(), Some("(...$2)=>[$0===$0,$0===$1.make,[$0,$1.make][Number($2[0])]===$0]")).to_any()
    })].to_object().to_any())
}

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

  (func $nanvm_demos::samples::names_and_identity::module::<nanvm_lib::naive::Naive> (;650;) (type 1) (param i32 i32)
    (local i32 i32 i32 i32 i32 i32 i32 i32)
    global.get $__stack_pointer
    i32.const 160
    i32.sub
    local.tee 2
    global.set $__stack_pointer
    local.get 2
    i32.const 0
    i32.store8 offset=80
    local.get 2
    i32.const 40
    i32.add
    local.get 2
    i32.const 80
    i32.add
    call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::iter::sources::empty::Empty<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, 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=44
    local.tee 3
    i32.store offset=108
    local.get 2
    local.get 2
    i32.load offset=40
    local.tee 4
    i32.store offset=104
    block ;; label = @1
      block ;; label = @2
        local.get 2
        i32.load8_u offset=80
        i32.const 1
        i32.ne
        br_if 0 (;@2;)
        local.get 4
        local.get 4
        i32.load
        i32.const -1
        i32.add
        local.tee 0
        i32.store
        local.get 0
        br_if 1 (;@1;)
        local.get 2
        i32.const 104
        i32.add
        call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
        br 1 (;@1;)
      end
      local.get 4
      i32.eqz
      br_if 0 (;@1;)
      local.get 2
      i32.const 189
      i32.const 0
      local.get 4
      local.get 3
      i32.const 1066454
      i32.const 5
      call $<nanvm_lib::naive::function::Function>::new
      local.tee 3
      i32.store offset=52
      local.get 2
      i32.const 7
      i32.store8 offset=48
      local.get 2
      i32.const 0
      i32.store16 offset=76
      local.get 2
      i32.const 1066166
      i32.store offset=72
      local.get 2
      i32.const 1066159
      i32.store offset=68
      local.get 2
      i32.const 104
      i32.add
      local.get 2
      i32.const 68
      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 = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    local.get 2
                    i32.load8_u offset=104
                    local.tee 4
                    i32.const 255
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 2
                    i32.load offset=112
                    local.set 5
                    local.get 2
                    i32.load offset=108
                    local.set 6
                    local.get 2
                    i32.const 0
                    i32.store16 offset=76
                    local.get 2
                    i32.const 1066463
                    i32.store offset=72
                    local.get 2
                    i32.const 1066459
                    i32.store offset=68
                    local.get 2
                    i32.const 104
                    i32.add
                    local.get 2
                    i32.const 68
                    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 2
                    i32.load8_u offset=104
                    local.tee 4
                    i32.const 255
                    i32.ne
                    br_if 1 (;@7;)
                    local.get 2
                    i32.load offset=112
                    local.set 7
                    local.get 2
                    i32.load offset=108
                    local.set 8
                    local.get 2
                    i32.const 0
                    i32.store8 offset=80
                    local.get 2
                    i32.const 32
                    i32.add
                    local.get 2
                    i32.const 80
                    i32.add
                    call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::iter::sources::empty::Empty<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, 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=36
                    local.tee 9
                    i32.store offset=108
                    local.get 2
                    local.get 2
                    i32.load offset=32
                    local.tee 4
                    i32.store offset=104
                    block ;; label = @9
                      local.get 2
                      i32.load8_u offset=80
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 7 (;@2;)
                      local.get 2
                      i32.const 104
                      i32.add
                      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                      br 7 (;@2;)
                    end
                    local.get 4
                    i32.eqz
                    br_if 6 (;@2;)
                    i32.const 189
                    i32.const 0
                    local.get 4
                    local.get 9
                    i32.const 1066454
                    i32.const 5
                    call $<nanvm_lib::naive::function::Function>::new
                    local.set 4
                    local.get 2
                    i32.const 0
                    i32.store8 offset=68
                    local.get 2
                    local.get 4
                    i32.store offset=124
                    local.get 2
                    i32.const 7
                    i32.store8 offset=120
                    local.get 2
                    local.get 7
                    i32.store offset=116
                    local.get 2
                    local.get 8
                    i32.store offset=112
                    local.get 2
                    i64.const 4294967296
                    i64.store offset=104
                    local.get 2
                    local.get 2
                    i32.const 68
                    i32.add
                    i32.store offset=136
                    local.get 2
                    i32.const 24
                    i32.add
                    local.get 2
                    i32.const 104
                    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=28
                    local.tee 7
                    i32.store offset=84
                    local.get 2
                    local.get 2
                    i32.load offset=24
                    local.tee 4
                    i32.store offset=80
                    block ;; label = @9
                      local.get 2
                      i32.load8_u offset=68
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 6 (;@3;)
                      local.get 2
                      i32.const 80
                      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 6 (;@3;)
                    end
                    local.get 4
                    i32.eqz
                    br_if 5 (;@3;)
                    local.get 2
                    local.get 7
                    i32.store offset=88
                    local.get 2
                    local.get 4
                    i32.store offset=84
                    local.get 2
                    i32.const 5
                    i32.store8 offset=80
                    local.get 3
                    local.get 3
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 8
                    i32.store
                    local.get 8
                    i32.eqz
                    br_if 2 (;@6;)
                    local.get 4
                    local.get 4
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 8
                    i32.store
                    local.get 8
                    i32.eqz
                    br_if 2 (;@6;)
                    local.get 2
                    i32.const 0
                    i32.store8 offset=103
                    local.get 2
                    local.get 7
                    i64.extend_i32_u
                    i64.store offset=136
                    local.get 2
                    local.get 4
                    i32.store offset=132
                    local.get 2
                    i32.const 5
                    i32.store8 offset=128
                    local.get 2
                    i64.const 0
                    i64.store offset=120
                    local.get 2
                    local.get 3
                    i32.store offset=116
                    local.get 2
                    i32.const 7
                    i32.store8 offset=112
                    local.get 2
                    i64.const 8589934592
                    i64.store offset=104
                    local.get 2
                    local.get 2
                    i32.const 103
                    i32.add
                    i32.store offset=144
                    local.get 2
                    i32.const 16
                    i32.add
                    local.get 2
                    i32.const 104
                    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 3
                    i32.store offset=72
                    local.get 2
                    local.get 2
                    i32.load offset=16
                    local.tee 4
                    i32.store offset=68
                    block ;; label = @9
                      local.get 2
                      i32.load8_u offset=103
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 5 (;@4;)
                      local.get 2
                      i32.const 68
                      i32.add
                      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                      br 5 (;@4;)
                    end
                    local.get 4
                    i32.eqz
                    br_if 4 (;@4;)
                    i32.const 190
                    i32.const 0
                    local.get 4
                    local.get 3
                    i32.const 1066463
                    i32.const 64
                    call $<nanvm_lib::naive::function::Function>::new
                    local.set 4
                    local.get 2
                    i32.const 80
                    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=68
                    local.get 2
                    local.get 4
                    i32.store offset=124
                    local.get 2
                    i32.const 7
                    i32.store8 offset=120
                    local.get 2
                    local.get 5
                    i32.store offset=116
                    local.get 2
                    local.get 6
                    i32.store offset=112
                    local.get 2
                    i64.const 4294967296
                    i64.store offset=104
                    local.get 2
                    local.get 2
                    i32.const 68
                    i32.add
                    i32.store offset=136
                    local.get 2
                    i32.const 8
                    i32.add
                    local.get 2
                    i32.const 104
                    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=12
                    local.tee 3
                    i32.store offset=84
                    local.get 2
                    local.get 2
                    i32.load offset=8
                    local.tee 4
                    i32.store offset=80
                    block ;; label = @9
                      local.get 2
                      i32.load8_u offset=68
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 4 (;@5;)
                      local.get 2
                      i32.const 80
                      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 4 (;@5;)
                    end
                    local.get 4
                    i32.eqz
                    br_if 3 (;@5;)
                    local.get 0
                    local.get 3
                    i32.store offset=16
                    local.get 0
                    local.get 4
                    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 48
                    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 160
                    i32.add
                    global.set $__stack_pointer
                    return
                  end
                  local.get 2
                  local.get 2
                  i32.load8_u offset=107
                  i32.store8 offset=83
                  local.get 2
                  local.get 2
                  i32.load16_u offset=105 align=1
                  i32.store16 offset=81 align=1
                  local.get 2
                  local.get 2
                  i32.load offset=116
                  i32.store offset=92
                  local.get 2
                  local.get 2
                  i64.load offset=108 align=4
                  i64.store offset=84 align=4
                  local.get 2
                  local.get 4
                  i32.store8 offset=80
                  i32.const 1065572
                  i32.const 43
                  local.get 2
                  i32.const 80
                  i32.add
                  i32.const 1065556
                  i32.const 1065616
                  call $core::result::unwrap_failed
                  unreachable
                end
                local.get 2
                local.get 2
                i32.load8_u offset=107
                i32.store8 offset=83
                local.get 2
                local.get 2
                i32.load16_u offset=105 align=1
                i32.store16 offset=81 align=1
                local.get 2
                local.get 2
                i32.load offset=116
                i32.store offset=92
                local.get 2
                local.get 2
                i64.load offset=108 align=4
                i64.store offset=84 align=4
                local.get 2
                local.get 4
                i32.store8 offset=80
                i32.const 1065572
                i32.const 43
                local.get 2
                i32.const 80
                i32.add
                i32.const 1065556
                i32.const 1065616
                call $core::result::unwrap_failed
              end
              unreachable
            end
            i32.const 1057428
            i32.const 43
            local.get 2
            i32.const 159
            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 159
          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 159
        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 159
      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 159
    i32.add
    i32.const 1057412
    i32.const 1057472
    call $core::result::unwrap_failed
    unreachable
  )
  (func $"<nanvm_demos::samples::names_and_identity::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" (;651;) (type 4) (param i32 i32 i32 i32)
    (local i32)
    global.get $__stack_pointer
    i32.const 16
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    local.get 0
    i64.const 0
    i64.store offset=16
    local.get 0
    i32.const 2
    i32.store8 offset=8
    local.get 0
    i64.const 0
    i64.store
    local.get 2
    local.get 2
    i32.load
    i32.const -1
    i32.add
    local.tee 0
    i32.store
    local.get 4
    local.get 3
    i32.store offset=12
    local.get 4
    local.get 2
    i32.store offset=8
    block ;; label = @1
      local.get 0
      br_if 0 (;@1;)
      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 16
    i32.add
    global.set $__stack_pointer
  )
  (func $"<nanvm_demos::samples::names_and_identity::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" (;652;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i32 i64 i32 f64)
    global.get $__stack_pointer
    i32.const 416
    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=28
    local.get 4
    local.get 2
    i32.store offset=24
    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=40
      local.get 4
      local.get 2
      i32.store offset=36
      local.get 4
      i32.const 6
      i32.store8 offset=32
      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 3
                        local.get 3
                        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 3
                      local.get 3
                      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 3
                    local.get 3
                    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 3
                  local.get 3
                  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 3
                local.get 3
                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=336
      local.get 4
      local.get 3
      i32.store offset=332
      local.get 4
      local.get 5
      i32.store8 offset=329
      local.get 4
      local.get 6
      i32.store8 offset=328
      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 3
                            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 3
                          i64.load offset=16
                          local.set 7
                          br 9 (;@2;)
                        end
                        local.get 3
                        i32.load offset=12
                        local.tee 5
                        local.get 5
                        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 3
                      i32.load offset=12
                      local.tee 5
                      local.get 5
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 8
                      i32.store
                      local.get 8
                      i32.eqz
                      br_if 8 (;@1;)
                      local.get 3
                      i64.load8_u offset=20
                      i64.const 32
                      i64.shl
                      local.get 3
                      i64.load32_u offset=16
                      i64.or
                      local.set 7
                      br 7 (;@2;)
                    end
                    local.get 3
                    i32.load offset=12
                    local.tee 5
                    local.get 5
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 8
                    i32.store
                    local.get 8
                    i32.eqz
                    br_if 7 (;@1;)
                    br 5 (;@3;)
                  end
                  local.get 3
                  i32.load offset=12
                  local.tee 5
                  local.get 5
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 8
                  i32.store
                  local.get 8
                  i32.eqz
                  br_if 6 (;@1;)
                  br 4 (;@3;)
                end
                local.get 3
                i32.load offset=12
                local.tee 5
                local.get 5
                i32.load
                i32.const 1
                i32.add
                local.tee 3
                i32.store
                local.get 3
                i32.eqz
                br_if 5 (;@1;)
                br 1 (;@5;)
              end
              local.get 3
              i32.load8_u offset=9
              local.set 3
            end
            br 2 (;@2;)
          end
          i32.const 0
          i32.const 0
          i32.const 1063408
          call $core::panicking::panic_bounds_check
          unreachable
        end
        local.get 3
        i64.load32_u offset=16
        local.set 7
      end
      local.get 4
      local.get 7
      i64.store offset=368
      local.get 4
      local.get 5
      i32.store offset=364
      local.get 4
      local.get 3
      i32.store8 offset=361
      local.get 4
      local.get 6
      i32.store8 offset=360
      local.get 4
      i32.const 328
      i32.add
      local.get 4
      i32.const 360
      i32.add
      call $"<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive> as core::cmp::PartialEq>::eq"
      local.set 3
      local.get 4
      i32.const 360
      i32.add
      call $"#func344 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
      local.get 4
      i32.const 328
      i32.add
      call $"#func344 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
      local.get 4
      local.get 3
      i32.store8 offset=97
      local.get 4
      i32.const 1
      i32.store8 offset=96
      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 3
                        local.get 3
                        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 3
                      local.get 3
                      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 3
                    local.get 3
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 8
                    i32.store
                    local.get 8
                    i32.eqz
                    br_if 7 (;@1;)
                    br 5 (;@3;)
                  end
                  local.get 5
                  i32.load offset=12
                  local.tee 3
                  local.get 3
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 8
                  i32.store
                  local.get 8
                  i32.eqz
                  br_if 6 (;@1;)
                  br 4 (;@3;)
                end
                local.get 5
                i32.load offset=12
                local.tee 3
                local.get 3
                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=272
      local.get 4
      local.get 3
      i32.store offset=268
      local.get 4
      local.get 5
      i32.store8 offset=265
      local.get 4
      local.get 6
      i32.store8 offset=264
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            local.get 1
            i32.load offset=16
            local.tee 3
            i32.const 1
            i32.le_u
            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=24
                            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=32
                          local.set 7
                          br 9 (;@2;)
                        end
                        local.get 5
                        i32.load offset=28
                        local.tee 3
                        local.get 3
                        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=28
                      local.tee 3
                      local.get 3
                      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=36
                      i64.const 32
                      i64.shl
                      local.get 5
                      i64.load32_u offset=32
                      i64.or
                      local.set 7
                      br 7 (;@2;)
                    end
                    local.get 5
                    i32.load offset=28
                    local.tee 3
                    local.get 3
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 8
                    i32.store
                    local.get 8
                    i32.eqz
                    br_if 7 (;@1;)
                    br 5 (;@3;)
                  end
                  local.get 5
                  i32.load offset=28
                  local.tee 3
                  local.get 3
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 8
                  i32.store
                  local.get 8
                  i32.eqz
                  br_if 6 (;@1;)
                  br 4 (;@3;)
                end
                local.get 5
                i32.load offset=28
                local.tee 3
                local.get 3
                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=25
              local.set 5
            end
            br 2 (;@2;)
          end
          i32.const 1
          local.get 3
          i32.const 1063408
          call $core::panicking::panic_bounds_check
          unreachable
        end
        local.get 5
        i64.load32_u offset=32
        local.set 7
      end
      local.get 4
      local.get 7
      i64.store offset=304
      local.get 4
      local.get 3
      i32.store offset=300
      local.get 4
      local.get 5
      i32.store8 offset=297
      local.get 4
      local.get 6
      i32.store8 offset=296
      local.get 4
      i32.const 0
      i32.store16 offset=240
      local.get 4
      i32.const 1066463
      i32.store offset=236
      local.get 4
      i32.const 1066459
      i32.store offset=232
      local.get 4
      i32.const 360
      i32.add
      local.get 4
      i32.const 232
      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 = @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
                        local.get 4
                        i32.load8_u offset=360
                        local.tee 3
                        i32.const 255
                        i32.ne
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=364 align=4
                        i64.store offset=332 align=4
                        local.get 4
                        i32.const 3
                        i32.store8 offset=328
                        local.get 4
                        i32.const 232
                        i32.add
                        local.get 4
                        i32.const 296
                        i32.add
                        local.get 4
                        i32.const 328
                        i32.add
                        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=232
                          i32.const 255
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 0
                          local.get 4
                          i64.load offset=248
                          i64.store offset=16
                          local.get 0
                          local.get 4
                          i64.load offset=240
                          i64.store offset=8
                          local.get 0
                          i64.const 1
                          i64.store
                          local.get 4
                          i32.const 264
                          i32.add
                          call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                          br 5 (;@6;)
                        end
                        local.get 4
                        local.get 4
                        i64.load offset=256
                        i64.store offset=384
                        local.get 4
                        local.get 4
                        i64.load offset=248
                        i64.store offset=376
                        local.get 4
                        local.get 4
                        i64.load offset=240
                        i64.store offset=368
                        local.get 4
                        local.get 4
                        i64.load offset=232
                        i64.store offset=360
                        local.get 4
                        i32.const 328
                        i32.add
                        local.get 4
                        i32.const 360
                        i32.add
                        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                        block ;; label = @11
                          block ;; label = @12
                            local.get 4
                            i32.load8_u offset=328
                            i32.const 255
                            i32.eq
                            br_if 0 (;@12;)
                            local.get 4
                            local.get 4
                            i64.load offset=336
                            i64.store offset=136
                            local.get 4
                            local.get 4
                            i64.load offset=328
                            i64.store offset=128
                            br 1 (;@11;)
                          end
                          local.get 4
                          i32.const 256
                          i32.store16 offset=128
                        end
                        local.get 4
                        i32.const 360
                        i32.add
                        call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        local.get 4
                        i32.const 376
                        i32.add
                        call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        local.get 4
                        i32.const 264
                        i32.add
                        local.get 4
                        i32.const 128
                        i32.add
                        call $"<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive> as core::cmp::PartialEq>::eq"
                        local.set 3
                        local.get 4
                        i32.const 128
                        i32.add
                        call $"#func344 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        local.get 4
                        i32.const 264
                        i32.add
                        call $"#func344 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        local.get 4
                        local.get 3
                        i32.store8 offset=113
                        local.get 4
                        i32.const 1
                        i32.store8 offset=112
                        local.get 1
                        i32.load offset=16
                        i32.eqz
                        br_if 1 (;@9;)
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              block ;; label = @14
                                block ;; label = @15
                                  block ;; label = @16
                                    block ;; label = @17
                                      block ;; label = @18
                                        local.get 1
                                        i32.load offset=12
                                        local.tee 3
                                        i32.load8_u offset=8
                                        local.tee 6
                                        br_table 6 (;@12;) 6 (;@12;) 0 (;@18;) 1 (;@17;) 2 (;@16;) 3 (;@15;) 4 (;@14;) 5 (;@13;) 6 (;@12;)
                                      end
                                      local.get 3
                                      i64.load offset=16
                                      local.set 7
                                      br 10 (;@7;)
                                    end
                                    local.get 3
                                    i32.load offset=12
                                    local.tee 5
                                    local.get 5
                                    i32.load
                                    i32.const 1
                                    i32.add
                                    local.tee 8
                                    i32.store
                                    local.get 8
                                    i32.eqz
                                    br_if 15 (;@1;)
                                    br 8 (;@8;)
                                  end
                                  local.get 3
                                  i32.load offset=12
                                  local.tee 5
                                  local.get 5
                                  i32.load
                                  i32.const 1
                                  i32.add
                                  local.tee 8
                                  i32.store
                                  local.get 8
                                  i32.eqz
                                  br_if 14 (;@1;)
                                  local.get 3
                                  i64.load8_u offset=20
                                  i64.const 32
                                  i64.shl
                                  local.get 3
                                  i64.load32_u offset=16
                                  i64.or
                                  local.set 7
                                  br 8 (;@7;)
                                end
                                local.get 3
                                i32.load offset=12
                                local.tee 5
                                local.get 5
                                i32.load
                                i32.const 1
                                i32.add
                                local.tee 8
                                i32.store
                                local.get 8
                                i32.eqz
                                br_if 13 (;@1;)
                                br 6 (;@8;)
                              end
                              local.get 3
                              i32.load offset=12
                              local.tee 5
                              local.get 5
                              i32.load
                              i32.const 1
                              i32.add
                              local.tee 8
                              i32.store
                              local.get 8
                              i32.eqz
                              br_if 12 (;@1;)
                              br 5 (;@8;)
                            end
                            local.get 3
                            i32.load offset=12
                            local.tee 5
                            local.get 5
                            i32.load
                            i32.const 1
                            i32.add
                            local.tee 3
                            i32.store
                            local.get 3
                            i32.eqz
                            br_if 11 (;@1;)
                            br 1 (;@11;)
                          end
                          local.get 3
                          i32.load8_u offset=9
                          local.set 3
                        end
                        br 3 (;@7;)
                      end
                      local.get 4
                      local.get 4
                      i32.load8_u offset=363
                      i32.store8 offset=331
                      local.get 4
                      local.get 4
                      i32.load16_u offset=361 align=1
                      i32.store16 offset=329 align=1
                      local.get 4
                      local.get 4
                      i32.load offset=372
                      i32.store offset=340
                      local.get 4
                      local.get 4
                      i64.load offset=364 align=4
                      i64.store offset=332 align=4
                      local.get 4
                      local.get 3
                      i32.store8 offset=328
                      i32.const 1065572
                      i32.const 43
                      local.get 4
                      i32.const 328
                      i32.add
                      i32.const 1065556
                      i32.const 1065616
                      call $core::result::unwrap_failed
                      unreachable
                    end
                    i32.const 0
                    i32.const 0
                    i32.const 1063408
                    call $core::panicking::panic_bounds_check
                    unreachable
                  end
                  local.get 3
                  i64.load32_u offset=16
                  local.set 7
                end
                local.get 4
                local.get 7
                i64.store offset=224
                local.get 4
                local.get 5
                i32.store offset=220
                local.get 4
                local.get 3
                i32.store8 offset=217
                local.get 4
                local.get 6
                i32.store8 offset=216
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      local.get 1
                      i32.load offset=16
                      local.tee 3
                      i32.const 1
                      i32.le_u
                      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 1
                                      i32.load offset=12
                                      local.tee 3
                                      i32.load8_u offset=24
                                      local.tee 6
                                      br_table 6 (;@11;) 6 (;@11;) 0 (;@17;) 1 (;@16;) 2 (;@15;) 3 (;@14;) 4 (;@13;) 5 (;@12;) 6 (;@11;)
                                    end
                                    local.get 3
                                    i64.load offset=32
                                    local.set 7
                                    br 9 (;@7;)
                                  end
                                  local.get 3
                                  i32.load offset=28
                                  local.tee 5
                                  local.get 5
                                  i32.load
                                  i32.const 1
                                  i32.add
                                  local.tee 8
                                  i32.store
                                  local.get 8
                                  i32.eqz
                                  br_if 14 (;@1;)
                                  br 7 (;@8;)
                                end
                                local.get 3
                                i32.load offset=28
                                local.tee 5
                                local.get 5
                                i32.load
                                i32.const 1
                                i32.add
                                local.tee 8
                                i32.store
                                local.get 8
                                i32.eqz
                                br_if 13 (;@1;)
                                local.get 3
                                i64.load8_u offset=36
                                i64.const 32
                                i64.shl
                                local.get 3
                                i64.load32_u offset=32
                                i64.or
                                local.set 7
                                br 7 (;@7;)
                              end
                              local.get 3
                              i32.load offset=28
                              local.tee 5
                              local.get 5
                              i32.load
                              i32.const 1
                              i32.add
                              local.tee 8
                              i32.store
                              local.get 8
                              i32.eqz
                              br_if 12 (;@1;)
                              br 5 (;@8;)
                            end
                            local.get 3
                            i32.load offset=28
                            local.tee 5
                            local.get 5
                            i32.load
                            i32.const 1
                            i32.add
                            local.tee 8
                            i32.store
                            local.get 8
                            i32.eqz
                            br_if 11 (;@1;)
                            br 4 (;@8;)
                          end
                          local.get 3
                          i32.load offset=28
                          local.tee 5
                          local.get 5
                          i32.load
                          i32.const 1
                          i32.add
                          local.tee 3
                          i32.store
                          local.get 3
                          i32.eqz
                          br_if 10 (;@1;)
                          br 1 (;@10;)
                        end
                        local.get 3
                        i32.load8_u offset=25
                        local.set 3
                      end
                      br 2 (;@7;)
                    end
                    i32.const 1
                    local.get 3
                    i32.const 1063408
                    call $core::panicking::panic_bounds_check
                    unreachable
                  end
                  local.get 3
                  i64.load32_u offset=32
                  local.set 7
                end
                local.get 4
                local.get 7
                i64.store offset=304
                local.get 4
                local.get 5
                i32.store offset=300
                local.get 4
                local.get 3
                i32.store8 offset=297
                local.get 4
                local.get 6
                i32.store8 offset=296
                local.get 4
                i32.const 0
                i32.store16 offset=272
                local.get 4
                i32.const 1066463
                i32.store offset=268
                local.get 4
                i32.const 1066459
                i32.store offset=264
                local.get 4
                i32.const 360
                i32.add
                local.get 4
                i32.const 264
                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 = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=360
                        local.tee 3
                        i32.const 255
                        i32.ne
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=364 align=4
                        i64.store offset=332 align=4
                        local.get 4
                        i32.const 3
                        i32.store8 offset=328
                        local.get 4
                        i32.const 264
                        i32.add
                        local.get 4
                        i32.const 296
                        i32.add
                        local.get 4
                        i32.const 328
                        i32.add
                        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=264
                          i32.const 255
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 0
                          local.get 4
                          i64.load offset=280
                          i64.store offset=16
                          local.get 0
                          local.get 4
                          i64.load offset=272
                          i64.store offset=8
                          local.get 0
                          i64.const 1
                          i64.store
                          local.get 4
                          i32.const 216
                          i32.add
                          call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                          br 4 (;@7;)
                        end
                        local.get 4
                        local.get 4
                        i64.load offset=288
                        i64.store offset=384
                        local.get 4
                        local.get 4
                        i64.load offset=280
                        i64.store offset=376
                        local.get 4
                        local.get 4
                        i64.load offset=272
                        i64.store offset=368
                        local.get 4
                        local.get 4
                        i64.load offset=264
                        i64.store offset=360
                        local.get 4
                        i32.const 328
                        i32.add
                        local.get 4
                        i32.const 360
                        i32.add
                        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                        i32.const 0
                        local.set 3
                        i32.const 1
                        local.set 5
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=328
                          local.tee 6
                          i32.const 255
                          i32.eq
                          br_if 0 (;@11;)
                          local.get 4
                          local.get 4
                          i64.load offset=330 align=2
                          i64.store offset=200
                          local.get 4
                          local.get 4
                          i64.load offset=336 align=2
                          i64.store offset=206 align=2
                          local.get 4
                          i32.load8_u offset=329
                          local.set 5
                          local.get 6
                          local.set 3
                        end
                        local.get 4
                        i32.const 360
                        i32.add
                        call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        local.get 4
                        i32.const 376
                        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=224
                        i64.store offset=376
                        local.get 4
                        local.get 4
                        i64.load offset=216
                        i64.store offset=368
                        local.get 4
                        i32.const 0
                        i32.store8 offset=296
                        local.get 4
                        local.get 5
                        i32.store8 offset=385
                        local.get 4
                        local.get 3
                        i32.store8 offset=384
                        local.get 4
                        i64.const 8589934592
                        i64.store offset=360
                        local.get 4
                        local.get 4
                        i64.load offset=200
                        i64.store offset=386 align=2
                        local.get 4
                        local.get 4
                        i64.load offset=206 align=2
                        i64.store offset=392 align=2
                        local.get 4
                        local.get 4
                        i32.const 296
                        i32.add
                        i32.store offset=400
                        local.get 4
                        i32.const 16
                        i32.add
                        local.get 4
                        i32.const 360
                        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=20
                        local.tee 5
                        i32.store offset=332
                        local.get 4
                        local.get 4
                        i32.load offset=16
                        local.tee 3
                        i32.store offset=328
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=296
                          i32.const 1
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 3
                          local.get 3
                          i32.load
                          i32.const -1
                          i32.add
                          local.tee 1
                          i32.store
                          local.get 1
                          br_if 9 (;@2;)
                          local.get 4
                          i32.const 328
                          i32.add
                          call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                          br 9 (;@2;)
                        end
                        local.get 3
                        i32.eqz
                        br_if 8 (;@2;)
                        local.get 4
                        local.get 5
                        i32.store offset=176
                        local.get 4
                        local.get 3
                        i32.store offset=172
                        local.get 4
                        i32.const 6
                        i32.store8 offset=168
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              block ;; label = @14
                                block ;; label = @15
                                  block ;; label = @16
                                    block ;; label = @17
                                      block ;; label = @18
                                        local.get 4
                                        i32.load8_u offset=32
                                        local.tee 5
                                        br_table 6 (;@12;) 6 (;@12;) 0 (;@18;) 1 (;@17;) 2 (;@16;) 3 (;@15;) 4 (;@14;) 5 (;@13;) 6 (;@12;)
                                      end
                                      local.get 4
                                      i64.load offset=40
                                      local.set 7
                                      br 9 (;@8;)
                                    end
                                    local.get 4
                                    i32.load offset=36
                                    local.tee 3
                                    local.get 3
                                    i32.load
                                    i32.const 1
                                    i32.add
                                    local.tee 6
                                    i32.store
                                    local.get 6
                                    i32.eqz
                                    br_if 15 (;@1;)
                                    br 7 (;@9;)
                                  end
                                  local.get 4
                                  i32.load offset=36
                                  local.tee 3
                                  local.get 3
                                  i32.load
                                  i32.const 1
                                  i32.add
                                  local.tee 6
                                  i32.store
                                  local.get 6
                                  i32.eqz
                                  br_if 14 (;@1;)
                                  local.get 4
                                  i64.load8_u offset=44
                                  i64.const 32
                                  i64.shl
                                  local.get 4
                                  i64.load32_u offset=40
                                  i64.or
                                  local.set 7
                                  br 7 (;@8;)
                                end
                                local.get 4
                                i32.load offset=36
                                local.tee 3
                                local.get 3
                                i32.load
                                i32.const 1
                                i32.add
                                local.tee 6
                                i32.store
                                local.get 6
                                i32.eqz
                                br_if 13 (;@1;)
                                br 5 (;@9;)
                              end
                              local.get 4
                              i32.load offset=36
                              local.tee 3
                              local.get 3
                              i32.load
                              i32.const 1
                              i32.add
                              local.tee 6
                              i32.store
                              local.get 6
                              i32.eqz
                              br_if 12 (;@1;)
                              br 4 (;@9;)
                            end
                            local.get 4
                            i32.load offset=36
                            local.tee 3
                            local.get 3
                            i32.load
                            i32.const 1
                            i32.add
                            local.tee 6
                            i32.store
                            local.get 6
                            i32.eqz
                            br_if 11 (;@1;)
                            br 1 (;@11;)
                          end
                          local.get 4
                          i32.load8_u offset=33
                          local.set 6
                        end
                        br 2 (;@8;)
                      end
                      local.get 4
                      local.get 4
                      i32.load8_u offset=363
                      i32.store8 offset=331
                      local.get 4
                      local.get 4
                      i32.load16_u offset=361 align=1
                      i32.store16 offset=329 align=1
                      local.get 4
                      local.get 4
                      i32.load offset=372
                      i32.store offset=340
                      local.get 4
                      local.get 4
                      i64.load offset=364 align=4
                      i64.store offset=332 align=4
                      local.get 4
                      local.get 3
                      i32.store8 offset=328
                      i32.const 1065572
                      i32.const 43
                      local.get 4
                      i32.const 328
                      i32.add
                      i32.const 1065556
                      i32.const 1065616
                      call $core::result::unwrap_failed
                      unreachable
                    end
                    local.get 4
                    i64.load32_u offset=40
                    local.set 7
                  end
                  local.get 4
                  local.get 7
                  i64.store offset=336
                  local.get 4
                  local.get 3
                  i32.store offset=332
                  local.get 4
                  local.get 6
                  i32.store8 offset=329
                  local.get 4
                  local.get 5
                  i32.store8 offset=328
                  local.get 4
                  i64.const 0
                  i64.store offset=368
                  local.get 4
                  i32.const 2
                  i32.store8 offset=360
                  local.get 4
                  i32.const 296
                  i32.add
                  local.get 4
                  i32.const 328
                  i32.add
                  local.get 4
                  i32.const 360
                  i32.add
                  call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                  block ;; label = @8
                    local.get 4
                    i32.load8_u offset=296
                    i32.const 255
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 0
                    local.get 4
                    i64.load offset=312
                    i64.store offset=16
                    local.get 0
                    local.get 4
                    i64.load offset=304
                    i64.store offset=8
                    local.get 0
                    i64.const 1
                    i64.store
                    local.get 4
                    i32.const 168
                    i32.add
                    call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                    br 1 (;@7;)
                  end
                  local.get 4
                  local.get 4
                  i64.load offset=320
                  i64.store offset=384
                  local.get 4
                  local.get 4
                  i64.load offset=312
                  i64.store offset=376
                  local.get 4
                  local.get 4
                  i64.load offset=304
                  i64.store offset=368
                  local.get 4
                  local.get 4
                  i64.load offset=296
                  i64.store offset=360
                  local.get 4
                  i32.const 328
                  i32.add
                  local.get 4
                  i32.const 360
                  i32.add
                  call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                  block ;; label = @8
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=328
                      i32.const 255
                      i32.eq
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i64.load offset=336
                      i64.store offset=192
                      local.get 4
                      local.get 4
                      i64.load offset=328
                      i64.store offset=184
                      br 1 (;@8;)
                    end
                    local.get 4
                    i32.const 256
                    i32.store16 offset=184
                  end
                  local.get 4
                  i32.const 360
                  i32.add
                  call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                  local.get 4
                  i32.const 376
                  i32.add
                  call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                  local.get 4
                  i32.const 360
                  i32.add
                  local.get 4
                  i32.const 184
                  i32.add
                  call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::to_numeric
                  local.get 4
                  f64.load offset=376
                  local.set 9
                  local.get 4
                  i32.load offset=372
                  local.set 3
                  local.get 4
                  i32.load offset=368
                  local.set 5
                  block ;; label = @8
                    local.get 4
                    i32.load offset=360
                    br_if 0 (;@8;)
                    block ;; label = @9
                      local.get 5
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 9
                      f64.store offset=364 align=4
                      local.get 4
                      local.get 3
                      i32.store offset=360
                      local.get 4
                      i32.const 360
                      i32.add
                      call $<nanvm_lib::vm::bigint::BigInt<nanvm_lib::naive::Naive>>::to_number
                      local.set 9
                      local.get 3
                      local.get 3
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 5
                      i32.store
                      local.get 5
                      br_if 0 (;@9;)
                      local.get 4
                      i32.const 360
                      i32.add
                      call $"<alloc::rc::Rc<[u64]>>::drop_slow"
                    end
                    local.get 4
                    local.get 9
                    f64.store offset=208
                    local.get 4
                    i32.const 2
                    i32.store offset=200
                    local.get 4
                    i32.const 328
                    i32.add
                    local.get 4
                    i32.const 168
                    i32.add
                    local.get 4
                    i32.const 200
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=328
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=344
                      i64.store offset=16
                      local.get 0
                      local.get 4
                      i64.load offset=336
                      i64.store offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      br 2 (;@7;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=352
                    i64.store offset=384
                    local.get 4
                    local.get 4
                    i64.load offset=344
                    i64.store offset=376
                    local.get 4
                    local.get 4
                    i64.load offset=336
                    i64.store offset=368
                    local.get 4
                    local.get 4
                    i64.load offset=328
                    i64.store offset=360
                    local.get 4
                    i32.const 216
                    i32.add
                    local.get 4
                    i32.const 360
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::read
                    local.get 1
                    i32.load offset=16
                    i32.eqz
                    br_if 3 (;@5;)
                    local.get 4
                    i32.const 152
                    i32.add
                    local.set 3
                    local.get 4
                    i32.const 360
                    i32.add
                    local.get 1
                    i32.load offset=12
                    i32.const 8
                    i32.add
                    call $"#func670 <nanvm_lib::naive::Naive as core::clone::Clone>::clone"
                    local.get 4
                    i32.const 144
                    i32.add
                    local.get 4
                    i32.const 216
                    i32.add
                    local.get 4
                    i32.const 360
                    i32.add
                    call $nanvm_lib::vm::unstable::strict_eq::<nanvm_lib::naive::Naive>
                    block ;; label = @9
                      local.get 4
                      i64.load offset=144
                      i64.const 1
                      i64.ne
                      br_if 0 (;@9;)
                      local.get 0
                      i64.const 1
                      i64.store
                      local.get 0
                      local.get 3
                      i64.load offset=8
                      i64.store offset=16
                      local.get 0
                      local.get 3
                      i64.load
                      i64.store offset=8
                      br 2 (;@7;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=96
                    i64.store offset=48
                    local.get 4
                    local.get 4
                    i64.load offset=104
                    i64.store offset=56
                    local.get 4
                    local.get 4
                    i64.load offset=112
                    i64.store offset=64
                    local.get 4
                    local.get 4
                    i64.load offset=120
                    i64.store offset=72
                    local.get 4
                    local.get 3
                    i64.load offset=8
                    i64.store offset=88
                    local.get 4
                    local.get 3
                    i64.load
                    i64.store offset=80
                    local.get 4
                    i32.const 8
                    i32.add
                    local.get 4
                    i32.const 48
                    i32.add
                    call $"<nanvm_lib::naive::container::Container<(), nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as nanvm_lib::vm::internal::icontainer::IContainer<nanvm_lib::naive::Naive>>::new_ok::<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>; 3]>"
                    local.get 0
                    local.get 4
                    i64.load offset=8
                    i64.store offset=12 align=4
                    local.get 0
                    i32.const 6
                    i32.store8 offset=8
                    local.get 0
                    i64.const 0
                    i64.store
                    local.get 4
                    i32.const 32
                    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 1
                    i32.store
                    local.get 1
                    br_if 5 (;@3;)
                    br 4 (;@4;)
                  end
                  local.get 0
                  local.get 9
                  f64.store offset=16
                  local.get 0
                  local.get 3
                  i32.store offset=12
                  local.get 0
                  local.get 5
                  i32.store offset=8
                  local.get 0
                  i64.const 1
                  i64.store
                  local.get 4
                  i32.const 168
                  i32.add
                  call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                end
                local.get 4
                i32.const 112
                i32.add
                call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              end
              local.get 4
              i32.const 96
              i32.add
              call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              local.get 4
              i32.const 32
              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 1
              i32.store
              local.get 1
              i32.eqz
              br_if 1 (;@4;)
              br 2 (;@3;)
            end
            i32.const 0
            i32.const 0
            i32.const 1063408
            call $core::panicking::panic_bounds_check
            unreachable
          end
          local.get 4
          i32.const 24
          i32.add
          call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
        end
        local.get 4
        i32.const 416
        i32.add
        global.set $__stack_pointer
        return
      end
      i32.const 1057428
      i32.const 43
      local.get 4
      i32.const 415
      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.

  • ./proof.f.mjs