@@ -245,20 +245,22 @@ def get(self: struct_impl) -> str:
245245
246246 def to_bytes (self : struct_impl ) -> bytes :
247247 """Return the serialized representation of the struct, including padding."""
248- if self . _frozen :
249- return self . _frozen_struct_bytes
248+ if object . __getattribute__ ( self , " _frozen" ) :
249+ return object . __getattribute__ ( self , " _frozen_struct_bytes" )
250250 resolver = object .__getattribute__ (self , "resolver" )
251251 return resolver .resolve (size_of (self ), 0 )
252252
253253 def to_dict (self : struct_impl ) -> dict [str , object ]:
254254 """Return a JSON-serializable dict of field names to values."""
255- return {name : member .to_dict () for name , member in self ._members .items ()}
255+ members = object .__getattribute__ (self , "_members" )
256+ return {name : member .to_dict () for name , member in members .items ()}
256257
257258 def hexdump (self : struct_impl ) -> str :
258259 """Return a hex dump of this struct's bytes with field annotations."""
259260 member_offsets = object .__getattribute__ (self , "_member_offsets" )
260- annotations = {member_offsets [name ]: name for name in self ._members }
261- address = struct_impl .address .fget (self ) if not self ._frozen else 0
261+ members = object .__getattribute__ (self , "_members" )
262+ annotations = {member_offsets [name ]: name for name in members }
263+ address = struct_impl .address .fget (self ) if not object .__getattribute__ (self , "_frozen" ) else 0
262264 return format_hexdump (self .to_bytes (), address , annotations )
263265
264266 def _set (self : struct_impl , _ : str ) -> None :
@@ -268,18 +270,20 @@ def _set(self: struct_impl, _: str) -> None:
268270 def freeze (self : struct_impl ) -> None :
269271 """Freeze the struct, capturing the full byte representation including padding."""
270272 resolver = object .__getattribute__ (self , "resolver" )
271- self . _frozen_struct_bytes = resolver .resolve (size_of (self ), 0 )
273+ object . __setattr__ ( self , " _frozen_struct_bytes" , resolver .resolve (size_of (self ), 0 ) )
272274
273- for member in self ._members .values ():
275+ members = object .__getattribute__ (self , "_members" )
276+ for member in members .values ():
274277 member .freeze ()
275278
276279 super ().freeze ()
277280
278281 def to_str (self : struct_impl , indent : int = 0 ) -> str :
279282 """Return a string representation of the struct."""
280283 name = object .__getattribute__ (self , "_struct_name" )
284+ members_dict = object .__getattribute__ (self , "_members" )
281285 members = ",\n " .join (
282- [f"{ ' ' * (indent + 4 )} { n } : { member .to_str (indent + 4 )} " for n , member in self . _members .items ()],
286+ [f"{ ' ' * (indent + 4 )} { n } : { member .to_str (indent + 4 )} " for n , member in members_dict .items ()],
283287 )
284288 return f"""{ name } {{
285289{ members }
@@ -289,7 +293,8 @@ def __repr__(self: struct_impl) -> str:
289293 """Return a string representation of the struct."""
290294 name = object .__getattribute__ (self , "_struct_name" )
291295 addr = struct_impl .address .fget (self )
292- members = ",\n " .join ([f"{ n } : { member } " for n , member in self ._members .items ()])
296+ members_dict = object .__getattribute__ (self , "_members" )
297+ members = ",\n " .join ([f"{ n } : { member } " for n , member in members_dict .items ()])
293298 return f"""{ name } {{
294299 address: 0x{ addr :x} ,
295300 size: 0x{ size_of (self ):x} ,
@@ -306,7 +311,10 @@ def __eq__(self: struct_impl, value: object) -> bool:
306311 if size_of (self ) != size_of (value ):
307312 return False
308313
309- if not self ._members .keys () == value ._members .keys ():
314+ self_members = object .__getattribute__ (self , "_members" )
315+ other_members = object .__getattribute__ (value , "_members" )
316+
317+ if self_members .keys () != other_members .keys ():
310318 return False
311319
312- return all (getattr (self , name ) == getattr (value , name ) for name in self . _members )
320+ return all (getattr (self , name ) == getattr (value , name ) for name in self_members )
0 commit comments