extern crate lwkt; extern crate fn_box; use std::ptr::null_mut; use std::intrinsics::abort; use lwkt::Context; use fn_box::FnBox; fn main() { let f = Box::new(move |:| { println!("Hello, world!") }); let mut native = unsafe { Context::native() }; fn init(ctx: *mut (*mut Context, *mut Context), f: Box>) -> ! { unsafe { let (native, green) = *ctx; f(); Context::swap(&mut *green, &mut *native); abort(); } } let mut ctx = Box::new((&mut native as *mut Context, null_mut())); let mut green = Context::new(init, &mut *ctx as *mut _, f); ctx.1 = &mut green as *mut Context; unsafe { Context::swap(&mut native, &mut green); } println!("size_of::() == {}", std::mem::size_of::()); }