Skip to content

Commit

Permalink
codegen: Fix vfunc signature of delegate-typed property in interface
Browse files Browse the repository at this point in the history
  • Loading branch information
ricotz committed Nov 15, 2019
1 parent 94bd762 commit 81948df
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 0 deletions.
4 changes: 4 additions & 0 deletions codegen/valagtypemodule.vala
Expand Up @@ -2161,6 +2161,8 @@ public class Vala.GTypeModule : GErrorModule {
for (int dim = 1; dim <= array_type.rank; dim++) {
vdeclarator.add_parameter (new CCodeParameter (get_array_length_cname ("result", dim), length_ctype));
}
} else if ((prop.property_type is DelegateType) && get_ccode_delegate_target (prop) && ((DelegateType) prop.property_type).delegate_symbol.has_target) {
vdeclarator.add_parameter (new CCodeParameter (get_delegate_target_cname ("result"), "gpointer*"));
}

var vdecl = new CCodeDeclaration (creturn_type);
Expand All @@ -2184,6 +2186,8 @@ public class Vala.GTypeModule : GErrorModule {
for (int dim = 1; dim <= array_type.rank; dim++) {
vdeclarator.add_parameter (new CCodeParameter (get_array_length_cname ("value", dim), length_ctype));
}
} else if ((prop.property_type is DelegateType) && get_ccode_delegate_target (prop) && ((DelegateType) prop.property_type).delegate_symbol.has_target) {
vdeclarator.add_parameter (new CCodeParameter (get_delegate_target_cname ("value"), "gpointer"));
}

var vdecl = new CCodeDeclaration ("void");
Expand Down
1 change: 1 addition & 0 deletions tests/Makefile.am
Expand Up @@ -333,6 +333,7 @@ TESTS = \
objects/interfaces.vala \
objects/interface-generics.vala \
objects/interface-property-base-access.vala \
objects/interface-property-delegate.vala \
objects/interface-virtual-override.vala \
objects/methods.vala \
objects/paramspec.vala \
Expand Down
29 changes: 29 additions & 0 deletions tests/objects/interface-property-delegate.vala
@@ -0,0 +1,29 @@
delegate void FooFunc ();

interface IFoo {
public abstract unowned FooFunc prop { get; set; }
}

class Foo : IFoo {
public unowned FooFunc prop { get; set; }
}

class Bar {
public bool reached;

public Bar () {
var foo = new Foo ();
foo.prop = bar;

foo.prop ();
}

void bar () {
reached = true;
}
}

void main () {
var bar = new Bar ();
assert (bar.reached);
}

0 comments on commit 81948df

Please sign in to comment.