Property Access

Status: implemented

const cfg = { ports: [80, 443] };
export default [cfg.ports[0], cfg["ports"].length];

A property access reads an own property of a value — a member of an object, an element or the length of an array, a code unit or the length of a string, the length of a function. Any value takes one: a reference, a group, an access, a call, or a value written out of any type — null, undefined, a boolean, a number, a bigint, a string, an array or an object. A property the value does not own is undefined — true.x and true.length are, a boolean owning nothing — and reading one of null or undefined is an error, as JavaScript throws.

A numeric literal takes an access like anything else: 1 .x is undefined, written with a space since 1.x is one number and a stray word, while a bigint's n ends its literal, so 1n.x needs none. The sign binds looser, as it does in JavaScript, so -1 .x is -(1 .x), -1n.x is -(1n.x), which is NaN, and const n = 1; followed by n.x is undefined in both languages.

The key is a constant — an identifier after ., or a directly written string or unsigned numeric literal in brackets — and 0 and "0" name the same element, as in JavaScript. A numeric literal names the string JavaScript's String gives its number, which is the number's normalized DataJS spelling: a[1.0], a[1e0] and a[0.1e1] are a["1"], o[1e21] is o["1e+21"], o[1e-7] is o["1e-7"], and o[1e400], a literal that overflows, is o["Infinity"] — a key the FunctionalScript (.js) output refuses to write (a number key no literal reads back). A string in brackets is the key unchanged, so a["01"] and a["1.0"] name no element and are undefined, as in JavaScript.

A key computed at run time is the conversion, a[Number(i)] (number conversion): the property the number names, its string as JavaScript gives it, so xs[Number("1")] and xs[1] read one element, "abc"[Number(true)] is "b", and xs[Number("x")], whose key is "NaN", is undefined. It reads an own property as every access does, and no prototype name is a number's string, so nothing is refused at a converted key; a[Number(i)](x) calls what it reads with a as the receiver, as a[0](x) does. Its base and its key are both evaluated, as in JavaScript, though not in a promised order: where both fail, which fails first is no observation (failure is one outcome). a?.[Number(i)] evaluates the key only where a is neither null nor undefined (optional chaining). Anything else in the brackets is a compilation error (computed key is not Number(...)), at the token it begins with: a[i], whose type the compiler does not know — a key of any type is the entry helper's to read (reading an entry at run time) — and every other expression, a[-1] and a[NaN] included, whose keys are written as strings instead, a["-1"] and a["NaN"]. A grouped literal key, a[(0)] or a[("x")], is also refused; a grouped conversion, a[(Number(i))], is accepted. Trivia, a line break included, may stand on either side of the . or the [ and inside the brackets, as between any two tokens (trivia): a . b, a./* c */b and a with .b on the next line are each a.b, as JavaScript reads them.

FunctionalScript has no prototype chains, so a name a built-in prototype gives a value — push, toString, valueOf, constructor, __proto__ and the rest, listed in fjs/js/prototype — is a compilation error as the key of an access, in either spelling, o.toString or o["toString"] (prohibited property name): JavaScript would find a function there and this language nothing, and a module must mean one thing in both. The rule refuses reading such a name, not owning it: an object literal may hold one, { toString: 1 } (property keys). length is the exception, since an array, a string and a function own it. The rules are property-accessor's. The same names are refused as the key of "k" in o, the presence check, with the same exemption: length is a key there as it is here, "length" in [] being true as in JavaScript (in).

A method call has a rule of its own. a.push(1), a.valueOf() and the other member functions fjs/js/prototype's prohibitedCalls names are compilation errors (prohibited member function) — one row per name, with the reason, in its README. Every other prototype name but length is on its allowedCalls, and a call of one — a.toString(), [1, 2].at(0), a.map(f) — calls the receiver type's built-in, as in JavaScript, an own property of the name shadowing the built-in and a type without one throwing as JavaScript does. The read stays refused where the call is allowed, since a detached built-in is a function that only fails. length is on neither list: a.length(1) calls whatever a owns there, as JavaScript does, so a function an object holds under length is called, and anything else — an array's, a string's or a function's length is a number — throws the TypeError JavaScript throws.

Pages

Refused by design, each page showing what fjs compile prints and what to write instead:

Examples

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

The demo on this page runs sample.f.js, this page's example as a function of one number — a property read with ., a computed index, and a string key — 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 cfg = { ports: [80, 443] };
export default (...a) => [cfg.ports[Number(a[0])], cfg["ports"].length];

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) (Property Access) as a function
 * of one number, for the page's WASM demo: a property read with `.`, a
 * computed index, and a string key.
 *
 * @module
 */

const cfg = { ports: [80, 443] };
/** @type {(...a: readonly number[]) => unknown} */
export default (...a) => [cfg.ports[Number(a[0])], cfg["ports"].length];

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

=>lengthframe 0body0{}[]{}ports[]01[]0180443.objidx.objkey."length".objkeyframe 0"ports"Numberoperand.objkeyframe 0"ports".objidxrest0

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

const $0=["frame",0];export default ["{}",[[":","default",["=>",0,[["{}",[[":","ports",["[]",[80,443]]]]]],["[]",[[".",[".",$0,"ports"],["Number",[".",["rest"],0]]],[".",[".",$0,"ports"],"length"]]]]]]];

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

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

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

#[rustfmt::skip]
#[allow(clippy::if_same_then_else)]
pub fn module<A: IStaticFunction>(_runtime: Any<A>) -> Result<Any<A>, Any<A>> {
    Ok([(string_key("default"), {
        let _b1: Any<A> = [(string_key("ports"), [f64_any(0x4054000000000000), f64_any(0x407bb00000000000)].to_array().to_any())].to_object().to_any();
        A::static_function(|_self, _args| {
            let _b524: Any<A> = _args.rest(0).to_any();
            Ok([(Any::dot((Any::dot(A::frame(_self)[0].clone(), string_any("ports")).end())?, (Any::number((Any::dot(_b524.clone(), f64_any(0x0000000000000000)).end())?))?).end())?, (Any::dot((Any::dot(A::frame(_self)[0].clone(), string_any("ports")).end())?, string_any("length")).end())?].to_array().to_any())
        }, 0, [_b1.clone()].to_array(), Some("(...$1)=>[$0.ports[Number($1[0])],$0.ports.length]")).to_any()
    })].to_object().to_any())
}

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

  (func $nanvm_demos::samples::property_access::module::<nanvm_lib::naive::Naive> (;263;) (type 1) (param i32 i32)
    (local i32 i32 i32 i32 i32 i32 i32)
    global.get $__stack_pointer
    i32.const 128
    i32.sub
    local.tee 2
    global.set $__stack_pointer
    local.get 2
    i32.const 0
    i32.store16 offset=52
    local.get 2
    i32.const 1057715
    i32.store offset=48
    local.get 2
    i32.const 1057708
    i32.store offset=44
    local.get 2
    i32.const 72
    i32.add
    local.get 2
    i32.const 44
    i32.add
    call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  local.get 2
                  i32.load8_u offset=72
                  local.tee 3
                  i32.const 255
                  i32.ne
                  br_if 0 (;@7;)
                  local.get 2
                  i32.load offset=80
                  local.set 4
                  local.get 2
                  i32.load offset=76
                  local.set 5
                  local.get 2
                  i32.const 0
                  i32.store16 offset=52
                  local.get 2
                  i32.const 1057720
                  i32.store offset=48
                  local.get 2
                  i32.const 1057715
                  i32.store offset=44
                  local.get 2
                  i32.const 72
                  i32.add
                  local.get 2
                  i32.const 44
                  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=72
                  local.tee 3
                  i32.const 255
                  i32.ne
                  br_if 1 (;@6;)
                  local.get 2
                  i32.load offset=80
                  local.set 6
                  local.get 2
                  i32.load offset=76
                  local.set 7
                  local.get 2
                  i32.const 0
                  i32.store8 offset=44
                  local.get 2
                  i64.const 4646500954609287168
                  i64.store offset=104
                  local.get 2
                  i32.const 2
                  i32.store8 offset=96
                  local.get 2
                  i64.const 4635329916471083008
                  i64.store offset=88
                  local.get 2
                  i32.const 2
                  i32.store8 offset=80
                  local.get 2
                  i64.const 8589934592
                  i64.store offset=72
                  local.get 2
                  local.get 2
                  i32.const 44
                  i32.add
                  i32.store offset=112
                  local.get 2
                  i32.const 32
                  i32.add
                  local.get 2
                  i32.const 72
                  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=36
                  local.tee 8
                  i32.store offset=60
                  local.get 2
                  local.get 2
                  i32.load offset=32
                  local.tee 3
                  i32.store offset=56
                  block ;; label = @8
                    local.get 2
                    i32.load8_u offset=44
                    i32.const 1
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 3
                    local.get 3
                    i32.load
                    i32.const -1
                    i32.add
                    local.tee 0
                    i32.store
                    local.get 0
                    br_if 7 (;@1;)
                    local.get 2
                    i32.const 56
                    i32.add
                    call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                    br 7 (;@1;)
                  end
                  local.get 3
                  i32.eqz
                  br_if 6 (;@1;)
                  local.get 2
                  i32.const 0
                  i32.store8 offset=44
                  local.get 2
                  local.get 8
                  i32.store offset=96
                  local.get 2
                  local.get 3
                  i32.store offset=92
                  local.get 2
                  i32.const 6
                  i32.store8 offset=88
                  local.get 2
                  local.get 6
                  i32.store offset=84
                  local.get 2
                  local.get 7
                  i32.store offset=80
                  local.get 2
                  i64.const 4294967296
                  i64.store offset=72
                  local.get 2
                  local.get 2
                  i32.const 44
                  i32.add
                  i32.store offset=104
                  local.get 2
                  i32.const 24
                  i32.add
                  local.get 2
                  i32.const 72
                  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 6
                  i32.store offset=60
                  local.get 2
                  local.get 2
                  i32.load offset=24
                  local.tee 3
                  i32.store offset=56
                  block ;; label = @8
                    local.get 2
                    i32.load8_u offset=44
                    i32.const 1
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 3
                    local.get 3
                    i32.load
                    i32.const -1
                    i32.add
                    local.tee 0
                    i32.store
                    local.get 0
                    br_if 6 (;@2;)
                    local.get 2
                    i32.const 56
                    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 (;@2;)
                  end
                  local.get 3
                  i32.eqz
                  br_if 5 (;@2;)
                  local.get 2
                  local.get 6
                  i32.store offset=64
                  local.get 2
                  local.get 3
                  i32.store offset=60
                  local.get 2
                  i32.const 5
                  i32.store8 offset=56
                  local.get 3
                  local.get 3
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 7
                  i32.store
                  local.get 7
                  i32.eqz
                  br_if 2 (;@5;)
                  local.get 2
                  i32.const 0
                  i32.store8 offset=126
                  local.get 2
                  local.get 6
                  i64.extend_i32_u
                  i64.store offset=88
                  local.get 2
                  local.get 3
                  i32.store offset=84
                  local.get 2
                  i32.const 5
                  i32.store8 offset=80
                  local.get 2
                  i64.const 4294967296
                  i64.store offset=72
                  local.get 2
                  local.get 2
                  i32.const 126
                  i32.add
                  i32.store offset=96
                  local.get 2
                  i32.const 16
                  i32.add
                  local.get 2
                  i32.const 72
                  i32.add
                  call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 1>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
                  local.get 2
                  local.get 2
                  i32.load offset=20
                  local.tee 6
                  i32.store offset=48
                  local.get 2
                  local.get 2
                  i32.load offset=16
                  local.tee 3
                  i32.store offset=44
                  block ;; label = @8
                    local.get 2
                    i32.load8_u offset=126
                    i32.const 1
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 3
                    local.get 3
                    i32.load
                    i32.const -1
                    i32.add
                    local.tee 0
                    i32.store
                    local.get 0
                    br_if 5 (;@3;)
                    local.get 2
                    i32.const 44
                    i32.add
                    call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                    br 5 (;@3;)
                  end
                  local.get 3
                  i32.eqz
                  br_if 4 (;@3;)
                  i32.const 47
                  i32.const 0
                  local.get 3
                  local.get 6
                  i32.const 1057720
                  i32.const 50
                  call $<nanvm_lib::naive::function::Function>::new
                  local.set 3
                  local.get 2
                  i32.const 56
                  i32.add
                  call $"#func262 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                  local.get 2
                  i32.const 0
                  i32.store8 offset=44
                  local.get 2
                  local.get 3
                  i32.store offset=92
                  local.get 2
                  i32.const 7
                  i32.store8 offset=88
                  local.get 2
                  local.get 4
                  i32.store offset=84
                  local.get 2
                  local.get 5
                  i32.store offset=80
                  local.get 2
                  i64.const 4294967296
                  i64.store offset=72
                  local.get 2
                  local.get 2
                  i32.const 44
                  i32.add
                  i32.store offset=104
                  local.get 2
                  i32.const 8
                  i32.add
                  local.get 2
                  i32.const 72
                  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 6
                  i32.store offset=60
                  local.get 2
                  local.get 2
                  i32.load offset=8
                  local.tee 3
                  i32.store offset=56
                  block ;; label = @8
                    local.get 2
                    i32.load8_u offset=44
                    i32.const 1
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 3
                    local.get 3
                    i32.load
                    i32.const -1
                    i32.add
                    local.tee 0
                    i32.store
                    local.get 0
                    br_if 4 (;@4;)
                    local.get 2
                    i32.const 56
                    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 (;@4;)
                  end
                  local.get 3
                  i32.eqz
                  br_if 3 (;@4;)
                  local.get 0
                  local.get 6
                  i32.store offset=16
                  local.get 0
                  local.get 3
                  i32.store offset=12
                  local.get 0
                  i32.const 5
                  i32.store8 offset=8
                  local.get 0
                  i64.const 0
                  i64.store
                  local.get 1
                  call $"#func262 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                  local.get 2
                  i32.const 128
                  i32.add
                  global.set $__stack_pointer
                  return
                end
                local.get 2
                local.get 2
                i32.load8_u offset=75
                i32.store8 offset=59
                local.get 2
                local.get 2
                i32.load16_u offset=73 align=1
                i32.store16 offset=57 align=1
                local.get 2
                local.get 2
                i32.load offset=84
                i32.store offset=68
                local.get 2
                local.get 2
                i64.load offset=76 align=4
                i64.store offset=60 align=4
                local.get 2
                local.get 3
                i32.store8 offset=56
                i32.const 1065572
                i32.const 43
                local.get 2
                i32.const 56
                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=75
              i32.store8 offset=59
              local.get 2
              local.get 2
              i32.load16_u offset=73 align=1
              i32.store16 offset=57 align=1
              local.get 2
              local.get 2
              i32.load offset=84
              i32.store offset=68
              local.get 2
              local.get 2
              i64.load offset=76 align=4
              i64.store offset=60 align=4
              local.get 2
              local.get 3
              i32.store8 offset=56
              i32.const 1065572
              i32.const 43
              local.get 2
              i32.const 56
              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 127
          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 127
        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 127
      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 127
    i32.add
    i32.const 1057412
    i32.const 1057472
    call $core::result::unwrap_failed
    unreachable
  )
  (func $"<nanvm_demos::samples::property_access::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" (;264;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i32 i64 i32 f64)
    global.get $__stack_pointer
    i32.const 368
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    local.get 1
    i32.load
    local.set 1
    local.get 4
    local.get 3
    i32.store offset=20
    local.get 4
    local.get 2
    i32.store offset=16
    local.get 2
    local.get 2
    i32.load
    i32.const 1
    i32.add
    local.tee 5
    i32.store
    block ;; label = @1
      local.get 5
      i32.eqz
      br_if 0 (;@1;)
      local.get 4
      local.get 3
      i32.store offset=32
      local.get 4
      local.get 2
      i32.store offset=28
      local.get 4
      i32.const 6
      i32.store8 offset=24
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            local.get 1
            i32.load offset=16
            i32.eqz
            br_if 0 (;@4;)
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            local.get 1
                            i32.load offset=12
                            local.tee 5
                            i32.load8_u offset=8
                            local.tee 6
                            br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
                          end
                          local.get 5
                          i64.load offset=16
                          local.set 7
                          br 9 (;@2;)
                        end
                        local.get 5
                        i32.load offset=12
                        local.tee 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=160
      local.get 4
      local.get 3
      i32.store offset=156
      local.get 4
      local.get 5
      i32.store8 offset=153
      local.get 4
      local.get 6
      i32.store8 offset=152
      local.get 4
      i32.const 0
      i32.store16 offset=128
      local.get 4
      i32.const 1057720
      i32.store offset=124
      local.get 4
      i32.const 1057715
      i32.store offset=120
      local.get 4
      i32.const 312
      i32.add
      local.get 4
      i32.const 120
      i32.add
      call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  local.get 4
                  i32.load8_u offset=312
                  local.tee 3
                  i32.const 255
                  i32.ne
                  br_if 0 (;@7;)
                  local.get 4
                  local.get 4
                  i64.load offset=316 align=4
                  i64.store offset=188 align=4
                  local.get 4
                  i32.const 3
                  i32.store8 offset=184
                  local.get 4
                  i32.const 120
                  i32.add
                  local.get 4
                  i32.const 152
                  i32.add
                  local.get 4
                  i32.const 184
                  i32.add
                  call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                  block ;; label = @8
                    local.get 4
                    i32.load8_u offset=120
                    i32.const 255
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 0
                    local.get 4
                    i64.load offset=136
                    i64.store offset=16
                    local.get 0
                    local.get 4
                    i64.load offset=128
                    i64.store offset=8
                    local.get 0
                    i64.const 1
                    i64.store
                    br 4 (;@4;)
                  end
                  local.get 4
                  local.get 4
                  i64.load offset=144
                  i64.store offset=336
                  local.get 4
                  local.get 4
                  i64.load offset=136
                  i64.store offset=328
                  local.get 4
                  local.get 4
                  i64.load offset=128
                  i64.store offset=320
                  local.get 4
                  local.get 4
                  i64.load offset=120
                  i64.store offset=312
                  local.get 4
                  i32.const 184
                  i32.add
                  local.get 4
                  i32.const 312
                  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=184
                      i32.const 255
                      i32.eq
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i64.load offset=192
                      i64.store offset=304
                      local.get 4
                      local.get 4
                      i64.load offset=184
                      i64.store offset=296
                      br 1 (;@8;)
                    end
                    local.get 4
                    i32.const 256
                    i32.store16 offset=296
                  end
                  local.get 4
                  i32.const 312
                  i32.add
                  call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                  local.get 4
                  i32.const 328
                  i32.add
                  call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              block ;; label = @14
                                block ;; label = @15
                                  local.get 4
                                  i32.load8_u offset=24
                                  local.tee 5
                                  br_table 6 (;@9;) 6 (;@9;) 0 (;@15;) 1 (;@14;) 2 (;@13;) 3 (;@12;) 4 (;@11;) 5 (;@10;) 6 (;@9;)
                                end
                                local.get 4
                                i64.load offset=32
                                local.set 7
                                br 9 (;@5;)
                              end
                              local.get 4
                              i32.load offset=28
                              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 7 (;@6;)
                            end
                            local.get 4
                            i32.load offset=28
                            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;)
                            local.get 4
                            i64.load8_u offset=36
                            i64.const 32
                            i64.shl
                            local.get 4
                            i64.load32_u offset=32
                            i64.or
                            local.set 7
                            br 7 (;@5;)
                          end
                          local.get 4
                          i32.load offset=28
                          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 10 (;@1;)
                          br 5 (;@6;)
                        end
                        local.get 4
                        i32.load offset=28
                        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 9 (;@1;)
                        br 4 (;@6;)
                      end
                      local.get 4
                      i32.load offset=28
                      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 8 (;@1;)
                      br 1 (;@8;)
                    end
                    local.get 4
                    i32.load8_u offset=25
                    local.set 6
                  end
                  br 2 (;@5;)
                end
                local.get 4
                local.get 4
                i32.load8_u offset=315
                i32.store8 offset=187
                local.get 4
                local.get 4
                i32.load16_u offset=313 align=1
                i32.store16 offset=185 align=1
                local.get 4
                local.get 4
                i32.load offset=324
                i32.store offset=196
                local.get 4
                local.get 4
                i64.load offset=316 align=4
                i64.store offset=188 align=4
                local.get 4
                local.get 3
                i32.store8 offset=184
                i32.const 1065572
                i32.const 43
                local.get 4
                i32.const 184
                i32.add
                i32.const 1065556
                i32.const 1065616
                call $core::result::unwrap_failed
                unreachable
              end
              local.get 4
              i64.load32_u offset=32
              local.set 7
            end
            local.get 4
            local.get 7
            i64.store offset=192
            local.get 4
            local.get 3
            i32.store offset=188
            local.get 4
            local.get 6
            i32.store8 offset=185
            local.get 4
            local.get 5
            i32.store8 offset=184
            local.get 4
            i64.const 0
            i64.store offset=320
            local.get 4
            i32.const 2
            i32.store8 offset=312
            local.get 4
            i32.const 152
            i32.add
            local.get 4
            i32.const 184
            i32.add
            local.get 4
            i32.const 312
            i32.add
            call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
            block ;; label = @5
              local.get 4
              i32.load8_u offset=152
              i32.const 255
              i32.ne
              br_if 0 (;@5;)
              local.get 0
              local.get 4
              i64.load offset=168
              i64.store offset=16
              local.get 0
              local.get 4
              i64.load offset=160
              i64.store offset=8
              local.get 0
              i64.const 1
              i64.store
              local.get 4
              i32.const 296
              i32.add
              call $"#func262 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              br 1 (;@4;)
            end
            local.get 4
            local.get 4
            i64.load offset=176
            i64.store offset=336
            local.get 4
            local.get 4
            i64.load offset=168
            i64.store offset=328
            local.get 4
            local.get 4
            i64.load offset=160
            i64.store offset=320
            local.get 4
            local.get 4
            i64.load offset=152
            i64.store offset=312
            local.get 4
            i32.const 184
            i32.add
            local.get 4
            i32.const 312
            i32.add
            call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
            block ;; label = @5
              block ;; label = @6
                local.get 4
                i32.load8_u offset=184
                i32.const 255
                i32.eq
                br_if 0 (;@6;)
                local.get 4
                local.get 4
                i64.load offset=192
                i64.store offset=80
                local.get 4
                local.get 4
                i64.load offset=184
                i64.store offset=72
                br 1 (;@5;)
              end
              local.get 4
              i32.const 256
              i32.store16 offset=72
            end
            local.get 4
            i32.const 312
            i32.add
            call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
            local.get 4
            i32.const 328
            i32.add
            call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
            local.get 4
            i32.const 312
            i32.add
            local.get 4
            i32.const 72
            i32.add
            call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::to_numeric
            local.get 4
            f64.load offset=328
            local.set 9
            local.get 4
            i32.load offset=324
            local.set 3
            local.get 4
            i32.load offset=320
            local.set 5
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    local.get 4
                    i32.load offset=312
                    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=316 align=4
                      local.get 4
                      local.get 3
                      i32.store offset=312
                      local.get 4
                      i32.const 312
                      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 312
                      i32.add
                      call $"<alloc::rc::Rc<[u64]>>::drop_slow"
                    end
                    local.get 4
                    local.get 9
                    f64.store offset=96
                    local.get 4
                    i32.const 2
                    i32.store offset=88
                    local.get 4
                    i32.const 184
                    i32.add
                    local.get 4
                    i32.const 296
                    i32.add
                    local.get 4
                    i32.const 88
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=184
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=200
                      i64.store offset=16
                      local.get 0
                      local.get 4
                      i64.load offset=192
                      i64.store offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      br 5 (;@4;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=208
                    i64.store offset=336
                    local.get 4
                    local.get 4
                    i64.load offset=200
                    i64.store offset=328
                    local.get 4
                    local.get 4
                    i64.load offset=192
                    i64.store offset=320
                    local.get 4
                    local.get 4
                    i64.load offset=184
                    i64.store offset=312
                    local.get 4
                    i32.const 296
                    i32.add
                    local.get 4
                    i32.const 312
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                    block ;; label = @9
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=296
                        i32.const 255
                        i32.eq
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=304
                        i64.store offset=64
                        local.get 4
                        local.get 4
                        i64.load offset=296
                        i64.store offset=56
                        br 1 (;@9;)
                      end
                      local.get 4
                      i32.const 256
                      i32.store16 offset=56
                    end
                    local.get 4
                    i32.const 312
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 328
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 1
                    i32.load offset=16
                    i32.eqz
                    br_if 1 (;@7;)
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          block ;; label = @12
                            block ;; label = @13
                              block ;; label = @14
                                block ;; label = @15
                                  block ;; label = @16
                                    local.get 1
                                    i32.load offset=12
                                    local.tee 1
                                    i32.load8_u offset=8
                                    local.tee 5
                                    br_table 6 (;@10;) 6 (;@10;) 0 (;@16;) 1 (;@15;) 2 (;@14;) 3 (;@13;) 4 (;@12;) 5 (;@11;) 6 (;@10;)
                                  end
                                  local.get 1
                                  i64.load offset=16
                                  local.set 7
                                  br 10 (;@5;)
                                end
                                local.get 1
                                i32.load offset=12
                                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 8 (;@6;)
                              end
                              local.get 1
                              i32.load offset=12
                              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;)
                              local.get 1
                              i64.load8_u offset=20
                              i64.const 32
                              i64.shl
                              local.get 1
                              i64.load32_u offset=16
                              i64.or
                              local.set 7
                              br 8 (;@5;)
                            end
                            local.get 1
                            i32.load offset=12
                            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 6 (;@6;)
                          end
                          local.get 1
                          i32.load offset=12
                          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 10 (;@1;)
                          br 5 (;@6;)
                        end
                        local.get 1
                        i32.load offset=12
                        local.tee 3
                        local.get 3
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 1
                        i32.store
                        local.get 1
                        i32.eqz
                        br_if 9 (;@1;)
                        br 1 (;@9;)
                      end
                      local.get 1
                      i32.load8_u offset=9
                      local.set 1
                    end
                    br 3 (;@5;)
                  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 296
                  i32.add
                  call $"#func262 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                  br 3 (;@4;)
                end
                i32.const 0
                i32.const 0
                i32.const 1063408
                call $core::panicking::panic_bounds_check
                unreachable
              end
              local.get 1
              i64.load32_u offset=16
              local.set 7
            end
            local.get 4
            local.get 7
            i64.store offset=112
            local.get 4
            local.get 3
            i32.store offset=108
            local.get 4
            local.get 1
            i32.store8 offset=105
            local.get 4
            local.get 5
            i32.store8 offset=104
            local.get 4
            i32.const 0
            i32.store16 offset=292
            local.get 4
            i32.const 1057720
            i32.store offset=288
            local.get 4
            i32.const 1057715
            i32.store offset=284
            local.get 4
            i32.const 312
            i32.add
            local.get 4
            i32.const 284
            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 = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    local.get 4
                    i32.load8_u offset=312
                    local.tee 1
                    i32.const 255
                    i32.ne
                    br_if 0 (;@8;)
                    local.get 4
                    local.get 4
                    i64.load offset=316 align=4
                    i64.store offset=300 align=4
                    local.get 4
                    i32.const 3
                    i32.store8 offset=296
                    local.get 4
                    i32.const 216
                    i32.add
                    local.get 4
                    i32.const 104
                    i32.add
                    local.get 4
                    i32.const 296
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=216
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      i32.const 216
                      i32.add
                      i32.const 8
                      i32.add
                      local.set 1
                      br 4 (;@5;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=240
                    i64.store offset=336
                    local.get 4
                    local.get 4
                    i64.load offset=232
                    i64.store offset=328
                    local.get 4
                    local.get 4
                    i64.load offset=224
                    i64.store offset=320
                    local.get 4
                    local.get 4
                    i64.load offset=216
                    i64.store offset=312
                    local.get 4
                    i32.const 296
                    i32.add
                    local.get 4
                    i32.const 312
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                    block ;; label = @9
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=296
                        i32.const 255
                        i32.eq
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=304
                        i64.store offset=112
                        local.get 4
                        local.get 4
                        i64.load offset=296
                        i64.store offset=104
                        br 1 (;@9;)
                      end
                      local.get 4
                      i32.const 256
                      i32.store16 offset=104
                    end
                    local.get 4
                    i32.const 312
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 328
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 0
                    i32.store16 offset=292
                    local.get 4
                    i32.const 1059912
                    i32.store offset=288
                    local.get 4
                    i32.const 1059906
                    i32.store offset=284
                    local.get 4
                    i32.const 312
                    i32.add
                    local.get 4
                    i32.const 284
                    i32.add
                    call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
                    local.get 4
                    i32.load8_u offset=312
                    local.tee 1
                    i32.const 255
                    i32.ne
                    br_if 1 (;@7;)
                    local.get 4
                    local.get 4
                    i64.load offset=316 align=4
                    i64.store offset=300 align=4
                    local.get 4
                    i32.const 3
                    i32.store8 offset=296
                    local.get 4
                    i32.const 248
                    i32.add
                    local.get 4
                    i32.const 104
                    i32.add
                    local.get 4
                    i32.const 296
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=248
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 4
                      i32.const 248
                      i32.add
                      i32.const 8
                      i32.add
                      local.set 1
                      br 4 (;@5;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=272
                    i64.store offset=336
                    local.get 4
                    local.get 4
                    i64.load offset=264
                    i64.store offset=328
                    local.get 4
                    local.get 4
                    i64.load offset=256
                    i64.store offset=320
                    local.get 4
                    local.get 4
                    i64.load offset=248
                    i64.store offset=312
                    local.get 4
                    i32.const 296
                    i32.add
                    local.get 4
                    i32.const 312
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                    i32.const 1
                    local.set 1
                    i32.const 0
                    local.set 3
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=296
                      local.tee 5
                      i32.const 255
                      i32.eq
                      br_if 0 (;@9;)
                      local.get 4
                      local.get 4
                      i64.load offset=298 align=2
                      i64.store offset=40
                      local.get 4
                      local.get 4
                      i64.load offset=304 align=2
                      i64.store offset=46 align=2
                      local.get 4
                      i32.load8_u offset=297
                      local.set 1
                      local.get 5
                      local.set 3
                    end
                    local.get 4
                    i32.const 312
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 328
                    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=64
                    i64.store offset=328
                    local.get 4
                    local.get 4
                    i64.load offset=56
                    i64.store offset=320
                    local.get 4
                    i32.const 0
                    i32.store8 offset=56
                    local.get 4
                    local.get 1
                    i32.store8 offset=337
                    local.get 4
                    local.get 3
                    i32.store8 offset=336
                    local.get 4
                    i64.const 8589934592
                    i64.store offset=312
                    local.get 4
                    local.get 4
                    i64.load offset=40
                    i64.store offset=338 align=2
                    local.get 4
                    local.get 4
                    i64.load offset=46 align=2
                    i64.store offset=344 align=2
                    local.get 4
                    local.get 4
                    i32.const 56
                    i32.add
                    i32.store offset=352
                    local.get 4
                    i32.const 8
                    i32.add
                    local.get 4
                    i32.const 312
                    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=12
                    local.tee 3
                    i32.store offset=300
                    local.get 4
                    local.get 4
                    i32.load offset=8
                    local.tee 1
                    i32.store offset=296
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=56
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 1
                      local.get 1
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 2
                      i32.store
                      local.get 2
                      br_if 3 (;@6;)
                      local.get 4
                      i32.const 296
                      i32.add
                      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                      br 3 (;@6;)
                    end
                    local.get 1
                    i32.eqz
                    br_if 2 (;@6;)
                    local.get 0
                    local.get 3
                    i32.store offset=16
                    local.get 0
                    local.get 1
                    i32.store offset=12
                    local.get 0
                    i32.const 6
                    i32.store8 offset=8
                    local.get 0
                    i64.const 0
                    i64.store
                    local.get 4
                    i32.const 24
                    i32.add
                    call $"#func262 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 0
                    i32.store
                    local.get 0
                    br_if 6 (;@2;)
                    br 5 (;@3;)
                  end
                  local.get 4
                  local.get 4
                  i32.load8_u offset=315
                  i32.store8 offset=299
                  local.get 4
                  local.get 4
                  i32.load16_u offset=313 align=1
                  i32.store16 offset=297 align=1
                  local.get 4
                  local.get 4
                  i32.load offset=324
                  i32.store offset=308
                  local.get 4
                  local.get 4
                  i64.load offset=316 align=4
                  i64.store offset=300 align=4
                  local.get 4
                  local.get 1
                  i32.store8 offset=296
                  i32.const 1065572
                  i32.const 43
                  local.get 4
                  i32.const 296
                  i32.add
                  i32.const 1065556
                  i32.const 1065616
                  call $core::result::unwrap_failed
                  unreachable
                end
                local.get 4
                local.get 4
                i32.load8_u offset=315
                i32.store8 offset=299
                local.get 4
                local.get 4
                i32.load16_u offset=313 align=1
                i32.store16 offset=297 align=1
                local.get 4
                local.get 4
                i32.load offset=324
                i32.store offset=308
                local.get 4
                local.get 4
                i64.load offset=316 align=4
                i64.store offset=300 align=4
                local.get 4
                local.get 1
                i32.store8 offset=296
                i32.const 1065572
                i32.const 43
                local.get 4
                i32.const 296
                i32.add
                i32.const 1065556
                i32.const 1065616
                call $core::result::unwrap_failed
                unreachable
              end
              i32.const 1057428
              i32.const 43
              local.get 4
              i32.const 367
              i32.add
              i32.const 1057412
              i32.const 1057472
              call $core::result::unwrap_failed
              unreachable
            end
            local.get 0
            i64.const 1
            i64.store
            local.get 0
            local.get 1
            i64.load offset=8
            i64.store offset=16
            local.get 0
            local.get 1
            i64.load
            i64.store offset=8
            local.get 4
            i32.const 56
            i32.add
            call $"#func262 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
          end
          local.get 4
          i32.const 24
          i32.add
          call $"#func262 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 0
          i32.store
          local.get 0
          br_if 1 (;@2;)
        end
        local.get 4
        i32.const 16
        i32.add
        call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
      end
      local.get 4
      i32.const 368
      i32.add
      global.set $__stack_pointer
      return
    end
    unreachable
  )

Emergent Testing

Idle. Press Run to start the suite.

  • ./entries/proof.f.mjs
  • ./optional-chaining/proof.f.mjs
  • ./proof.f.mjs
  • ./prototype-calls/proof.f.mjs
  • ./prototype-names/proof.f.mjs
  • ./runtime-keys/proof.f.mjs