Kaydet (Commit) 5ce8f359 authored tarafından Antoine Pitrou's avatar Antoine Pitrou

Issue #22098: ctypes' BigEndianStructure and LittleEndianStructure now define an…

Issue #22098: ctypes' BigEndianStructure and LittleEndianStructure now define an empty __slots__ so that subclasses don't always get an instance dict.

Patch by Claudiu Popa.
üst fa9211b1
...@@ -45,6 +45,7 @@ if sys.byteorder == "little": ...@@ -45,6 +45,7 @@ if sys.byteorder == "little":
class BigEndianStructure(Structure, metaclass=_swapped_meta): class BigEndianStructure(Structure, metaclass=_swapped_meta):
"""Structure with big endian byte order""" """Structure with big endian byte order"""
__slots__ = ()
_swappedbytes_ = None _swappedbytes_ = None
elif sys.byteorder == "big": elif sys.byteorder == "big":
...@@ -53,6 +54,7 @@ elif sys.byteorder == "big": ...@@ -53,6 +54,7 @@ elif sys.byteorder == "big":
BigEndianStructure = Structure BigEndianStructure = Structure
class LittleEndianStructure(Structure, metaclass=_swapped_meta): class LittleEndianStructure(Structure, metaclass=_swapped_meta):
"""Structure with little endian byte order""" """Structure with little endian byte order"""
__slots__ = ()
_swappedbytes_ = None _swappedbytes_ = None
else: else:
......
...@@ -22,6 +22,26 @@ class Test(unittest.TestCase): ...@@ -22,6 +22,26 @@ class Test(unittest.TestCase):
setattr(bits, "i%s" % i, 1) setattr(bits, "i%s" % i, 1)
dump(bits) dump(bits)
def test_slots(self):
class BigPoint(BigEndianStructure):
__slots__ = ()
_fields_ = [("x", c_int), ("y", c_int)]
class LowPoint(LittleEndianStructure):
__slots__ = ()
_fields_ = [("x", c_int), ("y", c_int)]
big = BigPoint()
little = LowPoint()
big.x = 4
big.y = 2
little.x = 2
little.y = 4
with self.assertRaises(AttributeError):
big.z = 42
with self.assertRaises(AttributeError):
little.z = 24
def test_endian_short(self): def test_endian_short(self):
if sys.byteorder == "little": if sys.byteorder == "little":
self.assertIs(c_short.__ctype_le__, c_short) self.assertIs(c_short.__ctype_le__, c_short)
......
...@@ -124,6 +124,10 @@ Core and Builtins ...@@ -124,6 +124,10 @@ Core and Builtins
Library Library
------- -------
- Issue #22098: ctypes' BigEndianStructure and LittleEndianStructure now
define an empty __slots__ so that subclasses don't always get an instance
dict. Patch by Claudiu Popa.
- Issue #22185: Fix an occasional RuntimeError in threading.Condition.wait() - Issue #22185: Fix an occasional RuntimeError in threading.Condition.wait()
caused by mutation of the waiters queue without holding the lock. Patch caused by mutation of the waiters queue without holding the lock. Patch
by Doug Zongker. by Doug Zongker.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment