Skip to content

Commit 1e4e266

Browse files
committed
add HAS_DICT flag to chain
1 parent bda0f4e commit 1e4e266

1 file changed

Lines changed: 18 additions & 2 deletions

File tree

vm/src/stdlib/itertools.rs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ mod decl {
3030
active: PyRwLock<Option<PyIter>>,
3131
}
3232

33-
#[pyclass(with(IterNext), flags(BASETYPE))]
33+
#[pyclass(with(IterNext), flags(BASETYPE, HAS_DICT))]
3434
impl PyItertoolsChain {
3535
#[pyslot]
3636
fn slot_new(cls: PyTypeRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult {
@@ -69,7 +69,23 @@ mod decl {
6969
match source {
7070
Some(source) => match active {
7171
Some(active) => {
72-
Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), (source, active))))
72+
Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), ((source, active)))))
73+
}
74+
None => Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), (source,)))),
75+
},
76+
None => Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone()))),
77+
}
78+
}
79+
80+
#[pymethod(magic)]
81+
fn reduce_ex(zelf: PyRef<Self>, _proto: usize, vm: &VirtualMachine) -> PyResult<PyTupleRef> {
82+
let source = zelf.source.read().clone();
83+
let active = zelf.active.read().clone();
84+
let cls = zelf.class().to_owned();
85+
match source {
86+
Some(source) => match active {
87+
Some(active) => {
88+
Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), ((source, active)))))
7389
}
7490
None => Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), (source,)))),
7591
},

0 commit comments

Comments
 (0)