1 #![expect(unsafe_op_in_unsafe_fn, reason = "old code, not worth updating yet")]
2 
3 mod bindings {
4     wit_bindgen::generate!({
5         path: "../misc/component-async-tests/wit",
6         world: "yield-callee",
7     });
8 }
9 
10 use {
11     bindings::local::local::continue_,
12     test_programs::async_::{CALLBACK_CODE_EXIT, CALLBACK_CODE_YIELD, EVENT_CANCELLED, EVENT_NONE},
13 };
14 
15 #[cfg(target_arch = "wasm32")]
16 #[link(wasm_import_module = "[export]local:local/run")]
17 unsafe extern "C" {
18     #[link_name = "[task-return]run"]
task_return_run()19     fn task_return_run();
20 }
21 #[cfg(not(target_arch = "wasm32"))]
task_return_run()22 unsafe extern "C" fn task_return_run() {
23     unreachable!()
24 }
25 
26 #[unsafe(export_name = "[async-lift]local:local/run#run")]
export_run() -> u3227 unsafe extern "C" fn export_run() -> u32 {
28     callback_run(EVENT_NONE, 0, 0)
29 }
30 
31 #[unsafe(export_name = "[callback][async-lift]local:local/run#run")]
callback_run(event0: u32, _event1: u32, _event2: u32) -> u3232 unsafe extern "C" fn callback_run(event0: u32, _event1: u32, _event2: u32) -> u32 {
33     assert!(event0 == EVENT_NONE || event0 == EVENT_CANCELLED);
34 
35     if continue_::get_continue() && event0 == EVENT_NONE {
36         CALLBACK_CODE_YIELD
37     } else {
38         task_return_run();
39         CALLBACK_CODE_EXIT
40     }
41 }
42 
43 // Unused function; required since this file is built as a `bin`:
main()44 fn main() {}
45