Target destroy notify cannot be copied, which means that memory
management will often not work as expected. Use ownership transfer,
unowned target variable, or extra closure instead.
var result = ((GLibValue) value).copy ();
if (type is DelegateType) {
+ var delegate_type = (DelegateType) type;
+ if (delegate_type.delegate_symbol.has_target) {
+ Report.deprecated (node.source_reference, "copying delegates is discouraged");
+ }
result.delegate_target_destroy_notify_cvalue = new CCodeConstant ("NULL");
return result;
}
delegate void Foo ();
-async void do_foo (Foo f) {
+async void do_foo (owned Foo f) {
f ();
}
delegate void Deleg ();
-async void foo (Deleg deleg)
+async void foo (owned Deleg deleg)
{
Deleg d = () => { deleg (); };
d = null;
delegate void Foo ();
-void do_foo (Foo foo) {
- Foo bar = foo;
+void do_foo (owned Foo foo) {
+ Foo bar = (owned) foo;
}
void main () {
struct Foo {
- public SourceFunc bar;
+ public unowned SourceFunc bar;
}
void main() {