@@ -119,7 +119,7 @@ def generate_source(self) -> str:
119119 """
120120
121121 if any (field .bits for field in self .fields ):
122- preamble += "bit_reader = BitBuffer(stream, cls.cs. endian)\n "
122+ preamble += "bit_reader = BitBuffer(stream, endian=endian, **kwargs )\n "
123123
124124 read_code = "\n " .join (self ._generate_fields ())
125125
@@ -132,7 +132,7 @@ def generate_source(self) -> str:
132132
133133 code = indent (dedent (preamble ).lstrip () + read_code + dedent (outro ), " " )
134134
135- return f"def _read(cls, stream, context=None):\n { code } "
135+ return f"def _read(cls, stream, *, context=None, endian, **kwargs ):\n { code } "
136136
137137 def _generate_fields (self ) -> Iterator [str ]:
138138 current_offset = 0
@@ -229,7 +229,7 @@ def align_to_field(field: Field) -> Iterator[str]:
229229 def _generate_structure (self , field : Field ) -> Iterator [str ]:
230230 template = f"""
231231 { "_s = stream.tell()" if field .type .dynamic else "" }
232- r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r)
232+ r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r, endian=endian, **kwargs )
233233 { f's["{ field ._name } "] = stream.tell() - _s' if field .type .dynamic else "" }
234234 """
235235
@@ -238,7 +238,7 @@ def _generate_structure(self, field: Field) -> Iterator[str]:
238238 def _generate_array (self , field : Field ) -> Iterator [str ]:
239239 template = f"""
240240 { "_s = stream.tell()" if field .type .dynamic else "" }
241- r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r)
241+ r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r, endian=endian, **kwargs )
242242 { f's["{ field ._name } "] = stream.tell() - _s' if field .type .dynamic else "" }
243243 """
244244
@@ -311,7 +311,7 @@ def _generate_packed(self, fields: list[Field]) -> Iterator[str]:
311311 item_parser = parser_template .format (type = "_et" , getter = f"_b[i:i + { field_type .type .size } ]" )
312312 list_comp = f"[{ item_parser } for i in range(0, { count } , { field_type .type .size } )]"
313313 elif issubclass (field_type .type , Pointer ):
314- item_parser = "_et.__new__(_et, e, stream, r )"
314+ item_parser = "_et.__new__(_et, e, stream, context=r, endian=endian, **kwargs )"
315315 list_comp = f"[{ item_parser } for e in { getter } ]"
316316 else :
317317 item_parser = parser_template .format (type = "_et" , getter = "e" )
@@ -322,7 +322,7 @@ def _generate_packed(self, fields: list[Field]) -> Iterator[str]:
322322 parser = f"type.__call__({ self ._map_field (field )} , { getter } )"
323323 elif issubclass (field_type , Pointer ):
324324 reads .append (f"_pt = { self ._map_field (field )} " )
325- parser = f"_pt.__new__(_pt, { getter } , stream, r )"
325+ parser = f"_pt.__new__(_pt, { getter } , stream, context=r, endian=endian, **kwargs )"
326326 else :
327327 parser = parser_template .format (type = self ._map_field (field ), getter = getter )
328328
@@ -335,7 +335,7 @@ def _generate_packed(self, fields: list[Field]) -> Iterator[str]:
335335 if fmt == "x" or (len (fmt ) == 2 and fmt [1 ] == "x" ):
336336 unpack = ""
337337 else :
338- unpack = f'data = _struct(cls.cs. endian, "{ fmt } ").unpack(buf)\n '
338+ unpack = f'data = _struct(endian, "{ fmt } ").unpack(buf)\n '
339339
340340 template = f"""
341341 buf = stream.read({ size } )
0 commit comments