summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Berndt <matthias_berndt@gmx.de>2016-09-30 10:36:14 +0200
committerRico Tzschichholz <ricotz@ubuntu.com>2016-10-06 09:34:06 +0200
commit2bf3d979de6b999a1b9a42f8d4c6716aaf7abba8 (patch)
treed8769ab6be7a0507d8cfb809a06bb14baea48ff1
parent566ff81b821775c6e178c8c90bcac95d08436c91 (diff)
downloadvala-2bf3d979de6b999a1b9a42f8d4c6716aaf7abba8.tar.gz
vala: Check type arguments in DataType.equals
https://bugzilla.gnome.org/show_bug.cgi?id=641418
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/objects/bug641418-1.test11
-rw-r--r--tests/objects/bug641418-2.test16
-rw-r--r--tests/objects/bug641418-3.test16
-rw-r--r--vala/valadatatype.vala11
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;
}