Skip to content

Commit 242e511

Browse files
authored
Merge pull request #3909 from oow214/weakref_richcompare
Add weakproxy richcompare
2 parents 540a73f + 5c08546 commit 242e511

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

vm/src/builtins/weakproxy.rs

+22-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
use super::{PyStrRef, PyType, PyTypeRef, PyWeak};
22
use crate::{
33
class::PyClassImpl,
4-
function::OptionalArg,
4+
function::{OptionalArg, PyComparisonValue},
55
protocol::{PyMappingMethods, PySequence, PySequenceMethods},
6-
types::{AsMapping, AsSequence, Constructor, GetAttr, SetAttr},
7-
Context, Py, PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine,
6+
types::{AsMapping, AsSequence, Comparable, Constructor, GetAttr, PyComparisonOp, SetAttr},
7+
Context, Py, PyObject, PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine,
88
};
99

1010
#[pyclass(module = false, name = "weakproxy")]
@@ -83,6 +83,11 @@ impl PyWeakProxy {
8383
self.try_upgrade(vm)?.bytes(vm)
8484
}
8585

86+
#[pymethod(magic)]
87+
fn repr(&self, vm: &VirtualMachine) -> PyResult<PyStrRef> {
88+
self.try_upgrade(vm)?.repr(vm)
89+
}
90+
8691
fn contains(&self, needle: PyObjectRef, vm: &VirtualMachine) -> PyResult<bool> {
8792
let obj = self.try_upgrade(vm)?;
8893
PySequence::contains(&obj, &needle, vm)
@@ -136,6 +141,20 @@ impl SetAttr for PyWeakProxy {
136141
}
137142
}
138143

144+
impl Comparable for PyWeakProxy {
145+
fn cmp(
146+
zelf: &crate::Py<Self>,
147+
other: &PyObject,
148+
op: PyComparisonOp,
149+
vm: &VirtualMachine,
150+
) -> PyResult<PyComparisonValue> {
151+
let obj = zelf.try_upgrade(vm)?;
152+
Ok(PyComparisonValue::Implemented(
153+
obj.rich_compare_bool(other, op, vm)?,
154+
))
155+
}
156+
}
157+
139158
impl AsSequence for PyWeakProxy {
140159
const AS_SEQUENCE: PySequenceMethods = PySequenceMethods {
141160
length: Some(|seq, vm| Self::sequence_downcast(seq).len(vm)),

0 commit comments

Comments
 (0)