2#include "wasm/asyncify.h"
11static void func1(
void *arg0,
void *arg1) {
13 fprintf(stderr,
"func1: started\n");
14 fprintf(stderr,
"func1: swapcontext(&fctx_func1, &fctx_func2)\n");
16 rb_wasm_swapcontext(&fctx_func1, &fctx_func2);
18 fprintf(stderr,
"func1: returning\n");
21static void func2(
void *arg0,
void *arg1) {
23 fprintf(stderr,
"func2: started\n");
24 fprintf(stderr,
"func2: swapcontext(&fctx_func2, &fctx_func1)\n");
26 rb_wasm_swapcontext(&fctx_func2, &fctx_func1);
29 fprintf(stderr,
"func2: swapcontext(&fctx_func2, &fctx_func2)\n");
31 rb_wasm_swapcontext(&fctx_func2, &fctx_func2);
34 fprintf(stderr,
"func2: swapcontext(&fctx_func2, &fctx_main)\n");
36 rb_wasm_swapcontext(&fctx_func2, &fctx_main);
38 fprintf(stderr,
"func2: returning\n");
39 assert(
false &&
"unreachable");
44int start(
int argc,
char **argv) {
45 rb_wasm_init_context(&fctx_main, NULL, NULL, NULL);
46 fctx_main.is_started =
true;
48 rb_wasm_init_context(&fctx_func1, func1, NULL, NULL);
50 rb_wasm_init_context(&fctx_func2, func2, NULL, NULL);
53 fprintf(stderr,
"start: swapcontext(&uctx_main, &fctx_func2)\n");
54 rb_wasm_swapcontext(&fctx_main, &fctx_func2);
57 fprintf(stderr,
"start: exiting\n");
61int main(
int argc,
char **argv) {
62 extern int rb_wasm_rt_start(
int (main)(
int argc,
char **argv),
int argc,
char **argv);
63 int result = rb_wasm_rt_start(start, argc, argv);