In FunctionalScript fjs compile accepts this module, and it runs as JavaScript and as WebAssembly alike.
A FunctionalScript module and what fjs compile makes of it: the expression graph it lowers to, the Rust it compiles to on the NaNVM runtime, and the WebAssembly that Rust builds to. Run calls its default export with 2, then 5, first as the JavaScript it already is and then as WebAssembly, and shows what each call returned or threw and how long one call takes, timed over 1000 calls.
FunctionalScript source:
/**
* The example of [`README.md`](./README.md) (Call Statements) as a function
* of one number, for the page's WASM demo: a call statement in a body: an
* assertion that holds for `2` and fails for `5`.
*
* @module
*/
/** @type {(...a: readonly unknown[]) => undefined} */
const assert = (...a ) => a [0 ] ? undefined : (() => { throw a [1 ]; })();
/** @type {(a: readonly number[], i: number) => number | undefined} */
const at = (a , i ) => {
assert (i < a .length , "out of range" );
return a .at (i );
};
/** @type {(...a: readonly number[]) => unknown} */
export default (...a ) => at ([1 , 2 , 3 ], a [0 ]);
Expression graph (EDAG) that fjs compile lowers it to:
=> length frame 0 body 0 => () => length frame 0 body 2 => , () callee ... frame 0 [] => length body 0 ?: , anchor result [] 0 1 ?: cond then else . undefined throw () callee ... frame 0 [] . () obj key ... arg 0 "at" [] [] 0 1 2 1 2 3 . obj idx rest 0 . obj idx rest 0 throw value [] 0 1 < "out of range" [] 0 arg 1 . obj idx rest 1 < left right arg 1 . . obj key arg 0 "length" The same graph, as fjs compile writes it to a .edag.data.js file:
const $0 =["rest" ];const $1 =["arg" ,1 ];const $2 =["arg" ,0 ];export default ["{}" ,[[":" ,"default" ,["=>" ,0 ,[["=>" ,2 ,[["=>" ,0 ,[],["?:" ,["." ,$0 ,0 ],["undefined" ],["throw" ,["." ,$0 ,1 ]]]]],["," ,[["()" ,["frame" ,0 ],[["<" ,$1 ,["." ,$2 ,"length" ]],"out of range" ]],["." ,$2 ,"at" ,["|()" ,[$1 ]]]]]]],["()" ,["frame" ,0 ],[["[]" ,[1 ,2 ,3 ]],["." ,["rest" ],0 ]]]]]]];Rust that fjs compile writes from it, on the NaNVM runtime:
// @generated by `fjs compile`. Do not edit: recompile the source module instead.
use nanvm_lib::vm::unstable::{f64_any, string_any, string_key};
use nanvm_lib::vm::{Any, IStaticFunction, Nullish, ToAny, ToArray, ToObject};
#[rustfmt::skip]
#[allow(clippy::if_same_then_else)]
pub fn module<A: IStaticFunction>(runtime: Any<A>) -> Result<Any<A>, Any<A>> {
let _b6: Any<A> = A::static_function(|_self, _args| {
let _b369: Any<A> = _args.rest(0).to_any();
if Any::<A>::to_boolean((Any::dot(_b369.clone(), f64_any(0x0000000000000000)).end())?) { Ok(Nullish::Undefined.to_any()) } else { Err((Any::dot(_b369.clone(), f64_any(0x3ff0000000000000)).end())?) }
}, 0, [runtime.clone()].to_array(), Some("(...$0)=>$0[0]?undefined:(()=>{throw $0[1];})()")).to_any();
Ok([(string_key("default"), {
let _b15: Any<A> = A::static_function(|_self, _args| {
let _b1288: Any<A> = (Any::call(A::frame(_self)[0].clone(), [(Any::lt(_args.argument(1), (Any::dot(_args.argument(0), string_any("length")).end())?))?, string_any("out of range")].to_array().to_any()))?;
Any::dot(_args.argument(0), string_any("at")).end_call(&A::frame(_self)[1], || Ok([_args.argument(1)].to_array().to_any()))
}, 2, [_b6.clone(), runtime.clone()].to_array(), Some("($1,$2)=>{const $3=$0($2<$1.length,\"out of range\");return $1.at($2);}")).to_any();
A::static_function(|_self, _args| {
let _b1194: Any<A> = _args.rest(0).to_any();
Any::call(A::frame(_self)[0].clone(), [[f64_any(0x3ff0000000000000), f64_any(0x4000000000000000), f64_any(0x4008000000000000)].to_array().to_any(), (Any::dot(_b1194.clone(), f64_any(0x0000000000000000)).end())?].to_array().to_any())
}, 0, [_b15.clone(), runtime.clone()].to_array(), Some("(...$1)=>$0([1,2,3],$1[0])")).to_any()
})].to_object().to_any())
}
WebAssembly text (WAT) of the functions compiled from this source, without the NaNVM runtime:
(func $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#1}::{closure#0}>" (;560;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i64 )
global.get $__stack_pointer
i32.const 144
i32.sub
local.tee 4
global.set $__stack_pointer
block ;; label = @1
block ;; label = @2
block ;; label = @3
local.get 1
i32.load8_u
local.tee 5
i32.const 255
i32.ne
br_if 0 (;@3;)
local.get 0
i64.const 1
i64.store
local.get 0
local.get 1
i64.load offset=16
i64.store offset=16
local.get 0
local.get 1
i64.load offset=8
i64.store offset=8
br 1 (;@2;)
end
local.get 4
local.get 1
i64.load offset=24
i64.store offset=40
local.get 4
local.get 5
i32.store8 offset=16
local.get 4
local.get 1
i64.load offset=16 align=1
i64.store offset=32 align=1
local.get 4
local.get 1
i64.load offset=9 align=1
i64.store offset=25 align=1
local.get 4
local.get 1
i64.load offset=1 align=1
i64.store offset=17 align=1
local.get 4
i32.const 48
i32.add
local.get 4
i32.const 16
i32.add
local.get 2
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::is_nullish
block ;; label = @3
local.get 4
i32.load8_u offset=48
local.tee 1
i32.const 255
i32.eq
br_if 0 (;@3;)
local.get 0
local.get 4
i32.load8_u offset=51
i32.store8 offset=11
local.get 0
local.get 4
i32.load16_u offset=49 align=1
i32.store16 offset=9 align=1
local.get 4
i64.load offset=52 align=4
local.set 6
local.get 0
local.get 4
i32.load offset=60
i32.store offset=20
local.get 0
local.get 6
i64.store offset=12 align=4
local.get 0
local.get 1
i32.store8 offset=8
local.get 0
i64.const 1
i64.store
local.get 4
local.get 4
i64.load offset=40
i64.store offset=72
local.get 4
local.get 4
i64.load offset=32
i64.store offset=64
local.get 4
local.get 4
i64.load offset=24
i64.store offset=56
local.get 4
local.get 4
i64.load offset=16
i64.store offset=48
local.get 4
local.get 2
i32.store offset=80
local.get 4
i32.const 48
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 64
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
br 1 (;@2;)
end
local.get 4
i32.const 56
i32.add
local.get 3
i32.const 1
call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
local.get 4
i32.const 0
i32.store8 offset=88
local.get 4
i64.const 4294967296
i64.store offset=48
local.get 4
local.get 4
i32.const 88
i32.add
i32.store offset=72
local.get 4
i32.const 8
i32.add
local.get 4
i32.const 48
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 1>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=12
local.tee 5
i32.store offset=108
local.get 4
local.get 4
i32.load offset=8
local.tee 1
i32.store offset=104
block ;; label = @3
local.get 4
i32.load8_u offset=88
i32.const 1
i32.ne
br_if 0 (;@3;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 2 (;@1;)
local.get 4
i32.const 104
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 2 (;@1;)
end
local.get 1
i32.eqz
br_if 1 (;@1;)
local.get 4
local.get 5
i32.store offset=96
local.get 4
local.get 1
i32.store offset=92
local.get 4
i32.const 6
i32.store8 offset=88
local.get 4
local.get 4
i64.load offset=40
i64.store offset=128
local.get 4
local.get 4
i64.load offset=32
i64.store offset=120
local.get 4
local.get 4
i64.load offset=24
i64.store offset=112
local.get 4
local.get 4
i64.load offset=16
i64.store offset=104
local.get 0
local.get 4
i32.const 104
i32.add
local.get 2
local.get 4
i32.const 88
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::call
end
local.get 4
i32.const 144
i32.add
global.set $__stack_pointer
return
end
i32.const 1057428
i32.const 43
local.get 4
i32.const 143
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
)
(func $nanvm_demos::samples::call_statements::module::<nanvm_lib::naive::Naive> (;643;) (type 1 ) (param i32 i32 )
(local i32 i32 i64 i32 i32 i32 i32 i32 )
global.get $__stack_pointer
i32.const 144
i32.sub
local.tee 2
global.set $__stack_pointer
block ;; label = @1
block ;; label = @2
block ;; label = @3
block ;; label = @4
block ;; label = @5
block ;; label = @6
block ;; label = @7
block ;; label = @8
block ;; label = @9
block ;; label = @10
block ;; label = @11
local.get 1
i32.load8_u
local.tee 3
br_table 6 (;@5;) 6 (;@5;) 0 (;@11;) 1 (;@10;) 2 (;@9;) 3 (;@8;) 4 (;@7;) 5 (;@6;) 6 (;@5;)
end
local.get 1
i64.load offset=8
local.set 4
br 8 (;@2;)
end
local.get 1
i32.load offset=4
local.tee 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 8 (;@1;)
br 6 (;@3;)
end
local.get 1
i32.load offset=4
local.tee 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 7 (;@1;)
local.get 1
i64.load8_u offset=12
i64.const 32
i64.shl
local.get 1
i64.load32_u offset=8
i64.or
local.set 4
br 6 (;@2;)
end
local.get 1
i32.load offset=4
local.tee 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
br_if 4 (;@3;)
br 6 (;@1;)
end
local.get 1
i32.load offset=4
local.tee 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
br_if 3 (;@3;)
br 5 (;@1;)
end
local.get 1
i32.load offset=4
local.tee 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 4 (;@1;)
br 1 (;@4;)
end
local.get 1
i32.load8_u offset=1
local.set 6
end
br 1 (;@2;)
end
local.get 1
i64.load32_u offset=8
local.set 4
end
local.get 2
i32.const 0
i32.store8 offset=32
local.get 2
local.get 4
i64.store offset=104
local.get 2
local.get 5
i32.store offset=100
local.get 2
local.get 6
i32.store8 offset=97
local.get 2
local.get 3
i32.store8 offset=96
local.get 2
i64.const 4294967296
i64.store offset=88
local.get 2
local.get 2
i32.const 32
i32.add
i32.store offset=112
local.get 2
i32.const 24
i32.add
local.get 2
i32.const 88
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 1>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=28
local.tee 6
i32.store offset=68
local.get 2
local.get 2
i32.load offset=24
local.tee 5
i32.store offset=64
block ;; label = @2
block ;; label = @3
local.get 2
i32.load8_u offset=32
i32.const 1
i32.ne
br_if 0 (;@3;)
local.get 5
local.get 5
i32.load
i32.const -1
i32.add
local.tee 1
i32.store
local.get 1
br_if 1 (;@2;)
local.get 2
i32.const 64
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 1 (;@2;)
end
local.get 5
i32.eqz
br_if 0 (;@2;)
local.get 2
i32.const 184
i32.const 0
local.get 5
local.get 6
i32.const 1066266
i32.const 47
call $<nanvm_lib::naive::function::Function>::new
local.tee 5
i32.store offset=36
local.get 2
i32.const 7
i32.store8 offset=32
local.get 2
i32.const 0
i32.store16 offset=60
local.get 2
i32.const 1066166
i32.store offset=56
local.get 2
i32.const 1066159
i32.store offset=52
local.get 2
i32.const 88
i32.add
local.get 2
i32.const 52
i32.add
call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
block ;; label = @3
block ;; label = @4
block ;; label = @5
local.get 2
i32.load8_u offset=88
local.tee 6
i32.const 255
i32.ne
br_if 0 (;@5;)
local.get 2
i32.load offset=96
local.set 7
local.get 2
i32.load offset=92
local.set 8
local.get 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 4 (;@1;)
block ;; label = @6
block ;; label = @7
block ;; label = @8
block ;; label = @9
block ;; label = @10
block ;; label = @11
block ;; label = @12
block ;; label = @13
local.get 3
br_table 6 (;@7;) 6 (;@7;) 0 (;@13;) 1 (;@12;) 2 (;@11;) 3 (;@10;) 4 (;@9;) 5 (;@8;) 6 (;@7;)
end
local.get 1
i64.load offset=8
local.set 4
br 9 (;@3;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 10 (;@1;)
br 7 (;@4;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 9 (;@1;)
local.get 1
i64.load8_u offset=12
i64.const 32
i64.shl
local.get 1
i64.load32_u offset=8
i64.or
local.set 4
br 7 (;@3;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 8 (;@1;)
br 5 (;@4;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 7 (;@1;)
br 4 (;@4;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 6 (;@1;)
br 1 (;@6;)
end
local.get 1
i32.load8_u offset=1
local.set 9
end
br 2 (;@3;)
end
local.get 2
local.get 2
i32.load8_u offset=91
i32.store8 offset=67
local.get 2
local.get 2
i32.load16_u offset=89 align=1
i32.store16 offset=65 align=1
local.get 2
local.get 2
i32.load offset=100
i32.store offset=76
local.get 2
local.get 2
i64.load offset=92 align=4
i64.store offset=68 align=4
local.get 2
local.get 6
i32.store8 offset=64
i32.const 1065572
i32.const 43
local.get 2
i32.const 64
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 1
i64.load32_u offset=8
local.set 4
end
local.get 2
i32.const 0
i32.store8 offset=52
local.get 2
local.get 4
i64.store offset=120
local.get 2
local.get 6
i32.store offset=116
local.get 2
local.get 9
i32.store8 offset=113
local.get 2
local.get 3
i32.store8 offset=112
local.get 2
i64.const 0
i64.store offset=104
local.get 2
local.get 5
i32.store offset=100
local.get 2
i32.const 7
i32.store8 offset=96
local.get 2
i64.const 8589934592
i64.store offset=88
local.get 2
local.get 2
i32.const 52
i32.add
i32.store offset=128
local.get 2
i32.const 16
i32.add
local.get 2
i32.const 88
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=20
local.tee 6
i32.store offset=68
local.get 2
local.get 2
i32.load offset=16
local.tee 5
i32.store offset=64
block ;; label = @3
block ;; label = @4
local.get 2
i32.load8_u offset=52
i32.const 1
i32.ne
br_if 0 (;@4;)
local.get 5
local.get 5
i32.load
i32.const -1
i32.add
local.tee 1
i32.store
local.get 1
br_if 1 (;@3;)
local.get 2
i32.const 64
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 1 (;@3;)
end
local.get 5
i32.eqz
br_if 0 (;@3;)
local.get 2
i32.const 185
i32.const 2
local.get 5
local.get 6
i32.const 1066313
i32.const 69
call $<nanvm_lib::naive::function::Function>::new
local.tee 5
i32.store offset=68
local.get 2
i32.const 7
i32.store8 offset=64
local.get 5
local.get 5
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 2 (;@1;)
block ;; label = @4
block ;; label = @5
block ;; label = @6
block ;; label = @7
block ;; label = @8
block ;; label = @9
block ;; label = @10
block ;; label = @11
block ;; label = @12
block ;; label = @13
local.get 3
br_table 6 (;@7;) 6 (;@7;) 0 (;@13;) 1 (;@12;) 2 (;@11;) 3 (;@10;) 4 (;@9;) 5 (;@8;) 6 (;@7;)
end
local.get 1
i64.load offset=8
local.set 4
br 8 (;@4;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 10 (;@1;)
br 6 (;@5;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 9 (;@1;)
local.get 1
i64.load8_u offset=12
i64.const 32
i64.shl
local.get 1
i64.load32_u offset=8
i64.or
local.set 4
br 6 (;@4;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 8 (;@1;)
br 4 (;@5;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 7 (;@1;)
br 3 (;@5;)
end
local.get 1
i32.load offset=4
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 9
i32.store
local.get 9
i32.eqz
br_if 6 (;@1;)
br 1 (;@6;)
end
local.get 1
i32.load8_u offset=1
local.set 9
end
br 1 (;@4;)
end
local.get 1
i64.load32_u offset=8
local.set 4
end
local.get 2
i32.const 0
i32.store8 offset=87
local.get 2
local.get 4
i64.store offset=120
local.get 2
local.get 6
i32.store offset=116
local.get 2
local.get 9
i32.store8 offset=113
local.get 2
local.get 3
i32.store8 offset=112
local.get 2
local.get 5
i32.store offset=100
local.get 2
i32.const 7
i32.store8 offset=96
local.get 2
i64.const 8589934592
i64.store offset=88
local.get 2
local.get 2
i32.const 87
i32.add
i32.store offset=128
local.get 2
i32.const 8
i32.add
local.get 2
i32.const 88
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=12
local.tee 5
i32.store offset=56
local.get 2
local.get 2
i32.load offset=8
local.tee 3
i32.store offset=52
block ;; label = @4
block ;; label = @5
local.get 2
i32.load8_u offset=87
i32.const 1
i32.ne
br_if 0 (;@5;)
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 1
i32.store
local.get 1
br_if 1 (;@4;)
local.get 2
i32.const 52
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 1 (;@4;)
end
local.get 3
i32.eqz
br_if 0 (;@4;)
i32.const 186
i32.const 0
local.get 3
local.get 5
i32.const 1066382
i32.const 26
call $<nanvm_lib::naive::function::Function>::new
local.set 3
local.get 2
i32.const 64
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
i32.const 0
i32.store8 offset=52
local.get 2
local.get 3
i32.store offset=108
local.get 2
i32.const 7
i32.store8 offset=104
local.get 2
local.get 7
i32.store offset=100
local.get 2
local.get 8
i32.store offset=96
local.get 2
i64.const 4294967296
i64.store offset=88
local.get 2
local.get 2
i32.const 52
i32.add
i32.store offset=120
local.get 2
local.get 2
i32.const 88
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), 1>, core::result::Result<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=4
local.tee 5
i32.store offset=68
local.get 2
local.get 2
i32.load
local.tee 3
i32.store offset=64
block ;; label = @5
block ;; label = @6
local.get 2
i32.load8_u offset=52
i32.const 1
i32.ne
br_if 0 (;@6;)
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 1
i32.store
local.get 1
br_if 1 (;@5;)
local.get 2
i32.const 64
i32.add
call $"<alloc::rc::Rc<[(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)]>>::drop_slow"
br 1 (;@5;)
end
local.get 3
i32.eqz
br_if 0 (;@5;)
local.get 0
local.get 5
i32.store offset=16
local.get 0
local.get 3
i32.store offset=12
local.get 0
i32.const 5
i32.store8 offset=8
local.get 0
i64.const 0
i64.store
local.get 2
i32.const 32
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 1
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
i32.const 144
i32.add
global.set $__stack_pointer
return
end
i32.const 1057428
i32.const 43
local.get 2
i32.const 143
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
i32.const 1057428
i32.const 43
local.get 2
i32.const 143
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
i32.const 1057428
i32.const 43
local.get 2
i32.const 143
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
i32.const 1057428
i32.const 43
local.get 2
i32.const 143
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
unreachable
)
(func $"<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#0} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;644;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i64 i32 )
global.get $__stack_pointer
i32.const 160
i32.sub
local.tee 4
global.set $__stack_pointer
local.get 4
local.get 3
i32.store offset=12
local.get 4
local.get 2
i32.store offset=8
block ;; label = @1
block ;; label = @2
block ;; label = @3
block ;; label = @4
block ;; label = @5
block ;; label = @6
block ;; label = @7
block ;; label = @8
local.get 2
i32.load
local.tee 5
i32.const -1
i32.eq
br_if 0 (;@8;)
local.get 4
local.get 3
i32.store offset=24
local.get 4
local.get 2
i32.store offset=20
local.get 4
i32.const 6
i32.store8 offset=16
local.get 2
local.get 5
i32.const 2
i32.add
local.tee 5
i32.store
local.get 5
i32.eqz
br_if 0 (;@8;)
local.get 4
local.get 2
i32.store offset=84
local.get 4
i32.const 6
i32.store8 offset=80
local.get 4
local.get 3
i64.extend_i32_u
i64.store offset=88
local.get 4
i64.const 0
i64.store offset=120
local.get 4
i32.const 2
i32.store8 offset=112
local.get 4
i32.const 32
i32.add
local.get 4
i32.const 80
i32.add
local.get 4
i32.const 112
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @9
local.get 4
i32.load8_u offset=32
i32.const 255
i32.ne
br_if 0 (;@9;)
local.get 0
local.get 4
i64.load offset=48
i64.store offset=16
local.get 0
local.get 4
i64.load offset=40
i64.store offset=8
br 4 (;@5;)
end
local.get 4
local.get 4
i64.load offset=56
i64.store offset=136
local.get 4
local.get 4
i64.load offset=48
i64.store offset=128
local.get 4
local.get 4
i64.load offset=40
i64.store offset=120
local.get 4
local.get 4
i64.load offset=32
i64.store offset=112
local.get 4
i32.const 80
i32.add
local.get 4
i32.const 112
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @9
block ;; label = @10
local.get 4
i32.load8_u offset=80
i32.const 255
i32.eq
br_if 0 (;@10;)
local.get 4
local.get 4
i64.load offset=88
i64.store offset=72
local.get 4
local.get 4
i64.load offset=80
i64.store offset=64
br 1 (;@9;)
end
local.get 4
i32.const 256
i32.store16 offset=64
end
local.get 4
i32.const 112
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 128
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
block ;; label = @9
local.get 4
i32.const 64
i32.add
call $<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>::dispatch::<nanvm_lib::vm::boolean_coercion::BooleanCoercion>
br_if 0 (;@9;)
block ;; label = @10
block ;; label = @11
block ;; label = @12
block ;; label = @13
block ;; label = @14
block ;; label = @15
block ;; label = @16
block ;; label = @17
local.get 4
i32.load8_u offset=16
local.tee 5
br_table 6 (;@11;) 6 (;@11;) 0 (;@17;) 1 (;@16;) 2 (;@15;) 3 (;@14;) 4 (;@13;) 5 (;@12;) 6 (;@11;)
end
local.get 4
i64.load offset=24
local.set 6
br 10 (;@6;)
end
local.get 4
i32.load offset=20
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
i32.eqz
br_if 7 (;@8;)
br 8 (;@7;)
end
local.get 4
i32.load offset=20
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
i32.eqz
br_if 6 (;@8;)
local.get 4
i64.load8_u offset=28
i64.const 32
i64.shl
local.get 4
i64.load32_u offset=24
i64.or
local.set 6
br 8 (;@6;)
end
local.get 4
i32.load offset=20
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
br_if 6 (;@7;)
br 5 (;@8;)
end
local.get 4
i32.load offset=20
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
br_if 5 (;@7;)
br 4 (;@8;)
end
local.get 4
i32.load offset=20
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
i32.eqz
br_if 3 (;@8;)
br 1 (;@10;)
end
local.get 4
i32.load8_u offset=17
local.set 7
end
br 3 (;@6;)
end
local.get 0
i32.const 256
i32.store16 offset=8
i64.const 0
local.set 6
br 5 (;@3;)
end
unreachable
end
local.get 4
i64.load32_u offset=24
local.set 6
end
local.get 4
local.get 6
i64.store offset=152
local.get 4
local.get 3
i32.store offset=148
local.get 4
local.get 7
i32.store8 offset=145
local.get 4
local.get 5
i32.store8 offset=144
local.get 4
i64.const 4607182418800017408
i64.store offset=120
local.get 4
i32.const 2
i32.store8 offset=112
local.get 0
i32.const 8
i32.add
local.set 3
local.get 4
i32.const 80
i32.add
local.get 4
i32.const 144
i32.add
local.get 4
i32.const 112
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
local.get 4
i32.load8_u offset=80
i32.const 255
i32.ne
br_if 1 (;@4;)
local.get 3
local.get 4
i64.load offset=96
i64.store offset=8
local.get 3
local.get 4
i64.load offset=88
i64.store
end
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 16
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 3
i32.store
local.get 3
i32.eqz
br_if 2 (;@2;)
br 3 (;@1;)
end
local.get 4
local.get 4
i64.load offset=104
i64.store offset=136
local.get 4
local.get 4
i64.load offset=96
i64.store offset=128
local.get 4
local.get 4
i64.load offset=88
i64.store offset=120
local.get 4
local.get 4
i64.load offset=80
i64.store offset=112
local.get 4
i32.const 144
i32.add
local.get 4
i32.const 112
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @4
block ;; label = @5
local.get 4
i32.load8_u offset=144
i32.const 255
i32.eq
br_if 0 (;@5;)
local.get 3
local.get 4
i64.load offset=152
i64.store offset=8
local.get 3
local.get 4
i64.load offset=144
i64.store
br 1 (;@4;)
end
local.get 0
i32.const 256
i32.store16 offset=8
end
local.get 4
i32.const 112
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 128
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
i64.const 1
local.set 6
end
local.get 0
local.get 6
i64.store
local.get 4
i32.const 16
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 3
i32.store
local.get 3
br_if 1 (;@1;)
end
local.get 4
i32.const 8
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
end
local.get 4
i32.const 160
i32.add
global.set $__stack_pointer
)
(func $"<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#1} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;645;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i64 i32 )
global.get $__stack_pointer
i32.const 240
i32.sub
local.tee 4
global.set $__stack_pointer
local.get 1
i32.load
local.set 1
local.get 4
local.get 3
i32.store offset=12
local.get 4
local.get 2
i32.store offset=8
block ;; label = @1
block ;; label = @2
block ;; label = @3
block ;; label = @4
local.get 1
i32.load offset=16
i32.eqz
br_if 0 (;@4;)
block ;; label = @5
block ;; label = @6
block ;; label = @7
block ;; label = @8
block ;; label = @9
block ;; label = @10
block ;; label = @11
block ;; label = @12
local.get 1
i32.load offset=12
local.tee 2
i32.load8_u offset=8
local.tee 5
br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
end
local.get 2
i64.load offset=16
local.set 6
br 10 (;@1;)
end
local.get 2
i32.load offset=12
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
i32.eqz
br_if 7 (;@3;)
br 8 (;@2;)
end
local.get 2
i32.load offset=12
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
i32.eqz
br_if 6 (;@3;)
local.get 2
i64.load8_u offset=20
i64.const 32
i64.shl
local.get 2
i64.load32_u offset=16
i64.or
local.set 6
br 8 (;@1;)
end
local.get 2
i32.load offset=12
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
br_if 6 (;@2;)
br 5 (;@3;)
end
local.get 2
i32.load offset=12
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
br_if 5 (;@2;)
br 4 (;@3;)
end
local.get 2
i32.load offset=12
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 2
i32.store
local.get 2
i32.eqz
br_if 3 (;@3;)
br 1 (;@5;)
end
local.get 2
i32.load8_u offset=9
local.set 2
end
br 3 (;@1;)
end
i32.const 0
i32.const 0
i32.const 1063408
call $core::panicking::panic_bounds_check
unreachable
end
unreachable
end
local.get 2
i64.load32_u offset=16
local.set 6
end
local.get 4
local.get 6
i64.store offset=64
local.get 4
local.get 3
i32.store offset=60
local.get 4
local.get 2
i32.store8 offset=57
local.get 4
local.get 5
i32.store8 offset=56
local.get 4
i32.const 88
i32.add
local.get 4
i32.const 8
i32.add
i32.const 1
call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
local.get 4
i32.const 120
i32.add
local.get 4
i32.const 8
i32.add
i32.const 0
call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
local.get 4
i32.const 0
i32.store16 offset=112
local.get 4
i32.const 1067680
i32.store offset=108
local.get 4
i32.const 1067674
i32.store offset=104
local.get 4
i32.const 168
i32.add
local.get 4
i32.const 104
i32.add
call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
block ;; label = @1
block ;; label = @2
block ;; label = @3
block ;; label = @4
block ;; label = @5
block ;; label = @6
block ;; label = @7
block ;; label = @8
local.get 4
i32.load8_u offset=168
local.tee 3
i32.const 255
i32.ne
br_if 0 (;@8;)
local.get 4
local.get 4
i64.load offset=172 align=4
i64.store offset=220 align=4
local.get 4
i32.const 3
i32.store8 offset=216
local.get 4
i32.const 136
i32.add
local.get 4
i32.const 120
i32.add
local.get 4
i32.const 216
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @9
local.get 4
i32.load8_u offset=136
i32.const 255
i32.ne
br_if 0 (;@9;)
local.get 0
local.get 4
i64.load offset=152
i64.store offset=16
local.get 0
local.get 4
i64.load offset=144
i64.store offset=8
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 88
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 56
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
br 6 (;@3;)
end
local.get 4
local.get 4
i64.load offset=160
i64.store offset=192
local.get 4
local.get 4
i64.load offset=152
i64.store offset=184
local.get 4
local.get 4
i64.load offset=144
i64.store offset=176
local.get 4
local.get 4
i64.load offset=136
i64.store offset=168
local.get 4
i32.const 216
i32.add
local.get 4
i32.const 168
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @9
block ;; label = @10
local.get 4
i32.load8_u offset=216
i32.const 255
i32.eq
br_if 0 (;@10;)
local.get 4
local.get 4
i64.load offset=224
i64.store offset=112
local.get 4
local.get 4
i64.load offset=216
i64.store offset=104
br 1 (;@9;)
end
local.get 4
i32.const 256
i32.store16 offset=104
end
local.get 4
i32.const 168
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 184
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 168
i32.add
local.get 4
i32.const 88
i32.add
local.get 4
i32.const 104
i32.add
call $nanvm_lib::vm::any::relational::compare::<nanvm_lib::naive::Naive>
local.get 4
i32.load8_u offset=169
local.set 3
block ;; label = @9
local.get 4
i32.load8_u offset=168
local.tee 2
i32.const 255
i32.eq
br_if 0 (;@9;)
local.get 0
local.get 4
i64.load offset=176 align=2
i64.store offset=16 align=2
local.get 0
local.get 4
i64.load offset=170 align=2
i64.store offset=10 align=2
local.get 0
local.get 3
i32.store8 offset=9
local.get 0
local.get 2
i32.store8 offset=8
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 56
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
br 6 (;@3;)
end
local.get 4
i32.const 0
i32.store16 offset=128
local.get 4
i32.const 1067692
i32.store offset=124
local.get 4
i32.const 1067680
i32.store offset=120
local.get 4
i32.const 168
i32.add
local.get 4
i32.const 120
i32.add
call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
local.get 4
i32.load8_u offset=168
local.tee 2
i32.const 255
i32.ne
br_if 1 (;@7;)
local.get 4
i64.load offset=172 align=4
local.set 6
local.get 4
i32.const 0
i32.store8 offset=120
local.get 4
local.get 6
i64.store offset=196 align=4
local.get 4
i32.const 3
i32.store8 offset=192
local.get 4
local.get 3
i32.const 255
i32.and
i32.const 255
i32.eq
i32.store8 offset=177
local.get 4
i64.const 8589934592
i64.store offset=168
local.get 4
local.get 4
i32.const 120
i32.add
i32.store offset=208
local.get 4
i32.const 1
i32.store8 offset=176
local.get 4
local.get 4
i32.const 168
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=4
local.tee 5
i32.store offset=220
local.get 4
local.get 4
i32.load
local.tee 3
i32.store offset=216
block ;; label = @9
local.get 4
i32.load8_u offset=120
i32.const 1
i32.ne
br_if 0 (;@9;)
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 5 (;@4;)
local.get 4
i32.const 216
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 5 (;@4;)
end
local.get 3
i32.eqz
br_if 4 (;@4;)
local.get 4
i32.const 40
i32.add
local.set 2
local.get 4
local.get 5
i32.store offset=80
local.get 4
local.get 3
i32.store offset=76
local.get 4
i32.const 6
i32.store8 offset=72
local.get 4
i32.const 32
i32.add
local.get 4
i32.const 56
i32.add
local.get 4
i32.const 72
i32.add
call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::call
block ;; label = @9
local.get 4
i64.load offset=32
i64.const 1
i64.ne
br_if 0 (;@9;)
local.get 0
i64.const 1
i64.store
local.get 0
local.get 2
i64.load offset=8
i64.store offset=16
local.get 0
local.get 2
i64.load
i64.store offset=8
br 6 (;@3;)
end
local.get 4
local.get 2
i64.load offset=8
i64.store offset=24
local.get 4
local.get 2
i64.load
i64.store offset=16
local.get 4
i32.const 120
i32.add
local.get 4
i32.const 8
i32.add
i32.const 0
call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::argument
local.get 4
i32.const 0
i32.store16 offset=96
local.get 4
i32.const 1067694
i32.store offset=92
local.get 4
i32.const 1067692
i32.store offset=88
local.get 4
i32.const 168
i32.add
local.get 4
i32.const 88
i32.add
call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
local.get 4
i32.load8_u offset=168
local.tee 3
i32.const 255
i32.ne
br_if 2 (;@6;)
local.get 4
local.get 4
i64.load offset=172 align=4
i64.store offset=220 align=4
local.get 4
i32.const 3
i32.store8 offset=216
local.get 4
i32.const 168
i32.add
local.get 4
i32.const 120
i32.add
local.get 4
i32.const 216
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
local.get 1
i32.load offset=16
local.tee 3
i32.const 1
i32.le_u
br_if 3 (;@5;)
local.get 0
local.get 4
i32.const 168
i32.add
local.get 1
i32.load offset=12
i32.const 24
i32.add
local.get 4
i32.const 8
i32.add
call $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#1}::{closure#0}>"
local.get 4
i32.const 16
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 4
i32.load offset=8
local.tee 0
local.get 0
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 7 (;@1;)
br 6 (;@2;)
end
local.get 4
local.get 4
i32.load8_u offset=171
i32.store8 offset=139
local.get 4
local.get 4
i32.load16_u offset=169 align=1
i32.store16 offset=137 align=1
local.get 4
local.get 4
i32.load offset=180
i32.store offset=148
local.get 4
local.get 4
i64.load offset=172 align=4
i64.store offset=140 align=4
local.get 4
local.get 3
i32.store8 offset=136
i32.const 1065572
i32.const 43
local.get 4
i32.const 136
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 4
local.get 4
i32.load8_u offset=171
i32.store8 offset=219
local.get 4
local.get 4
i32.load16_u offset=169 align=1
i32.store16 offset=217 align=1
local.get 4
local.get 4
i32.load offset=180
i32.store offset=228
local.get 4
local.get 4
i64.load offset=172 align=4
i64.store offset=220 align=4
local.get 4
local.get 2
i32.store8 offset=216
i32.const 1065572
i32.const 43
local.get 4
i32.const 216
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 4
local.get 4
i32.load8_u offset=171
i32.store8 offset=219
local.get 4
local.get 4
i32.load16_u offset=169 align=1
i32.store16 offset=217 align=1
local.get 4
local.get 4
i32.load offset=180
i32.store offset=228
local.get 4
local.get 4
i64.load offset=172 align=4
i64.store offset=220 align=4
local.get 4
local.get 3
i32.store8 offset=216
i32.const 1065572
i32.const 43
local.get 4
i32.const 216
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
i32.const 1
local.get 3
i32.const 1063408
call $core::panicking::panic_bounds_check
unreachable
end
i32.const 1057428
i32.const 43
local.get 4
i32.const 239
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
local.get 4
i32.load offset=8
local.tee 0
local.get 0
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 1 (;@1;)
end
local.get 4
i32.const 8
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
end
local.get 4
i32.const 240
i32.add
global.set $__stack_pointer
)
(func $"<nanvm_demos::samples::call_statements::module<nanvm_lib::naive::Naive>::{closure#2} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;646;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i32 i64 i32 )
global.get $__stack_pointer
i32.const 224
i32.sub
local.tee 4
global.set $__stack_pointer
local.get 1
i32.load
local.set 1
local.get 4
local.get 3
i32.store offset=20
local.get 4
local.get 2
i32.store offset=16
local.get 2
local.get 2
i32.load
i32.const 1
i32.add
local.tee 5
i32.store
block ;; label = @1
local.get 5
i32.eqz
br_if 0 (;@1;)
local.get 4
local.get 3
i32.store offset=32
local.get 4
local.get 2
i32.store offset=28
local.get 4
i32.const 6
i32.store8 offset=24
block ;; label = @2
block ;; label = @3
block ;; label = @4
local.get 1
i32.load offset=16
i32.eqz
br_if 0 (;@4;)
block ;; label = @5
block ;; label = @6
block ;; label = @7
block ;; label = @8
block ;; label = @9
block ;; label = @10
block ;; label = @11
block ;; label = @12
local.get 1
i32.load offset=12
local.tee 5
i32.load8_u offset=8
local.tee 6
br_table 6 (;@6;) 6 (;@6;) 0 (;@12;) 1 (;@11;) 2 (;@10;) 3 (;@9;) 4 (;@8;) 5 (;@7;) 6 (;@6;)
end
local.get 5
i64.load offset=16
local.set 7
br 9 (;@2;)
end
local.get 5
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
i32.eqz
br_if 9 (;@1;)
br 7 (;@3;)
end
local.get 5
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
i32.eqz
br_if 8 (;@1;)
local.get 5
i64.load8_u offset=20
i64.const 32
i64.shl
local.get 5
i64.load32_u offset=16
i64.or
local.set 7
br 7 (;@2;)
end
local.get 5
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
br_if 5 (;@3;)
br 7 (;@1;)
end
local.get 5
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
br_if 4 (;@3;)
br 6 (;@1;)
end
local.get 5
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 5
i32.store
local.get 5
i32.eqz
br_if 5 (;@1;)
br 1 (;@5;)
end
local.get 5
i32.load8_u offset=9
local.set 5
end
br 2 (;@2;)
end
i32.const 0
i32.const 0
i32.const 1063408
call $core::panicking::panic_bounds_check
unreachable
end
local.get 5
i64.load32_u offset=16
local.set 7
end
local.get 4
local.get 7
i64.store offset=48
local.get 4
local.get 1
i32.store offset=44
local.get 4
local.get 5
i32.store8 offset=41
local.get 4
local.get 6
i32.store8 offset=40
local.get 4
i32.const 0
i32.store8 offset=200
local.get 4
i64.const 4613937818241073152
i64.store offset=184
local.get 4
i32.const 2
i32.store8 offset=176
local.get 4
i64.const 4611686018427387904
i64.store offset=168
local.get 4
i32.const 2
i32.store8 offset=160
local.get 4
i64.const 4607182418800017408
i64.store offset=152
local.get 4
i32.const 2
i32.store8 offset=144
local.get 4
i64.const 12884901888
i64.store offset=136
local.get 4
local.get 4
i32.const 200
i32.add
i32.store offset=192
local.get 4
i32.const 8
i32.add
local.get 4
i32.const 136
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 3>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=12
local.tee 5
i32.store offset=108
local.get 4
local.get 4
i32.load offset=8
local.tee 1
i32.store offset=104
block ;; label = @2
block ;; label = @3
local.get 4
i32.load8_u offset=200
i32.const 1
i32.ne
br_if 0 (;@3;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 2
i32.store
local.get 2
br_if 1 (;@2;)
local.get 4
i32.const 104
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 1 (;@2;)
end
local.get 1
i32.eqz
br_if 0 (;@2;)
local.get 4
local.get 5
i32.store offset=96
local.get 4
local.get 1
i32.store offset=92
local.get 4
i32.const 6
i32.store8 offset=88
local.get 2
local.get 2
i32.load
i32.const 1
i32.add
local.tee 1
i32.store
local.get 1
i32.eqz
br_if 1 (;@1;)
local.get 4
local.get 2
i32.store offset=204
local.get 4
i32.const 6
i32.store8 offset=200
local.get 4
local.get 3
i64.extend_i32_u
i64.store offset=208
local.get 4
i64.const 0
i64.store offset=144
local.get 4
i32.const 2
i32.store8 offset=136
local.get 4
i32.const 104
i32.add
local.get 4
i32.const 200
i32.add
local.get 4
i32.const 136
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @3
block ;; label = @4
block ;; label = @5
block ;; label = @6
local.get 4
i32.load8_u offset=104
i32.const 255
i32.ne
br_if 0 (;@6;)
local.get 0
local.get 4
i64.load offset=120
i64.store offset=16
local.get 0
local.get 4
i64.load offset=112
i64.store offset=8
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 88
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 40
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 24
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 3
i32.store
local.get 3
i32.eqz
br_if 1 (;@5;)
br 2 (;@4;)
end
local.get 4
local.get 4
i64.load offset=128
i64.store offset=160
local.get 4
local.get 4
i64.load offset=120
i64.store offset=152
local.get 4
local.get 4
i64.load offset=112
i64.store offset=144
local.get 4
local.get 4
i64.load offset=104
i64.store offset=136
local.get 4
i32.const 200
i32.add
local.get 4
i32.const 136
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
i32.const 1
local.set 3
i32.const 0
local.set 1
block ;; label = @6
local.get 4
i32.load8_u offset=200
local.tee 5
i32.const 255
i32.eq
br_if 0 (;@6;)
local.get 4
local.get 4
i64.load offset=202 align=2
i64.store offset=72
local.get 4
local.get 4
i64.load offset=208 align=2
i64.store offset=78 align=2
local.get 4
i32.load8_u offset=201
local.set 3
local.get 5
local.set 1
end
local.get 4
i32.const 136
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 152
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
local.get 4
i64.load offset=96
i64.store offset=152
local.get 4
local.get 4
i64.load offset=88
i64.store offset=144
local.get 4
i32.const 0
i32.store8 offset=88
local.get 4
local.get 3
i32.store8 offset=161
local.get 4
local.get 1
i32.store8 offset=160
local.get 4
i64.const 8589934592
i64.store offset=136
local.get 4
local.get 4
i64.load offset=72
i64.store offset=162 align=2
local.get 4
local.get 4
i64.load offset=78 align=2
i64.store offset=168 align=2
local.get 4
local.get 4
i32.const 88
i32.add
i32.store offset=176
local.get 4
local.get 4
i32.const 136
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, 2>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=4
local.tee 1
i32.store offset=204
local.get 4
local.get 4
i32.load
local.tee 3
i32.store offset=200
block ;; label = @6
local.get 4
i32.load8_u offset=88
i32.const 1
i32.ne
br_if 0 (;@6;)
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 2
i32.store
local.get 2
br_if 3 (;@3;)
local.get 4
i32.const 200
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 3 (;@3;)
end
local.get 3
i32.eqz
br_if 2 (;@3;)
local.get 4
local.get 1
i32.store offset=64
local.get 4
local.get 3
i32.store offset=60
local.get 4
i32.const 6
i32.store8 offset=56
local.get 0
local.get 4
i32.const 40
i32.add
local.get 4
i32.const 56
i32.add
call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::call
local.get 4
i32.const 24
i32.add
call $"#func639 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 3
i32.store
local.get 3
br_if 1 (;@4;)
end
local.get 4
i32.const 16
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
end
local.get 4
i32.const 224
i32.add
global.set $__stack_pointer
return
end
i32.const 1057428
i32.const 43
local.get 4
i32.const 223
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
i32.const 1057428
i32.const 43
local.get 4
i32.const 223
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
unreachable
)
Run