#[macro_export]
#[deprecated = "Use `let_gen_using!()` instead."]
macro_rules! generator_mut {
($name:ident, $producer:expr $(,)?) => {
$crate::stack::let_gen_using!($name, $producer);
};
}
#[macro_export]
#[deprecated = "Use `let_gen_using!()` instead."]
macro_rules! unsafe_create_generator {
($name:ident, $producer:expr $(,)?) => {
let mut generator_state = $crate::stack::Shelf::new();
#[allow(unused_mut)]
let mut $name =
unsafe { $crate::stack::Gen::new(&mut generator_state, $producer) };
};
}
#[cfg(test)]
mod tests {
use crate::{
ops::GeneratorState,
stack::{Co, Gen, Shelf},
};
#[test]
#[ignore = "compile-only test"]
fn unsafety() {
async fn shenanigans(co: Co<'_, i32>) -> Co<'_, i32> {
co
}
let mut shelf = Shelf::new();
let mut gen = unsafe { Gen::new(&mut shelf, shenanigans) };
let escaped_co = match gen.resume() {
GeneratorState::Yielded(_) => panic!(),
GeneratorState::Complete(co) => co,
};
drop(gen);
let _ = escaped_co.yield_(10);
}
}
#[allow(dead_code)]
mod doctests {
fn generator_cannot_escape() {}
fn generator_cannot_escape_baseline() {}
}