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