diff options
author | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-03-09 09:51:21 +0100 |
---|---|---|
committer | Rico Tzschichholz <ricotz@ubuntu.com> | 2021-03-09 10:01:47 +0100 |
commit | 3c77546d3a97a61fb62b3984d77ac7ec3efbe7f7 (patch) | |
tree | 191de21f2ae6caa4465059a2364c239951fd92ab | |
parent | 452d0c9c6cbebe3166f9f25ea61c8358f8730332 (diff) | |
download | vala-3c77546d3a97a61fb62b3984d77ac7ec3efbe7f7.tar.gz |
codegen: Fix access to captured generics in async method of interfaces
Fixes https://gitlab.gnome.org/GNOME/vala/issues/537
-rw-r--r-- | codegen/valaccodebasemodule.vala | 8 | ||||
-rw-r--r-- | tests/Makefile.am | 1 | ||||
-rw-r--r-- | tests/objects/interface-async-captured-generic.vala | 15 |
3 files changed, 20 insertions, 4 deletions
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala index fa6f058f8..8c5926fb0 100644 --- a/codegen/valaccodebasemodule.vala +++ b/codegen/valaccodebasemodule.vala @@ -2907,9 +2907,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { string method_name = "get_%s_type".printf (type_parameter.name.ascii_down ()); var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface))); - cast_self.add_argument (new CCodeIdentifier ("self")); + cast_self.add_argument (get_this_cexpression ()); var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name)); - function_call.add_argument (new CCodeIdentifier ("self")); + function_call.add_argument (get_this_cexpression ()); return function_call; } @@ -3534,9 +3534,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator { string method_name = "get_%s_destroy_func".printf (type_parameter.name.ascii_down ()); var cast_self = new CCodeFunctionCall (new CCodeIdentifier (get_ccode_type_get_function (iface))); - cast_self.add_argument (new CCodeIdentifier ("self")); + cast_self.add_argument (get_this_cexpression ()); var function_call = new CCodeFunctionCall (new CCodeMemberAccess.pointer (cast_self, method_name)); - function_call.add_argument (new CCodeIdentifier ("self")); + function_call.add_argument (get_this_cexpression ()); return function_call; } diff --git a/tests/Makefile.am b/tests/Makefile.am index eea0131e1..7718adef4 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -451,6 +451,7 @@ TESTS = \ objects/interface-inner-types.vala \ objects/interfaces.vala \ objects/interface-abstract-async-override.vala \ + objects/interface-async-captured-generic.vala \ objects/interface-generics.vala \ objects/interface-property-base-access.vala \ objects/interface-property-base-impl.vala \ diff --git a/tests/objects/interface-async-captured-generic.vala b/tests/objects/interface-async-captured-generic.vala new file mode 100644 index 000000000..ae51d676a --- /dev/null +++ b/tests/objects/interface-async-captured-generic.vala @@ -0,0 +1,15 @@ +[GenericAccessors] +interface IFoo<G> : Object { + public async void bar (G g) { + assert (typeof (G) == typeof (string)); + assert (g == "foo"); + } +} + +class Foo : Object, IFoo<string> { +} + +void main () { + var foo = new Foo (); + foo.bar.begin ("foo"); +} |