Skip to content

Commit 8645330

Browse files
committed
Actually maybe this works
1 parent f370e55 commit 8645330

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

src/singledispatch/core.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ impl SingleDispatchState {
8787
&& !cls_mro.contains(m)
8888
&& Builtins::cached(py)
8989
.issubclass(py, m.wrapped().bind(py), typ.wrapped().bind(py))
90-
.is_ok_and(|res| res)
90+
.is_ok_and(|res| !res)
9191
{
9292
return Err(PyRuntimeError::new_err(format!(
9393
"Ambiguous dispatch: {m} or {typ}"

src/singledispatch/mro.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,8 @@ fn c3_mro(
141141
cls: &Bound<'_, PyAny>,
142142
abcs: Vec<PyTypeReference>,
143143
) -> PyResult<Vec<PyTypeReference>> {
144+
eprintln!("cls = {cls:#?}");
145+
eprintln!("abcs = {abcs:#?}");
144146
let bases = match get_obj_bases(cls) {
145147
Ok(b) => {
146148
if !b.is_empty() {
@@ -168,7 +170,7 @@ fn c3_mro(
168170
.unwrap()
169171
})
170172
{
171-
vec![abc]
173+
vec![abc.clone_ref(py)]
172174
} else {
173175
vec![]
174176
}
@@ -178,7 +180,11 @@ fn c3_mro(
178180
eprintln!("other_bases = {other_bases:#?}");
179181
eprintln!("abstract_bases = {abstract_bases:#?}");
180182

181-
let new_abcs: Vec<_> = abcs.iter().filter(|c| abstract_bases.contains(c)).collect();
183+
let new_abcs: Vec<_> = abcs
184+
.iter()
185+
.filter(|&c| !abstract_bases.contains(c))
186+
.collect();
187+
eprintln!("new_abcs = {new_abcs:#?}");
182188

183189
let mut mros: Vec<&mut Vec<PyTypeReference>> = Vec::new();
184190

@@ -188,7 +194,11 @@ fn c3_mro(
188194
let mut explicit_bases_mro = sub_c3_mro(py, explicit_bases.iter(), &new_abcs)?;
189195
mros.extend(&mut explicit_bases_mro);
190196

191-
let mut abstract_bases_mro = sub_c3_mro(py, abstract_bases.iter().map(|v| *v), &new_abcs)?;
197+
let mut abstract_bases_mro = sub_c3_mro(
198+
py,
199+
abstract_bases.iter().map(|v| v.clone_ref(py)),
200+
&new_abcs,
201+
)?;
192202
eprintln!("abstract_bases_mro = {abstract_bases_mro:#?}");
193203
mros.extend(&mut abstract_bases_mro);
194204

0 commit comments

Comments
 (0)