[vala/staging] Fix broken DataType.equals
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala/staging] Fix broken DataType.equals
- Date: Wed, 28 Sep 2016 07:39:14 +0000 (UTC)
commit 34742679b023715e0cac86b673a34e54821fb530
Author: Matthias Berndt <matthias_berndt gmx de>
Date: Wed Sep 28 06:01:40 2016 +0200
Fix broken DataType.equals
fixes bug 641418 (type parameters are not checked when overriding methods)
tests/Makefile.am | 2 ++
tests/objects/bug641418-1.test | 10 ++++++++++
tests/objects/bug641418-2.test | 9 +++++++++
vala/valadatatype.vala | 10 ++++++++++
4 files changed, 31 insertions(+), 0 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 0fd49d9..48c5552 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -156,6 +156,8 @@ TESTS = \
objects/bug626038.vala \
objects/bug628639.vala \
objects/bug634782.vala \
+ objects/bug641418-1.test \
+ objects/bug641418-2.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 0000000..1963802
--- /dev/null
+++ b/tests/objects/bug641418-1.test
@@ -0,0 +1,10 @@
+Invalid Code
+interface Animal
+{
+ public abstract GenericArray<string> names_of_bones();
+}
+
+class Dog : Object, Animal
+{
+ public override GenericArray<int> names_of_bones() { return null; }
+}
diff --git a/tests/objects/bug641418-2.test b/tests/objects/bug641418-2.test
new file mode 100644
index 0000000..6ac3016
--- /dev/null
+++ b/tests/objects/bug641418-2.test
@@ -0,0 +1,9 @@
+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/vala/valadatatype.vala b/vala/valadatatype.vala
index 5fe8c7b..0099632 100644
--- a/vala/valadatatype.vala
+++ b/vala/valadatatype.vala
@@ -208,6 +208,16 @@ public abstract class Vala.DataType : CodeNode {
if (type2.floating_reference != floating_reference) {
return false;
}
+
+ var type2_args = type2.get_type_arguments ();
+ if (type2_args.size != get_type_arguments ().size) {
+ return false;
+ }
+
+ for (int i = 0; i < get_type_arguments ().size; ++i) {
+ if (! type2_args[i].equals(get_type_arguments ()[i]))
+ return false;
+ }
return true;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]