Skip to content
Prev Previous commit
Next Next commit
add HAS_DICT flag to chain
  • Loading branch information
dannasman committed Oct 18, 2022
commit 1e4e266822d12a7748d76dea7c9984415ea75322
20 changes: 18 additions & 2 deletions vm/src/stdlib/itertools.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ mod decl {
active: PyRwLock<Option<PyIter>>,
}

#[pyclass(with(IterNext), flags(BASETYPE))]
#[pyclass(with(IterNext), flags(BASETYPE, HAS_DICT))]
impl PyItertoolsChain {
#[pyslot]
fn slot_new(cls: PyTypeRef, args: FuncArgs, vm: &VirtualMachine) -> PyResult {
Expand Down Expand Up @@ -69,7 +69,23 @@ mod decl {
match source {
Some(source) => match active {
Some(active) => {
Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), (source, active))))
Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), ((source, active)))))
}
None => Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), (source,)))),
},
None => Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone()))),
}
}

#[pymethod(magic)]
fn reduce_ex(zelf: PyRef<Self>, _proto: usize, vm: &VirtualMachine) -> PyResult<PyTupleRef> {
let source = zelf.source.read().clone();
let active = zelf.active.read().clone();
let cls = zelf.class().to_owned();
match source {
Some(source) => match active {
Some(active) => {
Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), ((source, active)))))
}
None => Ok(vm.new_tuple((cls, vm.ctx.empty_tuple.clone(), (source,)))),
},
Expand Down