@@ -117,7 +117,7 @@ def generate_source(self) -> str:
117117 """
118118
119119 if any (field .bits for field in self .fields ):
120- preamble += "bit_reader = BitBuffer(stream, cls.cs. endian)\n "
120+ preamble += "bit_reader = BitBuffer(stream, endian=endian, **kwargs )\n "
121121
122122 read_code = "\n " .join (self ._generate_fields ())
123123
@@ -130,7 +130,7 @@ def generate_source(self) -> str:
130130
131131 code = indent (dedent (preamble ).lstrip () + read_code + dedent (outro ), " " )
132132
133- return f"def _read(cls, stream, context=None):\n { code } "
133+ return f"def _read(cls, stream, *, context=None, endian, **kwargs ):\n { code } "
134134
135135 def _generate_fields (self ) -> Iterator [str ]:
136136 current_offset = 0
@@ -227,7 +227,7 @@ def align_to_field(field: Field) -> Iterator[str]:
227227 def _generate_structure (self , field : Field ) -> Iterator [str ]:
228228 template = f"""
229229 { "_s = stream.tell()" if field .type .dynamic else "" }
230- r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r)
230+ r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r, endian=endian, **kwargs )
231231 { f's["{ field ._name } "] = stream.tell() - _s' if field .type .dynamic else "" }
232232 """
233233
@@ -236,7 +236,7 @@ def _generate_structure(self, field: Field) -> Iterator[str]:
236236 def _generate_array (self , field : Field ) -> Iterator [str ]:
237237 template = f"""
238238 { "_s = stream.tell()" if field .type .dynamic else "" }
239- r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r)
239+ r["{ field ._name } "] = { self ._map_field (field )} ._read(stream, context=r, endian=endian, **kwargs )
240240 { f's["{ field ._name } "] = stream.tell() - _s' if field .type .dynamic else "" }
241241 """
242242
@@ -309,7 +309,7 @@ def _generate_packed(self, fields: list[Field]) -> Iterator[str]:
309309 item_parser = parser_template .format (type = "_et" , getter = f"_b[i:i + { field_type .type .size } ]" )
310310 list_comp = f"[{ item_parser } for i in range(0, { count } , { field_type .type .size } )]"
311311 elif issubclass (field_type .type , Pointer ):
312- item_parser = "_et.__new__(_et, e, stream, r )"
312+ item_parser = "_et.__new__(_et, e, stream, context=r, endian=endian, **kwargs )"
313313 list_comp = f"[{ item_parser } for e in { getter } ]"
314314 else :
315315 item_parser = parser_template .format (type = "_et" , getter = "e" )
@@ -320,7 +320,7 @@ def _generate_packed(self, fields: list[Field]) -> Iterator[str]:
320320 parser = f"type.__call__({ self ._map_field (field )} , { getter } )"
321321 elif issubclass (field_type , Pointer ):
322322 reads .append (f"_pt = { self ._map_field (field )} " )
323- parser = f"_pt.__new__(_pt, { getter } , stream, r )"
323+ parser = f"_pt.__new__(_pt, { getter } , stream, context=r, endian=endian, **kwargs )"
324324 else :
325325 parser = parser_template .format (type = self ._map_field (field ), getter = getter )
326326
@@ -333,7 +333,7 @@ def _generate_packed(self, fields: list[Field]) -> Iterator[str]:
333333 if fmt == "x" or (len (fmt ) == 2 and fmt [1 ] == "x" ):
334334 unpack = ""
335335 else :
336- unpack = f'data = _struct(cls.cs. endian, "{ fmt } ").unpack(buf)\n '
336+ unpack = f'data = _struct(endian, "{ fmt } ").unpack(buf)\n '
337337
338338 template = f"""
339339 buf = stream.read({ size } )
0 commit comments