diff options
-rw-r--r-- | tests/Makefile.am | 3 | ||||
-rw-r--r-- | tests/objects/bug641418-1.test | 11 | ||||
-rw-r--r-- | tests/objects/bug641418-2.test | 16 | ||||
-rw-r--r-- | tests/objects/bug641418-3.test | 16 | ||||
-rw-r--r-- | vala/valadatatype.vala | 11 |
5 files changed, 57 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 7f46a2b0b..8fcf079f3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -158,6 +158,9 @@ TESTS = \ objects/bug626038.vala \ objects/bug628639.vala \ objects/bug634782.vala \ + objects/bug641418-1.test \ + objects/bug641418-2.test \ + objects/bug641418-3.test \ objects/bug642809.vala \ objects/bug643711.vala \ objects/bug646362.vala \ diff --git a/tests/objects/bug641418-1.test b/tests/objects/bug641418-1.test new file mode 100644 index 000000000..5d0e8f64e --- /dev/null +++ b/tests/objects/bug641418-1.test @@ -0,0 +1,11 @@ +Invalid Code + +interface Foo { + public abstract GenericArray<string> baz (); +} + +class Bar : Object, Foo { + public GenericArray<int> baz () { + return null; + } +} diff --git a/tests/objects/bug641418-2.test b/tests/objects/bug641418-2.test new file mode 100644 index 000000000..0488b8a31 --- /dev/null +++ b/tests/objects/bug641418-2.test @@ -0,0 +1,16 @@ +Invalid Code + +class Foo<K,V> { +} + +class Bar { + public virtual Foo<K,V> f<K,V> () { + return null; + } +} + +class Baz : Bar { + public override Foo<A,B> f<B,A> () { + return null; + } +} diff --git a/tests/objects/bug641418-3.test b/tests/objects/bug641418-3.test new file mode 100644 index 000000000..3966df2e5 --- /dev/null +++ b/tests/objects/bug641418-3.test @@ -0,0 +1,16 @@ +Invalid Code + +class Foo<A,B> { +} + +class Bar<A> { + public virtual Foo<A,B> f<B> () { + return f (); + } +} + +class Baz<A> : Bar<A> { + public override Foo<B,A> f<B> () { + return f (); + } +} diff --git a/vala/valadatatype.vala b/vala/valadatatype.vala index 5fe8c7b79..f3f9bf92a 100644 --- a/vala/valadatatype.vala +++ b/vala/valadatatype.vala @@ -208,6 +208,17 @@ public abstract class Vala.DataType : CodeNode { if (type2.floating_reference != floating_reference) { return false; } + + var type_args = get_type_arguments (); + var type2_args = type2.get_type_arguments (); + if (type2_args.size != type_args.size) { + return false; + } + + for (int i = 0; i < type_args.size; i++) { + if (!type2_args[i].equals (type_args[i])) + return false; + } return true; } |