mirror of
https://gitlab.gnome.org/jwestman/blueprint-compiler.git
synced 2025-05-04 15:59:08 -04:00
typelib: Fix crash when handling array types
This commit is contained in:
parent
1df46b5a06
commit
9fcb63a013
5 changed files with 36 additions and 4 deletions
|
@ -126,6 +126,22 @@ class UncheckedType(GirType):
|
||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
|
|
||||||
|
class ArrayType(GirType):
|
||||||
|
def __init__(self, inner: GirType) -> None:
|
||||||
|
self._inner = inner
|
||||||
|
|
||||||
|
def assignable_to(self, other: GirType) -> bool:
|
||||||
|
return isinstance(other, ArrayType) and self._inner.assignable_to(other._inner)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self) -> str:
|
||||||
|
return self._inner.name + "[]"
|
||||||
|
|
||||||
|
@property
|
||||||
|
def full_name(self) -> str:
|
||||||
|
return self._inner.full_name + "[]"
|
||||||
|
|
||||||
|
|
||||||
class BasicType(GirType):
|
class BasicType(GirType):
|
||||||
name: str = "unknown type"
|
name: str = "unknown type"
|
||||||
|
|
||||||
|
@ -714,9 +730,15 @@ class Repository(GirNode):
|
||||||
else:
|
else:
|
||||||
raise CompilerBugError("Unknown type ID", type_id)
|
raise CompilerBugError("Unknown type ID", type_id)
|
||||||
else:
|
else:
|
||||||
|
blob = self.tl.header[type_id]
|
||||||
|
if blob.TYPE_BLOB_TAG == typelib.TYPE_INTERFACE:
|
||||||
return self._resolve_dir_entry(
|
return self._resolve_dir_entry(
|
||||||
self.tl.header[type_id].INTERFACE_TYPE_INTERFACE
|
self.tl.header[type_id].TYPE_BLOB_INTERFACE
|
||||||
)
|
)
|
||||||
|
elif blob.TYPE_BLOB_TAG == typelib.TYPE_ARRAY:
|
||||||
|
return ArrayType(self._resolve_type_id(blob.TYPE_BLOB_ARRAY_INNER))
|
||||||
|
else:
|
||||||
|
raise CompilerBugError(f"{blob.TYPE_BLOB_TAG}")
|
||||||
|
|
||||||
|
|
||||||
class GirContext:
|
class GirContext:
|
||||||
|
|
|
@ -136,7 +136,9 @@ class Typelib:
|
||||||
ATTR_NAME = Field(0x0, "string")
|
ATTR_NAME = Field(0x0, "string")
|
||||||
ATTR_VALUE = Field(0x0, "string")
|
ATTR_VALUE = Field(0x0, "string")
|
||||||
|
|
||||||
INTERFACE_TYPE_INTERFACE = Field(0x2, "dir_entry")
|
TYPE_BLOB_TAG = Field(0x0, "u8", 3, 5)
|
||||||
|
TYPE_BLOB_INTERFACE = Field(0x2, "dir_entry")
|
||||||
|
TYPE_BLOB_ARRAY_INNER = Field(0x4, "u32")
|
||||||
|
|
||||||
BLOB_NAME = Field(0x4, "string")
|
BLOB_NAME = Field(0x4, "string")
|
||||||
|
|
||||||
|
|
6
tests/sample_errors/strv.blp
Normal file
6
tests/sample_errors/strv.blp
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
using Gtk 4.0;
|
||||||
|
using Adw 1;
|
||||||
|
|
||||||
|
Adw.AboutWindow {
|
||||||
|
developers: Gtk.StringList {};
|
||||||
|
}
|
1
tests/sample_errors/strv.err
Normal file
1
tests/sample_errors/strv.err
Normal file
|
@ -0,0 +1 @@
|
||||||
|
5,15,17,Cannot assign Gtk.StringList to string[]
|
|
@ -231,6 +231,7 @@ class TestSamples(unittest.TestCase):
|
||||||
self.assert_sample_error("signal_object_dne")
|
self.assert_sample_error("signal_object_dne")
|
||||||
self.assert_sample_error("size_group_non_widget")
|
self.assert_sample_error("size_group_non_widget")
|
||||||
self.assert_sample_error("size_group_obj_dne")
|
self.assert_sample_error("size_group_obj_dne")
|
||||||
|
self.assert_sample_error("strv")
|
||||||
self.assert_sample_error("styles_in_non_widget")
|
self.assert_sample_error("styles_in_non_widget")
|
||||||
self.assert_sample_error("two_templates")
|
self.assert_sample_error("two_templates")
|
||||||
self.assert_sample_error("uint")
|
self.assert_sample_error("uint")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue