In FunctionalScript fjs compile accepts this module, and it runs as JavaScript and as WebAssembly alike.
A FunctionalScript module and what fjs compile makes of it: the expression graph it lowers to, the Rust it compiles to on the NaNVM runtime, and the WebAssembly that Rust builds to. Run calls its default export with 0, then 1, 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) (String Escapes and Quotes) as a
* function of one number, for the page's WASM demo: a JSON escape, `\\'` in
* single quotes, and a `\\u` escape, each string's length.
*
* @module
*/
/** @type {(...a: readonly number[]) => unknown} */
export default (...a ) => ["tab\there" , 'it\'s' , "\u0041" ][Number (a [0 ])].length ;
Expression graph (EDAG) that fjs compile lowers it to:
=> length body 0 . . obj key . "length" . obj idx [] 0 1 2 "tab\there" "it's" "A" Number operand . obj idx rest 0 The same graph, as fjs compile writes it to a .edag.data.js file:
export default ["{}" ,[[":" ,"default" ,["=>" ,0 ,[],["." ,["." ,["[]" ,["tab\there" ,"it's" ,"A" ]],["Number" ,["." ,["rest" ],0 ]]],"length" ]]]]];Rust that fjs compile writes from it, on the NaNVM runtime:
// @generated by `fjs compile`. Do not edit: recompile the source module instead.
use nanvm_lib ::vm ::unstable ::{f64_any , string_any , string_key };
use nanvm_lib ::vm ::{Any , Array , 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 _b264 : Any <A > = _args .rest (0 ).to_any ();
Any ::dot ((Any ::dot ([string_any ("tab\there" ), string_any ("it's" ), string_any ("A" )].to_array ().to_any (), (Any ::number ((Any ::dot (_b264 .clone (), f64_any (0x0000000000000000 )).end ())?))?).end ())?, string_any ("length" )).end ()
}, 0 , Array ::default (), Some ("(...$0)=>[\"tab\\there\",\"it's\",\"A\"][Number($0[0])].length" )).to_any ())].to_object ().to_any ())
}
WebAssembly text (WAT) of the functions compiled from this source, without the NaNVM runtime:
(func $nanvm_demos::samples::string_escapes::module::<nanvm_lib::naive::Naive> (;589;) (type 1 ) (param i32 i32 )
(local i32 i32 i32 i32 i32 i32 i32 )
global.get $__stack_pointer
i32.const 112
i32.sub
local.tee 2
global.set $__stack_pointer
local.get 2
i32.const 255
i32.store8 offset=40
local.get 2
i32.const 0
i32.store16 offset=72
local.get 2
i32.const 1064816
i32.store offset=68
local.get 2
i32.const 1064809
i32.store offset=64
local.get 2
local.get 2
i32.const 40
i32.add
i32.store offset=76
local.get 2
i32.const 24
i32.add
local.get 2
i32.const 64
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=28
local.tee 3
i32.store offset=60
local.get 2
local.get 2
i32.load offset=24
local.tee 4
i32.store offset=56
block ;; label = @1
local.get 2
i32.load8_u offset=40
local.tee 5
i32.const 255
i32.eq
br_if 0 (;@1;)
local.get 2
i32.load offset=44
local.set 0
local.get 2
i32.load offset=48
local.set 3
local.get 2
i32.load offset=52
local.set 1
local.get 2
i32.load16_u offset=41 align=1
local.set 6
local.get 2
i32.load8_u offset=43
local.set 7
local.get 4
local.get 4
i32.load
i32.const -1
i32.add
local.tee 8
i32.store
local.get 2
local.get 7
i32.store8 offset=38
local.get 2
local.get 6
i32.store16 offset=36
block ;; label = @2
local.get 8
br_if 0 (;@2;)
local.get 2
i32.const 56
i32.add
call $"<alloc::rc::Rc<[u16]>>::drop_slow"
end
local.get 2
local.get 5
i32.store8 offset=64
local.get 2
local.get 2
i32.load16_u offset=36
i32.store16 offset=65 align=1
local.get 2
local.get 2
i32.load8_u offset=38
i32.store8 offset=67
local.get 2
local.get 1
i32.store offset=76
local.get 2
local.get 3
i32.store offset=72
local.get 2
local.get 0
i32.store offset=68
i32.const 1065572
i32.const 43
local.get 2
i32.const 64
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 2
i32.const 0
i32.store8 offset=40
local.get 2
i32.const 16
i32.add
local.get 2
i32.const 40
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::iter::sources::empty::Empty<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>, core::result::Result<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>, ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=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 = @1
block ;; label = @2
local.get 2
i32.load8_u offset=40
i32.const 1
i32.ne
br_if 0 (;@2;)
local.get 5
local.get 5
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 1 (;@1;)
local.get 2
i32.const 64
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 1 (;@1;)
end
local.get 5
i32.eqz
br_if 0 (;@1;)
i32.const 173
i32.const 0
local.get 5
local.get 6
i32.const 1064901
i32.const 55
call $<nanvm_lib::naive::function::Function>::new
local.set 5
local.get 2
i32.const 0
i32.store8 offset=56
local.get 2
local.get 5
i32.store offset=84
local.get 2
i32.const 7
i32.store8 offset=80
local.get 2
local.get 3
i32.store offset=76
local.get 2
local.get 4
i32.store offset=72
local.get 2
i64.const 4294967296
i64.store offset=64
local.get 2
local.get 2
i32.const 56
i32.add
i32.store offset=96
local.get 2
i32.const 8
i32.add
local.get 2
i32.const 64
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::array::iter::IntoIter<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), 1>, core::result::Result<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>), ()>::Ok>, core::result::Result<core::convert::Infallible, ()>> as alloc::rc::ToRcSlice<(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)>>::to_rc_slice"
local.get 2
local.get 2
i32.load offset=12
local.tee 4
i32.store offset=44
local.get 2
local.get 2
i32.load offset=8
local.tee 5
i32.store offset=40
block ;; label = @2
block ;; label = @3
local.get 2
i32.load8_u offset=56
i32.const 1
i32.ne
br_if 0 (;@3;)
local.get 5
local.get 5
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 1 (;@2;)
local.get 2
i32.const 40
i32.add
call $"<alloc::rc::Rc<[(nanvm_lib::vm::string::String<nanvm_lib::naive::Naive>, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>)]>>::drop_slow"
br 1 (;@2;)
end
local.get 5
i32.eqz
br_if 0 (;@2;)
local.get 0
local.get 4
i32.store offset=16
local.get 0
local.get 5
i32.store offset=12
local.get 0
i32.const 5
i32.store8 offset=8
local.get 0
i64.const 0
i64.store
local.get 1
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 2
i32.const 112
i32.add
global.set $__stack_pointer
return
end
i32.const 1057428
i32.const 43
local.get 2
i32.const 111
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
end
i32.const 1057428
i32.const 43
local.get 2
i32.const 111
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
)
(func $"<nanvm_demos::samples::string_escapes::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" (;590;) (type 4 ) (param i32 i32 i32 i32 )
(local i32 i32 i32 i32 i32 i32 i32 i32 f64 )
global.get $__stack_pointer
i32.const 320
i32.sub
local.tee 4
global.set $__stack_pointer
local.get 4
local.get 3
i32.store offset=52
local.get 4
local.get 2
i32.store offset=48
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
local.get 5
i32.eqz
br_if 0 (;@4;)
local.get 4
local.get 3
i32.store offset=64
local.get 4
local.get 2
i32.store offset=60
local.get 4
i32.const 6
i32.store8 offset=56
local.get 4
i32.const 255
i32.store8 offset=184
local.get 4
i32.const 0
i32.store16 offset=256
local.get 4
i32.const 1065654
i32.store offset=252
local.get 4
i32.const 1065646
i32.store offset=248
local.get 4
local.get 4
i32.const 184
i32.add
i32.store offset=260
local.get 4
i32.const 40
i32.add
local.get 4
i32.const 248
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=44
local.tee 6
i32.store offset=140
local.get 4
local.get 4
i32.load offset=40
local.tee 5
i32.store offset=136
block ;; label = @5
local.get 4
i32.load8_u offset=184
local.tee 7
i32.const 255
i32.eq
br_if 0 (;@5;)
local.get 4
i32.load offset=188
local.set 2
local.get 4
i32.load offset=192
local.set 0
local.get 4
i32.load offset=196
local.set 3
local.get 4
i32.load16_u offset=185 align=1
local.set 6
local.get 4
i32.load8_u offset=187
local.set 8
local.get 5
local.get 5
i32.load
i32.const -1
i32.add
local.tee 9
i32.store
local.get 4
local.get 8
i32.store8 offset=90
local.get 4
local.get 6
i32.store16 offset=88
block ;; label = @6
local.get 9
br_if 0 (;@6;)
local.get 4
i32.const 136
i32.add
call $"<alloc::rc::Rc<[u16]>>::drop_slow"
end
local.get 4
local.get 7
i32.store8 offset=248
local.get 4
local.get 4
i32.load16_u offset=88
i32.store16 offset=249 align=1
local.get 4
local.get 4
i32.load8_u offset=90
i32.store8 offset=251
local.get 4
local.get 3
i32.store offset=260
local.get 4
local.get 0
i32.store offset=256
local.get 4
local.get 2
i32.store offset=252
i32.const 1065572
i32.const 43
local.get 4
i32.const 248
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 4
i32.const 255
i32.store8 offset=184
local.get 4
i32.const 0
i32.store16 offset=256
local.get 4
i32.const 1065658
i32.store offset=252
local.get 4
i32.const 1065654
i32.store offset=248
local.get 4
local.get 4
i32.const 184
i32.add
i32.store offset=260
local.get 4
i32.const 32
i32.add
local.get 4
i32.const 248
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=36
local.tee 9
i32.store offset=140
local.get 4
local.get 4
i32.load offset=32
local.tee 7
i32.store offset=136
block ;; label = @5
local.get 4
i32.load8_u offset=184
local.tee 8
i32.const 255
i32.eq
br_if 0 (;@5;)
local.get 4
i32.load offset=188
local.set 2
local.get 4
i32.load offset=192
local.set 0
local.get 4
i32.load offset=196
local.set 3
local.get 4
i32.load16_u offset=185 align=1
local.set 5
local.get 4
i32.load8_u offset=187
local.set 6
local.get 7
local.get 7
i32.load
i32.const -1
i32.add
local.tee 9
i32.store
local.get 4
local.get 6
i32.store8 offset=90
local.get 4
local.get 5
i32.store16 offset=88
block ;; label = @6
local.get 9
br_if 0 (;@6;)
local.get 4
i32.const 136
i32.add
call $"<alloc::rc::Rc<[u16]>>::drop_slow"
end
local.get 4
local.get 8
i32.store8 offset=248
local.get 4
local.get 4
i32.load16_u offset=88
i32.store16 offset=249 align=1
local.get 4
local.get 4
i32.load8_u offset=90
i32.store8 offset=251
local.get 4
local.get 3
i32.store offset=260
local.get 4
local.get 0
i32.store offset=256
local.get 4
local.get 2
i32.store offset=252
i32.const 1065572
i32.const 43
local.get 4
i32.const 248
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 4
i32.const 255
i32.store8 offset=184
local.get 4
i32.const 0
i32.store16 offset=256
local.get 4
i32.const 1065659
i32.store offset=252
local.get 4
i32.const 1065658
i32.store offset=248
local.get 4
local.get 4
i32.const 184
i32.add
i32.store offset=260
local.get 4
i32.const 24
i32.add
local.get 4
i32.const 248
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=28
local.tee 10
i32.store offset=140
local.get 4
local.get 4
i32.load offset=24
local.tee 8
i32.store offset=136
block ;; label = @5
local.get 4
i32.load8_u offset=184
local.tee 11
i32.const 255
i32.eq
br_if 0 (;@5;)
local.get 4
i32.load offset=188
local.set 2
local.get 4
i32.load offset=192
local.set 0
local.get 4
i32.load offset=196
local.set 3
local.get 4
i32.load16_u offset=185 align=1
local.set 5
local.get 4
i32.load8_u offset=187
local.set 7
local.get 8
local.get 8
i32.load
i32.const -1
i32.add
local.tee 6
i32.store
local.get 4
local.get 7
i32.store8 offset=90
local.get 4
local.get 5
i32.store16 offset=88
block ;; label = @6
local.get 6
br_if 0 (;@6;)
local.get 4
i32.const 136
i32.add
call $"<alloc::rc::Rc<[u16]>>::drop_slow"
end
local.get 4
local.get 11
i32.store8 offset=248
local.get 4
local.get 4
i32.load16_u offset=88
i32.store16 offset=249 align=1
local.get 4
local.get 4
i32.load8_u offset=90
i32.store8 offset=251
local.get 4
local.get 3
i32.store offset=260
local.get 4
local.get 0
i32.store offset=256
local.get 4
local.get 2
i32.store offset=252
i32.const 1065572
i32.const 43
local.get 4
i32.const 248
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 4
i32.const 0
i32.store8 offset=136
local.get 4
local.get 10
i32.store offset=296
local.get 4
local.get 8
i32.store offset=292
local.get 4
i32.const 3
i32.store8 offset=288
local.get 4
local.get 9
i32.store offset=280
local.get 4
local.get 7
i32.store offset=276
local.get 4
i32.const 3
i32.store8 offset=272
local.get 4
local.get 6
i32.store offset=264
local.get 4
local.get 5
i32.store offset=260
local.get 4
i32.const 3
i32.store8 offset=256
local.get 4
i64.const 12884901888
i64.store offset=248
local.get 4
local.get 4
i32.const 136
i32.add
i32.store offset=304
local.get 4
i32.const 16
i32.add
local.get 4
i32.const 248
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=20
local.tee 7
i32.store offset=188
local.get 4
local.get 4
i32.load offset=16
local.tee 5
i32.store offset=184
block ;; label = @5
local.get 4
i32.load8_u offset=136
i32.const 1
i32.ne
br_if 0 (;@5;)
local.get 5
local.get 5
i32.load
i32.const -1
i32.add
local.tee 2
i32.store
local.get 2
br_if 4 (;@1;)
local.get 4
i32.const 184
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
br 4 (;@1;)
end
local.get 5
i32.eqz
br_if 3 (;@1;)
local.get 4
local.get 7
i32.store offset=240
local.get 4
local.get 5
i32.store offset=236
local.get 4
i32.const 6
i32.store8 offset=232
local.get 2
local.get 2
i32.load
i32.const 1
i32.add
local.tee 5
i32.store
local.get 5
i32.eqz
br_if 0 (;@4;)
local.get 4
local.get 2
i32.store offset=188
local.get 4
i32.const 6
i32.store8 offset=184
local.get 4
local.get 3
i64.extend_i32_u
i64.store offset=192
local.get 4
i64.const 0
i64.store offset=256
local.get 4
i32.const 2
i32.store8 offset=248
local.get 4
i32.const 88
i32.add
local.get 4
i32.const 184
i32.add
local.get 4
i32.const 248
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @5
block ;; label = @6
local.get 4
i32.load8_u offset=88
i32.const 255
i32.ne
br_if 0 (;@6;)
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
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 232
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
br 1 (;@5;)
end
local.get 4
local.get 4
i64.load offset=112
i64.store offset=272
local.get 4
local.get 4
i64.load offset=104
i64.store offset=264
local.get 4
local.get 4
i64.load offset=96
i64.store offset=256
local.get 4
local.get 4
i64.load offset=88
i64.store offset=248
local.get 4
i32.const 184
i32.add
local.get 4
i32.const 248
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @6
block ;; label = @7
local.get 4
i32.load8_u offset=184
i32.const 255
i32.eq
br_if 0 (;@7;)
local.get 4
local.get 4
i64.load offset=192
i64.store offset=128
local.get 4
local.get 4
i64.load offset=184
i64.store offset=120
br 1 (;@6;)
end
local.get 4
i32.const 256
i32.store16 offset=120
end
local.get 4
i32.const 248
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 264
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 248
i32.add
local.get 4
i32.const 120
i32.add
call $<nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::to_numeric
local.get 4
f64.load offset=264
local.set 12
local.get 4
i32.load offset=260
local.set 3
local.get 4
i32.load offset=256
local.set 5
block ;; label = @6
local.get 4
i32.load offset=248
br_if 0 (;@6;)
block ;; label = @7
local.get 5
i32.const 1
i32.ne
br_if 0 (;@7;)
local.get 4
local.get 12
f64.store offset=252 align=4
local.get 4
local.get 3
i32.store offset=248
local.get 4
i32.const 248
i32.add
call $<nanvm_lib::vm::bigint::BigInt<nanvm_lib::naive::Naive>>::to_number
local.set 12
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 5
i32.store
local.get 5
br_if 0 (;@7;)
local.get 4
i32.const 248
i32.add
call $"<alloc::rc::Rc<[u64]>>::drop_slow"
end
local.get 4
local.get 12
f64.store offset=80
local.get 4
i32.const 2
i32.store offset=72
local.get 4
i32.const 136
i32.add
local.get 4
i32.const 232
i32.add
local.get 4
i32.const 72
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @7
local.get 4
i32.load8_u offset=136
i32.const 255
i32.ne
br_if 0 (;@7;)
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
br 2 (;@5;)
end
local.get 4
local.get 4
i64.load offset=160
i64.store offset=272
local.get 4
local.get 4
i64.load offset=152
i64.store offset=264
local.get 4
local.get 4
i64.load offset=144
i64.store offset=256
local.get 4
local.get 4
i64.load offset=136
i64.store offset=248
local.get 4
i32.const 184
i32.add
local.get 4
i32.const 248
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @7
block ;; label = @8
local.get 4
i32.load8_u offset=184
i32.const 255
i32.eq
br_if 0 (;@8;)
local.get 4
local.get 4
i64.load offset=192
i64.store offset=176
local.get 4
local.get 4
i64.load offset=184
i64.store offset=168
br 1 (;@7;)
end
local.get 4
i32.const 256
i32.store16 offset=168
end
local.get 4
i32.const 248
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 264
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 255
i32.store8 offset=184
local.get 4
i32.const 0
i32.store16 offset=256
local.get 4
i32.const 1065643
i32.store offset=252
local.get 4
i32.const 1065637
i32.store offset=248
local.get 4
local.get 4
i32.const 184
i32.add
i32.store offset=260
local.get 4
i32.const 8
i32.add
local.get 4
i32.const 248
i32.add
call $"<core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::str::iter::EncodeUtf16, core::result::Result<u16, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>::Ok>, core::result::Result<core::convert::Infallible, nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>>> as alloc::rc::ToRcSlice<u16>>::to_rc_slice"
local.get 4
local.get 4
i32.load offset=12
local.tee 5
i32.store offset=236
local.get 4
local.get 4
i32.load offset=8
local.tee 3
i32.store offset=232
block ;; label = @7
local.get 4
i32.load8_u offset=184
local.tee 7
i32.const 255
i32.eq
br_if 0 (;@7;)
local.get 4
i32.load offset=188
local.set 2
local.get 4
i32.load offset=192
local.set 0
local.get 4
i32.load offset=196
local.set 5
local.get 4
i32.load16_u offset=185 align=1
local.set 6
local.get 4
i32.load8_u offset=187
local.set 8
local.get 3
local.get 3
i32.load
i32.const -1
i32.add
local.tee 9
i32.store
local.get 4
local.get 8
i32.store8 offset=218
local.get 4
local.get 6
i32.store16 offset=216
block ;; label = @8
local.get 9
br_if 0 (;@8;)
local.get 4
i32.const 232
i32.add
call $"<alloc::rc::Rc<[u16]>>::drop_slow"
end
local.get 4
local.get 7
i32.store8 offset=248
local.get 4
local.get 4
i32.load16_u offset=216
i32.store16 offset=249 align=1
local.get 4
local.get 4
i32.load8_u offset=218
i32.store8 offset=251
local.get 4
local.get 5
i32.store offset=260
local.get 4
local.get 0
i32.store offset=256
local.get 4
local.get 2
i32.store offset=252
i32.const 1065572
i32.const 43
local.get 4
i32.const 248
i32.add
i32.const 1065556
i32.const 1065616
call $core::result::unwrap_failed
unreachable
end
local.get 4
local.get 5
i32.store offset=256
local.get 4
local.get 3
i32.store offset=252
local.get 4
i32.const 3
i32.store8 offset=248
local.get 4
i32.const 184
i32.add
local.get 4
i32.const 168
i32.add
local.get 4
i32.const 248
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::new
block ;; label = @7
block ;; label = @8
local.get 4
i32.load8_u offset=184
i32.const 255
i32.ne
br_if 0 (;@8;)
local.get 0
local.get 4
i64.load offset=200
i64.store offset=16
local.get 0
local.get 4
i64.load offset=192
i64.store offset=8
local.get 0
i64.const 1
i64.store
br 1 (;@7;)
end
local.get 4
local.get 4
i64.load offset=208
i64.store offset=272
local.get 4
local.get 4
i64.load offset=200
i64.store offset=264
local.get 4
local.get 4
i64.load offset=192
i64.store offset=256
local.get 4
local.get 4
i64.load offset=184
i64.store offset=248
local.get 4
i32.const 232
i32.add
local.get 4
i32.const 248
i32.add
call $<nanvm_lib::vm::lambda::member::Member<nanvm_lib::naive::Naive>>::own
block ;; label = @8
block ;; label = @9
local.get 4
i32.load8_u offset=232
local.tee 3
i32.const 255
i32.ne
br_if 0 (;@9;)
i32.const 1
local.set 5
i32.const 0
local.set 3
br 1 (;@8;)
end
local.get 4
local.get 4
i64.load offset=234 align=2
i64.store offset=216
local.get 4
local.get 4
i64.load offset=240 align=2
i64.store offset=222 align=2
local.get 4
i32.load8_u offset=233
local.set 5
end
local.get 4
i32.const 248
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 4
i32.const 264
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 0
local.get 5
i32.store8 offset=9
local.get 0
local.get 3
i32.store8 offset=8
local.get 0
i64.const 0
i64.store
local.get 0
local.get 4
i64.load offset=216
i64.store offset=10 align=2
local.get 0
local.get 4
i64.load offset=222 align=2
i64.store offset=16 align=2
end
local.get 4
i32.const 56
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
br_if 4 (;@2;)
br 3 (;@3;)
end
local.get 0
local.get 12
f64.store offset=16
local.get 0
local.get 3
i32.store offset=12
local.get 0
local.get 5
i32.store offset=8
local.get 0
i64.const 1
i64.store
local.get 4
i32.const 232
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
end
local.get 4
i32.const 56
i32.add
call $"#func562 core::ptr::drop_glue::<nanvm_lib::vm::unpacked::Unpacked<nanvm_lib::naive::Naive>>"
local.get 2
local.get 2
i32.load
i32.const -1
i32.add
local.tee 0
i32.store
local.get 0
i32.eqz
br_if 1 (;@3;)
br 2 (;@2;)
end
unreachable
end
local.get 4
i32.const 48
i32.add
call $"<alloc::rc::Rc<[nanvm_lib::vm::any::Any<nanvm_lib::naive::Naive>]>>::drop_slow"
end
local.get 4
i32.const 320
i32.add
global.set $__stack_pointer
return
end
i32.const 1057428
i32.const 43
local.get 4
i32.const 319
i32.add
i32.const 1057412
i32.const 1057472
call $core::result::unwrap_failed
unreachable
)
Run