summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJCWasmx86 <JCWasmx86@t-online.de>2022-06-04 19:37:22 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2023-04-29 21:00:17 +0200
commit1e124a4dd5454525d04138d4df48cad75c4ffc7c (patch)
tree5a18043bcc0e7a5195ca4760ec8856461200a319
parent0b5fce811de5614e55a0808150c8571e02551c36 (diff)
downloadvala-1e124a4dd5454525d04138d4df48cad75c4ffc7c.tar.gz
Don't generate a hashmap, if >0 args are generic or array
-rw-r--r--dbusgen/valadbusvariantmodule.vala23
1 files changed, 20 insertions, 3 deletions
diff --git a/dbusgen/valadbusvariantmodule.vala b/dbusgen/valadbusvariantmodule.vala
index d8503ae71..be2aa6856 100644
--- a/dbusgen/valadbusvariantmodule.vala
+++ b/dbusgen/valadbusvariantmodule.vala
@@ -160,7 +160,22 @@ public class Vala.DBusVariantModule {
return get_complex_type (type);
}
+ private bool invalid_generic_type (VariantType type) {
+ return type.equal (VariantType.BOOLEAN)
+ || type.equal (VariantType.BYTE)
+ || type.equal (VariantType.INT16)
+ || type.equal (VariantType.UINT16)
+ || type.equal (VariantType.INT32)
+ || type.equal (VariantType.UINT32)
+ || type.equal (VariantType.INT64)
+ || type.equal (VariantType.UINT64)
+ || type.equal (VariantType.DOUBLE);
+ }
+
private DataType? get_complex_type (VariantType type) {
+ // If we were able to interpret it, but it is false vala syntax
+ // E.g. generics with arrays/primitive types
+ var skipped_generation = false;
if (type.equal (VariantType.OBJECT_PATH_ARRAY)) {
return object_path_array_type.copy ();
} else if (type.equal (VariantType.BYTESTRING)) {
@@ -175,9 +190,10 @@ public class Vala.DBusVariantModule {
// TODO: Warn about arrays in generics
if (element.equal (VariantType.DICTIONARY) || element.is_dict_entry ()) {
var res = dictionary_type.copy ();
+ var invalid_generic_arg = invalid_generic_type (element.key()) || invalid_generic_type (element.value ());
var key = get_variant_type (element.key ());
var value = get_variant_type (element.value ());
- if (key != null && value != null && !(key is ArrayType) && !(value is ArrayType)) {
+ if (key != null && value != null && !(key is ArrayType) && !(value is ArrayType) && !invalid_generic_arg) {
res.add_type_argument (key);
res.add_type_argument (value);
return res;
@@ -194,8 +210,9 @@ public class Vala.DBusVariantModule {
// TODO: Emit structure
}
- Report.warning (null, "Unresolved type: %s".printf ((string) type.peek_string ()));
-
+ if (!skipped_generation) {
+ Report.warning (null, "Unresolved type: %s".printf ((string) type.peek_string ()));
+ }
return null;
if (type.equal (VariantType.DICT_ENTRY) || type.is_dict_entry ()) {