Skip to content

Commit 91eb76b

Browse files
Apply suggestions from code review
Co-authored-by: Bartosz Sławecki <bartosz@ilikepython.com>
1 parent bba7682 commit 91eb76b

1 file changed

Lines changed: 11 additions & 23 deletions

File tree

Lib/ctypes/util.py

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -507,7 +507,7 @@ class CFieldInfo:
507507
def _process_struct(klass, /, *, align, layout, endian, pack):
508508
fields = []
509509
anonymous = []
510-
if issubclass(klass, (Structure, LittleEndianStructure, BigEndianStructure)):
510+
if issubclass(klass, Structure):
511511
fields.extend(klass._fields_)
512512
anonymous.extend(klass._anonymous_)
513513

@@ -540,28 +540,16 @@ def _process_struct(klass, /, *, align, layout, endian, pack):
540540
else:
541541
raise ValueError(f"expected 'big', 'little', or 'native', but got {endian!r}")
542542

543-
# These fields don't apply correctly when set later.
544-
# As a workaround, we have this weird _StructData thing to set the attributes
545-
# in advance.
546-
class _StructData:
547-
pass
548-
549-
if align is not None:
550-
_StructData._align_ = align
551-
552-
if layout is not None:
553-
_StructData._layout_ = layout
554-
555-
if pack is not None:
556-
_StructData._pack_ = pack
557-
558-
for attr, value in klass.__dict__.items():
559-
if attr != "__dict__":
560-
setattr(_StructData, attr, value)
561-
562-
class _Struct(_StructData, endian_class):
563-
_fields_ = fields
564-
_anonymous_ = anonymous
543+
class _Struct(endian_class):
544+
vars().update(vars(klass))
545+
if align is not None:
546+
_align_ = align
547+
if layout is not None:
548+
_layout_ = layout
549+
if pack is not None:
550+
_pack_ = pack
551+
_fields_ = fields
552+
_anonymous_ = anonymous
565553

566554
_Struct.__name__ = klass.__name__
567555
_Struct.__qualname__ = klass.__qualname__

0 commit comments

Comments
 (0)