From: Rico Tzschichholz Date: Sun, 21 Apr 2024 11:36:29 +0000 (+0200) Subject: vala: Unify check of type-parameters in GenericSymbol types X-Git-Url: http://git.ipfire.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=870271f41594ee0197bbc56541d3c813bb456907;p=thirdparty%2Fvala.git vala: Unify check of type-parameters in GenericSymbol types --- diff --git a/vala/valaclass.vala b/vala/valaclass.vala index cf2943e4d..f8bf6f785 100644 --- a/vala/valaclass.vala +++ b/vala/valaclass.vala @@ -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 ()); diff --git a/vala/valadelegate.vala b/vala/valadelegate.vala index e7ec720a2..b118d38e1 100644 --- a/vala/valadelegate.vala +++ b/vala/valadelegate.vala @@ -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); diff --git a/vala/valainterface.vala b/vala/valainterface.vala index 91c817897..a8e1e77c3 100644 --- a/vala/valainterface.vala +++ b/vala/valainterface.vala @@ -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); } diff --git a/vala/valamethod.vala b/vala/valamethod.vala index 6a1d686cf..7876a76f2 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -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; diff --git a/vala/valaobjecttypesymbol.vala b/vala/valaobjecttypesymbol.vala index 794b81941..0ba8c6d70 100644 --- a/vala/valaobjecttypesymbol.vala +++ b/vala/valaobjecttypesymbol.vala @@ -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; } } diff --git a/vala/valastruct.vala b/vala/valastruct.vala index 52c85dac7..70a184ef4 100644 --- a/vala/valastruct.vala +++ b/vala/valastruct.vala @@ -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) { diff --git a/vala/valatypeparameter.vala b/vala/valatypeparameter.vala index 5c1260982..4d4747596 100644 --- a/vala/valatypeparameter.vala +++ b/vala/valatypeparameter.vala @@ -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; + } }