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

Method next

crates/vm/src/stdlib/itertools.rs:75–119  ·  view source on GitHub ↗
(zelf: &Py<Self>, vm: &VirtualMachine)

Source from the content-addressed store, hash-verified

73
74 impl IterNext for PyItertoolsChain {
75 fn next(zelf: &Py<Self>, vm: &VirtualMachine) -> PyResult<PyIterReturn> {
76 let Some(source) = zelf.source.read().clone() else {
77 return Ok(PyIterReturn::StopIteration(None));
78 };
79 let next = loop {
80 let maybe_active = zelf.active.read().clone();
81 if let Some(active) = maybe_active {
82 match active.next(vm) {
83 Ok(PyIterReturn::Return(ok)) => {
84 break Ok(PyIterReturn::Return(ok));
85 }
86 Ok(PyIterReturn::StopIteration(_)) => {
87 *zelf.active.write() = None;
88 }
89 Err(err) => {
90 break Err(err);
91 }
92 }
93 } else {
94 match source.next(vm) {
95 Ok(PyIterReturn::Return(ok)) => match ok.get_iter(vm) {
96 Ok(iter) => {
97 *zelf.active.write() = Some(iter);
98 }
99 Err(err) => {
100 break Err(err);
101 }
102 },
103 Ok(PyIterReturn::StopIteration(_)) => {
104 break Ok(PyIterReturn::StopIteration(None));
105 }
106 Err(err) => {
107 break Err(err);
108 }
109 }
110 }
111 };
112 match next {
113 Err(_) | Ok(PyIterReturn::StopIteration(_)) => {
114 *zelf.source.write() = None;
115 }
116 _ => {}
117 };
118 next
119 }
120 }
121
122 #[pyattr]

Callers 1

get_itemMethod · 0.45

Calls 15

newFunction · 0.85
get_iterMethod · 0.80
try_to_boolMethod · 0.80
_iaddMethod · 0.80
try_to_valueMethod · 0.80
bool_eqMethod · 0.80
is_currentMethod · 0.80
collectMethod · 0.80
update_idxsMethod · 0.80
clone_intoMethod · 0.80
to_vecMethod · 0.80
ErrClass · 0.50

Tested by

no test coverage detected