]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix member access for derived generic types
authorJürg Billeter <j@bitron.ch>
Sun, 21 Mar 2010 14:20:16 +0000 (15:20 +0100)
committerJürg Billeter <j@bitron.ch>
Sun, 21 Mar 2010 14:22:15 +0000 (15:22 +0100)
Fixes bug 613486.

tests/Makefile.am
tests/objects/bug613486.vala [new file with mode: 0644]
vala/valamemberaccess.vala

index 992d46219f441a5093344caebfc48153f79275b7..b813e18c5d4dcc55a2932942b4485901547a0b76 100644 (file)
@@ -61,6 +61,7 @@ TESTS = \
        objects/bug596621.vala \
        objects/bug597155.vala \
        objects/bug597161.vala \
+       objects/bug613486.vala \
        errors/errors.vala \
        errors/bug567181.vala \
        errors/bug579101.vala \
diff --git a/tests/objects/bug613486.vala b/tests/objects/bug613486.vala
new file mode 100644 (file)
index 0000000..ad08b53
--- /dev/null
@@ -0,0 +1,12 @@
+class Foo<T> {
+       public void do_foo (T t) {
+       }
+}
+
+class Bar : Foo<int> {
+}
+
+void main () {
+       var b = new Bar ();
+       b.do_foo (42);
+}
index 1b743024a106893a9f43ee0da51e14977a802c46..63127c24f2f26faf4d9a549adf7068d078f8f263 100644 (file)
@@ -657,7 +657,11 @@ public class Vala.MemberAccess : Expression {
                                instance_type = pointer_type.base_type;
                        }
 
-                       if (instance_type.get_type_arguments ().size == 0) {
+                       // instance type might be a subtype of the parent symbol of the member
+                       // that subtype might not be generic, so do not report an error in that case
+                       var object_type = instance_type as ObjectType;
+                       if (object_type != null && object_type.type_symbol.get_type_parameters ().size > 0 &&
+                           instance_type.get_type_arguments ().size == 0) {
                                error = true;
                                Report.error (inner.source_reference, "missing generic type arguments");
                                return false;