set_cvalue (expr, get_array_length_cexpression (expr.inner, 1));
} else if (expr.symbol_reference is DelegateTargetField) {
CCodeExpression delegate_target_destroy_notify;
- set_cvalue (expr, get_delegate_target_cexpression (expr.inner, out delegate_target_destroy_notify));
+ set_cvalue (expr, get_delegate_target_cexpression (expr.inner, out delegate_target_destroy_notify) ?? new CCodeConstant ("NULL"));
} else if (expr.symbol_reference is DelegateDestroyField) {
CCodeExpression delegate_target_destroy_notify;
get_delegate_target_cexpression (expr.inner, out delegate_target_destroy_notify);
- set_cvalue (expr, delegate_target_destroy_notify);
+ set_cvalue (expr, delegate_target_destroy_notify ?? new CCodeConstant ("NULL"));
} else if (expr.symbol_reference is GenericDupField) {
set_cvalue (expr, get_dup_func_expression (expr.inner.value_type, expr.source_reference));
} else if (expr.symbol_reference is GenericDestroyField) {
--- /dev/null
+/* delegates_member_target_destroy_2.c generated by valac, the Vala compiler
+ * generated from delegates_member_target_destroy_2.vala, do not modify */
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if !defined(VALA_EXTERN)
+#if defined(_MSC_VER)
+#define VALA_EXTERN __declspec(dllexport) extern
+#elif __GNUC__ >= 4
+#define VALA_EXTERN __attribute__((visibility("default"))) extern
+#else
+#define VALA_EXTERN extern
+#endif
+#endif
+
+typedef void (*FooFunc) (gpointer user_data);
+#define _vala_assert(expr, msg) if G_LIKELY (expr) ; else g_assertion_message_expr (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return; }
+#define _vala_return_val_if_fail(expr, msg, val) if G_LIKELY (expr) ; else { g_return_if_fail_warning (G_LOG_DOMAIN, G_STRFUNC, msg); return val; }
+#define _vala_warn_if_fail(expr, msg) if G_LIKELY (expr) ; else g_warn_message (G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+VALA_EXTERN void bar (const gchar* s);
+VALA_EXTERN void foo (FooFunc func,
+ gpointer func_target,
+ GDestroyNotify func_target_destroy_notify);
+static void _vala_main (void);
+
+void
+bar (const gchar* s)
+{
+ g_return_if_fail (s != NULL);
+ _vala_assert (g_strcmp0 (s, "foo") == 0, "s == \"foo\"");
+}
+
+void
+foo (FooFunc func,
+ gpointer func_target,
+ GDestroyNotify func_target_destroy_notify)
+{
+ GDestroyNotify _tmp0_;
+ _vala_assert (g_strcmp0 (func_target, "foo") == 0, "func.target == \"foo\"");
+ _tmp0_ = g_free;
+ _vala_assert (func_target_destroy_notify == _tmp0_, "func.destroy == g_free");
+ func (func_target);
+ (func_target_destroy_notify == NULL) ? NULL : (func_target_destroy_notify (func_target), NULL);
+ func = NULL;
+ func_target = NULL;
+ func_target_destroy_notify = NULL;
+}
+
+static void
+_vala_main (void)
+{
+ FooFunc func = NULL;
+ gpointer func_target;
+ GDestroyNotify func_target_destroy_notify;
+ gchar* _tmp0_;
+ GDestroyNotify _tmp1_;
+ FooFunc _tmp2_;
+ gpointer _tmp2__target;
+ GDestroyNotify _tmp2__target_destroy_notify;
+ func = (FooFunc) bar;
+ func_target = NULL;
+ func_target_destroy_notify = NULL;
+ _tmp0_ = g_strdup ("foo");
+ func_target = _tmp0_;
+ _tmp1_ = g_free;
+ func_target_destroy_notify = _tmp1_;
+ _tmp2_ = func;
+ _tmp2__target = func_target;
+ _tmp2__target_destroy_notify = func_target_destroy_notify;
+ func = NULL;
+ func_target = NULL;
+ func_target_destroy_notify = NULL;
+ foo (_tmp2_, _tmp2__target, _tmp2__target_destroy_notify);
+ (func_target_destroy_notify == NULL) ? NULL : (func_target_destroy_notify (func_target), NULL);
+ func = NULL;
+ func_target = NULL;
+ func_target_destroy_notify = NULL;
+}
+
+int
+main (int argc,
+ char ** argv)
+{
+ _vala_main ();
+ return 0;
+}
+