Arrays

Status: implemented

export default [
    "hello",
    42,
    [true, null],
];

An array may be empty, may hold any value including another array or an object, and may end with a trailing comma. It has no holes: an elision, a comma where an element would stand — [1, , 2], [, 1] or [,] — is refused by design at that comma (array hole), every array of this language holding a value at each of its indexes. The same comma in an array pattern skips an element (destructuring), which is where the grammar reads it.

See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Trailing_commas.

Spread

An item may be a spread, ... and any value, at any position and any number of times:

const a = [1, 2];
export default [[0, ...a, 3], [...a, ...a], [...'a😀']];
// [[0, 1, 2, 3], [1, 2, 1, 2], ['a', '😀']]

The operand is evaluated in its place among the items, left to right, and then iterated, each value it yields becoming one item, as JavaScript's SpreadElement does. An array yields its elements in index order, and a string its code points, each a string of its own: [...'😀'] is one item of two code units. Every other value — null, undefined, a boolean, a number, a bigint, an object, a function — is not iterable, and the spread fails, as JavaScript's GetIterator throws its TypeError (a spread of a value that is not iterable): a FunctionalScript object cannot define Symbol.iterator, so no object is iterable here, and none is in JavaScript either. A call's arguments take a spread the same way (functions).

The value outputs write the array the spread made, and the graph outputs the spread itself: .js and .f.js write it back, [0, ...a], the EDAG keeps its ['...', exp] item, and .rs prints it through nanvm-lib's get_iterator. A constant spread is not folded, so [...[1, 2]] is a different graph from [1, 2], as 1 + 1 is from 2. A spread puts its operand's elements in the array and not the operand, so it shares what an element shares: const a = [{}]; export default [[...a], a]; holds the object once, a const in DataJS and written where each reference reaches it in JSON (Output), where const a = [1] in its place shares nothing. An object literal takes a spread too, with a different reading (objects).

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 — an array literal, a spread into another, and an element read — 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 1 and 2, as JavaScript and as WebAssembly, and shows what each call returned or threw.

export default (...a) => {
    const x = ["hello", a[0], [true, null]];
    return [x.length, [...x, a[0] + 1], x[2][0]];
};

Reference

Demo

In FunctionalScript

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

A FunctionalScript module and what fjs compile makes of it: the expression graph it lowers to, the Rust it compiles to on the NaNVM runtime, and the WebAssembly that Rust builds to. Run calls its default export with 1, then 2, 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) (Arrays) as a function of one
 * number, for the page's WASM demo: an array literal, a spread into another,
 * and an element read.
 *
 * @module
 */

/** @type {(...a: readonly number[]) => unknown} */
export default (...a) => {
    /** @type {readonly [string, number, readonly [boolean, null]]} */
    const x = ["hello", a[0], [true, null]];
    return [x.length, [...x, a[0] + 1], x[2][0]];
};

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

=>lengthbody0[][]012.objkey[]"length"[]...01.objidx.0+leftright.1.objidx[]2[]012"hello".[].objidxrest0.objidxrest0[]01truenull

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

const $0=["rest"];const $1=["[]",["hello",[".",$0,0],["[]",[true,null]]]];export default ["{}",[[":","default",["=>",0,[],["[]",[[".",$1,"length"],["[]",[["...",$1],["+",[".",$0,0],1]]],[".",[".",$1,2],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, spread_array, spread_item, string_any, string_key, value_item,
};
use nanvm_lib::vm::{Any, Array, IStaticFunction, Nullish, ToAny, ToArray, ToObject};

#[rustfmt::skip]
#[allow(clippy::if_same_then_else)]
pub fn module<A: IStaticFunction>(_runtime: Any<A>) -> Result<Any<A>, Any<A>> {
    Ok([(string_key("default"), A::static_function(|_self, _args| {
        let _b524: Any<A> = _args.rest(0).to_any();
        let _b3: Any<A> = [string_any("hello"), (Any::dot(_b524.clone(), f64_any(0x0000000000000000)).end())?, [true.to_any(), Nullish::Null.to_any()].to_array().to_any()].to_array().to_any();
        Ok([(Any::dot(_b3.clone(), string_any("length")).end())?, (spread_array([spread_item(_b3.clone())?, value_item(((Any::dot(_b524.clone(), f64_any(0x0000000000000000)).end())? + f64_any(0x3ff0000000000000))?)]))?, (Any::dot((Any::dot(_b3.clone(), f64_any(0x4000000000000000)).end())?, f64_any(0x0000000000000000)).end())?].to_array().to_any())
    }, 0, Array::default(), Some("(...$0)=>{const $1=[\"hello\",$0[0],[true,null]];return [$1.length,[...$1,$0[0]+1],$1[2][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::arrays::module::<nanvm_lib::naive::Naive> (;171;) (type 1) (param i32 i32)
    (local i32 i32 i32 i32 i32)
    global.get $__stack_pointer
    i32.const 96
    i32.sub
    local.tee 2
    global.set $__stack_pointer
    local.get 2
    i32.const 0
    i32.store16 offset=28
    local.get 2
    i32.const 1053797
    i32.store offset=24
    local.get 2
    i32.const 1053790
    i32.store offset=20
    local.get 2
    i32.const 48
    i32.add
    local.get 2
    i32.const 20
    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
          local.get 2
          i32.load8_u offset=48
          local.tee 3
          i32.const 255
          i32.ne
          br_if 0 (;@3;)
          local.get 2
          i32.load offset=56
          local.set 4
          local.get 2
          i32.load offset=52
          local.set 5
          local.get 2
          i32.const 0
          i32.store8 offset=32
          local.get 2
          i32.const 8
          i32.add
          local.get 2
          i32.const 32
          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=12
          local.tee 6
          i32.store offset=52
          local.get 2
          local.get 2
          i32.load offset=8
          local.tee 3
          i32.store offset=48
          block ;; label = @4
            local.get 2
            i32.load8_u offset=32
            i32.const 1
            i32.ne
            br_if 0 (;@4;)
            local.get 3
            local.get 3
            i32.load
            i32.const -1
            i32.add
            local.tee 0
            i32.store
            local.get 0
            br_if 3 (;@1;)
            local.get 2
            i32.const 48
            i32.add
            call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
            br 3 (;@1;)
          end
          local.get 3
          i32.eqz
          br_if 2 (;@1;)
          i32.const 19
          i32.const 0
          local.get 3
          local.get 6
          i32.const 1055070
          i32.const 92
          call $<nanvm_lib::naive::function::Function>::new
          local.set 3
          local.get 2
          i32.const 0
          i32.store8 offset=20
          local.get 2
          local.get 3
          i32.store offset=68
          local.get 2
          i32.const 7
          i32.store8 offset=64
          local.get 2
          local.get 4
          i32.store offset=60
          local.get 2
          local.get 5
          i32.store offset=56
          local.get 2
          i64.const 4294967296
          i64.store offset=48
          local.get 2
          local.get 2
          i32.const 20
          i32.add
          i32.store offset=80
          local.get 2
          local.get 2
          i32.const 48
          i32.add
          call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), 1>, core::result::Result<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)>>::to_rc_slice"
          local.get 2
          local.get 2
          i32.load offset=4
          local.tee 4
          i32.store offset=36
          local.get 2
          local.get 2
          i32.load
          local.tee 3
          i32.store offset=32
          block ;; label = @4
            local.get 2
            i32.load8_u offset=20
            i32.const 1
            i32.ne
            br_if 0 (;@4;)
            local.get 3
            local.get 3
            i32.load
            i32.const -1
            i32.add
            local.tee 0
            i32.store
            local.get 0
            br_if 2 (;@2;)
            local.get 2
            i32.const 32
            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 2 (;@2;)
          end
          local.get 3
          i32.eqz
          br_if 1 (;@2;)
          local.get 0
          local.get 4
          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 $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
          local.get 2
          i32.const 96
          i32.add
          global.set $__stack_pointer
          return
        end
        local.get 2
        local.get 2
        i32.load8_u offset=51
        i32.store8 offset=35
        local.get 2
        local.get 2
        i32.load16_u offset=49 align=1
        i32.store16 offset=33 align=1
        local.get 2
        local.get 2
        i32.load offset=60
        i32.store offset=44
        local.get 2
        local.get 2
        i64.load offset=52 align=4
        i64.store offset=36 align=4
        local.get 2
        local.get 3
        i32.store8 offset=32
        i32.const 1065572
        i32.const 43
        local.get 2
        i32.const 32
        i32.add
        i32.const 1065556
        i32.const 1065616
        call $core::result::unwrap_failed
        unreachable
      end
      i32.const 1057428
      i32.const 43
      local.get 2
      i32.const 95
      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 95
    i32.add
    i32.const 1057412
    i32.const 1057472
    call $core::result::unwrap_failed
    unreachable
  )
  (func $"<nanvm_demos::samples::arrays::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" (;172;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i64 i32 i32)
    global.get $__stack_pointer
    i32.const 560
    i32.sub
    local.tee 4
    global.set $__stack_pointer
    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
      local.get 4
      i32.const 0
      i32.store16 offset=296
      local.get 4
      i32.const 1055903
      i32.store offset=292
      local.get 4
      i32.const 1055898
      i32.store offset=288
      local.get 4
      i32.const 472
      i32.add
      local.get 4
      i32.const 288
      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
            local.get 4
            i32.load8_u offset=472
            local.tee 3
            i32.const 255
            i32.ne
            br_if 0 (;@4;)
            local.get 4
            local.get 4
            i64.load offset=476 align=4
            i64.store offset=380 align=4
            local.get 4
            i32.const 3
            i32.store8 offset=376
            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 4
                            i32.load8_u offset=32
                            local.tee 5
                            br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
                          end
                          local.get 4
                          i64.load offset=40
                          local.set 6
                          br 9 (;@2;)
                        end
                        local.get 4
                        i32.load offset=36
                        local.tee 3
                        local.get 3
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 7
                        i32.store
                        local.get 7
                        i32.eqz
                        br_if 9 (;@1;)
                        br 7 (;@3;)
                      end
                      local.get 4
                      i32.load offset=36
                      local.tee 3
                      local.get 3
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 7
                      i32.store
                      local.get 7
                      i32.eqz
                      br_if 8 (;@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 6
                      br 7 (;@2;)
                    end
                    local.get 4
                    i32.load offset=36
                    local.tee 3
                    local.get 3
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 7
                    i32.store
                    local.get 7
                    br_if 5 (;@3;)
                    br 7 (;@1;)
                  end
                  local.get 4
                  i32.load offset=36
                  local.tee 3
                  local.get 3
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 7
                  i32.store
                  local.get 7
                  br_if 4 (;@3;)
                  br 6 (;@1;)
                end
                local.get 4
                i32.load offset=36
                local.tee 3
                local.get 3
                i32.load
                i32.const 1
                i32.add
                local.tee 7
                i32.store
                local.get 7
                i32.eqz
                br_if 5 (;@1;)
                br 1 (;@5;)
              end
              local.get 4
              i32.load8_u offset=33
              local.set 7
            end
            br 2 (;@2;)
          end
          local.get 4
          local.get 4
          i32.load8_u offset=475
          i32.store8 offset=67
          local.get 4
          local.get 4
          i32.load16_u offset=473 align=1
          i32.store16 offset=65 align=1
          local.get 4
          local.get 4
          i32.load offset=484
          i32.store offset=76
          local.get 4
          local.get 4
          i64.load offset=476 align=4
          i64.store offset=68 align=4
          local.get 4
          local.get 3
          i32.store8 offset=64
          i32.const 1065572
          i32.const 43
          local.get 4
          i32.const 64
          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 6
      end
      local.get 4
      local.get 6
      i64.store offset=72
      local.get 4
      local.get 3
      i32.store offset=68
      local.get 4
      local.get 7
      i32.store8 offset=65
      local.get 4
      local.get 5
      i32.store8 offset=64
      local.get 4
      i64.const 0
      i64.store offset=480
      local.get 4
      i32.const 2
      i32.store8 offset=472
      local.get 4
      i32.const 256
      i32.add
      local.get 4
      i32.const 64
      i32.add
      local.get 4
      i32.const 472
      i32.add
      call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
      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=256
                  i32.const 255
                  i32.ne
                  br_if 0 (;@7;)
                  local.get 0
                  local.get 4
                  i64.load offset=272
                  i64.store offset=16
                  local.get 0
                  local.get 4
                  i64.load offset=264
                  i64.store offset=8
                  local.get 0
                  i64.const 1
                  i64.store
                  local.get 4
                  i32.const 376
                  i32.add
                  call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                  br 1 (;@6;)
                end
                local.get 4
                local.get 4
                i64.load offset=280
                i64.store offset=496
                local.get 4
                local.get 4
                i64.load offset=272
                i64.store offset=488
                local.get 4
                local.get 4
                i64.load offset=264
                i64.store offset=480
                local.get 4
                local.get 4
                i64.load offset=256
                i64.store offset=472
                local.get 4
                i32.const 64
                i32.add
                local.get 4
                i32.const 472
                i32.add
                call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                i32.const 1
                local.set 5
                i32.const 0
                local.set 7
                block ;; label = @7
                  local.get 4
                  i32.load8_u offset=64
                  local.tee 3
                  i32.const 255
                  i32.eq
                  br_if 0 (;@7;)
                  local.get 4
                  local.get 4
                  i64.load offset=66 align=2
                  i64.store offset=344
                  local.get 4
                  local.get 4
                  i64.load offset=72 align=2
                  i64.store offset=350 align=2
                  local.get 4
                  i32.load8_u offset=65
                  local.set 5
                  local.get 3
                  local.set 7
                end
                local.get 4
                i32.const 472
                i32.add
                call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                local.get 4
                i32.const 488
                i32.add
                call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                local.get 4
                i32.const 0
                i32.store8 offset=288
                local.get 4
                i32.const 0
                i32.store16 offset=496
                local.get 4
                i32.const 257
                i32.store16 offset=480
                local.get 4
                i64.const 8589934592
                i64.store offset=472
                local.get 4
                local.get 4
                i32.const 288
                i32.add
                i32.store offset=512
                local.get 4
                i32.const 16
                i32.add
                local.get 4
                i32.const 472
                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 8
                i32.store offset=68
                local.get 4
                local.get 4
                i32.load offset=16
                local.tee 3
                i32.store offset=64
                block ;; label = @7
                  local.get 4
                  i32.load8_u offset=288
                  i32.const 1
                  i32.ne
                  br_if 0 (;@7;)
                  local.get 3
                  local.get 3
                  i32.load
                  i32.const -1
                  i32.add
                  local.tee 2
                  i32.store
                  local.get 2
                  br_if 5 (;@2;)
                  local.get 4
                  i32.const 64
                  i32.add
                  call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                  br 5 (;@2;)
                end
                local.get 3
                i32.eqz
                br_if 4 (;@2;)
                local.get 4
                local.get 4
                i64.load offset=384
                i64.store offset=488
                local.get 4
                local.get 4
                i64.load offset=376
                i64.store offset=480
                local.get 4
                i32.const 0
                i32.store8 offset=376
                local.get 4
                local.get 5
                i32.store8 offset=497
                local.get 4
                local.get 7
                i32.store8 offset=496
                local.get 4
                i64.const 12884901888
                i64.store offset=472
                local.get 4
                local.get 4
                i64.load offset=344
                i64.store offset=498 align=2
                local.get 4
                local.get 4
                i64.load offset=350 align=2
                i64.store offset=504 align=2
                local.get 4
                local.get 8
                i32.store offset=520
                local.get 4
                local.get 3
                i32.store offset=516
                local.get 4
                i32.const 6
                i32.store8 offset=512
                local.get 4
                local.get 4
                i32.const 376
                i32.add
                i32.store offset=528
                local.get 4
                i32.const 8
                i32.add
                local.get 4
                i32.const 472
                i32.add
                call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 3>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
                local.get 4
                local.get 4
                i32.load offset=12
                local.tee 5
                i32.store offset=68
                local.get 4
                local.get 4
                i32.load offset=8
                local.tee 3
                i32.store offset=64
                block ;; label = @7
                  local.get 4
                  i32.load8_u offset=376
                  i32.const 1
                  i32.ne
                  br_if 0 (;@7;)
                  local.get 3
                  local.get 3
                  i32.load
                  i32.const -1
                  i32.add
                  local.tee 2
                  i32.store
                  local.get 2
                  br_if 4 (;@3;)
                  local.get 4
                  i32.const 64
                  i32.add
                  call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                  br 4 (;@3;)
                end
                local.get 3
                i32.eqz
                br_if 3 (;@3;)
                local.get 4
                local.get 5
                i32.store offset=56
                local.get 4
                local.get 3
                i32.store offset=52
                local.get 4
                i32.const 6
                i32.store8 offset=48
                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 5 (;@1;)
                local.get 4
                local.get 3
                i32.store offset=348
                local.get 4
                i32.const 6
                i32.store8 offset=344
                local.get 4
                local.get 5
                i64.extend_i32_u
                i64.store offset=352
                local.get 4
                i32.const 0
                i32.store16 offset=296
                local.get 4
                i32.const 1055766
                i32.store offset=292
                local.get 4
                i32.const 1055760
                i32.store offset=288
                local.get 4
                i32.const 472
                i32.add
                local.get 4
                i32.const 288
                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
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=472
                          local.tee 3
                          i32.const 255
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 4
                          local.get 4
                          i64.load offset=476 align=4
                          i64.store offset=380 align=4
                          local.get 4
                          i32.const 3
                          i32.store8 offset=376
                          local.get 4
                          i32.const 288
                          i32.add
                          local.get 4
                          i32.const 344
                          i32.add
                          local.get 4
                          i32.const 376
                          i32.add
                          call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                          block ;; label = @12
                            local.get 4
                            i32.load8_u offset=288
                            i32.const 255
                            i32.ne
                            br_if 0 (;@12;)
                            local.get 0
                            local.get 4
                            i64.load offset=304
                            i64.store offset=16
                            local.get 0
                            local.get 4
                            i64.load offset=296
                            i64.store offset=8
                            local.get 0
                            i64.const 1
                            i64.store
                            br 5 (;@7;)
                          end
                          local.get 4
                          local.get 4
                          i64.load offset=312
                          i64.store offset=496
                          local.get 4
                          local.get 4
                          i64.load offset=304
                          i64.store offset=488
                          local.get 4
                          local.get 4
                          i64.load offset=296
                          i64.store offset=480
                          local.get 4
                          local.get 4
                          i64.load offset=288
                          i64.store offset=472
                          local.get 4
                          i32.const 376
                          i32.add
                          local.get 4
                          i32.const 472
                          i32.add
                          call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                          block ;; label = @12
                            block ;; label = @13
                              local.get 4
                              i32.load8_u offset=376
                              i32.const 255
                              i32.eq
                              br_if 0 (;@13;)
                              local.get 4
                              local.get 4
                              i64.load offset=384
                              i64.store offset=120
                              local.get 4
                              local.get 4
                              i64.load offset=376
                              i64.store offset=112
                              br 1 (;@12;)
                            end
                            local.get 4
                            i32.const 256
                            i32.store16 offset=112
                          end
                          local.get 4
                          i32.const 472
                          i32.add
                          call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                          local.get 4
                          i32.const 488
                          i32.add
                          call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                          block ;; label = @12
                            block ;; label = @13
                              block ;; label = @14
                                block ;; label = @15
                                  block ;; label = @16
                                    block ;; label = @17
                                      block ;; label = @18
                                        block ;; label = @19
                                          block ;; label = @20
                                            block ;; label = @21
                                              block ;; label = @22
                                                block ;; label = @23
                                                  block ;; label = @24
                                                    block ;; label = @25
                                                      block ;; label = @26
                                                        block ;; label = @27
                                                          block ;; label = @28
                                                            block ;; label = @29
                                                              local.get 4
                                                              i32.load8_u offset=48
                                                              local.tee 5
                                                              br_table 7 (;@22;) 7 (;@22;) 0 (;@29;) 1 (;@28;) 2 (;@27;) 3 (;@26;) 4 (;@25;) 6 (;@23;) 7 (;@22;)
                                                            end
                                                            local.get 4
                                                            i64.load offset=56
                                                            local.set 6
                                                            br 8 (;@20;)
                                                          end
                                                          local.get 4
                                                          i32.load offset=52
                                                          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 26 (;@1;)
                                                          local.get 4
                                                          i32.load offset=56
                                                          local.set 3
                                                          local.get 4
                                                          local.get 5
                                                          i32.store offset=332
                                                          local.get 4
                                                          i64.const 1
                                                          i64.store offset=324 align=4
                                                          br 3 (;@24;)
                                                        end
                                                        local.get 4
                                                        i32.load offset=52
                                                        local.tee 3
                                                        local.get 3
                                                        i32.load
                                                        i32.const 1
                                                        i32.add
                                                        local.tee 7
                                                        i32.store
                                                        local.get 7
                                                        i32.eqz
                                                        br_if 25 (;@1;)
                                                        local.get 4
                                                        i64.load8_u offset=60
                                                        i64.const 32
                                                        i64.shl
                                                        local.get 4
                                                        i64.load32_u offset=56
                                                        i64.or
                                                        local.set 6
                                                        br 6 (;@20;)
                                                      end
                                                      local.get 4
                                                      i32.load offset=52
                                                      local.tee 3
                                                      local.get 3
                                                      i32.load
                                                      i32.const 1
                                                      i32.add
                                                      local.tee 7
                                                      i32.store
                                                      local.get 7
                                                      i32.eqz
                                                      br_if 24 (;@1;)
                                                      local.get 4
                                                      i64.load32_u offset=56
                                                      local.set 6
                                                      br 5 (;@20;)
                                                    end
                                                    local.get 4
                                                    i32.load offset=52
                                                    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 23 (;@1;)
                                                    local.get 4
                                                    local.get 4
                                                    i32.load offset=56
                                                    i32.store offset=332
                                                    local.get 4
                                                    local.get 3
                                                    i32.store offset=328
                                                    i32.const 0
                                                    local.set 3
                                                    local.get 4
                                                    i32.const 0
                                                    i32.store offset=324
                                                  end
                                                  local.get 4
                                                  local.get 3
                                                  i32.store offset=336
                                                  local.get 4
                                                  i32.const 0
                                                  i32.store offset=320
                                                  local.get 4
                                                  local.get 4
                                                  i64.load offset=324 align=4
                                                  i64.store offset=172 align=4
                                                  local.get 4
                                                  i32.const 1
                                                  i32.store offset=168
                                                  local.get 4
                                                  local.get 4
                                                  i64.load offset=332 align=4
                                                  i64.store offset=180 align=4
                                                  local.get 4
                                                  i32.load8_u offset=32
                                                  local.tee 5
                                                  br_table 10 (;@13;) 10 (;@13;) 4 (;@19;) 5 (;@18;) 6 (;@17;) 7 (;@16;) 8 (;@15;) 9 (;@14;) 10 (;@13;)
                                                end
                                                local.get 4
                                                i32.load offset=52
                                                local.tee 3
                                                local.get 3
                                                i32.load
                                                i32.const 1
                                                i32.add
                                                local.tee 7
                                                i32.store
                                                local.get 7
                                                i32.eqz
                                                br_if 21 (;@1;)
                                                br 1 (;@21;)
                                              end
                                              local.get 4
                                              i32.load8_u offset=49
                                              local.set 7
                                            end
                                          end
                                          local.get 4
                                          local.get 6
                                          i64.store offset=384
                                          local.get 4
                                          local.get 3
                                          i32.store offset=380
                                          local.get 4
                                          local.get 7
                                          i32.store8 offset=377
                                          local.get 4
                                          local.get 5
                                          i32.store8 offset=376
                                          local.get 4
                                          i32.const 328
                                          i32.add
                                          i32.const 1062284
                                          i32.const 9
                                          i32.const 1062293
                                          i32.const 21
                                          call $nanvm_lib::vm::error::thrown::<nanvm_lib::naive::Naive>
                                          local.get 4
                                          i32.const 376
                                          i32.add
                                          call $"#func344 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                                          local.get 0
                                          local.get 4
                                          i64.load offset=336
                                          i64.store offset=16
                                          local.get 0
                                          local.get 4
                                          i64.load offset=328
                                          i64.store offset=8
                                          local.get 0
                                          i64.const 1
                                          i64.store
                                          br 11 (;@8;)
                                        end
                                        local.get 4
                                        i64.load offset=40
                                        local.set 6
                                        br 9 (;@9;)
                                      end
                                      local.get 4
                                      i32.load offset=36
                                      local.tee 3
                                      local.get 3
                                      i32.load
                                      i32.const 1
                                      i32.add
                                      local.tee 7
                                      i32.store
                                      local.get 7
                                      i32.eqz
                                      br_if 16 (;@1;)
                                      br 7 (;@10;)
                                    end
                                    local.get 4
                                    i32.load offset=36
                                    local.tee 3
                                    local.get 3
                                    i32.load
                                    i32.const 1
                                    i32.add
                                    local.tee 7
                                    i32.store
                                    local.get 7
                                    i32.eqz
                                    br_if 15 (;@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 6
                                    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 7
                                  i32.store
                                  local.get 7
                                  i32.eqz
                                  br_if 14 (;@1;)
                                  br 5 (;@10;)
                                end
                                local.get 4
                                i32.load offset=36
                                local.tee 3
                                local.get 3
                                i32.load
                                i32.const 1
                                i32.add
                                local.tee 7
                                i32.store
                                local.get 7
                                i32.eqz
                                br_if 13 (;@1;)
                                br 4 (;@10;)
                              end
                              local.get 4
                              i32.load offset=36
                              local.tee 3
                              local.get 3
                              i32.load
                              i32.const 1
                              i32.add
                              local.tee 7
                              i32.store
                              local.get 7
                              i32.eqz
                              br_if 12 (;@1;)
                              br 1 (;@12;)
                            end
                            local.get 4
                            i32.load8_u offset=33
                            local.set 7
                          end
                          br 2 (;@9;)
                        end
                        local.get 4
                        local.get 4
                        i32.load8_u offset=475
                        i32.store8 offset=379
                        local.get 4
                        local.get 4
                        i32.load16_u offset=473 align=1
                        i32.store16 offset=377 align=1
                        local.get 4
                        local.get 4
                        i32.load offset=484
                        i32.store offset=388
                        local.get 4
                        local.get 4
                        i64.load offset=476 align=4
                        i64.store offset=380 align=4
                        local.get 4
                        local.get 3
                        i32.store8 offset=376
                        i32.const 1065572
                        i32.const 43
                        local.get 4
                        i32.const 376
                        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 6
                    end
                    local.get 4
                    local.get 6
                    i64.store offset=544
                    local.get 4
                    local.get 3
                    i32.store offset=540
                    local.get 4
                    local.get 7
                    i32.store8 offset=537
                    local.get 4
                    local.get 5
                    i32.store8 offset=536
                    local.get 4
                    i64.const 0
                    i64.store offset=384
                    local.get 4
                    i32.const 2
                    i32.store8 offset=376
                    local.get 4
                    i32.const 344
                    i32.add
                    local.get 4
                    i32.const 536
                    i32.add
                    local.get 4
                    i32.const 376
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=344
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=360
                      i64.store offset=16
                      local.get 0
                      local.get 4
                      i64.load offset=352
                      i64.store offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      block ;; label = @10
                        local.get 4
                        i32.load offset=168
                        br_if 0 (;@10;)
                        local.get 4
                        i32.const 176
                        i32.add
                        call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                        br 2 (;@8;)
                      end
                      block ;; label = @10
                        local.get 4
                        i32.load offset=172
                        br_if 0 (;@10;)
                        local.get 4
                        i32.load offset=176
                        local.tee 0
                        local.get 0
                        i32.load
                        i32.const -1
                        i32.add
                        local.tee 0
                        i32.store
                        local.get 0
                        br_if 2 (;@8;)
                        local.get 4
                        i32.const 176
                        i32.add
                        call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                        br 2 (;@8;)
                      end
                      local.get 4
                      i32.load offset=180
                      local.tee 0
                      local.get 0
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 1 (;@8;)
                      local.get 4
                      i32.const 180
                      i32.add
                      call $"<alloc::rc::Rc<[u16]>>::drop_slow"
                      br 1 (;@8;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=368
                    i64.store offset=400
                    local.get 4
                    local.get 4
                    i64.load offset=360
                    i64.store offset=392
                    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
                    i32.const 536
                    i32.add
                    local.get 4
                    i32.const 376
                    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=536
                        i32.const 255
                        i32.eq
                        br_if 0 (;@10;)
                        local.get 4
                        local.get 4
                        i64.load offset=544
                        i64.store offset=248
                        local.get 4
                        local.get 4
                        i64.load offset=536
                        i64.store offset=240
                        br 1 (;@9;)
                      end
                      local.get 4
                      i32.const 256
                      i32.store16 offset=240
                    end
                    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 392
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i64.const 4607182418800017408
                    i64.store offset=384
                    local.get 4
                    i32.const 2
                    i32.store8 offset=376
                    local.get 4
                    i32.const 216
                    i32.add
                    local.get 4
                    i32.const 240
                    i32.add
                    local.get 4
                    i32.const 376
                    i32.add
                    call $"<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive> as core::ops::arith::Add>::add"
                    local.get 4
                    local.get 4
                    i64.load offset=224
                    i64.store offset=536
                    local.get 4
                    local.get 4
                    i64.load offset=232
                    i64.store offset=544
                    block ;; label = @9
                      local.get 4
                      i64.load offset=216
                      i64.const 1
                      i64.ne
                      br_if 0 (;@9;)
                      local.get 0
                      local.get 4
                      i64.load offset=544
                      i64.store offset=16
                      local.get 0
                      local.get 4
                      i64.load offset=536
                      i64.store offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      block ;; label = @10
                        local.get 4
                        i32.load offset=168
                        br_if 0 (;@10;)
                        local.get 4
                        i32.const 176
                        i32.add
                        call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                        br 2 (;@8;)
                      end
                      block ;; label = @10
                        local.get 4
                        i32.load offset=172
                        br_if 0 (;@10;)
                        local.get 4
                        i32.load offset=176
                        local.tee 0
                        local.get 0
                        i32.load
                        i32.const -1
                        i32.add
                        local.tee 0
                        i32.store
                        local.get 0
                        br_if 2 (;@8;)
                        local.get 4
                        i32.const 176
                        i32.add
                        call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                        br 2 (;@8;)
                      end
                      local.get 4
                      i32.load offset=180
                      local.tee 0
                      local.get 0
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 0
                      i32.store
                      local.get 0
                      br_if 1 (;@8;)
                      local.get 4
                      i32.const 180
                      i32.add
                      call $"<alloc::rc::Rc<[u16]>>::drop_slow"
                      br 1 (;@8;)
                    end
                    local.get 4
                    i32.const 144
                    i32.add
                    i32.const 8
                    i32.add
                    local.set 3
                    local.get 4
                    local.get 4
                    i64.load offset=536
                    i64.store offset=200 align=4
                    local.get 4
                    local.get 4
                    i64.load offset=544
                    i64.store offset=208 align=4
                    local.get 4
                    local.get 4
                    i64.load offset=168
                    i64.store offset=472
                    local.get 4
                    local.get 4
                    i64.load offset=176
                    i64.store offset=480
                    local.get 4
                    local.get 4
                    i64.load offset=184
                    i64.store offset=488
                    local.get 4
                    i32.const 0
                    i32.store offset=496
                    local.get 4
                    local.get 4
                    i64.load offset=196 align=4
                    i64.store offset=500 align=4
                    local.get 4
                    local.get 4
                    i64.load offset=204 align=4
                    i64.store offset=508 align=4
                    local.get 4
                    local.get 4
                    i32.load offset=212
                    i32.store offset=516
                    local.get 4
                    i32.const 144
                    i32.add
                    local.get 4
                    i32.const 472
                    i32.add
                    call $"nanvm_lib::vm::unstable::spread_array::<nanvm_lib::naive::Naive, [nanvm_lib::vm::unstable::ArrayItem<nanvm_lib::naive::Naive>; 2]>"
                    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 1 (;@8;)
                    end
                    local.get 4
                    local.get 3
                    i64.load offset=8
                    i64.store offset=136
                    local.get 4
                    local.get 3
                    i64.load
                    i64.store offset=128
                    block ;; label = @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
                                      block ;; label = @18
                                        local.get 4
                                        i32.load8_u offset=48
                                        local.tee 7
                                        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=56
                                      local.set 6
                                      br 8 (;@9;)
                                    end
                                    local.get 4
                                    i32.load offset=52
                                    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 6 (;@10;)
                                  end
                                  local.get 4
                                  i32.load offset=52
                                  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 4
                                  i64.load8_u offset=60
                                  i64.const 32
                                  i64.shl
                                  local.get 4
                                  i64.load32_u offset=56
                                  i64.or
                                  local.set 6
                                  br 6 (;@9;)
                                end
                                local.get 4
                                i32.load offset=52
                                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 4 (;@10;)
                              end
                              local.get 4
                              i32.load offset=52
                              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 3 (;@10;)
                            end
                            local.get 4
                            i32.load offset=52
                            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 1 (;@11;)
                          end
                          local.get 4
                          i32.load8_u offset=49
                          local.set 8
                        end
                        br 1 (;@9;)
                      end
                      local.get 4
                      i64.load32_u offset=56
                      local.set 6
                    end
                    local.get 4
                    local.get 6
                    i64.store offset=384
                    local.get 4
                    local.get 5
                    i32.store offset=380
                    local.get 4
                    local.get 8
                    i32.store8 offset=377
                    local.get 4
                    local.get 7
                    i32.store8 offset=376
                    local.get 4
                    i64.const 4611686018427387904
                    i64.store offset=480
                    local.get 4
                    i32.const 2
                    i32.store8 offset=472
                    local.get 4
                    i32.const 408
                    i32.add
                    local.get 4
                    i32.const 376
                    i32.add
                    local.get 4
                    i32.const 472
                    i32.add
                    call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                    block ;; label = @9
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=408
                        i32.const 255
                        i32.ne
                        br_if 0 (;@10;)
                        local.get 4
                        i32.const 408
                        i32.add
                        i32.const 8
                        i32.add
                        local.set 3
                        br 1 (;@9;)
                      end
                      local.get 4
                      local.get 4
                      i64.load offset=432
                      i64.store offset=496
                      local.get 4
                      local.get 4
                      i64.load offset=424
                      i64.store offset=488
                      local.get 4
                      local.get 4
                      i64.load offset=416
                      i64.store offset=480
                      local.get 4
                      local.get 4
                      i64.load offset=408
                      i64.store offset=472
                      local.get 4
                      i32.const 376
                      i32.add
                      local.get 4
                      i32.const 472
                      i32.add
                      call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::read
                      local.get 4
                      i64.const 0
                      i64.store offset=480
                      local.get 4
                      i32.const 2
                      i32.store8 offset=472
                      local.get 4
                      i32.const 440
                      i32.add
                      local.get 4
                      i32.const 376
                      i32.add
                      local.get 4
                      i32.const 472
                      i32.add
                      call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=440
                        i32.const 255
                        i32.ne
                        br_if 0 (;@10;)
                        local.get 4
                        i32.const 440
                        i32.add
                        i32.const 8
                        i32.add
                        local.set 3
                        br 1 (;@9;)
                      end
                      local.get 4
                      local.get 4
                      i64.load offset=464
                      i64.store offset=496
                      local.get 4
                      local.get 4
                      i64.load offset=456
                      i64.store offset=488
                      local.get 4
                      local.get 4
                      i64.load offset=448
                      i64.store offset=480
                      local.get 4
                      local.get 4
                      i64.load offset=440
                      i64.store offset=472
                      local.get 4
                      i32.const 96
                      i32.add
                      local.get 4
                      i32.const 472
                      i32.add
                      call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::read
                      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
                      i64.store offset=80
                      local.get 4
                      local.get 3
                      i64.load offset=8
                      i64.store offset=88
                      local.get 4
                      local.get 4
                      i32.const 64
                      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
                      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 48
                      i32.add
                      call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                      local.get 4
                      i32.const 32
                      i32.add
                      call $"#func152 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 5 (;@4;)
                      br 4 (;@5;)
                    end
                    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
                    local.get 4
                    i32.const 128
                    i32.add
                    call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                  end
                  local.get 4
                  i32.const 112
                  i32.add
                  call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
                end
                local.get 4
                i32.const 48
                i32.add
                call $"#func152 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
              end
              local.get 4
              i32.const 32
              i32.add
              call $"#func152 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 (;@4;)
            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 560
          i32.add
          global.set $__stack_pointer
          return
        end
        i32.const 1057428
        i32.const 43
        local.get 4
        i32.const 559
        i32.add
        i32.const 1057412
        i32.const 1057472
        call $core::result::unwrap_failed
        unreachable
      end
      i32.const 1057428
      i32.const 43
      local.get 4
      i32.const 559
      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.

  • ./holes/proof.f.mjs
  • ./proof.f.mjs