diff options
-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 */ |