]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Check type-argument count of interface prerequisites
authorRico Tzschichholz <ricotz@ubuntu.com>
Sat, 8 Apr 2023 08:55:39 +0000 (10:55 +0200)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 8 Apr 2023 08:59:55 +0000 (10:59 +0200)
Additionally add test case for type-argument count of class base-types

tests/Makefile.am
tests/semantic/class-base-type-too-few-type-arguments.test [new file with mode: 0644]
tests/semantic/class-base-type-too-many-type-arguments.test [new file with mode: 0644]
tests/semantic/interface-prerequisite-too-few-type-arguments.test [new file with mode: 0644]
tests/semantic/interface-prerequisite-too-many-type-arguments.test [new file with mode: 0644]
vala/valainterface.vala

index 4b473a379b5a4129d23f5e766bdc37f04769a02c..2e22aa6db551d084b3920f88a68a1644049fdc9f 100644 (file)
@@ -1098,6 +1098,8 @@ TESTS = \
        semantic/class-base-type-invalid.test \
        semantic/class-base-type-less-accessible.test \
        semantic/class-base-type-multiple.test \
+       semantic/class-base-type-too-few-type-arguments.test \
+       semantic/class-base-type-too-many-type-arguments.test \
        semantic/class-compact-field-class.test \
        semantic/class-compact-field-lock.test \
        semantic/class-compact-field-private.test \
@@ -1190,6 +1192,8 @@ TESTS = \
        semantic/interface-prerequisite-invalid.test \
        semantic/interface-prerequisite-less-accessible.test \
        semantic/interface-prerequisite-multiple.test \
+       semantic/interface-prerequisite-too-few-type-arguments.test \
+       semantic/interface-prerequisite-too-many-type-arguments.test \
        semantic/literal-expression.test \
        semantic/localvariable-owned-to-unowned.test \
        semantic/localvariable-var-pointer-initializer.vala \
diff --git a/tests/semantic/class-base-type-too-few-type-arguments.test b/tests/semantic/class-base-type-too-few-type-arguments.test
new file mode 100644 (file)
index 0000000..0bf4776
--- /dev/null
@@ -0,0 +1,10 @@
+Invalid Code
+
+interface IFoo<G> {
+}
+
+class Foo : IFoo {
+}
+
+void main () {
+}
diff --git a/tests/semantic/class-base-type-too-many-type-arguments.test b/tests/semantic/class-base-type-too-many-type-arguments.test
new file mode 100644 (file)
index 0000000..c1d8419
--- /dev/null
@@ -0,0 +1,10 @@
+Invalid Code
+
+interface IFoo<G> {
+}
+
+class Foo<K,V> : IFoo<K,V> {
+}
+
+void main () {
+}
diff --git a/tests/semantic/interface-prerequisite-too-few-type-arguments.test b/tests/semantic/interface-prerequisite-too-few-type-arguments.test
new file mode 100644 (file)
index 0000000..0e92a16
--- /dev/null
@@ -0,0 +1,10 @@
+Invalid Code
+
+interface IFoo<G> {
+}
+
+interface IBar : IFoo {
+}
+
+void main () {
+}
diff --git a/tests/semantic/interface-prerequisite-too-many-type-arguments.test b/tests/semantic/interface-prerequisite-too-many-type-arguments.test
new file mode 100644 (file)
index 0000000..347b6c3
--- /dev/null
@@ -0,0 +1,10 @@
+Invalid Code
+
+interface IFoo<G> {
+}
+
+interface IBar<K,V> : IFoo<K,V> {
+}
+
+void main () {
+}
index 92e5da1544528e52c3f5c96f5078b45af6e8f580..91c81789708596f6f0ee3390ed97d8b83c058eda 100644 (file)
@@ -177,6 +177,12 @@ public class Vala.Interface : ObjectTypeSymbol {
                                Report.error (source_reference, "prerequisite `%s' is less accessible than interface `%s'", prerequisite_reference.to_string (), get_full_name ());
                                return false;
                        }
+
+                       // check whether there is the expected amount of type-arguments
+                       if (!prerequisite_reference.check_type_arguments (context)) {
+                               error = true;
+                               return false;
+                       }
                }
 
                /* check prerequisites */