On Tue, Sep 12, 2023 at 10:02 PM Jerry James <loganjerry@xxxxxxxxx> wrote: > I looked at blueprint-compiler tonight, and found 2 bugs with the > handling of bitfields. Sadly, fixing those still doesn't make the > test suite pass, so there is at least one more bug lurking somewhere. > Still, I think the package is probably fixable. If you can wait just > a little longer, I will try to find the next bug tomorrow. Bug 3 was on the line right next to bug 2. :-) I have opened https://gitlab.gnome.org/jwestman/blueprint-compiler/-/merge_requests/143. That patch does not apply cleanly to version 0.6.0, but the attached version does. -- Jerry James http://www.jamezone.org/
--- blueprint-compiler-v0.6.0/blueprintcompiler/gir.py.orig 2022-11-26 16:14:49.000000000 -0700 +++ blueprint-compiler-v0.6.0/blueprintcompiler/gir.py 2023-09-13 08:32:20.150427956 -0600 @@ -603,8 +603,8 @@ class Repository(GirNode): return self.lookup_namespace(ns).get_type(dir_entry.DIR_ENTRY_NAME) def _resolve_type_id(self, type_id: int): - if type_id & 0xFFFFFF == 0: - type_id = (type_id >> 27) & 0x1F + if type_id & (0xFFFFFF if sys.byteorder == "little" else 0xFFFFFF00) == 0: + type_id = ((type_id >> 27) if sys.byteorder == "little" else type_id) & 0x1F # simple type if type_id == typelib.TYPE_BOOLEAN: return BoolType() --- blueprint-compiler-v0.6.0/blueprintcompiler/typelib.py.orig 2022-11-26 16:14:49.000000000 -0700 +++ blueprint-compiler-v0.6.0/blueprintcompiler/typelib.py 2023-09-13 08:47:24.479850483 -0600 @@ -61,7 +61,14 @@ class Field: def __init__(self, offset, type, shift=0, mask=None): self._offset = offset self._type = type - self._shift = shift + if not mask or sys.byteorder == "little": + self._shift = shift + elif self._type == "u8" or self._type == "i8": + self._shift = 7 - shift + elif self._type == "u16" or self._type == "i16": + self._shift = 15 - shift + else: + self._shift = 31 - shift self._mask = (1 << mask) - 1 if mask else None self._name = f"{offset}__{type}__{shift}__{mask}" @@ -160,7 +167,7 @@ class Typelib: OBJ_FINAL = Field(0x02, "u16", 3, 1) OBJ_GTYPE_NAME = Field(0x08, "string") OBJ_PARENT = Field(0x10, "dir_entry") - OBJ_GTYPE_STRUCT = Field(0x14, "string") + OBJ_GTYPE_STRUCT = Field(0x12, "string") OBJ_N_INTERFACES = Field(0x14, "u16") OBJ_N_FIELDS = Field(0x16, "u16") OBJ_N_PROPERTIES = Field(0x18, "u16") @@ -241,7 +248,11 @@ class Typelib: return self._typelib_file[loc:end].decode("utf-8") def _int(self, size, signed): - return int.from_bytes(self._typelib_file[self._offset:self._offset + size], sys.byteorder) + return int.from_bytes( + self._typelib_file[self._offset:self._offset + size], + sys.byteorder, + signed=signed, + ) class TypelibHeader(Typelib):
_______________________________________________ devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx Fedora Code of Conduct: https://docs.fedoraproject.org/en-US/project/code-of-conduct/ List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines List Archives: https://lists.fedoraproject.org/archives/list/devel@xxxxxxxxxxxxxxxxxxxxxxx Do not reply to spam, report it: https://pagure.io/fedora-infrastructure/new_issue