]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
vala: Copy CCode instance_pos argument from virtual/abstract base methods
authorRico Tzschichholz <ricotz@ubuntu.com>
Thu, 8 Nov 2018 11:48:20 +0000 (12:48 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Mon, 26 Nov 2018 08:30:28 +0000 (09:30 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=540483

tests/Makefile.am
tests/methods/bug540483.vala [new file with mode: 0644]
vala/valamethod.vala

index ee9ccd8d07ae3c64a43eb6161b4eb777f4969c7d..c6677ac45af230ff9436c595d74e202cb25eb642 100644 (file)
@@ -87,6 +87,7 @@ TESTS = \
        methods/prepostconditions.vala \
        methods/same-name.vala \
        methods/symbolresolution.vala \
+       methods/bug540483.vala \
        methods/bug595538.vala \
        methods/bug596726.vala \
        methods/bug597426.vala \
diff --git a/tests/methods/bug540483.vala b/tests/methods/bug540483.vala
new file mode 100644 (file)
index 0000000..1b12f91
--- /dev/null
@@ -0,0 +1,38 @@
+interface IFoo {
+       [CCode (instance_pos = -1)]
+       public abstract void foo (int i);
+}
+
+class Foo : IFoo {
+       public virtual void foo (int i) {
+               assert (i == 23);
+       }
+}
+
+class Bar : Foo {
+       public override void foo (int i) {
+               assert (i == 42);
+       }
+}
+
+abstract class Baz {
+       [CCode (instance_pos = -1)]
+       public abstract void foo (int i);
+}
+
+class Manam : Baz {
+       public override void foo (int i) {
+               assert (i == 4711);
+       }
+}
+
+void main () {
+       var foo = new Foo ();
+       foo.foo (23);
+
+       var bar = new Bar ();
+       bar.foo (42);
+
+       var manam = new Manam ();
+       manam.foo (4711);
+}
index 1db46ae456193271619b16ea934c002b128a7cfc..f9c31e48a0c7e8a8056f2eb857bca0bc54929a44 100644 (file)
@@ -566,6 +566,7 @@ public class Vala.Method : Subroutine, Callable {
                                }
 
                                _base_method = base_method;
+                               copy_attribute_double (base_method, "CCode", "instance_pos");
                                return;
                        }
                }
@@ -613,6 +614,7 @@ public class Vala.Method : Subroutine, Callable {
                                                }
 
                                                _base_interface_method = base_method;
+                                               copy_attribute_double (base_method, "CCode", "instance_pos");
                                                return;
                                        }
                                }