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 2, first as the JavaScript it already is and then as WebAssembly, and shows what each call returned or threw and how long one call takes, timed over 1000 calls.
FunctionalScript source:
/**
* The example of [`README.md`](./README.md) (Built-in Member Functions) as a
* function of one number, for the page's WASM demo: array member functions
* chained: `filter`, `map` and `join`.
*
* @module
*/
/** @type {(...a: readonly number[]) => unknown} */
export default (...a ) => [1 , 2 , 3 , 4 ].filter (x => x > a [0 ]).map (x => x * 10 ).join ("-" );
Expression graph (EDAG) that fjs compile lowers it to:
=> length body 0 .join() . () obj key ... .map() "join" [] . () obj key ... .filter() "map" [] [] 0 "-" . () obj key ... [] "filter" [] [] 0 [] 0 1 2 3 1 2 3 4 [] 0 => length body 1 * => length frame 0 body 1 rest > * left right arg 0 10 > left right arg 0 . . obj idx frame 0 0 The same graph, as fjs compile writes it to a .edag.data.js file:
export default ["{}" ,[[":" ,"default" ,["=>" ,0 ,[],["." ,["." ,["." ,["[]" ,[1 ,2 ,3 ,4 ]],"filter" ,["|()" ,[["=>" ,1 ,[["rest" ]],[">" ,["arg" ,0 ],["." ,["frame" ,0 ],0 ]]]]]],"map" ,["|()" ,[["=>" ,1 ,[],["*" ,["arg" ,0 ],10 ]]]]],"join" ,["|()" ,["-" ]]]]]]];Rust that fjs compile writes from it, on the NaNVM runtime:
// @generated by `fjs compile`. Do not edit: recompile the source module instead.
use nanvm_lib ::vm ::unstable ::{f64_any , string_any , string_key };
use nanvm_lib ::vm ::{Any , IStaticFunction , ToAny , ToArray , ToObject };
#[rustfmt ::skip ]
#[allow (clippy ::if_same_then_else )]
pub fn module <A : IStaticFunction >(runtime : Any <A >) -> Result <Any <A >, Any <A >> {
Ok ([(string_key ("default" ), A ::static_function (|_self , _args | {
let _b642 : Any <A > = _args .rest (0 ).to_any ();
Any ::dot ((Any ::dot ((Any ::dot ([f64_any (0x3ff0000000000000 ), f64_any (0x4000000000000000 ), f64_any (0x4008000000000000 ), f64_any (0x4010000000000000 )].to_array ().to_any (), string_any ("filter" )).end_call (&A ::frame (_self )[0 ], || Ok ([A ::static_function (|_self , _args | { Any ::gt (_args .argument (0 ), (Any ::dot (A ::frame (_self )[0 ].clone (), f64_any (0x0000000000000000 )).end ())?) }, 1 , [_b642 .clone (), A ::frame (_self )[0 ].clone ()].to_array (), Some ("($1)=>$1>$0[0]" )).to_any ()].to_array ().to_any ())))?, string_any ("map" )).end_call (&A ::frame (_self )[0 ], || Ok ([A ::static_function (|_self , _args | { _args .argument (0 ) * f64_any (0x4024000000000000 ) }, 1 , [A ::frame (_self )[0 ].clone ()].to_array (), Some ("($0)=>$0*10" )).to_any ()].to_array ().to_any ())))?, string_any ("join" )).end_call (&A ::frame (_self )[0 ], || Ok ([string_any ("-" )].to_array ().to_any ()))
}, 0 , [runtime .clone ()].to_array (), Some ("(...$0)=>[1,2,3,4].filter(($1)=>$1>$0[0]).map(($2)=>$2*10).join(\"-\")" )).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::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#0}>" (;218;) (type 10 ) (param i32 i32 i32 i32 i32 )
(local i32 i32 i32 i64 i64 i32 i32 )
global.get $__stack_pointer
i32.const 208
i32.sub
local.tee 5
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
block ;; label = @12
local.get 1
i32.load8_u
local.tee 6
i32.const 255
i32.ne
br_if 0 (;@12;)
local.get 5
local.get 1
i64.load offset=16
i64.store offset=39 align=1
local.get 5
local.get 1
i64.load offset=8
i64.store offset=31 align=1
br 1 (;@11;)
end
local.get 5
local.get 1
i32.const 1
i32.add
local.tee 7
i64.load align=1
i64.store offset=24
local.get 5
local.get 7
i64.load offset=8 align=1
i64.store offset=32
local.get 5
local.get 7
i64.load offset=15 align=1
i64.store offset=39 align=1
local.get 6
i32.const 255
i32.and
i32.const 8
i32.lt_u
br_if 1 (;@10;)
local.get 6
i32.const 255
i32.and
i32.const 9
i32.ne
br_if 2 (;@9;)
end
local.get 5
local.get 5
i64.load offset=39 align=1
i64.store offset=160
local.get 5
local.get 5
i64.load offset=31 align=1
i64.store offset=152
br 5 (;@5;)
end
local.get 1
i64.load offset=24
local.set 8
local.get 5
local.get 6
i32.store8 offset=72
local.get 5
local.get 8
i64.store offset=96
local.get 5
local.get 7
i64.load align=1
i64.store offset=73 align=1
local.get 5
local.get 7
i64.load offset=8 align=1
i64.store offset=81 align=1
local.get 5
local.get 7
i64.load offset=15 align=1
i64.store offset=88 align=1
local.get 5
i32.const 152
i32.add
local.get 5
i32.const 72
i32.add
local.get 2
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::is_nullish
block ;; label = @10
local.get 5
i32.load8_u offset=152
local.tee 1
i32.const 255
i32.ne
br_if 0 (;@10;)
local.get 4
i32.load
local.set 1
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 3
i32.load8_u
local.tee 4
br_table 6 (;@12;) 6 (;@12;) 0 (;@18;) 1 (;@17;) 2 (;@16;) 3 (;@15;) 4 (;@14;) 5 (;@13;) 6 (;@12;)
end
local.get 3
i64.load offset=8
local.set 8
br 10 (;@7;)
end
local.get 3
i32.load offset=4
local.tee 7
local.get 7
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 15 (;@1;)
br 8 (;@8;)
end
local.get 3
i32.load offset=4
local.tee 7
local.get 7
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 14 (;@1;)
local.get 3
i64.load8_u offset=12
i64.const 32
i64.shl
local.get 3
i64.load32_u offset=8
i64.or
local.set 8
br 8 (;@7;)
end
local.get 3
i32.load offset=4
local.tee 7
local.get 7
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
br_if 6 (;@8;)
br 13 (;@1;)
end
local.get 3
i32.load offset=4
local.tee 7
local.get 7
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
br_if 5 (;@8;)
br 12 (;@1;)
end
local.get 3
i32.load offset=4
local.tee 7
local.get 7
i32.load
i32.const 1
i32.add
local.tee 6
i32.store
local.get 6
i32.eqz
br_if 11 (;@1;)
br 1 (;@11;)
end
local.get 3
i32.load8_u offset=1
local.set 3
end
br 3 (;@7;)
end
local.get 5
local.get 5
i32.load8_u offset=155
i32.store8 offset=59
local.get 5
local.get 5
i32.load16_u offset=153 align=1
i32.store16 offset=57 align=1
local.get 5
i64.load offset=156 align=4
local.set 9
local.get 5
i32.load offset=164
local.set 3
local.get 5
local.get 6
i32.store8 offset=152
local.get 5
local.get 2
i32.store offset=184
local.get 5
local.get 8
i64.store offset=176
local.get 5
local.get 7
i64.load align=1
i64.store offset=153 align=1
local.get 5
local.get 7
i64.load offset=8 align=1
i64.store offset=161 align=1
local.get 5
local.get 7
i64.load offset=15 align=1
i64.store offset=168 align=1
local.get 5
local.get 3
i32.store offset=68
local.get 5
local.get 9
i64.store offset=60 align=4
local.get 5
local.get 1
i32.store8 offset=56
local.get 5
i32.const 152
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 5
i32.const 168
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
br 3 (;@6;)
end
local.get 0
i32.const 256
i32.store16 offset=8
i64.const 0
local.set 8
br 4 (;@4;)
end
local.get 3
i64.load32_u offset=8
local.set 8
end
block ;; label = @7
block ;; label = @8
block ;; label = @9
local.get 1
i32.load offset=16
i32.eqz
br_if 0 (;@9;)
block ;; label = @10
block ;; label = @11
block ;; label = @12
block ;; label = @13
block ;; label = @14
block ;; label = @15
block ;; label = @16
block ;; label = @17
local.get 1
i32.load offset=12
local.tee 1
i32.load8_u offset=8
local.tee 10
br_table 6 (;@11;) 6 (;@11;) 0 (;@17;) 1 (;@16;) 2 (;@15;) 3 (;@14;) 4 (;@13;) 5 (;@12;) 6 (;@11;)
end
local.get 1
i64.load offset=16
local.set 9
br 9 (;@7;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 11
i32.store
local.get 11
i32.eqz
br_if 14 (;@1;)
br 7 (;@8;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 11
i32.store
local.get 11
i32.eqz
br_if 13 (;@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 9
br 7 (;@7;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 11
i32.store
local.get 11
i32.eqz
br_if 12 (;@1;)
br 5 (;@8;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 11
i32.store
local.get 11
i32.eqz
br_if 11 (;@1;)
br 4 (;@8;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 1
i32.store
local.get 1
i32.eqz
br_if 10 (;@1;)
br 1 (;@10;)
end
local.get 1
i32.load8_u offset=9
local.set 1
end
br 2 (;@7;)
end
i32.const 0
i32.const 0
i32.const 1069140
call $core::panicking::panic_bounds_check
unreachable
end
local.get 1
i64.load32_u offset=16
local.set 9
end
local.get 5
i32.const 0
i32.store8 offset=104
local.get 5
local.get 9
i64.store offset=184
local.get 5
local.get 6
i32.store offset=180
local.get 5
local.get 1
i32.store8 offset=177
local.get 5
local.get 10
i32.store8 offset=176
local.get 5
local.get 8
i64.store offset=168
local.get 5
local.get 7
i32.store offset=164
local.get 5
local.get 3
i32.store8 offset=161
local.get 5
local.get 4
i32.store8 offset=160
local.get 5
i64.const 8589934592
i64.store offset=152
local.get 5
local.get 5
i32.const 104
i32.add
i32.store offset=192
local.get 5
i32.const 16
i32.add
local.get 5
i32.const 152
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 5
local.get 5
i32.load offset=20
local.tee 7
i32.store offset=124
local.get 5
local.get 5
i32.load offset=16
local.tee 1
i32.store offset=120
block ;; label = @7
local.get 5
i32.load8_u offset=104
i32.const 1
i32.ne
br_if 0 (;@7;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 5 (;@2;)
local.get 5
i32.const 120
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 5 (;@2;)
end
local.get 1
i32.eqz
br_if 4 (;@2;)
i32.const 33
i32.const 1
local.get 1
local.get 7
i32.const 1057618
i32.const 14
call $"<nanvm_lib::naive::Naive as nanvm_lib::vm::internal::IVm>::static_function"
local.set 1
local.get 5
i32.const 0
i32.store8 offset=104
local.get 5
local.get 1
i32.store offset=164
local.get 5
i32.const 7
i32.store8 offset=160
local.get 5
i64.const 4294967296
i64.store offset=152
local.get 5
local.get 5
i32.const 104
i32.add
i32.store offset=176
local.get 5
i32.const 8
i32.add
local.get 5
i32.const 152
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 5
local.get 5
i32.load offset=12
local.tee 7
i32.store offset=124
local.get 5
local.get 5
i32.load offset=8
local.tee 1
i32.store offset=120
block ;; label = @7
local.get 5
i32.load8_u offset=104
i32.const 1
i32.ne
br_if 0 (;@7;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 4 (;@3;)
local.get 5
i32.const 120
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 4 (;@3;)
end
local.get 1
i32.eqz
br_if 3 (;@3;)
local.get 5
local.get 7
i32.store offset=112
local.get 5
local.get 1
i32.store offset=108
local.get 5
i32.const 6
i32.store8 offset=104
local.get 5
local.get 5
i64.load offset=96
i64.store offset=144
local.get 5
local.get 5
i64.load offset=88
i64.store offset=136
local.get 5
local.get 5
i64.load offset=80
i64.store offset=128
local.get 5
local.get 5
i64.load offset=72
i64.store offset=120
local.get 5
i32.const 48
i32.add
local.get 5
i32.const 120
i32.add
local.get 2
local.get 5
i32.const 104
i32.add
call $"<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive> as nanvm_lib::vm::lambda::Live<nanvm_lib::naive::Naive>>::call"
local.get 5
i32.load offset=48
br_if 0 (;@6;)
local.get 5
local.get 5
i64.load offset=64
local.tee 8
i64.store offset=160
local.get 5
local.get 5
i64.load offset=56
local.tee 9
i64.store offset=152
local.get 0
local.get 8
i64.store offset=16
local.get 0
local.get 9
i64.store offset=8
i64.const 0
local.set 8
br 2 (;@4;)
end
local.get 5
local.get 5
i64.load offset=64
i64.store offset=160
local.get 5
local.get 5
i64.load offset=56
i64.store offset=152
end
local.get 0
local.get 5
i64.load offset=160
i64.store offset=16
local.get 0
local.get 5
i64.load offset=152
i64.store offset=8
i64.const 1
local.set 8
end
local.get 0
local.get 8
i64.store
local.get 5
i32.const 208
i32.add
global.set $__stack_pointer
return
end
i32.const 1064316
i32.const 43
local.get 5
i32.const 207
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
end
i32.const 1064316
i32.const 43
local.get 5
i32.const 207
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
end
unreachable
)
(func $"<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#0}::{closure#0} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;219;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i64 i32 )
global.get $__stack_pointer
i32.const 128
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
local.get 4
i32.const 80
i32.add
local.get 4
i32.const 8
i32.add
i32.const 0
call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::present
block ;; label = @1
block ;; label = @2
local.get 4
i32.load8_u offset=80
i32.const 255
i32.eq
br_if 0 (;@2;)
local.get 4
local.get 4
i64.load offset=88
i64.store offset=24
local.get 4
local.get 4
i64.load offset=80
i64.store offset=16
br 1 (;@1;)
end
local.get 4
i32.const 256
i32.store16 offset=16
end
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 3
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 3
i64.load offset=16
local.set 6
br 10 (;@1;)
end
local.get 3
i32.load offset=12
local.tee 1
local.get 1
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 3
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 7
i32.store
local.get 7
i32.eqz
br_if 6 (;@3;)
local.get 3
i64.load8_u offset=20
i64.const 32
i64.shl
local.get 3
i64.load32_u offset=16
i64.or
local.set 6
br 8 (;@1;)
end
local.get 3
i32.load offset=12
local.tee 1
local.get 1
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 3
i32.load offset=12
local.tee 1
local.get 1
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 3
i32.load offset=12
local.tee 1
local.get 1
i32.load
i32.const 1
i32.add
local.tee 3
i32.store
local.get 3
i32.eqz
br_if 3 (;@3;)
br 1 (;@5;)
end
local.get 3
i32.load8_u offset=9
local.set 3
end
br 3 (;@1;)
end
i32.const 0
i32.const 0
i32.const 1069140
call $core::panicking::panic_bounds_check
unreachable
end
unreachable
end
local.get 3
i64.load32_u offset=16
local.set 6
end
local.get 4
local.get 6
i64.store offset=120
local.get 4
local.get 1
i32.store offset=116
local.get 4
local.get 3
i32.store8 offset=113
local.get 4
local.get 5
i32.store8 offset=112
local.get 4
i64.const 0
i64.store offset=88
local.get 4
i32.const 2
i32.store8 offset=80
local.get 4
i32.const 48
i32.add
local.get 4
i32.const 112
i32.add
local.get 4
i32.const 80
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @1
block ;; label = @2
block ;; label = @3
local.get 4
i32.load8_u offset=48
i32.const 255
i32.ne
br_if 0 (;@3;)
local.get 0
local.get 4
i64.load offset=64
i64.store offset=16
local.get 0
local.get 4
i64.load offset=56
i64.store offset=8
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 16
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
i32.eqz
br_if 1 (;@2;)
br 2 (;@1;)
end
local.get 4
local.get 4
i64.load offset=72
i64.store offset=104
local.get 4
local.get 4
i64.load offset=64
i64.store offset=96
local.get 4
local.get 4
i64.load offset=56
i64.store offset=88
local.get 4
local.get 4
i64.load offset=48
i64.store offset=80
local.get 4
i32.const 112
i32.add
local.get 4
i32.const 80
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @3
block ;; label = @4
local.get 4
i32.load8_u offset=112
i32.const 255
i32.eq
br_if 0 (;@4;)
local.get 4
local.get 4
i64.load offset=120
i64.store offset=40
local.get 4
local.get 4
i64.load offset=112
i64.store offset=32
br 1 (;@3;)
end
local.get 4
i32.const 256
i32.store16 offset=32
end
local.get 4
i32.const 80
i32.add
call $"#func693 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 96
i32.add
call $"#func693 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 80
i32.add
local.get 4
i32.const 16
i32.add
local.get 4
i32.const 32
i32.add
call $nanvm_lib::vm::any::relational::compare::<nanvm_lib::naive::Naive>
local.get 4
i32.load8_u offset=81
local.set 1
block ;; label = @3
block ;; label = @4
local.get 4
i32.load8_u offset=80
local.tee 3
i32.const 255
i32.eq
br_if 0 (;@4;)
local.get 0
local.get 4
i64.load offset=88 align=2
i64.store offset=16 align=2
local.get 0
local.get 4
i64.load offset=82 align=2
i64.store offset=10 align=2
i64.const 1
local.set 6
br 1 (;@3;)
end
i32.const 1
local.set 3
local.get 1
i32.const 255
i32.and
i32.const 1
i32.eq
local.set 1
i64.const 0
local.set 6
end
local.get 0
local.get 1
i32.store8 offset=9
local.get 0
local.get 3
i32.store8 offset=8
local.get 0
local.get 6
i64.store
local.get 2
local.get 2
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 128
i32.add
global.set $__stack_pointer
)
(func $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#2}>" (;220;) (type 3 ) (param i32 i32 i32 )
(local i32 i32 i32 i64 i64 i32 )
global.get $__stack_pointer
i32.const 192
i32.sub
local.tee 3
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
local.get 1
i32.load8_u
local.tee 4
i32.const 255
i32.ne
br_if 0 (;@10;)
local.get 3
local.get 1
i64.load offset=16
i64.store offset=31 align=1
local.get 3
local.get 1
i64.load offset=8
i64.store offset=23 align=1
br 1 (;@9;)
end
local.get 3
local.get 1
i32.const 1
i32.add
local.tee 5
i64.load align=1
i64.store offset=16
local.get 3
local.get 5
i64.load offset=8 align=1
i64.store offset=24
local.get 3
local.get 5
i64.load offset=15 align=1
i64.store offset=31 align=1
local.get 4
i32.const 255
i32.and
i32.const 8
i32.lt_u
br_if 1 (;@8;)
local.get 4
i32.const 255
i32.and
i32.const 9
i32.ne
br_if 4 (;@5;)
end
local.get 3
local.get 3
i64.load offset=31 align=1
i64.store offset=104
local.get 3
local.get 3
i64.load offset=23 align=1
i64.store offset=96
br 1 (;@7;)
end
local.get 1
i64.load offset=24
local.set 6
local.get 3
local.get 4
i32.store8 offset=64
local.get 3
local.get 6
i64.store offset=88
local.get 3
local.get 5
i64.load align=1
i64.store offset=65 align=1
local.get 3
local.get 5
i64.load offset=8 align=1
i64.store offset=73 align=1
local.get 3
local.get 5
i64.load offset=15 align=1
i64.store offset=80 align=1
local.get 3
i32.const 96
i32.add
local.get 3
i32.const 64
i32.add
local.get 2
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::is_nullish
block ;; label = @8
block ;; label = @9
local.get 3
i32.load8_u offset=96
local.tee 1
i32.const 255
i32.eq
br_if 0 (;@9;)
local.get 3
local.get 3
i32.load8_u offset=99
i32.store8 offset=51
local.get 3
local.get 3
i32.load16_u offset=97 align=1
i32.store16 offset=49 align=1
local.get 3
i64.load offset=100 align=4
local.set 7
local.get 3
i32.load offset=108
local.set 8
local.get 3
local.get 4
i32.store8 offset=96
local.get 3
local.get 2
i32.store offset=128
local.get 3
local.get 6
i64.store offset=120
local.get 3
local.get 5
i64.load align=1
i64.store offset=97 align=1
local.get 3
local.get 5
i64.load offset=8 align=1
i64.store offset=105 align=1
local.get 3
local.get 5
i64.load offset=15 align=1
i64.store offset=112 align=1
local.get 3
local.get 8
i32.store offset=60
local.get 3
local.get 7
i64.store offset=52 align=4
local.get 3
local.get 1
i32.store8 offset=48
local.get 3
i32.const 96
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 3
i32.const 112
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
br 1 (;@8;)
end
local.get 3
i32.const 0
i32.store16 offset=144
local.get 3
i32.const 1057633
i32.store offset=140
local.get 3
i32.const 1057632
i32.store offset=136
local.get 3
i32.const 96
i32.add
local.get 3
i32.const 136
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 3
i32.load8_u offset=96
local.tee 1
i32.const 255
i32.ne
br_if 6 (;@2;)
local.get 3
i64.load offset=100 align=4
local.set 7
local.get 3
i32.const 0
i32.store8 offset=136
local.get 3
local.get 7
i64.store offset=108 align=4
local.get 3
i32.const 3
i32.store8 offset=104
local.get 3
i64.const 4294967296
i64.store offset=96
local.get 3
local.get 3
i32.const 136
i32.add
i32.store offset=120
local.get 3
i32.const 8
i32.add
local.get 3
i32.const 96
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 3
local.get 3
i32.load offset=12
local.tee 8
i32.store offset=156
local.get 3
local.get 3
i32.load offset=8
local.tee 1
i32.store offset=152
block ;; label = @9
local.get 3
i32.load8_u offset=136
i32.const 1
i32.ne
br_if 0 (;@9;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 8 (;@1;)
local.get 3
i32.const 152
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 8 (;@1;)
end
local.get 1
i32.eqz
br_if 7 (;@1;)
local.get 3
local.get 8
i32.store offset=144
local.get 3
local.get 1
i32.store offset=140
local.get 3
i32.const 6
i32.store8 offset=136
local.get 3
local.get 4
i32.store8 offset=152
local.get 3
local.get 6
i64.store offset=176
local.get 3
local.get 5
i64.load align=1
i64.store offset=153 align=1
local.get 3
local.get 5
i64.load offset=8 align=1
i64.store offset=161 align=1
local.get 3
local.get 5
i64.load offset=15 align=1
i64.store offset=168 align=1
local.get 3
i32.const 40
i32.add
local.get 3
i32.const 152
i32.add
local.get 2
local.get 3
i32.const 136
i32.add
call $"<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive> as nanvm_lib::vm::lambda::Live<nanvm_lib::naive::Naive>>::call"
local.get 3
i32.load offset=40
i32.eqz
br_if 2 (;@6;)
end
local.get 3
local.get 3
i64.load offset=56
i64.store offset=104
local.get 3
local.get 3
i64.load offset=48
i64.store offset=96
end
local.get 0
local.get 3
i64.load offset=104
i64.store offset=16
local.get 0
local.get 3
i64.load offset=96
i64.store offset=8
i64.const 1
local.set 6
br 3 (;@3;)
end
local.get 3
local.get 3
i64.load offset=56
local.tee 6
i64.store offset=104
local.get 3
local.get 3
i64.load offset=48
local.tee 7
i64.store offset=96
local.get 0
local.get 6
i64.store offset=16
local.get 0
local.get 7
i64.store offset=8
br 1 (;@4;)
end
local.get 0
i32.const 256
i32.store16 offset=8
end
i64.const 0
local.set 6
end
local.get 0
local.get 6
i64.store
local.get 3
i32.const 192
i32.add
global.set $__stack_pointer
return
end
local.get 3
local.get 3
i32.load8_u offset=99
i32.store8 offset=155
local.get 3
local.get 3
i32.load16_u offset=97 align=1
i32.store16 offset=153 align=1
local.get 3
local.get 3
i32.load offset=108
i32.store offset=164
local.get 3
local.get 3
i64.load offset=100 align=4
i64.store offset=156 align=4
local.get 3
local.get 1
i32.store8 offset=152
i32.const 1057960
i32.const 43
local.get 3
i32.const 152
i32.add
i32.const 1057944
i32.const 1058004
call $core::result::unwrap_failed
unreachable
end
i32.const 1064316
i32.const 43
local.get 3
i32.const 191
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
)
(func $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#1}>" (;221;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i32 i64 i64 )
global.get $__stack_pointer
i32.const 192
i32.sub
local.tee 4
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
block ;; label = @12
local.get 1
i32.load8_u
local.tee 5
i32.const 255
i32.ne
br_if 0 (;@12;)
local.get 4
local.get 1
i64.load offset=16
i64.store offset=31 align=1
local.get 4
local.get 1
i64.load offset=8
i64.store offset=23 align=1
br 1 (;@11;)
end
local.get 4
local.get 1
i32.const 1
i32.add
local.tee 6
i64.load align=1
i64.store offset=16
local.get 4
local.get 6
i64.load offset=8 align=1
i64.store offset=24
local.get 4
local.get 6
i64.load offset=15 align=1
i64.store offset=31 align=1
local.get 5
i32.const 255
i32.and
i32.const 8
i32.lt_u
br_if 1 (;@10;)
local.get 5
i32.const 255
i32.and
i32.const 9
i32.ne
br_if 2 (;@9;)
end
local.get 4
local.get 4
i64.load offset=31 align=1
i64.store offset=104
local.get 4
local.get 4
i64.load offset=23 align=1
i64.store offset=96
br 6 (;@4;)
end
local.get 3
i32.load
local.set 3
local.get 1
i64.load offset=24
local.set 7
local.get 4
local.get 5
i32.store8 offset=64
local.get 4
local.get 7
i64.store offset=88
local.get 4
local.get 6
i64.load align=1
i64.store offset=65 align=1
local.get 4
local.get 6
i64.load offset=8 align=1
i64.store offset=73 align=1
local.get 4
local.get 6
i64.load offset=15 align=1
i64.store offset=80 align=1
local.get 4
i32.const 96
i32.add
local.get 4
i32.const 64
i32.add
local.get 2
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::is_nullish
block ;; label = @10
block ;; label = @11
local.get 4
i32.load8_u offset=96
local.tee 1
i32.const 255
i32.ne
br_if 0 (;@11;)
local.get 3
i32.load offset=16
i32.eqz
br_if 1 (;@10;)
block ;; label = @12
block ;; label = @13
block ;; label = @14
block ;; label = @15
block ;; label = @16
block ;; label = @17
block ;; label = @18
block ;; label = @19
local.get 3
i32.load offset=12
local.tee 1
i32.load8_u offset=8
local.tee 5
br_table 6 (;@13;) 6 (;@13;) 0 (;@19;) 1 (;@18;) 2 (;@17;) 3 (;@16;) 4 (;@15;) 5 (;@14;) 6 (;@13;)
end
local.get 1
i64.load offset=16
local.set 7
br 12 (;@6;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 3
i32.store
local.get 3
i32.eqz
br_if 9 (;@8;)
br 10 (;@7;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 3
i32.store
local.get 3
i32.eqz
br_if 8 (;@8;)
local.get 1
i64.load8_u offset=20
i64.const 32
i64.shl
local.get 1
i64.load32_u offset=16
i64.or
local.set 7
br 10 (;@6;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 3
i32.store
local.get 3
br_if 8 (;@7;)
br 7 (;@8;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 3
i32.store
local.get 3
br_if 7 (;@7;)
br 6 (;@8;)
end
local.get 1
i32.load offset=12
local.tee 6
local.get 6
i32.load
i32.const 1
i32.add
local.tee 1
i32.store
local.get 1
i32.eqz
br_if 5 (;@8;)
br 1 (;@12;)
end
local.get 1
i32.load8_u offset=9
local.set 1
end
br 5 (;@6;)
end
local.get 4
local.get 4
i32.load8_u offset=99
i32.store8 offset=51
local.get 4
local.get 4
i32.load16_u offset=97 align=1
i32.store16 offset=49 align=1
local.get 4
i64.load offset=100 align=4
local.set 8
local.get 4
i32.load offset=108
local.set 3
local.get 4
local.get 5
i32.store8 offset=96
local.get 4
local.get 2
i32.store offset=128
local.get 4
local.get 7
i64.store offset=120
local.get 4
local.get 6
i64.load align=1
i64.store offset=97 align=1
local.get 4
local.get 6
i64.load offset=8 align=1
i64.store offset=105 align=1
local.get 4
local.get 6
i64.load offset=15 align=1
i64.store offset=112 align=1
local.get 4
local.get 3
i32.store offset=60
local.get 4
local.get 8
i64.store offset=52 align=4
local.get 4
local.get 1
i32.store8 offset=48
local.get 4
i32.const 96
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 112
i32.add
call $"#func217 core::ptr::drop_glue::<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>"
br 5 (;@5;)
end
i32.const 0
i32.const 0
i32.const 1069140
call $core::panicking::panic_bounds_check
unreachable
end
local.get 0
i32.const 256
i32.store16 offset=8
i64.const 0
local.set 7
br 5 (;@3;)
end
unreachable
end
local.get 1
i64.load32_u offset=16
local.set 7
end
local.get 4
i32.const 0
i32.store8 offset=136
local.get 4
local.get 7
i64.store offset=112
local.get 4
local.get 6
i32.store offset=108
local.get 4
local.get 1
i32.store8 offset=105
local.get 4
local.get 5
i32.store8 offset=104
local.get 4
i64.const 4294967296
i64.store offset=96
local.get 4
local.get 4
i32.const 136
i32.add
i32.store offset=120
local.get 4
i32.const 8
i32.add
local.get 4
i32.const 96
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 6
i32.store offset=156
local.get 4
local.get 4
i32.load offset=8
local.tee 1
i32.store offset=152
block ;; label = @6
local.get 4
i32.load8_u offset=136
i32.const 1
i32.ne
br_if 0 (;@6;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 5 (;@1;)
local.get 4
i32.const 152
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 5 (;@1;)
end
local.get 1
i32.eqz
br_if 4 (;@1;)
i32.const 34
i32.const 1
local.get 1
local.get 6
i32.const 1057633
i32.const 11
call $"<nanvm_lib::naive::Naive as nanvm_lib::vm::internal::IVm>::static_function"
local.set 1
local.get 4
i32.const 0
i32.store8 offset=136
local.get 4
local.get 1
i32.store offset=108
local.get 4
i32.const 7
i32.store8 offset=104
local.get 4
i64.const 4294967296
i64.store offset=96
local.get 4
local.get 4
i32.const 136
i32.add
i32.store offset=120
local.get 4
local.get 4
i32.const 96
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=4
local.tee 6
i32.store offset=156
local.get 4
local.get 4
i32.load
local.tee 1
i32.store offset=152
block ;; label = @6
local.get 4
i32.load8_u offset=136
i32.const 1
i32.ne
br_if 0 (;@6;)
local.get 1
local.get 1
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 4 (;@2;)
local.get 4
i32.const 152
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 4 (;@2;)
end
local.get 1
i32.eqz
br_if 3 (;@2;)
local.get 4
local.get 6
i32.store offset=144
local.get 4
local.get 1
i32.store offset=140
local.get 4
i32.const 6
i32.store8 offset=136
local.get 4
local.get 4
i64.load offset=88
i64.store offset=176
local.get 4
local.get 4
i64.load offset=80
i64.store offset=168
local.get 4
local.get 4
i64.load offset=72
i64.store offset=160
local.get 4
local.get 4
i64.load offset=64
i64.store offset=152
local.get 4
i32.const 40
i32.add
local.get 4
i32.const 152
i32.add
local.get 2
local.get 4
i32.const 136
i32.add
call $"<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive> as nanvm_lib::vm::lambda::Live<nanvm_lib::naive::Naive>>::call"
local.get 4
i32.load offset=40
br_if 0 (;@5;)
local.get 4
local.get 4
i64.load offset=56
local.tee 7
i64.store offset=104
local.get 4
local.get 4
i64.load offset=48
local.tee 8
i64.store offset=96
local.get 0
local.get 7
i64.store offset=16
local.get 0
local.get 8
i64.store offset=8
i64.const 0
local.set 7
br 2 (;@3;)
end
local.get 4
local.get 4
i64.load offset=56
i64.store offset=104
local.get 4
local.get 4
i64.load offset=48
i64.store offset=96
end
local.get 0
local.get 4
i64.load offset=104
i64.store offset=16
local.get 0
local.get 4
i64.load offset=96
i64.store offset=8
i64.const 1
local.set 7
end
local.get 0
local.get 7
i64.store
local.get 4
i32.const 192
i32.add
global.set $__stack_pointer
return
end
i32.const 1064316
i32.const 43
local.get 4
i32.const 191
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
end
i32.const 1064316
i32.const 43
local.get 4
i32.const 191
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
)
(func $"<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#1}::{closure#0} as core::ops::function::FnOnce<(&nanvm_lib::naive::function::Function, nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>)>>::call_once" (;222;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 )
global.get $__stack_pointer
i32.const 48
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
local.get 4
i32.const 32
i32.add
local.get 4
i32.const 8
i32.add
i32.const 0
call $<nanvm_lib::vm::array::Array<nanvm_lib::naive::Naive>>::present
block ;; label = @1
block ;; label = @2
local.get 4
i32.load8_u offset=32
i32.const 255
i32.eq
br_if 0 (;@2;)
local.get 4
local.get 4
i64.load offset=40
i64.store offset=24
local.get 4
local.get 4
i64.load offset=32
i64.store offset=16
br 1 (;@1;)
end
local.get 4
i32.const 256
i32.store16 offset=16
end
local.get 4
i64.const 4621819117588971520
i64.store offset=40
local.get 4
i32.const 2
i32.store8 offset=32
local.get 0
local.get 4
i32.const 16
i32.add
local.get 4
i32.const 32
i32.add
call $"<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::numeric_op::<<nanvm_lib::vm::numeric::Numeric<nanvm_lib::naive::Naive> as core::ops::arith::Mul>::mul>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 3
i32.store
block ;; label = @1
local.get 3
br_if 0 (;@1;)
local.get 4
i32.const 8
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
end
local.get 4
i32.const 48
i32.add
global.set $__stack_pointer
)
(func $nanvm_demos::samples::member_functions::module::<nanvm_lib::naive::Naive> (;418;) (type 1 ) (param i32 i32 )
(local i32 i32 i32 i32 i32 i64 i32 )
global.get $__stack_pointer
i32.const 96
i32.sub
local.tee 2
global.set $__stack_pointer
local.get 2
i32.const 0
i32.store16 offset=28
local.get 2
i32.const 1061143
i32.store offset=24
local.get 2
i32.const 1061136
i32.store offset=20
local.get 2
i32.const 48
i32.add
local.get 2
i32.const 20
i32.add
call $"core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, u16, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, <core::result::Result<alloc::rc::Rc<[u16]>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>> as core::iter::traits::collect::FromIterator<core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>>::from_iter<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>>::{closure#0}, alloc::rc::Rc<[u16]>>"
block ;; label = @1
block ;; label = @2
block ;; label = @3
block ;; label = @4
local.get 2
i32.load8_u offset=48
local.tee 3
i32.const 255
i32.ne
br_if 0 (;@4;)
local.get 2
i32.load offset=56
local.set 4
local.get 2
i32.load offset=52
local.set 5
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.load8_u
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 1
i64.load offset=8
local.set 7
br 10 (;@1;)
end
local.get 1
i32.load offset=4
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
i32.eqz
br_if 7 (;@3;)
br 8 (;@2;)
end
local.get 1
i32.load offset=4
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
i32.eqz
br_if 6 (;@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 7
br 8 (;@1;)
end
local.get 1
i32.load offset=4
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
br_if 6 (;@2;)
br 5 (;@3;)
end
local.get 1
i32.load offset=4
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
br_if 5 (;@2;)
br 4 (;@3;)
end
local.get 1
i32.load offset=4
local.tee 3
local.get 3
i32.load
i32.const 1
i32.add
local.tee 8
i32.store
local.get 8
i32.eqz
br_if 3 (;@3;)
br 1 (;@5;)
end
local.get 1
i32.load8_u offset=1
local.set 8
end
br 3 (;@1;)
end
local.get 2
local.get 2
i32.load8_u offset=51
i32.store8 offset=35
local.get 2
local.get 2
i32.load16_u offset=49 align=1
i32.store16 offset=33 align=1
local.get 2
local.get 2
i32.load offset=60
i32.store offset=44
local.get 2
local.get 2
i64.load offset=52 align=4
i64.store offset=36 align=4
local.get 2
local.get 3
i32.store8 offset=32
i32.const 1057960
i32.const 43
local.get 2
i32.const 32
i32.add
i32.const 1057944
i32.const 1058004
call $core::result::unwrap_failed
unreachable
end
unreachable
end
local.get 1
i64.load32_u offset=8
local.set 7
end
local.get 2
i32.const 0
i32.store8 offset=20
local.get 2
local.get 7
i64.store offset=64
local.get 2
local.get 3
i32.store offset=60
local.get 2
local.get 8
i32.store8 offset=57
local.get 2
local.get 6
i32.store8 offset=56
local.get 2
i64.const 4294967296
i64.store offset=48
local.get 2
local.get 2
i32.const 20
i32.add
i32.store offset=72
local.get 2
i32.const 8
i32.add
local.get 2
i32.const 48
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<nanvm_lib::vm::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=12
local.tee 6
i32.store offset=36
local.get 2
local.get 2
i32.load offset=8
local.tee 3
i32.store offset=32
block ;; label = @1
block ;; label = @2
local.get 2
i32.load8_u offset=20
i32.const 1
i32.ne
br_if 0 (;@2;)
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 1 (;@1;)
local.get 2
i32.const 32
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 1 (;@1;)
end
local.get 3
i32.eqz
br_if 0 (;@1;)
i32.const 81
i32.const 0
local.get 3
local.get 6
i32.const 1061143
i32.const 68
call $"<nanvm_lib::naive::Naive as nanvm_lib::vm::internal::IVm>::static_function"
local.set 3
local.get 2
i32.const 0
i32.store8 offset=20
local.get 2
local.get 3
i32.store offset=68
local.get 2
i32.const 7
i32.store8 offset=64
local.get 2
local.get 4
i32.store offset=60
local.get 2
local.get 5
i32.store offset=56
local.get 2
i64.const 4294967296
i64.store offset=48
local.get 2
local.get 2
i32.const 20
i32.add
i32.store offset=80
local.get 2
local.get 2
i32.const 48
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), 1>, core::result::Result<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=4
local.tee 6
i32.store offset=36
local.get 2
local.get 2
i32.load
local.tee 3
i32.store offset=32
block ;; label = @2
block ;; label = @3
local.get 2
i32.load8_u offset=20
i32.const 1
i32.ne
br_if 0 (;@3;)
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 1 (;@2;)
local.get 2
i32.const 32
i32.add
call $"<alloc::rc::Rc<[(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)]>>::drop_slow"
br 1 (;@2;)
end
local.get 3
i32.eqz
br_if 0 (;@2;)
local.get 0
local.get 6
i32.store offset=16
local.get 0
local.get 3
i32.store offset=12
local.get 0
i32.const 5
i32.store8 offset=8
local.get 0
i64.const 0
i64.store
local.get 1
call $"#func416 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 2
i32.const 96
i32.add
global.set $__stack_pointer
return
end
i32.const 1064316
i32.const 43
local.get 2
i32.const 95
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
end
i32.const 1064316
i32.const 43
local.get 2
i32.const 95
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
)
(func $"<nanvm_demos::samples::member_functions::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" (;419;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 )
global.get $__stack_pointer
i32.const 272
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
local.get 2
local.get 2
i32.load
i32.const 1
i32.add
local.tee 5
i32.store
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 5
i32.eqz
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 4
i32.const 0
i32.store8 offset=144
local.get 4
i64.const 4616189618054758400
i64.store offset=224
local.get 4
i32.const 2
i32.store8 offset=216
local.get 4
i64.const 4613937818241073152
i64.store offset=208
local.get 4
i32.const 2
i32.store8 offset=200
local.get 4
i64.const 4611686018427387904
i64.store offset=192
local.get 4
i32.const 2
i32.store8 offset=184
local.get 4
i64.const 4607182418800017408
i64.store offset=176
local.get 4
i32.const 2
i32.store8 offset=168
local.get 4
i64.const 17179869184
i64.store offset=160
local.get 4
local.get 4
i32.const 144
i32.add
i32.store offset=232
local.get 4
local.get 4
i32.const 160
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>, 4>, 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=244
local.get 4
local.get 4
i32.load
local.tee 3
i32.store offset=240
block ;; label = @9
local.get 4
i32.load8_u offset=144
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 8 (;@1;)
local.get 4
i32.const 240
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 8 (;@1;)
end
local.get 3
i32.eqz
br_if 7 (;@1;)
local.get 4
local.get 5
i32.store offset=152
local.get 4
local.get 3
i32.store offset=148
local.get 4
i32.const 6
i32.store8 offset=144
local.get 4
i32.const 0
i32.store16 offset=264
local.get 4
i32.const 1063185
i32.store offset=260
local.get 4
i32.const 1063179
i32.store offset=256
local.get 4
i32.const 160
i32.add
local.get 4
i32.const 256
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=160
local.tee 3
i32.const 255
i32.ne
br_if 1 (;@7;)
local.get 4
local.get 4
i64.load offset=164 align=4
i64.store offset=244 align=4
local.get 4
i32.const 3
i32.store8 offset=240
local.get 4
i32.const 160
i32.add
local.get 4
i32.const 144
i32.add
local.get 4
i32.const 240
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
local.get 1
i32.load
local.tee 3
i32.load offset=16
i32.eqz
br_if 2 (;@6;)
local.get 4
i32.const 120
i32.add
i32.const 8
i32.add
local.set 5
local.get 4
i32.const 120
i32.add
local.get 4
i32.const 160
i32.add
local.get 3
i32.load offset=12
i32.const 8
i32.add
local.get 4
i32.const 16
i32.add
local.get 1
call $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#0}>"
block ;; label = @9
block ;; label = @10
block ;; label = @11
block ;; label = @12
block ;; label = @13
local.get 4
i64.load offset=120
i64.const 1
i64.ne
br_if 0 (;@13;)
local.get 0
i64.const 1
i64.store
local.get 0
local.get 5
i64.load offset=8
i64.store offset=16
local.get 0
local.get 5
i64.load
i64.store offset=8
br 1 (;@12;)
end
local.get 4
local.get 5
i64.load offset=8
i64.store offset=152
local.get 4
local.get 5
i64.load
i64.store offset=144
local.get 4
i32.const 0
i32.store16 offset=264
local.get 4
i32.const 1063188
i32.store offset=260
local.get 4
i32.const 1063185
i32.store offset=256
local.get 4
i32.const 160
i32.add
local.get 4
i32.const 256
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=160
local.tee 5
i32.const 255
i32.ne
br_if 7 (;@5;)
local.get 4
local.get 4
i64.load offset=164 align=4
i64.store offset=244 align=4
local.get 4
i32.const 3
i32.store8 offset=240
local.get 4
i32.const 88
i32.add
local.get 4
i32.const 144
i32.add
local.get 4
i32.const 240
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
local.get 3
i32.load offset=16
i32.eqz
br_if 8 (;@4;)
local.get 4
i32.const 64
i32.add
i32.const 8
i32.add
local.set 5
local.get 4
i32.const 64
i32.add
local.get 4
i32.const 88
i32.add
local.get 3
i32.load offset=12
i32.const 8
i32.add
local.get 1
call $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#1}>"
local.get 4
i64.load offset=64
i64.const 1
i64.ne
br_if 1 (;@11;)
local.get 0
i64.const 1
i64.store
local.get 0
local.get 5
i64.load offset=8
i64.store offset=16
local.get 0
local.get 5
i64.load
i64.store offset=8
end
local.get 4
i32.const 16
i32.add
call $"#func416 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 1
i32.store
local.get 1
i32.eqz
br_if 1 (;@10;)
br 2 (;@9;)
end
local.get 4
local.get 5
i64.load offset=8
i64.store offset=248
local.get 4
local.get 5
i64.load
i64.store offset=240
local.get 4
i32.const 0
i32.store16 offset=264
local.get 4
i32.const 1063192
i32.store offset=260
local.get 4
i32.const 1063188
i32.store offset=256
local.get 4
i32.const 160
i32.add
local.get 4
i32.const 256
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=160
local.tee 1
i32.const 255
i32.ne
br_if 7 (;@3;)
local.get 4
local.get 4
i64.load offset=164 align=4
i64.store offset=92 align=4
local.get 4
i32.const 3
i32.store8 offset=88
local.get 4
i32.const 32
i32.add
local.get 4
i32.const 240
i32.add
local.get 4
i32.const 88
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
local.get 3
i32.load offset=16
i32.eqz
br_if 8 (;@2;)
local.get 0
local.get 4
i32.const 32
i32.add
local.get 3
i32.load offset=12
i32.const 8
i32.add
call $"<nanvm_lib::vm::lambda::PropertyLambda<nanvm_lib::naive::Naive>>::end_call::<nanvm_demos::samples::member_functions::module<nanvm_lib::naive::Naive>::{closure#0}::{closure#2}>"
local.get 4
i32.const 16
i32.add
call $"#func416 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 1
i32.store
local.get 1
br_if 1 (;@9;)
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 272
i32.add
global.set $__stack_pointer
return
end
unreachable
end
local.get 4
local.get 4
i32.load8_u offset=163
i32.store8 offset=243
local.get 4
local.get 4
i32.load16_u offset=161 align=1
i32.store16 offset=241 align=1
local.get 4
local.get 4
i32.load offset=172
i32.store offset=252
local.get 4
local.get 4
i64.load offset=164 align=4
i64.store offset=244 align=4
local.get 4
local.get 3
i32.store8 offset=240
i32.const 1057960
i32.const 43
local.get 4
i32.const 240
i32.add
i32.const 1057944
i32.const 1058004
call $core::result::unwrap_failed
unreachable
end
i32.const 0
i32.const 0
i32.const 1069140
call $core::panicking::panic_bounds_check
unreachable
end
local.get 4
local.get 4
i32.load8_u offset=163
i32.store8 offset=243
local.get 4
local.get 4
i32.load16_u offset=161 align=1
i32.store16 offset=241 align=1
local.get 4
local.get 4
i32.load offset=172
i32.store offset=252
local.get 4
local.get 4
i64.load offset=164 align=4
i64.store offset=244 align=4
local.get 4
local.get 5
i32.store8 offset=240
i32.const 1057960
i32.const 43
local.get 4
i32.const 240
i32.add
i32.const 1057944
i32.const 1058004
call $core::result::unwrap_failed
unreachable
end
i32.const 0
i32.const 0
i32.const 1069140
call $core::panicking::panic_bounds_check
unreachable
end
local.get 4
local.get 4
i32.load8_u offset=163
i32.store8 offset=91
local.get 4
local.get 4
i32.load16_u offset=161 align=1
i32.store16 offset=89 align=1
local.get 4
local.get 4
i32.load offset=172
i32.store offset=100
local.get 4
local.get 4
i64.load offset=164 align=4
i64.store offset=92 align=4
local.get 4
local.get 1
i32.store8 offset=88
i32.const 1057960
i32.const 43
local.get 4
i32.const 88
i32.add
i32.const 1057944
i32.const 1058004
call $core::result::unwrap_failed
unreachable
end
i32.const 0
i32.const 0
i32.const 1069140
call $core::panicking::panic_bounds_check
unreachable
end
i32.const 1064316
i32.const 43
local.get 4
i32.const 271
i32.add
i32.const 1064300
i32.const 1064360
call $core::result::unwrap_failed
unreachable
)
Run