From: Rico Tzschichholz Date: Wed, 17 May 2023 20:34:43 +0000 (+0200) Subject: WIP X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4263d551409ee6485c99b8c23ffc7508e1b3286f;p=thirdparty%2Fvala.git WIP --- diff --git a/tests/Makefile.am b/tests/Makefile.am index a452b726e..7d9751dd0 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -844,6 +844,7 @@ TESTS = \ generics/method-to-delegate-incompatible.test \ generics/method-to-delegate-incompatible-2.test \ generics/method-to-delegate-incompatible-3.test \ + generics/multiple-classes-constraints.test \ generics/null-type.vala \ generics/property-gobject-set.vala \ generics/property-int-cast.vala \ diff --git a/tests/generics/multiple-classes-constraints.test b/tests/generics/multiple-classes-constraints.test index 4ca319f41..e1113cd1d 100644 --- a/tests/generics/multiple-classes-constraints.test +++ b/tests/generics/multiple-classes-constraints.test @@ -1,9 +1,13 @@ Invalid Code -class Foo {} -class Fuu {} +class Foo { +} + +class Faz { +} -class Bar where G : Foo, Fuu { +class Bar where G : Foo, Faz { } -void main () {} \ No newline at end of file +void main () { +} diff --git a/vala/valagenericsymbol.vala b/vala/valagenericsymbol.vala index 8037afaa5..54de02145 100644 --- a/vala/valagenericsymbol.vala +++ b/vala/valagenericsymbol.vala @@ -53,14 +53,4 @@ public interface Vala.GenericSymbol : Symbol { * @return index of a type parameter, or -1 */ public abstract int get_type_parameter_index (string name); - - public bool check_constraints () { - bool error = false; - foreach (var parameter in this.get_type_parameters ()) { - if (!parameter.check_constraint ()) { - error = true; - } - } - return !error; - } } diff --git a/vala/valaobjecttypesymbol.vala b/vala/valaobjecttypesymbol.vala index 94dd53cc3..0ba8c6d70 100644 --- a/vala/valaobjecttypesymbol.vala +++ b/vala/valaobjecttypesymbol.vala @@ -381,10 +381,6 @@ public abstract class Vala.ObjectTypeSymbol : TypeSymbol, GenericSymbol { return !error; } - if (!this.check_constraints ()) { - error = true; - } - if (!external_package && has_attribute ("DBus") && !context.has_package ("gio-2.0")) { error = true; Report.error (source_reference, "gio-2.0 package required for DBus support"); diff --git a/vala/valatypeparameter.vala b/vala/valatypeparameter.vala index bcf383b10..26d8f922f 100644 --- a/vala/valatypeparameter.vala +++ b/vala/valatypeparameter.vala @@ -141,20 +141,6 @@ public class Vala.TypeParameter : TypeSymbol { return name == param2.name && parent_symbol == param2.parent_symbol; } - public bool check_constraint () { - bool class_constraint = false; - foreach (var type in get_type_constraints ()) { - if (type.symbol is Class) { - if (class_constraint) { - Report.error (source_reference, "a type parameter can only be constrained with one class type"); - return false; - } - class_constraint = true; - } - } - return true; - } - public override bool check (CodeContext context) { if (checked) { return !error; @@ -168,6 +154,18 @@ public class Vala.TypeParameter : TypeSymbol { return false; } + bool class_constraint = false; + foreach (var type in get_type_constraints ()) { + if (type.symbol is Class) { + if (class_constraint) { + Report.error (source_reference, "a type parameter may only be constrained by a single class type"); + error = true; + break; + } + class_constraint = true; + } + } + return !error; } }