/* asynchronous_bug613484.c generated by valac, the Vala compiler * generated from asynchronous_bug613484.vala, do not modify */ #include #include #include #include #if !defined(VALA_EXTERN) #if defined(_WIN32) || defined(__CYGWIN__) #define VALA_EXTERN __declspec(dllexport) extern #elif __GNUC__ >= 4 #define VALA_EXTERN __attribute__((visibility("default"))) extern #else #define VALA_EXTERN extern #endif #endif #define TYPE_FOO (foo_get_type ()) typedef struct _Foo Foo; typedef struct _DoFooAsyncData DoFooAsyncData; struct _Foo { gint i; }; struct _DoFooAsyncData { int _state_; GObject* _source_object_; GAsyncResult* _res_; GTask* _async_result; Foo foo; GValue value; }; VALA_EXTERN GType foo_get_type (void) G_GNUC_CONST ; VALA_EXTERN Foo* foo_dup (const Foo* self); VALA_EXTERN void foo_free (Foo* self); VALA_EXTERN void do_foo (Foo* foo, GValue* value); static void do_foo_async_data_free (gpointer _data); VALA_EXTERN void do_foo_async (Foo* foo, GValue* value, GAsyncReadyCallback _callback_, gpointer _user_data_); VALA_EXTERN void do_foo_finish (GAsyncResult* _res_); static gboolean do_foo_async_co (DoFooAsyncData* _data_); static void _vala_main (void); Foo* foo_dup (const Foo* self) { Foo* dup; dup = g_new0 (Foo, 1); memcpy (dup, self, sizeof (Foo)); return dup; } void foo_free (Foo* self) { g_free (self); } static GType foo_get_type_once (void) { GType foo_type_id; foo_type_id = g_boxed_type_register_static ("Foo", (GBoxedCopyFunc) foo_dup, (GBoxedFreeFunc) foo_free); return foo_type_id; } GType foo_get_type (void) { static volatile gsize foo_type_id__once = 0; if (g_once_init_enter (&foo_type_id__once)) { GType foo_type_id; foo_type_id = foo_get_type_once (); g_once_init_leave (&foo_type_id__once, foo_type_id); } return foo_type_id__once; } void do_foo (Foo* foo, GValue* value) { g_return_if_fail (foo != NULL); g_return_if_fail (value != NULL); } static void do_foo_async_data_free (gpointer _data) { DoFooAsyncData* _data_; _data_ = _data; G_IS_VALUE (&_data_->value) ? (g_value_unset (&_data_->value), NULL) : NULL; g_slice_free (DoFooAsyncData, _data_); } void do_foo_async (Foo* foo, GValue* value, GAsyncReadyCallback _callback_, gpointer _user_data_) { DoFooAsyncData* _data_; Foo _tmp0_; GValue _tmp1_; GValue _tmp2_; GValue _tmp3_ = {0}; g_return_if_fail (foo != NULL); g_return_if_fail (value != NULL); _data_ = g_slice_new0 (DoFooAsyncData); _data_->_async_result = g_task_new (NULL, NULL, _callback_, _user_data_); g_task_set_task_data (_data_->_async_result, _data_, do_foo_async_data_free); _tmp0_ = *foo; _data_->foo = _tmp0_; _tmp1_ = *value; _tmp2_ = _tmp1_; if (G_IS_VALUE (&_tmp2_)) { g_value_init (&_tmp3_, G_VALUE_TYPE (&_tmp2_)); g_value_copy (&_tmp2_, &_tmp3_); } else { _tmp3_ = _tmp2_; } G_IS_VALUE (&_data_->value) ? (g_value_unset (&_data_->value), NULL) : NULL; _data_->value = _tmp3_; do_foo_async_co (_data_); } void do_foo_finish (GAsyncResult* _res_) { DoFooAsyncData* _data_; _data_ = g_task_propagate_pointer (G_TASK (_res_), NULL); } static gboolean do_foo_async_co (DoFooAsyncData* _data_) { switch (_data_->_state_) { case 0: goto _state_0; default: g_assert_not_reached (); } _state_0: g_task_return_pointer (_data_->_async_result, _data_, NULL); if (_data_->_state_ != 0) { while (!g_task_get_completed (_data_->_async_result)) { g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE); } } g_object_unref (_data_->_async_result); return FALSE; } static void _vala_main (void) { } int main (int argc, char ** argv) { _vala_main (); return 0; }