mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-02 19:39:49 +09:00
None.__ne__(None) should be NotImplemented (#5124)
This commit is contained in:
@@ -22,4 +22,4 @@ assert type(None)() is None
|
||||
assert None.__eq__(3) is NotImplemented
|
||||
assert None.__ne__(3) is NotImplemented
|
||||
assert None.__eq__(None) is True
|
||||
# assert None.__ne__(None) is False # changed in 3.12
|
||||
assert None.__ne__(None) is NotImplemented
|
||||
|
||||
@@ -2,9 +2,10 @@ use super::{PyStrRef, PyType, PyTypeRef};
|
||||
use crate::{
|
||||
class::PyClassImpl,
|
||||
convert::ToPyObject,
|
||||
function::{PyArithmeticValue, PyComparisonValue},
|
||||
protocol::PyNumberMethods,
|
||||
types::{AsNumber, Constructor, Representable},
|
||||
Context, Py, PyObjectRef, PyPayload, PyResult, VirtualMachine,
|
||||
types::{AsNumber, Comparable, Constructor, PyComparisonOp, Representable},
|
||||
Context, Py, PyObject, PyObjectRef, PyPayload, PyResult, VirtualMachine,
|
||||
};
|
||||
|
||||
#[pyclass(module = false, name = "NoneType")]
|
||||
@@ -42,7 +43,7 @@ impl Constructor for PyNone {
|
||||
}
|
||||
}
|
||||
|
||||
#[pyclass(with(Constructor, AsNumber, Representable))]
|
||||
#[pyclass(with(Constructor, Comparable, AsNumber, Representable))]
|
||||
impl PyNone {
|
||||
#[pymethod(magic)]
|
||||
fn bool(&self) -> bool {
|
||||
@@ -72,6 +73,28 @@ impl AsNumber for PyNone {
|
||||
}
|
||||
}
|
||||
|
||||
impl Comparable for PyNone {
|
||||
fn cmp(
|
||||
_zelf: &Py<Self>,
|
||||
other: &PyObject,
|
||||
op: PyComparisonOp,
|
||||
vm: &VirtualMachine,
|
||||
) -> PyResult<PyComparisonValue> {
|
||||
let value = match op {
|
||||
PyComparisonOp::Eq => {
|
||||
if vm.is_none(other) {
|
||||
PyArithmeticValue::Implemented(true)
|
||||
} else {
|
||||
PyArithmeticValue::NotImplemented
|
||||
}
|
||||
}
|
||||
_ => PyComparisonValue::NotImplemented,
|
||||
};
|
||||
|
||||
Ok(value)
|
||||
}
|
||||
}
|
||||
|
||||
#[pyclass(module = false, name = "NotImplementedType")]
|
||||
#[derive(Debug)]
|
||||
pub struct PyNotImplemented;
|
||||
|
||||
Reference in New Issue
Block a user