in

Status: implemented

export default "x" in { x: 1 };

"k" in o is true when o owns an enumerable entry under the key k — a member of an object, an element of an array, one holding undefined included, so that "x" in { x: undefined } is true and "x" in {} is false — or when k is length and o an array or a function, which own it without enumerating it; and false otherwise: of a function, which owns no entry, and of an object or an array without one. It throws for null, undefined and every primitive, the TypeError JavaScript's in throws, so "0" in "abc" fails as it does there. The question is hasEntry's for an entry (reading an entry): "k" in o is the constant-key spelling of presence, as o.k is the constant-key read, and hasEntry(o, k) the computed one, as entry(o, k) is — but the operators read length and the helpers do not, since a helper lists what Object.entries lists, the enumerable entries, so the operator has a body of its own beside the helper's.

The key is a string literal, bare or in parentheses, since a group vanishes, and nothing else: a number, a name, an operator's result or an in of its own is refused at the operator (the left operand of in must be a string literal), and a key computed at run time is hasEntry's to test (in with a computed key). The literal may not name a property a built-in prototype gives a value — toString, push, __proto__ and the rest fjs/js/prototype lists — refused as the key of a read is (a prototype's name, prohibited property name), with the read's one exemption: length, which an array and a function own without enumerating it, is a key, and "length" in [] is true as in JavaScript. Any other string is a key: an index-like "0", a keyword's word "if", the empty string.

Why this and not JavaScript's in. JavaScript's asks whether a property exists anywhere on the prototype chain, so "toString" in {} is true; FunctionalScript has no chain, and answering for own entries would give accepted text a different successful result than JavaScript gives it (principles). For a literal key outside the inventory the chain has nothing to say: a FunctionalScript value owns no non-enumerable string key outside it, and the chain adds only inventory names, so JavaScript finds such a key exactly where the own entry is, and the two languages agree on every value the language can build. A computed key is refused for the same reason, since a name the compiler cannot see it cannot refuse. The decision, the alternatives rejected and the approval are the in record.

in is a relational operator, one level with < and instanceof and left-associative as they are: "a" in o === true is ("a" in o) === true, "a" in o < 2 is ("a" in o) < 2, and the right operand groups as <'s right operand would, "a" in (1 < 2); 1 < 2 in o is (1 < 2) in o, refused for its left operand. in is a reserved word, as instanceof is: it names no const and no parameter, while { in: 1 } and a.in are a key and a property name as in JavaScript. for (k in o) is a different grammar, a statement the language does not have.

The EDAG's node is ['in', key, exp]: the key is a spelling, carried as instanceof's constructor name is and never an operand (fjs/edag). Its answer is one body, runtime.in in fjs/js/runtime, the receiver check and then hasEntry, which every executor calls or substitutes natively (DESIGN.md §13). The writer spells it with spaces around the word, "k" in o.

Pages

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

Examples

The compiler demo offers the programs in 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 — "x" in an object that owns the entry, and one that does not — 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.

export default (...a) => "x" in [{ x: 1 }, {}][Number(a[0])];

Reference

Demo

In FunctionalScript

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

A FunctionalScript module and what fjs compile makes of it: the expression graph it lowers to, the Rust it compiles to on the NaNVM runtime, and the WebAssembly that Rust builds to. Run calls its default export with 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) (`in`) as a function of one
 * number, for the page's WASM demo: `"x" in` an object that owns the
 * entry, and one that does not.
 *
 * @module
 */

/** @type {(...a: readonly number[]) => boolean} */
export default (...a) => "x" in [{ x: 1 }, {}][Number(a[0])];

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

=>lengthbody0"x" in"x" inoperand.objidx[]01Numberoperand{}x1{}.objidxrest0

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

export default ["{}",[[":","default",["=>",0,[],["in","x",[".",["[]",[["{}",[[":","x",1]]],["{}",[]]]],["Number",[".",["rest"],0]]]]]]]];

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

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

use nanvm_lib::vm::unstable::{f64_any, string_any, string_key};
use nanvm_lib::vm::{Any, IStaticFunction, Object, 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 _b362: Any<A> = _args.rest(0).to_any();
        Any::call((Any::dot(A::frame(_self)[0].clone(), string_any("in")).end())?, [string_any("x"), (Any::dot([[(string_key("x"), f64_any(0x3ff0000000000000))].to_object().to_any(), Object::default().to_any()].to_array().to_any(), (Any::number((Any::dot(_b362.clone(), f64_any(0x0000000000000000)).end())?))?).end())?].to_array().to_any())
    }, 0, [runtime.clone()].to_array(), Some("(...$0)=>\"x\" in [{\"x\":1},{}][Number($0[0])]")).to_any())].to_object().to_any())
}

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

  (func $nanvm_demos::samples::in_operator::module::<nanvm_lib::naive::Naive> (;587;) (type 1) (param i32 i32)
    (local i32 i32 i32 i32 i32 i32 i32 i64)
    global.get $__stack_pointer
    i32.const 112
    i32.sub
    local.tee 2
    global.set $__stack_pointer
    local.get 2
    i32.const 255
    i32.store8 offset=40
    local.get 2
    i32.const 0
    i32.store16 offset=72
    local.get 2
    i32.const 1064816
    i32.store offset=68
    local.get 2
    i32.const 1064809
    i32.store offset=64
    local.get 2
    local.get 2
    i32.const 40
    i32.add
    i32.store offset=76
    local.get 2
    i32.const 24
    i32.add
    local.get 2
    i32.const 64
    i32.add
    call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
    local.get 2
    local.get 2
    i32.load offset=28
    local.tee 3
    i32.store offset=60
    local.get 2
    local.get 2
    i32.load offset=24
    local.tee 4
    i32.store offset=56
    block ;; label = @1
      local.get 2
      i32.load8_u offset=40
      local.tee 5
      i32.const 255
      i32.eq
      br_if 0 (;@1;)
      local.get 2
      i32.load offset=44
      local.set 0
      local.get 2
      i32.load offset=48
      local.set 1
      local.get 2
      i32.load offset=52
      local.set 3
      local.get 2
      i32.load16_u offset=41 align=1
      local.set 6
      local.get 2
      i32.load8_u offset=43
      local.set 7
      local.get 4
      local.get 4
      i32.load
      i32.const -1
      i32.add
      local.tee 8
      i32.store
      local.get 2
      local.get 7
      i32.store8 offset=38
      local.get 2
      local.get 6
      i32.store16 offset=36
      block ;; label = @2
        local.get 8
        br_if 0 (;@2;)
        local.get 2
        i32.const 56
        i32.add
        call $"<alloc::rc::Rc<[u16]>>::drop_slow"
      end
      local.get 2
      local.get 5
      i32.store8 offset=64
      local.get 2
      local.get 2
      i32.load16_u offset=36
      i32.store16 offset=65 align=1
      local.get 2
      local.get 2
      i32.load8_u offset=38
      i32.store8 offset=67
      local.get 2
      local.get 3
      i32.store offset=76
      local.get 2
      local.get 1
      i32.store offset=72
      local.get 2
      local.get 0
      i32.store offset=68
      i32.const 1065572
      i32.const 43
      local.get 2
      i32.const 64
      i32.add
      i32.const 1065556
      i32.const 1065616
      call $core::result::unwrap_failed
      unreachable
    end
    block ;; label = @1
      block ;; label = @2
        block ;; label = @3
          block ;; label = @4
            block ;; label = @5
              block ;; label = @6
                block ;; label = @7
                  block ;; label = @8
                    block ;; label = @9
                      block ;; label = @10
                        block ;; label = @11
                          local.get 1
                          i32.load8_u
                          local.tee 6
                          br_table 6 (;@5;) 6 (;@5;) 0 (;@11;) 1 (;@10;) 2 (;@9;) 3 (;@8;) 4 (;@7;) 5 (;@6;) 6 (;@5;)
                        end
                        local.get 1
                        i64.load offset=8
                        local.set 9
                        br 9 (;@1;)
                      end
                      local.get 1
                      i32.load offset=4
                      local.tee 5
                      local.get 5
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 7
                      i32.store
                      local.get 7
                      i32.eqz
                      br_if 6 (;@3;)
                      br 7 (;@2;)
                    end
                    local.get 1
                    i32.load offset=4
                    local.tee 5
                    local.get 5
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 7
                    i32.store
                    local.get 7
                    i32.eqz
                    br_if 5 (;@3;)
                    local.get 1
                    i64.load8_u offset=12
                    i64.const 32
                    i64.shl
                    local.get 1
                    i64.load32_u offset=8
                    i64.or
                    local.set 9
                    br 7 (;@1;)
                  end
                  local.get 1
                  i32.load offset=4
                  local.tee 5
                  local.get 5
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 7
                  i32.store
                  local.get 7
                  br_if 5 (;@2;)
                  br 4 (;@3;)
                end
                local.get 1
                i32.load offset=4
                local.tee 5
                local.get 5
                i32.load
                i32.const 1
                i32.add
                local.tee 7
                i32.store
                local.get 7
                br_if 4 (;@2;)
                br 3 (;@3;)
              end
              local.get 1
              i32.load offset=4
              local.tee 5
              local.get 5
              i32.load
              i32.const 1
              i32.add
              local.tee 7
              i32.store
              local.get 7
              i32.eqz
              br_if 2 (;@3;)
              br 1 (;@4;)
            end
            local.get 1
            i32.load8_u offset=1
            local.set 7
          end
          br 2 (;@1;)
        end
        unreachable
      end
      local.get 1
      i64.load32_u offset=8
      local.set 9
    end
    local.get 2
    i32.const 0
    i32.store8 offset=56
    local.get 2
    local.get 9
    i64.store offset=80
    local.get 2
    local.get 5
    i32.store offset=76
    local.get 2
    local.get 7
    i32.store8 offset=73
    local.get 2
    local.get 6
    i32.store8 offset=72
    local.get 2
    i64.const 4294967296
    i64.store offset=64
    local.get 2
    local.get 2
    i32.const 56
    i32.add
    i32.store offset=88
    local.get 2
    i32.const 16
    i32.add
    local.get 2
    i32.const 64
    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=44
    local.get 2
    local.get 2
    i32.load offset=16
    local.tee 5
    i32.store offset=40
    block ;; label = @1
      block ;; label = @2
        local.get 2
        i32.load8_u offset=56
        i32.const 1
        i32.ne
        br_if 0 (;@2;)
        local.get 5
        local.get 5
        i32.load
        i32.const -1
        i32.add
        local.tee 0
        i32.store
        local.get 0
        br_if 1 (;@1;)
        local.get 2
        i32.const 40
        i32.add
        call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
        br 1 (;@1;)
      end
      local.get 5
      i32.eqz
      br_if 0 (;@1;)
      i32.const 172
      i32.const 0
      local.get 5
      local.get 6
      i32.const 1064858
      i32.const 43
      call $<nanvm_lib::naive::function::Function>::new
      local.set 5
      local.get 2
      i32.const 0
      i32.store8 offset=56
      local.get 2
      local.get 5
      i32.store offset=84
      local.get 2
      i32.const 7
      i32.store8 offset=80
      local.get 2
      local.get 3
      i32.store offset=76
      local.get 2
      local.get 4
      i32.store offset=72
      local.get 2
      i64.const 4294967296
      i64.store offset=64
      local.get 2
      local.get 2
      i32.const 56
      i32.add
      i32.store offset=96
      local.get 2
      i32.const 8
      i32.add
      local.get 2
      i32.const 64
      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 4
      i32.store offset=44
      local.get 2
      local.get 2
      i32.load offset=8
      local.tee 5
      i32.store offset=40
      block ;; label = @2
        block ;; label = @3
          local.get 2
          i32.load8_u offset=56
          i32.const 1
          i32.ne
          br_if 0 (;@3;)
          local.get 5
          local.get 5
          i32.load
          i32.const -1
          i32.add
          local.tee 0
          i32.store
          local.get 0
          br_if 1 (;@2;)
          local.get 2
          i32.const 40
          i32.add
          call $"<alloc::rc::Rc<[(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)]>>::drop_slow"
          br 1 (;@2;)
        end
        local.get 5
        i32.eqz
        br_if 0 (;@2;)
        local.get 0
        local.get 4
        i32.store offset=16
        local.get 0
        local.get 5
        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 $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
        local.get 2
        i32.const 112
        i32.add
        global.set $__stack_pointer
        return
      end
      i32.const 1057428
      i32.const 43
      local.get 2
      i32.const 111
      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 111
    i32.add
    i32.const 1057412
    i32.const 1057472
    call $core::result::unwrap_failed
    unreachable
  )
  (func $"<nanvm_demos::samples::in_operator::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" (;588;) (type 4) (param i32 i32 i32 i32)
    (local i32 i32 i64 i32 i32 i32 f64)
    global.get $__stack_pointer
    i32.const 352
    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=68
    local.get 4
    local.get 2
    i32.store offset=64
    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=80
      local.get 4
      local.get 2
      i32.store offset=76
      local.get 4
      i32.const 6
      i32.store8 offset=72
      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 1
                            i32.load8_u offset=8
                            local.tee 5
                            br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
                          end
                          local.get 1
                          i64.load offset=16
                          local.set 6
                          br 9 (;@2;)
                        end
                        local.get 1
                        i32.load offset=12
                        local.tee 3
                        local.get 3
                        i32.load
                        i32.const 1
                        i32.add
                        local.tee 7
                        i32.store
                        local.get 7
                        i32.eqz
                        br_if 9 (;@1;)
                        br 7 (;@3;)
                      end
                      local.get 1
                      i32.load offset=12
                      local.tee 3
                      local.get 3
                      i32.load
                      i32.const 1
                      i32.add
                      local.tee 7
                      i32.store
                      local.get 7
                      i32.eqz
                      br_if 8 (;@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 6
                      br 7 (;@2;)
                    end
                    local.get 1
                    i32.load offset=12
                    local.tee 3
                    local.get 3
                    i32.load
                    i32.const 1
                    i32.add
                    local.tee 7
                    i32.store
                    local.get 7
                    br_if 5 (;@3;)
                    br 7 (;@1;)
                  end
                  local.get 1
                  i32.load offset=12
                  local.tee 3
                  local.get 3
                  i32.load
                  i32.const 1
                  i32.add
                  local.tee 7
                  i32.store
                  local.get 7
                  br_if 4 (;@3;)
                  br 6 (;@1;)
                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 5 (;@1;)
                br 1 (;@5;)
              end
              local.get 1
              i32.load8_u offset=9
              local.set 1
            end
            br 2 (;@2;)
          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 6
      end
      local.get 4
      local.get 6
      i64.store offset=192
      local.get 4
      local.get 3
      i32.store offset=188
      local.get 4
      local.get 1
      i32.store8 offset=185
      local.get 4
      local.get 5
      i32.store8 offset=184
      local.get 4
      i32.const 255
      i32.store8 offset=232
      local.get 4
      i32.const 0
      i32.store16 offset=304
      local.get 4
      i32.const 1065645
      i32.store offset=300
      local.get 4
      i32.const 1065643
      i32.store offset=296
      local.get 4
      local.get 4
      i32.const 232
      i32.add
      i32.store offset=308
      local.get 4
      i32.const 56
      i32.add
      local.get 4
      i32.const 296
      i32.add
      call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
      local.get 4
      local.get 4
      i32.load offset=60
      local.tee 1
      i32.store offset=156
      local.get 4
      local.get 4
      i32.load offset=56
      local.tee 3
      i32.store offset=152
      block ;; label = @2
        local.get 4
        i32.load8_u offset=232
        local.tee 5
        i32.const 255
        i32.eq
        br_if 0 (;@2;)
        local.get 4
        i32.load offset=236
        local.set 2
        local.get 4
        i32.load offset=240
        local.set 0
        local.get 4
        i32.load offset=244
        local.set 1
        local.get 4
        i32.load16_u offset=233 align=1
        local.set 7
        local.get 4
        i32.load8_u offset=235
        local.set 8
        local.get 3
        local.get 3
        i32.load
        i32.const -1
        i32.add
        local.tee 9
        i32.store
        local.get 4
        local.get 8
        i32.store8 offset=282
        local.get 4
        local.get 7
        i32.store16 offset=280
        block ;; label = @3
          local.get 9
          br_if 0 (;@3;)
          local.get 4
          i32.const 152
          i32.add
          call $"<alloc::rc::Rc<[u16]>>::drop_slow"
        end
        local.get 4
        local.get 5
        i32.store8 offset=296
        local.get 4
        local.get 4
        i32.load16_u offset=280
        i32.store16 offset=297 align=1
        local.get 4
        local.get 4
        i32.load8_u offset=282
        i32.store8 offset=299
        local.get 4
        local.get 1
        i32.store offset=308
        local.get 4
        local.get 0
        i32.store offset=304
        local.get 4
        local.get 2
        i32.store offset=300
        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 1
      i32.store offset=304
      local.get 4
      local.get 3
      i32.store offset=300
      local.get 4
      i32.const 3
      i32.store8 offset=296
      local.get 4
      i32.const 152
      i32.add
      local.get 4
      i32.const 184
      i32.add
      local.get 4
      i32.const 296
      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
                  block ;; label = @8
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=152
                      i32.const 255
                      i32.ne
                      br_if 0 (;@9;)
                      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
                      br 1 (;@8;)
                    end
                    local.get 4
                    local.get 4
                    i64.load offset=176
                    i64.store offset=320
                    local.get 4
                    local.get 4
                    i64.load offset=168
                    i64.store offset=312
                    local.get 4
                    local.get 4
                    i64.load offset=160
                    i64.store offset=304
                    local.get 4
                    local.get 4
                    i64.load offset=152
                    i64.store offset=296
                    local.get 4
                    i32.const 232
                    i32.add
                    local.get 4
                    i32.const 296
                    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=232
                        local.tee 3
                        i32.const 255
                        i32.ne
                        br_if 0 (;@10;)
                        i32.const 1
                        local.set 1
                        i32.const 0
                        local.set 3
                        br 1 (;@9;)
                      end
                      local.get 4
                      local.get 4
                      i64.load offset=234 align=2
                      i64.store offset=184
                      local.get 4
                      local.get 4
                      i64.load offset=240 align=2
                      i64.store offset=190 align=2
                      local.get 4
                      i32.load8_u offset=233
                      local.set 1
                    end
                    local.get 4
                    i32.const 296
                    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
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    local.get 1
                    i32.store8 offset=89
                    local.get 4
                    local.get 3
                    i32.store8 offset=88
                    local.get 4
                    local.get 4
                    i64.load offset=184
                    i64.store offset=90 align=2
                    local.get 4
                    local.get 4
                    i64.load offset=190 align=2
                    i64.store offset=96 align=2
                    local.get 4
                    i32.const 255
                    i32.store8 offset=232
                    local.get 4
                    i32.const 0
                    i32.store16 offset=304
                    local.get 4
                    i32.const 1065646
                    i32.store offset=300
                    local.get 4
                    i32.const 1065645
                    i32.store offset=296
                    local.get 4
                    local.get 4
                    i32.const 232
                    i32.add
                    i32.store offset=308
                    local.get 4
                    i32.const 48
                    i32.add
                    local.get 4
                    i32.const 296
                    i32.add
                    call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
                    local.get 4
                    local.get 4
                    i32.load offset=52
                    local.tee 1
                    i32.store offset=188
                    local.get 4
                    local.get 4
                    i32.load offset=48
                    local.tee 3
                    i32.store offset=184
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=232
                      local.tee 5
                      i32.const 255
                      i32.eq
                      br_if 0 (;@9;)
                      local.get 4
                      i32.load offset=236
                      local.set 2
                      local.get 4
                      i32.load offset=240
                      local.set 0
                      local.get 4
                      i32.load offset=244
                      local.set 1
                      local.get 4
                      i32.load16_u offset=233 align=1
                      local.set 7
                      local.get 4
                      i32.load8_u offset=235
                      local.set 8
                      local.get 3
                      local.get 3
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 9
                      i32.store
                      local.get 4
                      local.get 8
                      i32.store8 offset=282
                      local.get 4
                      local.get 7
                      i32.store16 offset=280
                      block ;; label = @10
                        local.get 9
                        br_if 0 (;@10;)
                        local.get 4
                        i32.const 184
                        i32.add
                        call $"<alloc::rc::Rc<[u16]>>::drop_slow"
                      end
                      local.get 4
                      local.get 5
                      i32.store8 offset=296
                      local.get 4
                      local.get 4
                      i32.load16_u offset=280
                      i32.store16 offset=297 align=1
                      local.get 4
                      local.get 4
                      i32.load8_u offset=282
                      i32.store8 offset=299
                      local.get 4
                      local.get 1
                      i32.store offset=308
                      local.get 4
                      local.get 0
                      i32.store offset=304
                      local.get 4
                      local.get 2
                      i32.store offset=300
                      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 1
                    i32.store offset=128
                    local.get 4
                    local.get 3
                    i32.store offset=124
                    local.get 4
                    i32.const 3
                    i32.store8 offset=120
                    local.get 4
                    i32.const 255
                    i32.store8 offset=232
                    local.get 4
                    i32.const 0
                    i32.store16 offset=304
                    local.get 4
                    i32.const 1065646
                    i32.store offset=300
                    local.get 4
                    i32.const 1065645
                    i32.store offset=296
                    local.get 4
                    local.get 4
                    i32.const 232
                    i32.add
                    i32.store offset=308
                    local.get 4
                    i32.const 40
                    i32.add
                    local.get 4
                    i32.const 296
                    i32.add
                    call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
                    local.get 4
                    local.get 4
                    i32.load offset=44
                    local.tee 1
                    i32.store offset=188
                    local.get 4
                    local.get 4
                    i32.load offset=40
                    local.tee 3
                    i32.store offset=184
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=232
                      local.tee 5
                      i32.const 255
                      i32.eq
                      br_if 0 (;@9;)
                      local.get 4
                      i32.load offset=236
                      local.set 2
                      local.get 4
                      i32.load offset=240
                      local.set 0
                      local.get 4
                      i32.load offset=244
                      local.set 1
                      local.get 4
                      i32.load16_u offset=233 align=1
                      local.set 7
                      local.get 4
                      i32.load8_u offset=235
                      local.set 8
                      local.get 3
                      local.get 3
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 9
                      i32.store
                      local.get 4
                      local.get 8
                      i32.store8 offset=138
                      local.get 4
                      local.get 7
                      i32.store16 offset=136
                      block ;; label = @10
                        local.get 9
                        br_if 0 (;@10;)
                        local.get 4
                        i32.const 184
                        i32.add
                        call $"<alloc::rc::Rc<[u16]>>::drop_slow"
                      end
                      local.get 4
                      local.get 5
                      i32.store8 offset=296
                      local.get 4
                      local.get 4
                      i32.load16_u offset=136
                      i32.store16 offset=297 align=1
                      local.get 4
                      local.get 4
                      i32.load8_u offset=138
                      i32.store8 offset=299
                      local.get 4
                      local.get 1
                      i32.store offset=308
                      local.get 4
                      local.get 0
                      i32.store offset=304
                      local.get 4
                      local.get 2
                      i32.store offset=300
                      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
                    i32.const 0
                    i32.store8 offset=184
                    local.get 4
                    i64.const 4607182418800017408
                    i64.store offset=320
                    local.get 4
                    i32.const 2
                    i32.store8 offset=312
                    local.get 4
                    local.get 1
                    i32.store offset=308
                    local.get 4
                    local.get 3
                    i32.store offset=304
                    local.get 4
                    i64.const 4294967296
                    i64.store offset=296
                    local.get 4
                    local.get 4
                    i32.const 184
                    i32.add
                    i32.store offset=328
                    local.get 4
                    i32.const 32
                    i32.add
                    local.get 4
                    i32.const 296
                    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 4
                    local.get 4
                    i32.load offset=36
                    local.tee 5
                    i32.store offset=236
                    local.get 4
                    local.get 4
                    i32.load offset=32
                    local.tee 3
                    i32.store offset=232
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=184
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 3
                      local.get 3
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 2
                      i32.store
                      local.get 2
                      br_if 7 (;@2;)
                      local.get 4
                      i32.const 232
                      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 7 (;@2;)
                    end
                    local.get 3
                    i32.eqz
                    br_if 6 (;@2;)
                    local.get 4
                    i32.const 0
                    i32.store8 offset=232
                    local.get 4
                    i32.const 24
                    i32.add
                    local.get 4
                    i32.const 232
                    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 4
                    local.get 4
                    i32.load offset=28
                    local.tee 7
                    i32.store offset=300
                    local.get 4
                    local.get 4
                    i32.load offset=24
                    local.tee 1
                    i32.store offset=296
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=232
                      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 6 (;@3;)
                      local.get 4
                      i32.const 296
                      i32.add
                      call $"<alloc::rc::Rc<[(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)]>>::drop_slow"
                      br 6 (;@3;)
                    end
                    local.get 1
                    i32.eqz
                    br_if 5 (;@3;)
                    local.get 4
                    i32.const 0
                    i32.store8 offset=184
                    local.get 4
                    local.get 7
                    i32.store offset=328
                    local.get 4
                    local.get 1
                    i32.store offset=324
                    local.get 4
                    i32.const 5
                    i32.store8 offset=320
                    local.get 4
                    local.get 5
                    i32.store offset=312
                    local.get 4
                    local.get 3
                    i32.store offset=308
                    local.get 4
                    i32.const 5
                    i32.store8 offset=304
                    local.get 4
                    i64.const 8589934592
                    i64.store offset=296
                    local.get 4
                    local.get 4
                    i32.const 184
                    i32.add
                    i32.store offset=336
                    local.get 4
                    i32.const 16
                    i32.add
                    local.get 4
                    i32.const 296
                    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 1
                    i32.store offset=236
                    local.get 4
                    local.get 4
                    i32.load offset=16
                    local.tee 3
                    i32.store offset=232
                    block ;; label = @9
                      local.get 4
                      i32.load8_u offset=184
                      i32.const 1
                      i32.ne
                      br_if 0 (;@9;)
                      local.get 3
                      local.get 3
                      i32.load
                      i32.const -1
                      i32.add
                      local.tee 2
                      i32.store
                      local.get 2
                      br_if 5 (;@4;)
                      local.get 4
                      i32.const 232
                      i32.add
                      call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                      br 5 (;@4;)
                    end
                    local.get 3
                    i32.eqz
                    br_if 4 (;@4;)
                    local.get 4
                    local.get 1
                    i32.store offset=288
                    local.get 4
                    local.get 3
                    i32.store offset=284
                    local.get 4
                    i32.const 6
                    i32.store8 offset=280
                    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=72
                                        local.tee 1
                                        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=80
                                      local.set 6
                                      br 8 (;@9;)
                                    end
                                    local.get 4
                                    i32.load offset=76
                                    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 15 (;@1;)
                                    br 6 (;@10;)
                                  end
                                  local.get 4
                                  i32.load offset=76
                                  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 14 (;@1;)
                                  local.get 4
                                  i64.load8_u offset=84
                                  i64.const 32
                                  i64.shl
                                  local.get 4
                                  i64.load32_u offset=80
                                  i64.or
                                  local.set 6
                                  br 6 (;@9;)
                                end
                                local.get 4
                                i32.load offset=76
                                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 13 (;@1;)
                                br 4 (;@10;)
                              end
                              local.get 4
                              i32.load offset=76
                              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 12 (;@1;)
                              br 3 (;@10;)
                            end
                            local.get 4
                            i32.load offset=76
                            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 11 (;@1;)
                            br 1 (;@11;)
                          end
                          local.get 4
                          i32.load8_u offset=73
                          local.set 5
                        end
                        br 1 (;@9;)
                      end
                      local.get 4
                      i64.load32_u offset=80
                      local.set 6
                    end
                    local.get 4
                    local.get 6
                    i64.store offset=240
                    local.get 4
                    local.get 3
                    i32.store offset=236
                    local.get 4
                    local.get 5
                    i32.store8 offset=233
                    local.get 4
                    local.get 1
                    i32.store8 offset=232
                    local.get 4
                    i64.const 0
                    i64.store offset=304
                    local.get 4
                    i32.const 2
                    i32.store8 offset=296
                    local.get 4
                    i32.const 184
                    i32.add
                    local.get 4
                    i32.const 232
                    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
                      block ;; label = @10
                        local.get 4
                        i32.load8_u offset=184
                        i32.const 255
                        i32.ne
                        br_if 0 (;@10;)
                        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
                        local.get 4
                        i32.const 280
                        i32.add
                        call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        br 1 (;@9;)
                      end
                      local.get 4
                      local.get 4
                      i64.load offset=208
                      i64.store offset=320
                      local.get 4
                      local.get 4
                      i64.load offset=200
                      i64.store offset=312
                      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
                      local.get 4
                      i32.const 232
                      i32.add
                      local.get 4
                      i32.const 296
                      i32.add
                      call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                      block ;; label = @10
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=232
                          i32.const 255
                          i32.eq
                          br_if 0 (;@11;)
                          local.get 4
                          local.get 4
                          i64.load offset=240
                          i64.store offset=224
                          local.get 4
                          local.get 4
                          i64.load offset=232
                          i64.store offset=216
                          br 1 (;@10;)
                        end
                        local.get 4
                        i32.const 256
                        i32.store16 offset=216
                      end
                      local.get 4
                      i32.const 296
                      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
                      call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                      local.get 4
                      i32.const 296
                      i32.add
                      local.get 4
                      i32.const 216
                      i32.add
                      call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::to_numeric
                      local.get 4
                      f64.load offset=312
                      local.set 10
                      local.get 4
                      i32.load offset=308
                      local.set 3
                      local.get 4
                      i32.load offset=304
                      local.set 1
                      block ;; label = @10
                        local.get 4
                        i32.load offset=296
                        br_if 0 (;@10;)
                        block ;; label = @11
                          local.get 1
                          i32.const 1
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 4
                          local.get 10
                          f64.store offset=300 align=4
                          local.get 4
                          local.get 3
                          i32.store offset=296
                          local.get 4
                          i32.const 296
                          i32.add
                          call $<nanvm_lib::vm::bigint::BigInt<nanvm_lib::naive::Naive>>::to_number
                          local.set 10
                          local.get 3
                          local.get 3
                          i32.load
                          i32.const -1
                          i32.add
                          local.tee 1
                          i32.store
                          local.get 1
                          br_if 0 (;@11;)
                          local.get 4
                          i32.const 296
                          i32.add
                          call $"<alloc::rc::Rc<[u64]>>::drop_slow"
                        end
                        local.get 4
                        local.get 10
                        f64.store offset=144
                        local.get 4
                        i32.const 2
                        i32.store offset=136
                        local.get 4
                        i32.const 232
                        i32.add
                        local.get 4
                        i32.const 280
                        i32.add
                        local.get 4
                        i32.const 136
                        i32.add
                        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=232
                          i32.const 255
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 0
                          local.get 4
                          i64.load offset=248
                          i64.store offset=16
                          local.get 0
                          local.get 4
                          i64.load offset=240
                          i64.store offset=8
                          local.get 0
                          i64.const 1
                          i64.store
                          br 2 (;@9;)
                        end
                        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
                        local.get 4
                        i64.load offset=240
                        i64.store offset=304
                        local.get 4
                        local.get 4
                        i64.load offset=232
                        i64.store offset=296
                        local.get 4
                        i32.const 280
                        i32.add
                        local.get 4
                        i32.const 296
                        i32.add
                        call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
                        i32.const 0
                        local.set 3
                        i32.const 1
                        local.set 1
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=280
                          local.tee 5
                          i32.const 255
                          i32.eq
                          br_if 0 (;@11;)
                          local.get 4
                          local.get 4
                          i64.load offset=282 align=2
                          i64.store offset=264
                          local.get 4
                          local.get 4
                          i64.load offset=288 align=2
                          i64.store offset=270 align=2
                          local.get 4
                          i32.load8_u offset=281
                          local.set 1
                          local.get 5
                          local.set 3
                        end
                        local.get 4
                        i32.const 296
                        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
                        call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                        local.get 4
                        local.get 4
                        i64.load offset=128
                        i64.store offset=312
                        local.get 4
                        local.get 4
                        i64.load offset=120
                        i64.store offset=304
                        local.get 4
                        i32.const 0
                        i32.store8 offset=120
                        local.get 4
                        local.get 1
                        i32.store8 offset=321
                        local.get 4
                        local.get 3
                        i32.store8 offset=320
                        local.get 4
                        i64.const 8589934592
                        i64.store offset=296
                        local.get 4
                        local.get 4
                        i64.load offset=264
                        i64.store offset=322 align=2
                        local.get 4
                        local.get 4
                        i64.load offset=270 align=2
                        i64.store offset=328 align=2
                        local.get 4
                        local.get 4
                        i32.const 120
                        i32.add
                        i32.store offset=336
                        local.get 4
                        i32.const 8
                        i32.add
                        local.get 4
                        i32.const 296
                        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 1
                        i32.store offset=284
                        local.get 4
                        local.get 4
                        i32.load offset=8
                        local.tee 3
                        i32.store offset=280
                        block ;; label = @11
                          local.get 4
                          i32.load8_u offset=120
                          i32.const 1
                          i32.ne
                          br_if 0 (;@11;)
                          local.get 3
                          local.get 3
                          i32.load
                          i32.const -1
                          i32.add
                          local.tee 2
                          i32.store
                          local.get 2
                          br_if 6 (;@5;)
                          local.get 4
                          i32.const 280
                          i32.add
                          call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
                          br 6 (;@5;)
                        end
                        local.get 3
                        i32.eqz
                        br_if 5 (;@5;)
                        local.get 4
                        local.get 1
                        i32.store offset=112
                        local.get 4
                        local.get 3
                        i32.store offset=108
                        local.get 4
                        i32.const 6
                        i32.store8 offset=104
                        local.get 0
                        local.get 4
                        i32.const 88
                        i32.add
                        local.get 4
                        i32.const 104
                        i32.add
                        call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::call
                        local.get 4
                        i32.const 72
                        i32.add
                        call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<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 4 (;@6;)
                        br 3 (;@7;)
                      end
                      local.get 0
                      local.get 10
                      f64.store offset=16
                      local.get 0
                      local.get 3
                      i32.store offset=12
                      local.get 0
                      local.get 1
                      i32.store offset=8
                      local.get 0
                      i64.const 1
                      i64.store
                      local.get 4
                      i32.const 280
                      i32.add
                      call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    end
                    local.get 4
                    i32.const 120
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                    local.get 4
                    i32.const 88
                    i32.add
                    call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
                  end
                  local.get 4
                  i32.const 72
                  i32.add
                  call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<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 (;@6;)
                end
                local.get 4
                i32.const 64
                i32.add
                call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
              end
              local.get 4
              i32.const 352
              i32.add
              global.set $__stack_pointer
              return
            end
            i32.const 1057428
            i32.const 43
            local.get 4
            i32.const 351
            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 351
          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 351
        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 351
      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.

  • ./computed-key/proof.f.mjs
  • ./proof.f.mjs