diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-08 10:55:39 +0200 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2023-04-08 10:59:55 +0200 |
commit | e8a81d9a49ef569b632107a07e605aaa4705d347 (patch) | |
tree | e35c36436c20718ec35ba7d3dcc49474fa12f0cc | |
parent | a4dca077641a0eabdd7677b3048174f798deaf96 (diff) | |
download | vala-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.am | 4 | ||||
-rw-r--r-- | tests/semantic/class-base-type-too-few-type-arguments.test | 10 | ||||
-rw-r--r-- | tests/semantic/class-base-type-too-many-type-arguments.test | 10 | ||||
-rw-r--r-- | tests/semantic/interface-prerequisite-too-few-type-arguments.test | 10 | ||||
-rw-r--r-- | tests/semantic/interface-prerequisite-too-many-type-arguments.test | 10 | ||||
-rw-r--r-- | vala/valainterface.vala | 6 |
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 */ |