]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Unify check of type-parameters in GenericSymbol types
authorRico Tzschichholz <ricotz@ubuntu.com>
Sun, 21 Apr 2024 11:36:29 +0000 (13:36 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sun, 21 Apr 2024 11:41:20 +0000 (13:41 +0200)
vala/valaclass.vala
vala/valadelegate.vala
vala/valainterface.vala
vala/valamethod.vala
vala/valaobjecttypesymbol.vala
vala/valastruct.vala
vala/valatypeparameter.vala

index cf2943e4de15a4bd6455b8580f003833671c769c..f8bf6f785e6f3ddaab1c69ee82807a3c6b53c5c1 100644 (file)
@@ -571,10 +571,6 @@ public class Vala.Class : ObjectTypeSymbol {
                        context.analyzer.check_type (type);
                }
 
-               foreach (TypeParameter p in get_type_parameters ()) {
-                       p.check (context);
-               }
-
                if (base_class != null && base_class.is_singleton) {
                        error = true;
                        Report.error (source_reference, "`%s' cannot inherit from SingleInstance class `%s'", get_full_name (), base_class.get_full_name ());
index e7ec720a25aab4c87b3cc5bff42d1803f4385c72..b118d38e149de325474d80c486761ba2617e5b3f 100644 (file)
@@ -314,8 +314,10 @@ public class Vala.Delegate : TypeSymbol, Callable, GenericSymbol {
                        context.analyzer.current_source_file = source_reference.file;
                }
 
-               foreach (TypeParameter p in type_parameters) {
-                       p.check (context);
+               foreach (TypeParameter p in get_type_parameters ()) {
+                       if (!p.check (context)) {
+                               error = true;
+                       }
                }
 
                return_type.check (context);
index 91c81789708596f6f0ee3390ed97d8b83c058eda..a8e1e77c3c69d5b5aa6add7faed5f0e277a0f8b3 100644 (file)
@@ -211,10 +211,6 @@ public class Vala.Interface : ObjectTypeSymbol {
                        context.analyzer.check_type (type);
                }
 
-               foreach (TypeParameter p in get_type_parameters ()) {
-                       p.check (context);
-               }
-
                foreach (Enum en in get_enums ()) {
                        en.check (context);
                }
index 6a1d686cf33b2bfc4ec959d1093706f86ec38e55..7876a76f250fe1de3d25ef7759905d9f6443b1fd 100644 (file)
@@ -901,6 +901,12 @@ public class Vala.Method : Subroutine, Callable, GenericSymbol {
                        return TraverseStatus.CONTINUE;
                });
 
+               foreach (TypeParameter p in get_type_parameters ()) {
+                       if (!p.check (context)) {
+                               error = true;
+                       }
+               }
+
                return_type.accept (traverse);
 
                var optional_param = false;
index 794b81941ef0ba7ef2997213c5f09d11c5228435..0ba8c6d70155aabedaa03530551d0ce6d1f94344 100644 (file)
@@ -386,6 +386,12 @@ public abstract class Vala.ObjectTypeSymbol : TypeSymbol, GenericSymbol {
                        Report.error (source_reference, "gio-2.0 package required for DBus support");
                }
 
+               foreach (TypeParameter p in get_type_parameters ()) {
+                       if (!p.check (context)) {
+                               error = true;
+                       }
+               }
+
                return !error;
        }
 }
index 52c85dac725a71e000b5f7a3e48e1215f46b87c6..70a184ef413d83c700a67a4c5fdd8a9324e8a6bf 100644 (file)
@@ -522,8 +522,10 @@ public class Vala.Struct : TypeSymbol, GenericSymbol {
                        }
                }
 
-               foreach (TypeParameter p in type_parameters) {
-                       p.check (context);
+               foreach (TypeParameter p in get_type_parameters ()) {
+                       if (!p.check (context)) {
+                               error = true;
+                       }
                }
 
                foreach (Field f in fields) {
index 5c126098212bc494b5eda0432c14fe7aef35b363..4d47475968344d51ed302d83c4fd1efd8a7958dc 100644 (file)
@@ -58,4 +58,20 @@ public class Vala.TypeParameter : TypeSymbol {
 
                return name == param2.name && parent_symbol == param2.parent_symbol;
        }
+
+       public override bool check (CodeContext context) {
+               if (checked) {
+                       return !error;
+               }
+
+               checked = true;
+
+               if (!(parent_symbol is GenericSymbol)) {
+                       Report.error (source_reference, "internal error: Incompatible parent_symbol");
+                       error = true;
+                       return false;
+               }
+
+               return !error;
+       }
 }