From abc35e5f8310c8f63b532a6b80dbbcb8e6edde8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=9D=80=EB=B9=88?= Date: Fri, 17 Jul 2026 11:51:36 +0900 Subject: [PATCH] weakref: treat explicit None callback as no callback (#8298) --- Lib/test/test_weakref.py | 1 - crates/vm/src/builtins/weakref.rs | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/Lib/test/test_weakref.py b/Lib/test/test_weakref.py index 2e8e679c8..224130110 100644 --- a/Lib/test/test_weakref.py +++ b/Lib/test/test_weakref.py @@ -380,7 +380,6 @@ class ReferencesTestCase(TestBase): # was not honored, and was broken in different ways for # PyWeakref_NewRef() and PyWeakref_NewProxy(). (Two tests.) - @unittest.expectedFailure # TODO: RUSTPYTHON def test_shared_ref_without_callback(self): self.check_shared_without_callback(weakref.ref) diff --git a/crates/vm/src/builtins/weakref.rs b/crates/vm/src/builtins/weakref.rs index 11e216847..9e88ffaa2 100644 --- a/crates/vm/src/builtins/weakref.rs +++ b/crates/vm/src/builtins/weakref.rs @@ -49,7 +49,7 @@ impl Constructor for PyWeak { let referent = positional .next() .ok_or_else(|| vm.new_type_error("__new__ expected at least 1 argument, got 0"))?; - let callback = positional.next(); + let callback = positional.next().filter(|callback| !vm.is_none(callback)); if let Some(_extra) = positional.next() { let got = positional.count() + 3; return Err(