extern crate context;
use context::{Context, Transfer};
use context::stack::ProtectedFixedSizeStack;
fn main() {
extern "C" fn context_function(mut t: Transfer) -> ! {
let mut a = 0usize;
let mut b = 1usize;
loop {
print!("Yielding {} => ", a);
t = unsafe { t.context.resume(a) };
let next = a + b;
a = b;
b = next;
}
}
let stack = ProtectedFixedSizeStack::default();
let mut t = Transfer::new(unsafe { Context::new(&stack, context_function) }, 0);
for _ in 0..10 {
print!("Resuming => ");
t = unsafe { t.context.resume(0) };
println!("Got {}", t.data);
}
println!("Finished!");
}