[pypy-commit] pypy default: struct.Struct() objects should be weakrefable

arigo pypy.commits at gmail.com
Wed Dec 27 01:49:56 EST 2017


Author: Armin Rigo <arigo at tunes.org>
Branch: 
Changeset: r93583:cd23d604d4bc
Date: 2017-12-27 07:47 +0100
http://bitbucket.org/pypy/pypy/changeset/cd23d604d4bc/

Log:	struct.Struct() objects should be weakrefable

diff --git a/pypy/module/struct/interp_struct.py b/pypy/module/struct/interp_struct.py
--- a/pypy/module/struct/interp_struct.py
+++ b/pypy/module/struct/interp_struct.py
@@ -8,6 +8,7 @@
 from pypy.interpreter.gateway import interp2app, unwrap_spec
 from pypy.interpreter.error import OperationError, oefmt
 from pypy.interpreter.typedef import TypeDef, interp_attrproperty
+from pypy.interpreter.typedef import make_weakref_descr
 from pypy.module.struct.formatiterator import (
     PackFormatIterator, UnpackFormatIterator
 )
@@ -156,6 +157,7 @@
     unpack=interp2app(W_Struct.descr_unpack),
     pack_into=interp2app(W_Struct.descr_pack_into),
     unpack_from=interp2app(W_Struct.descr_unpack_from),
+    __weakref__=make_weakref_descr(W_Struct),
 )
 
 def clearcache(space):
diff --git a/pypy/module/struct/test/test_struct.py b/pypy/module/struct/test/test_struct.py
--- a/pypy/module/struct/test/test_struct.py
+++ b/pypy/module/struct/test/test_struct.py
@@ -432,6 +432,10 @@
         assert s.unpack(s.pack(42)) == (42,)
         assert s.unpack_from(memoryview(s.pack(42))) == (42,)
 
+    def test_struct_weakrefable(self):
+        import weakref
+        weakref.ref(self.struct.Struct('i'))
+
     def test_struct_subclass(self):
         class S(self.struct.Struct):
             def __init__(self):


More information about the pypy-commit mailing list