(interp: &Interpreter)
| 7 | }; |
| 8 | |
| 9 | fn py_main(interp: &Interpreter) -> vm::PyResult<()> { |
| 10 | let generator = interp.enter(|vm| { |
| 11 | let scope = vm.new_scope_with_builtins(); |
| 12 | let generator = vm.run_block_expr( |
| 13 | scope, |
| 14 | r#" |
| 15 | def gen(): |
| 16 | for i in range(10): |
| 17 | yield i |
| 18 | |
| 19 | gen() |
| 20 | "#, |
| 21 | )?; |
| 22 | Ok(generator) |
| 23 | })?; |
| 24 | |
| 25 | loop { |
| 26 | let r = interp.enter(|vm| { |
| 27 | let v = match PyIter::new(generator.clone()).next(vm)? { |
| 28 | PyIterReturn::Return(obj) => { |
| 29 | PyIterReturn::Return(obj.try_into_value::<PyIntRef>(vm)?) |
| 30 | } |
| 31 | PyIterReturn::StopIteration(x) => PyIterReturn::StopIteration(x), |
| 32 | }; |
| 33 | PyResult::Ok(v) |
| 34 | })?; |
| 35 | match r { |
| 36 | PyIterReturn::Return(value) => println!("{value}"), |
| 37 | PyIterReturn::StopIteration(_) => break, |
| 38 | } |
| 39 | } |
| 40 | |
| 41 | Ok(()) |
| 42 | } |
| 43 | |
| 44 | fn main() -> ExitCode { |
| 45 | let builder = vm::Interpreter::builder(Default::default()); |
no test coverage detected