From: Rico Tzschichholz Date: Thu, 8 Nov 2018 11:48:20 +0000 (+0100) Subject: vala: Copy CCode instance_pos argument from virtual/abstract base methods X-Git-Tag: 0.43.1~122 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c35de29d4a92dafeec361f7619b69470632c1743;p=thirdparty%2Fvala.git vala: Copy CCode instance_pos argument from virtual/abstract base methods https://bugzilla.gnome.org/show_bug.cgi?id=540483 --- diff --git a/tests/Makefile.am b/tests/Makefile.am index 7b0628ca9..b84d952a6 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -88,6 +88,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 index 000000000..1b12f91a9 --- /dev/null +++ b/tests/methods/bug540483.vala @@ -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); +} diff --git a/vala/valamethod.vala b/vala/valamethod.vala index f567b246e..955de7e00 100644 --- a/vala/valamethod.vala +++ b/vala/valamethod.vala @@ -601,6 +601,7 @@ public class Vala.Method : Subroutine, Callable { } _base_method = base_method; + copy_attribute_double (base_method, "CCode", "instance_pos"); return; } } @@ -648,6 +649,7 @@ public class Vala.Method : Subroutine, Callable { } _base_interface_method = base_method; + copy_attribute_double (base_method, "CCode", "instance_pos"); return; } }