gc-2.js (1105B)
1 // Example from the proposal. 2 3 gczeal(2,5); 4 5 var compute_delta = (i) => Promise.resolve(i / 100 || 1); 6 7 var suspending_compute_delta = new WebAssembly.Suspending(compute_delta); 8 9 var ins = wasmEvalText(`(module 10 (import "js" "init_state" (func $init_state (result f64))) 11 (import "js" "compute_delta" 12 (func $compute_delta (param i32) (result f64))) 13 14 (global $state (mut f64) (f64.const nan)) 15 (func $init (global.set $state (call $init_state))) 16 (start $init) 17 18 (func $get_state (export "get_state") (result f64) (global.get $state)) 19 (func $update_state (export "update_state") (param i32) (result f64) 20 (global.set $state (f64.add 21 (global.get $state) (call $compute_delta (local.get 0)))) 22 (global.get $state) 23 ) 24 25 )`, { 26 js: { 27 init_state() { return 0; }, 28 compute_delta: suspending_compute_delta, 29 }, 30 }); 31 32 var update_state = WebAssembly.promising(ins.exports.update_state); 33 34 var res = update_state(4); 35 var tasks = res.then((r) => { 36 print(r); 37 assertEq(ins.exports.get_state(), .04); 38 }); 39 40 assertEq(ins.exports.get_state(), 0);