summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRico Tzschichholz <ricotz@ubuntu.com>2023-04-08 10:55:39 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2023-04-08 10:59:55 +0200
commite8a81d9a49ef569b632107a07e605aaa4705d347 (patch)
treee35c36436c20718ec35ba7d3dcc49474fa12f0cc
parenta4dca077641a0eabdd7677b3048174f798deaf96 (diff)
downloadvala-e8a81d9a49ef569b632107a07e605aaa4705d347.tar.gz
vala: Check type-argument count of interface prerequisites
Additionally add test case for type-argument count of class base-types
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/semantic/class-base-type-too-few-type-arguments.test10
-rw-r--r--tests/semantic/class-base-type-too-many-type-arguments.test10
-rw-r--r--tests/semantic/interface-prerequisite-too-few-type-arguments.test10
-rw-r--r--tests/semantic/interface-prerequisite-too-many-type-arguments.test10
-rw-r--r--vala/valainterface.vala6
6 files changed, 50 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4b473a379..2e22aa6db 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -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
index 000000000..0bf477697
--- /dev/null
+++ b/tests/semantic/class-base-type-too-few-type-arguments.test
@@ -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
index 000000000..c1d8419a6
--- /dev/null
+++ b/tests/semantic/class-base-type-too-many-type-arguments.test
@@ -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
index 000000000..0e92a1649
--- /dev/null
+++ b/tests/semantic/interface-prerequisite-too-few-type-arguments.test
@@ -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
index 000000000..347b6c36a
--- /dev/null
+++ b/tests/semantic/interface-prerequisite-too-many-type-arguments.test
@@ -0,0 +1,10 @@
+Invalid Code
+
+interface IFoo<G> {
+}
+
+interface IBar<K,V> : IFoo<K,V> {
+}
+
+void main () {
+}
diff --git a/vala/valainterface.vala b/vala/valainterface.vala
index 92e5da154..91c817897 100644
--- a/vala/valainterface.vala
+++ b/vala/valainterface.vala
@@ -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 */