MCPcopy Index your code
hub / github.com/RustPython/RustPython / py_main

Function py_main

examples/generator.rs:9–42  ·  view source on GitHub ↗
(interp: &Interpreter)

Source from the content-addressed store, hash-verified

7};
8
9fn 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#"
15def gen():
16 for i in range(10):
17 yield i
18
19gen()
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
44fn main() -> ExitCode {
45 let builder = vm::Interpreter::builder(Default::default());

Callers 1

mainFunction · 0.70

Calls 6

newFunction · 0.85
run_block_exprMethod · 0.80
enterMethod · 0.45
nextMethod · 0.45
cloneMethod · 0.45

Tested by

no test coverage detected