From e8a81d9a49ef569b632107a07e605aaa4705d347 Mon Sep 17 00:00:00 2001 From: Rico Tzschichholz Date: Sat, 8 Apr 2023 10:55:39 +0200 Subject: vala: Check type-argument count of interface prerequisites Additionally add test case for type-argument count of class base-types --- tests/Makefile.am | 4 ++++ tests/semantic/class-base-type-too-few-type-arguments.test | 10 ++++++++++ tests/semantic/class-base-type-too-many-type-arguments.test | 10 ++++++++++ .../interface-prerequisite-too-few-type-arguments.test | 10 ++++++++++ .../interface-prerequisite-too-many-type-arguments.test | 10 ++++++++++ vala/valainterface.vala | 6 ++++++ 6 files changed, 50 insertions(+) create mode 100644 tests/semantic/class-base-type-too-few-type-arguments.test create mode 100644 tests/semantic/class-base-type-too-many-type-arguments.test create mode 100644 tests/semantic/interface-prerequisite-too-few-type-arguments.test create mode 100644 tests/semantic/interface-prerequisite-too-many-type-arguments.test 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 { +} + +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 { +} + +class Foo : IFoo { +} + +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 { +} + +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 { +} + +interface IBar : IFoo { +} + +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 */ -- cgit v1.2.1