diff --git a/Lib/test/test_set.py b/Lib/test/test_set.py index 641257130..4fd8f357b 100644 --- a/Lib/test/test_set.py +++ b/Lib/test/test_set.py @@ -613,8 +613,6 @@ class TestSet(TestJointOps, unittest.TestCase): t ^= t self.assertEqual(t, self.thetype()) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_weakref(self): s = self.thetype('gallahad') p = weakref.proxy(s) diff --git a/vm/src/builtins/weakproxy.rs b/vm/src/builtins/weakproxy.rs index 2b5c058c5..1d92b0ea7 100644 --- a/vm/src/builtins/weakproxy.rs +++ b/vm/src/builtins/weakproxy.rs @@ -62,26 +62,25 @@ impl PyWeakProxy { // TODO: callbacks #[pymethod(magic)] fn getattr(&self, attr_name: PyStrRef, vm: &VirtualMachine) -> PyResult { - let obj = self.weak.upgrade().ok_or_else(|| { - vm.new_exception_msg( - vm.ctx.exceptions.reference_error.clone(), - "weakly-referenced object no longer exists".to_owned(), - ) - })?; + let obj = self.weak.upgrade().ok_or_else(|| new_reference_error(vm))?; obj.get_attr(attr_name, vm) } #[pymethod(magic)] fn str(&self, vm: &VirtualMachine) -> PyResult { match self.weak.upgrade() { Some(obj) => obj.str(vm), - None => Err(vm.new_exception_msg( - vm.ctx.exceptions.reference_error.clone(), - "weakly-referenced object no longer exists".to_owned(), - )), + None => Err(new_reference_error(vm)), } } } +fn new_reference_error(vm: &VirtualMachine) -> PyRef { + vm.new_exception_msg( + vm.ctx.exceptions.reference_error.clone(), + "weakly-referenced object no longer exists".to_owned(), + ) +} + impl SetAttr for PyWeakProxy { fn setattro( zelf: &crate::Py,