On Tue, Sep 12, 2023 at 10:02 PM Jerry James <[email protected]> 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 -- [email protected]
To unsubscribe send an email to [email protected]
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/[email protected]
Do not reply to spam, report it:
https://pagure.io/fedora-infrastructure/new_issue