diff --git a/src/examples/eolian_cxx/colourable.c b/src/examples/eolian_cxx/colourable.c index 1c7ff5e445..655d63c5c2 100644 --- a/src/examples/eolian_cxx/colourable.c +++ b/src/examples/eolian_cxx/colourable.c @@ -26,7 +26,7 @@ struct _Colourable_Data typedef struct _Colourable_Data Colourable_Data; -void +Eo * _colourable_eo_base_constructor(Eo *obj, Colourable_Data *self EINA_UNUSED) { if(!_colourable_impl_logdomain) @@ -35,7 +35,7 @@ _colourable_eo_base_constructor(Eo *obj, Colourable_Data *self EINA_UNUSED) = eina_log_domain_register("colourable", EINA_COLOR_BLUE); } DBG("_colourable_constructor(%p, %p)\n", obj, MY_CLASS); - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } void diff --git a/src/examples/eolian_cxx/colourable_cxx.cc b/src/examples/eolian_cxx/colourable_cxx.cc index bd4fa46d52..934a5d0c60 100644 --- a/src/examples/eolian_cxx/colourable_cxx.cc +++ b/src/examples/eolian_cxx/colourable_cxx.cc @@ -19,12 +19,12 @@ extern "C" static efl::eina::log_domain domain("colourable"); -void +Eo * _colourable_eo_base_constructor(Eo *obj, Colourable_Data *self) { EINA_CXX_DOM_LOG_DBG(domain) << __func__ << std::endl; self->r = self->g = self->b = 0; - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } void diff --git a/src/examples/eolian_cxx/colourable_stub.h b/src/examples/eolian_cxx/colourable_stub.h index f6d758c28f..26b44b1644 100644 --- a/src/examples/eolian_cxx/colourable_stub.h +++ b/src/examples/eolian_cxx/colourable_stub.h @@ -13,7 +13,7 @@ struct _Colourable_Data }; typedef struct _Colourable_Data Colourable_Data; -void _colourable_eo_base_constructor(Eo *obj, Colourable_Data *self); +Eo *_colourable_eo_base_constructor(Eo *obj, Colourable_Data *self); void _colourable_eo_base_destructor(Eo *obj, Colourable_Data *self); void _colourable_rgb_24bits_constructor(Eo *obj, Colourable_Data *self, int rgb); void _colourable_print_colour(Eo *obj, Colourable_Data *self); diff --git a/src/lib/ecore_audio/ecore_audio_obj.c b/src/lib/ecore_audio/ecore_audio_obj.c index 43fc821aaa..3607cd9fca 100644 --- a/src/lib/ecore_audio/ecore_audio_obj.c +++ b/src/lib/ecore_audio/ecore_audio_obj.c @@ -54,12 +54,11 @@ _ecore_audio_volume_get(Eo *eo_obj EINA_UNUSED, Ecore_Audio_Object *obj) return obj->volume; } -EOLIAN static void +EOLIAN static Eo * _ecore_audio_eo_base_constructor(Eo *eo_obj, Ecore_Audio_Object *obj) { - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); - obj->volume = 1.0; + return eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); } #include "ecore_audio.eo.c" diff --git a/src/lib/ecore_audio/ecore_audio_obj_in.c b/src/lib/ecore_audio/ecore_audio_obj_in.c index ece944059b..a6afa18781 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_in.c +++ b/src/lib/ecore_audio/ecore_audio_obj_in.c @@ -170,12 +170,14 @@ _ecore_audio_in_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_Input *obj, Ecore_Au obj->seekable = (vio->seek != NULL); } -EOLIAN static void +EOLIAN static Eo * _ecore_audio_in_eo_base_constructor(Eo *eo_obj, Ecore_Audio_Input *obj) { - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); obj->speed = 1.0; + + return eo_obj; } EOLIAN static void diff --git a/src/lib/ecore_audio/ecore_audio_obj_in_tone.c b/src/lib/ecore_audio/ecore_audio_obj_in_tone.c index bdecc21860..ac83b85766 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_in_tone.c +++ b/src/lib/ecore_audio/ecore_audio_obj_in_tone.c @@ -107,12 +107,12 @@ _ecore_audio_in_tone_eo_base_key_data_get(Eo *eo_obj, Ecore_Audio_In_Tone_Data * } } -EOLIAN static void +EOLIAN static Eo * _ecore_audio_in_tone_eo_base_constructor(Eo *eo_obj, Ecore_Audio_In_Tone_Data *obj) { Ecore_Audio_Input *in_obj = eo_data_scope_get(eo_obj, ECORE_AUDIO_IN_CLASS); - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); in_obj->channels = 1; in_obj->samplerate = 44100; @@ -120,6 +120,8 @@ _ecore_audio_in_tone_eo_base_constructor(Eo *eo_obj, Ecore_Audio_In_Tone_Data *o in_obj->seekable = EINA_TRUE; obj->freq = 1000; + + return eo_obj; } #include "ecore_audio_in_tone.eo.c" diff --git a/src/lib/ecore_audio/ecore_audio_obj_out.c b/src/lib/ecore_audio/ecore_audio_obj_out.c index 2d8522b58e..0414d668b5 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_out.c +++ b/src/lib/ecore_audio/ecore_audio_obj_out.c @@ -129,12 +129,14 @@ _ecore_audio_out_ecore_audio_vio_set(Eo *eo_obj, Ecore_Audio_Output *_pd EINA_UN ea_obj->vio->free_func = free_func; } -EOLIAN static void +EOLIAN static Eo * _ecore_audio_out_eo_base_constructor(Eo *eo_obj, Ecore_Audio_Output *obj) { - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); obj->need_writer = EINA_TRUE; + + return eo_obj; } EOLIAN static void diff --git a/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c b/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c index a7308ab7ef..fffe4c47d8 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c +++ b/src/lib/ecore_audio/ecore_audio_obj_out_pulse.c @@ -255,14 +255,14 @@ static void _state_job(void *data EINA_UNUSED) class_vars.state_job = NULL; } -EOLIAN static void +EOLIAN static Eo * _ecore_audio_out_pulse_eo_base_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_Data *_pd EINA_UNUSED) { int argc; char **argv; Ecore_Audio_Output *out_obj = eo_data_scope_get(eo_obj, ECORE_AUDIO_OUT_CLASS); - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); out_obj->need_writer = EINA_FALSE; @@ -281,6 +281,8 @@ _ecore_audio_out_pulse_eo_base_constructor(Eo *eo_obj, Ecore_Audio_Out_Pulse_Dat class_vars.outputs = eina_list_append(class_vars.outputs, eo_obj); if (class_vars.state_job) eo_del(class_vars.state_job); class_vars.state_job = ecore_job_add(_state_job, NULL); + + return eo_obj; } EOLIAN static void diff --git a/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c b/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c index fc552b8257..d986b67dbf 100644 --- a/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c +++ b/src/lib/ecore_audio/ecore_audio_obj_out_sndfile.c @@ -158,17 +158,18 @@ _ecore_audio_out_sndfile_ecore_audio_format_get(Eo *eo_obj, Ecore_Audio_Out_Sndf return obj->format; } -EOLIAN static void +EOLIAN static Eo * _ecore_audio_out_sndfile_eo_base_constructor(Eo *eo_obj, Ecore_Audio_Out_Sndfile_Data *_pd EINA_UNUSED) { Ecore_Audio_Output *out_obj = eo_data_scope_get(eo_obj, ECORE_AUDIO_OUT_CLASS); - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); eo_do(eo_obj, ecore_audio_obj_format_set(ECORE_AUDIO_FORMAT_OGG)); // FIXME: Use writer from output out_obj->need_writer = EINA_FALSE; + return eo_obj; } EOLIAN static void diff --git a/src/lib/ecore_con/ecore_con.c b/src/lib/ecore_con/ecore_con.c index dee26e1729..bc121d3965 100644 --- a/src/lib/ecore_con/ecore_con.c +++ b/src/lib/ecore_con/ecore_con.c @@ -372,15 +372,17 @@ ecore_con_server_add(Ecore_Con_Type compl_type, return obj; } -EOLIAN static void +EOLIAN static Eo * _ecore_con_server_eo_base_constructor(Ecore_Con_Server *obj, Ecore_Con_Server_Data *svr) { - eo_do_super(obj, ECORE_CON_SERVER_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECORE_CON_SERVER_CLASS, obj, eo_constructor()); svr->fd = -1; svr->reject_excess_clients = EINA_FALSE; svr->client_limit = -1; svr->clients = NULL; + + return obj; } EOLIAN static Eo * diff --git a/src/lib/ecore_con/ecore_con_url.c b/src/lib/ecore_con/ecore_con_url.c index 37902edacd..37f5fa0b6c 100644 --- a/src/lib/ecore_con/ecore_con_url.c +++ b/src/lib/ecore_con/ecore_con_url.c @@ -453,25 +453,26 @@ ecore_con_url_new(const char *url) return url_obj; } -EOLIAN static void +EOLIAN static Eo * _efl_network_url_eo_base_constructor(Efl_Network_Url *url_obj, Efl_Network_Url_Data *url_con EINA_UNUSED) { - eo_do_super(url_obj, MY_CLASS, eo_constructor()); + url_obj = eo_do_super_ret(url_obj, MY_CLASS, url_obj, eo_constructor()); if (!_init_count) eo_error_set(url_obj); if (!_c_init()) { eo_error_set(url_obj); - return; + return NULL; } url_con->curl_easy = _c->curl_easy_init(); if (!url_con->curl_easy) { eo_error_set(url_obj); - return; + return NULL; } + return url_obj; } EOLIAN static Eo * diff --git a/src/lib/ector/cairo/ector_cairo_surface.c b/src/lib/ector/cairo/ector_cairo_surface.c index 377fbbd0ca..10fef6560e 100644 --- a/src/lib/ector/cairo/ector_cairo_surface.c +++ b/src/lib/ector/cairo/ector_cairo_surface.c @@ -121,14 +121,16 @@ _ector_cairo_surface_ector_generic_surface_reference_point_set(Eo *obj EINA_UNUS pd->current.y = y; } -static void +static Eo * _ector_cairo_surface_eo_base_constructor(Eo *obj, Ector_Cairo_Surface_Data *pd) { - eo_do_super(obj, ECTOR_CAIRO_SURFACE_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_CAIRO_SURFACE_CLASS, obj, eo_constructor()); _cairo_count++; _ector_cairo_surface_context_set(obj, pd, NULL); + + return obj; } static void diff --git a/src/lib/ector/cairo/ector_renderer_cairo_base.c b/src/lib/ector/cairo/ector_renderer_cairo_base.c index 1580b4e597..5bf0f88e58 100644 --- a/src/lib/ector/cairo/ector_renderer_cairo_base.c +++ b/src/lib/ector/cairo/ector_renderer_cairo_base.c @@ -190,16 +190,18 @@ _ector_renderer_cairo_base_ector_renderer_generic_base_draw(Eo *obj, return EINA_TRUE; } -static void +static Eo * _ector_renderer_cairo_base_eo_base_constructor(Eo *obj, Ector_Renderer_Cairo_Base_Data *pd EINA_UNUSED) { - eo_do_super(obj, ECTOR_RENDERER_CAIRO_BASE_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_RENDERER_CAIRO_BASE_CLASS, obj, eo_constructor()); pd->generic = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_BASE_CLASS, obj); - USE(obj, cairo_matrix_init_identity, ); + USE(obj, cairo_matrix_init_identity, NULL); cairo_matrix_init_identity(&identity); + + return obj; } static void diff --git a/src/lib/ector/cairo/ector_renderer_cairo_shape.c b/src/lib/ector/cairo/ector_renderer_cairo_shape.c index 2b79e8bb15..b3923e97e2 100644 --- a/src/lib/ector/cairo/ector_renderer_cairo_shape.c +++ b/src/lib/ector/cairo/ector_renderer_cairo_shape.c @@ -244,15 +244,17 @@ _ector_renderer_cairo_shape_ector_renderer_generic_base_bounds_get(Eo *obj, r->y += bd->generic->origin.y; } -void +Eo * _ector_renderer_cairo_shape_eo_base_constructor(Eo *obj, Ector_Renderer_Cairo_Shape_Data *pd) { - eo_do_super(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_RENDERER_CAIRO_SHAPE_CLASS, obj, eo_constructor()); pd->shape = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_SHAPE_MIXIN, obj); pd->base = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_BASE_CLASS, obj); eo_do(obj, eo_event_callback_add(EFL_GFX_PATH_CHANGED, _ector_renderer_cairo_shape_path_changed, pd)); + + return obj; } void diff --git a/src/lib/ector/software/ector_renderer_software_gradient_linear.c b/src/lib/ector/software/ector_renderer_software_gradient_linear.c index a6e32b008b..f2ca832cdc 100644 --- a/src/lib/ector/software/ector_renderer_software_gradient_linear.c +++ b/src/lib/ector/software/ector_renderer_software_gradient_linear.c @@ -71,13 +71,15 @@ _ector_renderer_software_gradient_linear_ector_renderer_software_base_fill(Eo *o return EINA_TRUE; } -void +Eo * _ector_renderer_software_gradient_linear_eo_base_constructor(Eo *obj, Ector_Renderer_Software_Gradient_Data *pd) { - eo_do_super(obj, ECTOR_RENDERER_SOFTWARE_GRADIENT_LINEAR_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_RENDERER_SOFTWARE_GRADIENT_LINEAR_CLASS, obj, eo_constructor()); pd->gd = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_GRADIENT_MIXIN, obj); pd->gld = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_GRADIENT_LINEAR_MIXIN, obj); + + return obj; } void diff --git a/src/lib/ector/software/ector_renderer_software_gradient_radial.c b/src/lib/ector/software/ector_renderer_software_gradient_radial.c index a05b4874f4..5b63f957be 100644 --- a/src/lib/ector/software/ector_renderer_software_gradient_radial.c +++ b/src/lib/ector/software/ector_renderer_software_gradient_radial.c @@ -79,13 +79,15 @@ _ector_renderer_software_gradient_radial_ector_renderer_software_base_fill(Eo *o return EINA_TRUE; } -void +Eo * _ector_renderer_software_gradient_radial_eo_base_constructor(Eo *obj, Ector_Renderer_Software_Gradient_Data *pd) { - eo_do_super(obj, ECTOR_RENDERER_SOFTWARE_GRADIENT_RADIAL_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_RENDERER_SOFTWARE_GRADIENT_RADIAL_CLASS, obj, eo_constructor()); pd->gd = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_GRADIENT_MIXIN, obj); pd->gld = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_GRADIENT_RADIAL_MIXIN, obj); + + return obj; } void diff --git a/src/lib/ector/software/ector_renderer_software_shape.c b/src/lib/ector/software/ector_renderer_software_shape.c index 2e4fbea5aa..a91b80eb3b 100644 --- a/src/lib/ector/software/ector_renderer_software_shape.c +++ b/src/lib/ector/software/ector_renderer_software_shape.c @@ -362,14 +362,16 @@ _ector_renderer_software_shape_path_changed(void *data, Eo *obj EINA_UNUSED, con return EINA_TRUE; } -void +Eo * _ector_renderer_software_shape_eo_base_constructor(Eo *obj, Ector_Renderer_Software_Shape_Data *pd) { - eo_do_super(obj, ECTOR_RENDERER_SOFTWARE_SHAPE_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_RENDERER_SOFTWARE_SHAPE_CLASS, obj, eo_constructor()); pd->shape = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_SHAPE_MIXIN, obj); pd->base = eo_data_xref(obj, ECTOR_RENDERER_GENERIC_BASE_CLASS, obj); eo_do(obj, eo_event_callback_add(EFL_GFX_PATH_CHANGED, _ector_renderer_software_shape_path_changed, pd)); + + return obj; } void diff --git a/src/lib/ector/software/ector_software_surface.c b/src/lib/ector/software/ector_software_surface.c index 02d93c39df..a5583028e6 100644 --- a/src/lib/ector/software/ector_software_surface.c +++ b/src/lib/ector/software/ector_software_surface.c @@ -65,17 +65,19 @@ _ector_software_surface_surface_get(Eo *obj EINA_UNUSED, *height = pd->software->fill_data.raster_buffer.height; } -static void +static Eo * _ector_software_surface_eo_base_constructor(Eo *obj, Ector_Software_Surface_Data *pd EINA_UNUSED) { - eo_do_super(obj, ECTOR_SOFTWARE_SURFACE_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, ECTOR_SOFTWARE_SURFACE_CLASS, obj, eo_constructor()); if(_software_count == 0) { pd->software = (Software_Rasterizer *) calloc(1, sizeof(Software_Rasterizer)); ector_software_rasterizer_init(pd->software); } _software_count++; + + return obj; } static void diff --git a/src/lib/edje/edje_edit.c b/src/lib/edje/edje_edit.c index 1086d64f5f..891584ed78 100644 --- a/src/lib/edje/edje_edit.c +++ b/src/lib/edje/edje_edit.c @@ -239,12 +239,12 @@ edje_edit_object_add(Evas *evas) return e; } -EOLIAN static void +EOLIAN static Eo * _edje_edit_eo_base_constructor(Eo *obj, Edje_Edit *eed) { eed->base = eo_data_ref(obj, EDJE_OBJECT_CLASS); - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } EOLIAN static void diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c index 7de630d70b..f75abd7873 100644 --- a/src/lib/edje/edje_smart.c +++ b/src/lib/edje/edje_smart.c @@ -24,14 +24,16 @@ edje_object_add(Evas *evas) return e; } -EOLIAN static void +EOLIAN static Eo * _edje_object_eo_base_constructor(Eo *obj, Edje *ed) { ed->base = eo_data_ref(obj, EVAS_SMART_CLIPPED_CLASS); - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY)); _edje_lib_ref(); + + return obj; } EOLIAN static void diff --git a/src/lib/eio/eio_model.c b/src/lib/eio/eio_model.c index 384a8e4200..5ff288ea0b 100644 --- a/src/lib/eio/eio_model.c +++ b/src/lib/eio/eio_model.c @@ -623,15 +623,15 @@ _eio_model_efl_model_base_children_slice_get(Eo *obj EINA_UNUSED, Eio_Model_Data /** * Class definitions */ -static void +static Eo * _eio_model_eo_base_constructor(Eo *obj, Eio_Model_Data *priv) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); unsigned int i; priv->obj = obj; priv->properties_name = eina_array_new(EIO_MODEL_PROP_LAST); - EINA_SAFETY_ON_NULL_RETURN(priv->properties_name); + EINA_SAFETY_ON_NULL_RETURN_VAL(priv->properties_name, NULL); for (i = 0; i < EIO_MODEL_PROP_LAST; ++i) eina_array_push(priv->properties_name, _eio_model_prop_names[i]); @@ -645,6 +645,8 @@ _eio_model_eo_base_constructor(Eo *obj, Eio_Model_Data *priv) priv->load.status = EFL_MODEL_LOAD_STATUS_UNLOADED; priv->monitor = NULL; eina_spinlock_new(&priv->filter_lock); + + return obj; } static void diff --git a/src/lib/emotion/emotion_smart.c b/src/lib/emotion/emotion_smart.c index 8cf589903d..fbbbb49170 100644 --- a/src/lib/emotion/emotion_smart.c +++ b/src/lib/emotion/emotion_smart.c @@ -263,11 +263,13 @@ emotion_object_add(Evas *evas) return e; } -EOLIAN static void +EOLIAN static Eo * _emotion_object_eo_base_constructor(Eo *obj, Emotion_Object_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_obj_type_set(E_OBJ_NAME)); + + return obj; } EAPI Evas_Object * diff --git a/src/lib/eo/Eo.h b/src/lib/eo/Eo.h index 8a271f967b..bc83ddbddd 100644 --- a/src/lib/eo/Eo.h +++ b/src/lib/eo/Eo.h @@ -639,8 +639,8 @@ EAPI void eo_error_set_internal(const Eo *obj, const char *file, int line); #define _eo_add_common(klass, parent, is_ref, ...) \ ( \ _eo_do_start(_eo_add_internal_start(__FILE__, __LINE__, klass, parent, is_ref), \ - klass, EINA_FALSE, __FILE__, __FUNCTION__, __LINE__), \ - eo_constructor(), ##__VA_ARGS__, \ + klass, EINA_FALSE, __FILE__, __FUNCTION__, __LINE__) \ + , ##__VA_ARGS__, \ (Eo *) _eo_add_end() \ ) diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index 0edac2140d..d5e1d3adb7 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -920,6 +920,18 @@ _eo_add_internal_start(const char *file, int line, const Eo_Class *klass_id, Eo } } + /* eo_id can change here. Freeing is done on the resolved object. */ + eo_do(eo_id, eo_id = eo_constructor()); + if (!eo_id) + { + ERR("Object of class '%s' - Error while constructing object", + klass->desc->name); + /* Unref twice, once for the ref in _eo_add_internal_start, and once for the basic object ref. */ + _eo_unref(obj); + _eo_unref(obj); + return NULL; + } + return eo_id; } diff --git a/src/lib/eo/eo_base.eo b/src/lib/eo/eo_base.eo index e4bd0e8bc7..5c7123c4e5 100644 --- a/src/lib/eo/eo_base.eo +++ b/src/lib/eo/eo_base.eo @@ -45,6 +45,7 @@ Return event freeze count. */ constructor { /*@ Call the object's constructor. Should not be used with #eo_do. Only use it with #eo_do_super. */ + return: Eo *; /*@ The new object created, can be NULL if aborting */ } destructor { /*@ Call the object's destructor. diff --git a/src/lib/eo/eo_base_class.c b/src/lib/eo/eo_base_class.c index a84dcf005e..a263c1ec64 100644 --- a/src/lib/eo/eo_base_class.c +++ b/src/lib/eo/eo_base_class.c @@ -967,12 +967,14 @@ EAPI const Eina_Value_Type *EO_DBG_INFO_TYPE = &_EO_DBG_INFO_TYPE; /* EO_BASE_CLASS stuff */ #define MY_CLASS EO_BASE_CLASS -EOLIAN static void +EOLIAN static Eo * _eo_base_constructor(Eo *obj, Eo_Base_Data *pd EINA_UNUSED) { DBG("%p - %s.", obj, eo_class_name_get(MY_CLASS)); _eo_condtor_done(obj); + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_3d_camera.c b/src/lib/evas/canvas/evas_3d_camera.c index 7a9c8a5a25..8467f8e0b0 100644 --- a/src/lib/evas/canvas/evas_3d_camera.c +++ b/src/lib/evas/canvas/evas_3d_camera.c @@ -62,12 +62,14 @@ evas_3d_camera_node_del(Evas_3D_Camera *camera, Evas_3D_Node *node) else eina_hash_set(pd->nodes, &node, (const void *)(uintptr_t)(count - 1)); } -EOLIAN static void +EOLIAN static Eo * _evas_3d_camera_eo_base_constructor(Eo *obj, Evas_3D_Camera_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_CAMERA)); + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_3d_light.c b/src/lib/evas/canvas/evas_3d_light.c index d8c73b66e4..455ded65e9 100644 --- a/src/lib/evas/canvas/evas_3d_light.c +++ b/src/lib/evas/canvas/evas_3d_light.c @@ -76,10 +76,10 @@ evas_3d_light_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_3d_light_eo_base_constructor(Eo *obj, Evas_3D_Light_Data *pd) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_LIGHT)); evas_color_set(&pd->ambient, 0.0, 0.0, 0.0, 1.0); evas_color_set(&pd->diffuse, 1.0, 1.0, 1.0, 1.0); @@ -92,6 +92,8 @@ _evas_3d_light_eo_base_constructor(Eo *obj, Evas_3D_Light_Data *pd) pd->atten_const = 1.0; pd->atten_linear = 0.0; pd->atten_quad = 0.0; + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_3d_material.c b/src/lib/evas/canvas/evas_3d_material.c index aee8c85c9a..5d609cab24 100644 --- a/src/lib/evas/canvas/evas_3d_material.c +++ b/src/lib/evas/canvas/evas_3d_material.c @@ -88,10 +88,10 @@ evas_3d_material_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_3d_material_eo_base_constructor(Eo *obj EINA_UNUSED, Evas_3D_Material_Data *pd) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_MATERIAL)); evas_color_set(&pd->attribs[EVAS_3D_MATERIAL_AMBIENT].color, 0.2, 0.2, 0.2, 1.0); @@ -99,6 +99,8 @@ _evas_3d_material_eo_base_constructor(Eo *obj EINA_UNUSED, Evas_3D_Material_Data evas_color_set(&pd->attribs[EVAS_3D_MATERIAL_SPECULAR].color, 1.0, 1.0, 1.0, 1.0); evas_color_set(&pd->attribs[EVAS_3D_MATERIAL_EMISSION].color, 0.0, 0.0, 0.0, 1.0); pd->shininess = 150.0; + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_3d_mesh.c b/src/lib/evas/canvas/evas_3d_mesh.c index df9d135aa4..1b8cc14eb9 100644 --- a/src/lib/evas/canvas/evas_3d_mesh.c +++ b/src/lib/evas/canvas/evas_3d_mesh.c @@ -252,12 +252,14 @@ evas_3d_mesh_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_3d_mesh_eo_base_constructor(Eo *obj, Evas_3D_Mesh_Data *pd) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do (obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_MESH)); _mesh_init(pd); + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_3d_object.c b/src/lib/evas/canvas/evas_3d_object.c index 6cd2cb4621..5776fde511 100644 --- a/src/lib/evas/canvas/evas_3d_object.c +++ b/src/lib/evas/canvas/evas_3d_object.c @@ -3,15 +3,17 @@ #define MY_CLASS EVAS_3D_OBJECT_CLASS -EOLIAN static void +EOLIAN static Eo * _evas_3d_object_eo_base_constructor(Eo *obj, Evas_3D_Object_Data *pd) { Eo *e = NULL; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, e = eo_parent_get()); pd->evas = e; pd->type = EVAS_3D_OBJECT_TYPE_INVALID; memset(&pd->dirty[0], 0x00, sizeof(Eina_Bool) * EVAS_3D_STATE_MAX); + + return obj; } EOLIAN static Evas * diff --git a/src/lib/evas/canvas/evas_3d_scene.c b/src/lib/evas/canvas/evas_3d_scene.c index 0bc0fb3b63..2b33c8a8f0 100644 --- a/src/lib/evas/canvas/evas_3d_scene.c +++ b/src/lib/evas/canvas/evas_3d_scene.c @@ -64,16 +64,18 @@ evas_3d_scene_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_3d_scene_eo_base_constructor(Eo *obj, Evas_3D_Scene_Data *pd) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_SCENE)); evas_color_set(&pd->bg_color, 0.0, 0.0, 0.0, 0.0); pd->shadows_enabled = EINA_FALSE; pd->color_pick_enabled = EINA_FALSE; pd->node_mesh_colors = NULL; pd->colors_node_mesh = NULL; + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_3d_texture.c b/src/lib/evas/canvas/evas_3d_texture.c index 8b68d818d6..c221b431d0 100644 --- a/src/lib/evas/canvas/evas_3d_texture.c +++ b/src/lib/evas/canvas/evas_3d_texture.c @@ -319,13 +319,15 @@ evas_3d_texture_add(Evas *e) } -EOLIAN static void +EOLIAN static Eo * _evas_3d_texture_eo_base_constructor(Eo *obj, Evas_3D_Texture_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); pd->atlas_enable = EINA_TRUE; eo_do(obj, evas_3d_object_type_set(EVAS_3D_OBJECT_TYPE_TEXTURE)); + + return obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_main.c b/src/lib/evas/canvas/evas_main.c index b14194d3be..1935d40756 100644 --- a/src/lib/evas/canvas/evas_main.c +++ b/src/lib/evas/canvas/evas_main.c @@ -148,10 +148,10 @@ evas_new(void) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_canvas_eo_base_constructor(Eo *eo_obj, Evas_Public_Data *e) { - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); e->evas = eo_obj; e->output.render_method = RENDER_METHOD_INVALID; @@ -185,6 +185,8 @@ _evas_canvas_eo_base_constructor(Eo *eo_obj, Evas_Public_Data *e) #undef EVAS_ARRAY_SET eina_lock_new(&(e->lock_objects)); + + return eo_obj; } EAPI void diff --git a/src/lib/evas/canvas/evas_object_box.c b/src/lib/evas/canvas/evas_object_box.c index 1c42728745..eda1bcd9c1 100644 --- a/src/lib/evas/canvas/evas_object_box.c +++ b/src/lib/evas/canvas/evas_object_box.c @@ -462,13 +462,15 @@ evas_object_box_add(Evas *evas) return obj; } -EOLIAN static void +EOLIAN static Eo * _evas_box_eo_base_constructor(Eo *obj, Evas_Object_Box_Data *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_obj_smart_callbacks_descriptions_set(_signals), evas_obj_type_set(MY_CLASS_NAME_LEGACY)); + + return obj; } EOLIAN static Evas_Object* diff --git a/src/lib/evas/canvas/evas_object_grid.c b/src/lib/evas/canvas/evas_object_grid.c index a55584e0ae..7d5e6d2af7 100644 --- a/src/lib/evas/canvas/evas_object_grid.c +++ b/src/lib/evas/canvas/evas_object_grid.c @@ -269,12 +269,13 @@ evas_object_grid_add(Evas *evas) return obj; } -EOLIAN static void +EOLIAN static Eo * _evas_grid_eo_base_constructor(Eo *obj, Evas_Grid_Data *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_obj_smart_attach(_evas_object_grid_smart_class_new())); + return obj; // return evas_object_smart_add(evas, _evas_object_grid_smart_class_new()); } diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index cabeebbb0c..5e59dbb835 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -342,7 +342,7 @@ _init_cow(Eo *eo_obj) return EINA_TRUE; } -EOLIAN static void +EOLIAN static Eo * _evas_image_eo_base_constructor(Eo *eo_obj, Evas_Image_Data *o) { Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); @@ -350,7 +350,7 @@ _evas_image_eo_base_constructor(Eo *eo_obj, Evas_Image_Data *o) Eo *parent = NULL; Evas_Colorspace cspace; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); eo_do(eo_obj, parent = eo_parent_get()); eo_e = evas_object_evas_get(parent); @@ -359,7 +359,7 @@ _evas_image_eo_base_constructor(Eo *eo_obj, Evas_Image_Data *o) evas_object_inject(eo_obj, obj, eo_e); if (!_init_cow(eo_obj)) - return; + return NULL; o->load_opts = eina_cow_alloc(evas_object_image_load_opts_cow); o->pixels = eina_cow_alloc(evas_object_image_pixels_cow); @@ -377,6 +377,8 @@ _evas_image_eo_base_constructor(Eo *eo_obj, Evas_Image_Data *o) state_write->filter = eina_cow_alloc(evas_object_filter_cow); EINA_COW_IMAGE_STATE_WRITE_END(o, state_write); } + + return eo_obj; } EAPI Evas_Object * diff --git a/src/lib/evas/canvas/evas_object_line.c b/src/lib/evas/canvas/evas_object_line.c index 8090c611de..df9570af22 100644 --- a/src/lib/evas/canvas/evas_object_line.c +++ b/src/lib/evas/canvas/evas_object_line.c @@ -214,14 +214,14 @@ evas_object_line_init(Evas_Object *eo_obj) obj->type = o_type; } -EOLIAN static void +EOLIAN static Eo * _evas_line_eo_base_constructor(Eo *eo_obj, Evas_Line_Data *class_data EINA_UNUSED) { Evas_Object_Protected_Data *obj; Evas_Line_Data *o; Eo *parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); evas_object_line_init(eo_obj); @@ -235,6 +235,8 @@ _evas_line_eo_base_constructor(Eo *eo_obj, Evas_Line_Data *class_data EINA_UNUSE o->cur.x2 = 31; o->cur.y2 = 31; o->prev = o->cur; + + return eo_obj; } static void diff --git a/src/lib/evas/canvas/evas_object_main.c b/src/lib/evas/canvas/evas_object_main.c index 5f0db505d5..c77db68300 100644 --- a/src/lib/evas/canvas/evas_object_main.c +++ b/src/lib/evas/canvas/evas_object_main.c @@ -82,12 +82,12 @@ _init_cow(void) return EINA_TRUE; } -EOLIAN static void +EOLIAN static Eo * _evas_object_eo_base_constructor(Eo *eo_obj, Evas_Object_Protected_Data *obj) { Eo *parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); eo_do(eo_obj, evas_obj_type_set(MY_CLASS_NAME)); eo_manual_free_set(eo_obj, EINA_TRUE); @@ -96,7 +96,7 @@ _evas_object_eo_base_constructor(Eo *eo_obj, Evas_Object_Protected_Data *obj) if (!obj || !_init_cow() || !eo_isa(parent, EVAS_COMMON_INTERFACE_INTERFACE)) { eo_error_set(eo_obj); - return; + return NULL; } obj->is_frame = EINA_FALSE; @@ -107,6 +107,8 @@ _evas_object_eo_base_constructor(Eo *eo_obj, Evas_Object_Protected_Data *obj) obj->prev = eina_cow_alloc(evas_object_state_cow); obj->data_3d = eina_cow_alloc(evas_object_3d_cow); obj->mask = eina_cow_alloc(evas_object_mask_cow); + + return eo_obj; } void diff --git a/src/lib/evas/canvas/evas_object_polygon.c b/src/lib/evas/canvas/evas_object_polygon.c index 4e5ed04836..4e5c6361f1 100644 --- a/src/lib/evas/canvas/evas_object_polygon.c +++ b/src/lib/evas/canvas/evas_object_polygon.c @@ -101,18 +101,20 @@ evas_object_polygon_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_polygon_eo_base_constructor(Eo *eo_obj, Evas_Polygon_Data *class_data EINA_UNUSED) { Evas_Object_Protected_Data *obj; Eo *parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); evas_object_polygon_init(eo_obj); eo_do(eo_obj, parent = eo_parent_get()); evas_object_inject(eo_obj, obj, evas_object_evas_get(parent)); + + return eo_obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_object_rectangle.c b/src/lib/evas/canvas/evas_object_rectangle.c index 9454a3dcac..cdee4ad1eb 100644 --- a/src/lib/evas/canvas/evas_object_rectangle.c +++ b/src/lib/evas/canvas/evas_object_rectangle.c @@ -89,18 +89,20 @@ evas_object_rectangle_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_rectangle_eo_base_constructor(Eo *eo_obj, Evas_Rectangle_Data *class_data EINA_UNUSED) { Eo *parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); evas_object_rectangle_init(eo_obj); eo_do(eo_obj, parent = eo_parent_get()); evas_object_inject(eo_obj, obj, evas_object_evas_get(parent)); + + return eo_obj; } /* all nice and private */ diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 4623fc0b45..3aeb9376dd 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -545,7 +545,7 @@ evas_object_smart_add(Evas *eo_e, Evas_Smart *s) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_object_smart_eo_base_constructor(Eo *eo_obj, Evas_Smart_Data *class_data EINA_UNUSED) { Evas_Object_Protected_Data *obj; @@ -555,7 +555,7 @@ _evas_object_smart_eo_base_constructor(Eo *eo_obj, Evas_Smart_Data *class_data E smart = class_data; smart->object = eo_obj; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); evas_object_smart_init(eo_obj); obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); @@ -564,6 +564,8 @@ _evas_object_smart_eo_base_constructor(Eo *eo_obj, Evas_Smart_Data *class_data E eo_do(eo_obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY), evas_obj_smart_add()); + + return eo_obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_object_smart_clipped.c b/src/lib/evas/canvas/evas_object_smart_clipped.c index 38382f20fe..74720449b2 100644 --- a/src/lib/evas/canvas/evas_object_smart_clipped.c +++ b/src/lib/evas/canvas/evas_object_smart_clipped.c @@ -250,10 +250,10 @@ evas_object_smart_clipped_class_get(void) return class; } -EOLIAN static void -_evas_smart_clipped_eo_base_constructor(Eo *eo_obj, Evas_Object_Smart_Clipped_Data *class_data EINA_UNUSED) +EOLIAN static Eo * +_evas_smart_clipped_eo_base_constructor(Eo *obj, Evas_Object_Smart_Clipped_Data *class_data EINA_UNUSED) { - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } #include "canvas/evas_smart_clipped.eo.c" diff --git a/src/lib/evas/canvas/evas_object_table.c b/src/lib/evas/canvas/evas_object_table.c index ea50553b2d..cc61e19373 100644 --- a/src/lib/evas/canvas/evas_object_table.c +++ b/src/lib/evas/canvas/evas_object_table.c @@ -966,11 +966,13 @@ evas_object_table_add(Evas *evas) return obj; } -EOLIAN static void +EOLIAN static Eo * _evas_table_eo_base_constructor(Eo *obj, Evas_Table_Data *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, evas_obj_type_set(MY_CLASS_NAME_LEGACY)); + + return obj; } EOLIAN static Evas_Object* diff --git a/src/lib/evas/canvas/evas_object_text.c b/src/lib/evas/canvas/evas_object_text.c index c053515e6d..c28e8a91e7 100644 --- a/src/lib/evas/canvas/evas_object_text.c +++ b/src/lib/evas/canvas/evas_object_text.c @@ -365,10 +365,10 @@ evas_object_text_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_text_eo_base_constructor(Eo *eo_obj, Evas_Text_Data *o) { - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); evas_object_text_init(eo_obj); Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); Eo *parent = NULL; @@ -377,6 +377,8 @@ _evas_text_eo_base_constructor(Eo *eo_obj, Evas_Text_Data *o) evas_object_inject(eo_obj, obj, evas_object_evas_get(parent)); o->cur.filter = eina_cow_alloc(evas_object_filter_cow); + + return eo_obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_object_textblock.c b/src/lib/evas/canvas/evas_object_textblock.c index 688e09d894..a2d7079fee 100644 --- a/src/lib/evas/canvas/evas_object_textblock.c +++ b/src/lib/evas/canvas/evas_object_textblock.c @@ -5782,14 +5782,14 @@ evas_object_textblock_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_textblock_eo_base_constructor(Eo *eo_obj, Evas_Textblock_Data *class_data EINA_UNUSED) { Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); Evas_Textblock_Data *o; Eo *eo_parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); /* set up methods (compulsory) */ obj->func = &object_func; @@ -5803,6 +5803,8 @@ _evas_textblock_eo_base_constructor(Eo *eo_obj, Evas_Textblock_Data *class_data eo_do(eo_obj, eo_parent = eo_parent_get()); evas_object_inject(eo_obj, obj, evas_object_evas_get(eo_parent)); + + return eo_obj; } EAPI Evas_Textblock_Style * diff --git a/src/lib/evas/canvas/evas_object_textgrid.c b/src/lib/evas/canvas/evas_object_textgrid.c index 122e8e7c2c..7dbb739570 100644 --- a/src/lib/evas/canvas/evas_object_textgrid.c +++ b/src/lib/evas/canvas/evas_object_textgrid.c @@ -1061,18 +1061,20 @@ evas_object_textgrid_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_textgrid_eo_base_constructor(Eo *eo_obj, Evas_Textgrid_Data *class_data EINA_UNUSED) { Eo *eo_parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); evas_object_textgrid_init(eo_obj); eo_do(eo_obj, eo_parent = eo_parent_get()); evas_object_inject(eo_obj, obj, evas_object_evas_get(eo_parent)); + + return eo_obj; } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_object_vg.c b/src/lib/evas/canvas/evas_object_vg.c index 731eec6b55..0e3eaa76d0 100644 --- a/src/lib/evas/canvas/evas_object_vg.c +++ b/src/lib/evas/canvas/evas_object_vg.c @@ -98,13 +98,13 @@ _evas_vg_eo_base_destructor(Eo *eo_obj, Evas_VG_Data *pd) eo_do_super(eo_obj, MY_CLASS, eo_destructor()); } -void +Eo * _evas_vg_eo_base_constructor(Eo *eo_obj, Evas_VG_Data *pd) { Evas_Object_Protected_Data *obj = eo_data_scope_get(eo_obj, EVAS_OBJECT_CLASS); Eo *parent = NULL; - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); /* set up methods (compulsory) */ obj->func = &object_func; @@ -117,6 +117,8 @@ _evas_vg_eo_base_constructor(Eo *eo_obj, Evas_VG_Data *pd) eo_do(eo_obj, parent = eo_parent_get()); evas_object_inject(eo_obj, obj, evas_object_evas_get(parent)); + + return eo_obj; } static void diff --git a/src/lib/evas/canvas/evas_out.c b/src/lib/evas/canvas/evas_out.c index ce00eb3fde..1558a90ed8 100644 --- a/src/lib/evas/canvas/evas_out.c +++ b/src/lib/evas/canvas/evas_out.c @@ -23,7 +23,7 @@ evas_out_add(Evas *e) return eo_obj; } -EOLIAN static void +EOLIAN static Eo * _evas_out_eo_base_constructor(Eo *eo_obj, Evas_Out_Data *eo_dat) { Eo *eo_parent = NULL; @@ -33,14 +33,16 @@ _evas_out_eo_base_constructor(Eo *eo_obj, Evas_Out_Data *eo_dat) e = eo_data_scope_get(eo_parent, EVAS_CANVAS_CLASS); evas_canvas_async_block(e); - eo_do_super(eo_obj, MY_CLASS, eo_constructor()); + eo_obj = eo_do_super_ret(eo_obj, MY_CLASS, eo_obj, eo_constructor()); - if (!e) return; + if (!e) return NULL; e->outputs = eina_list_append(e->outputs, eo_obj); if (e->engine.func->info) eo_dat->info = e->engine.func->info(eo_parent); // XXX: context and output are currently held in the core engine and are // allocated by engine specific internal code. this all needs a new engine // api to make it work + + return eo_obj; } EAPI void diff --git a/src/lib/evas/canvas/evas_vg_container.c b/src/lib/evas/canvas/evas_vg_container.c index ba0eeec8ca..f3ee7c9962 100644 --- a/src/lib/evas/canvas/evas_vg_container.c +++ b/src/lib/evas/canvas/evas_vg_container.c @@ -25,17 +25,19 @@ _efl_vg_container_render_pre(Eo *obj EINA_UNUSED, _evas_vg_render_pre(child, s, current); } -static void +static Eo * _efl_vg_container_eo_base_constructor(Eo *obj, Efl_VG_Container_Data *pd) { Efl_VG_Base_Data *nd; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); nd = eo_data_scope_get(obj, EFL_VG_BASE_CLASS); nd->render_pre = _efl_vg_container_render_pre; nd->data = pd; + + return obj; } static void diff --git a/src/lib/evas/canvas/evas_vg_gradient_linear.c b/src/lib/evas/canvas/evas_vg_gradient_linear.c index 9f05fac4ad..9a54f7ac39 100644 --- a/src/lib/evas/canvas/evas_vg_gradient_linear.c +++ b/src/lib/evas/canvas/evas_vg_gradient_linear.c @@ -88,17 +88,19 @@ _efl_vg_gradient_linear_render_pre(Eo *obj, ector_renderer_prepare()); } -static void +static Eo * _efl_vg_gradient_linear_eo_base_constructor(Eo *obj, Efl_VG_Gradient_Linear_Data *pd) { Efl_VG_Base_Data *nd; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); nd = eo_data_scope_get(obj, EFL_VG_BASE_CLASS); nd->render_pre = _efl_vg_gradient_linear_render_pre; nd->data = pd; + + return obj; } static void diff --git a/src/lib/evas/canvas/evas_vg_gradient_radial.c b/src/lib/evas/canvas/evas_vg_gradient_radial.c index e79f4fde2d..8af5e7d41c 100644 --- a/src/lib/evas/canvas/evas_vg_gradient_radial.c +++ b/src/lib/evas/canvas/evas_vg_gradient_radial.c @@ -105,16 +105,18 @@ _efl_vg_gradient_radial_render_pre(Eo *obj, ector_renderer_prepare()); } -static void +static Eo * _efl_vg_gradient_radial_eo_base_constructor(Eo *obj, Efl_VG_Gradient_Radial_Data *pd) { Efl_VG_Base_Data *nd; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); nd = eo_data_scope_get(obj, EFL_VG_BASE_CLASS); nd->render_pre = _efl_vg_gradient_radial_render_pre; nd->data = pd; + + return obj; } static void diff --git a/src/lib/evas/canvas/evas_vg_node.c b/src/lib/evas/canvas/evas_vg_node.c index 2d84b86bfa..cfe5b40fae 100644 --- a/src/lib/evas/canvas/evas_vg_node.c +++ b/src/lib/evas/canvas/evas_vg_node.c @@ -238,20 +238,22 @@ _efl_vg_base_parent_checked_get(Eo *obj, return EINA_FALSE; } -static void +static Eo * _efl_vg_base_eo_base_constructor(Eo *obj, Efl_VG_Base_Data *pd) { Efl_VG_Container_Data *cd = NULL; Eo *parent; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); if (!_efl_vg_base_parent_checked_get(obj, &parent, &cd)) eo_error_set(obj); eo_do(obj, eo_event_callback_add(EFL_GFX_CHANGED, _efl_vg_base_property_changed, pd)); pd->changed = EINA_TRUE; + + return obj; } static void diff --git a/src/lib/evas/canvas/evas_vg_root_node.c b/src/lib/evas/canvas/evas_vg_root_node.c index 65dbb0220f..1d9b573405 100644 --- a/src/lib/evas/canvas/evas_vg_root_node.c +++ b/src/lib/evas/canvas/evas_vg_root_node.c @@ -65,7 +65,7 @@ _efl_vg_root_node_eo_base_parent_set(Eo *obj, } } -static void +static Eo * _efl_vg_root_node_eo_base_constructor(Eo *obj, Efl_VG_Root_Node_Data *pd) { @@ -74,7 +74,7 @@ _efl_vg_root_node_eo_base_constructor(Eo *obj, Eo *parent; // Nice little hack, jump over parent constructor in Efl_VG_Root - eo_do_super(obj, EFL_VG_BASE_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, EFL_VG_BASE_CLASS, obj, eo_constructor()); eo_do(obj, parent = eo_parent_get()); if (!eo_isa(parent, EVAS_VG_CLASS)) eo_error_set(obj); @@ -87,6 +87,8 @@ _efl_vg_root_node_eo_base_constructor(Eo *obj, nd->data = cd; eo_do(obj, eo_event_callback_add(EFL_GFX_CHANGED, _evas_vg_root_node_changed, pd)); + + return obj; } #include "efl_vg_root_node.eo.c" diff --git a/src/lib/evas/canvas/evas_vg_shape.c b/src/lib/evas/canvas/evas_vg_shape.c index e67c3b5675..d736718a57 100644 --- a/src/lib/evas/canvas/evas_vg_shape.c +++ b/src/lib/evas/canvas/evas_vg_shape.c @@ -316,12 +316,12 @@ _efl_vg_shape_render_pre(Eo *obj EINA_UNUSED, ector_renderer_prepare()); } -static void +static Eo * _efl_vg_shape_eo_base_constructor(Eo *obj, Efl_VG_Shape_Data *pd) { Efl_VG_Base_Data *nd; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); pd->stroke.cap = EFL_GFX_CAP_BUTT; pd->stroke.join = EFL_GFX_JOIN_MITER; @@ -331,6 +331,8 @@ _efl_vg_shape_eo_base_constructor(Eo *obj, Efl_VG_Shape_Data *pd) nd = eo_data_scope_get(obj, EFL_VG_BASE_CLASS); nd->render_pre = _efl_vg_shape_render_pre; nd->data = pd; + + return obj; } static void diff --git a/src/tests/eo/composite_objects/composite_objects_comp.c b/src/tests/eo/composite_objects/composite_objects_comp.c index 21baed4f11..b933e19dd1 100644 --- a/src/tests/eo/composite_objects/composite_objects_comp.c +++ b/src/tests/eo/composite_objects/composite_objects_comp.c @@ -21,11 +21,11 @@ _a_get(Eo *obj, void *class_data EINA_UNUSED) return a; } -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED) { Eina_Bool tmp; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); Eo *simple = eo_add(SIMPLE_CLASS, obj); eo_do(obj, eo_composite_attach(simple)); @@ -35,6 +35,8 @@ _constructor(Eo *obj, void *class_data EINA_UNUSED) fail_if(!eo_do_ret(simple, tmp, eo_composite_part_is())); eo_do(obj, eo_key_data_set("simple-obj", simple, NULL)); + + return obj; } static Eo_Op_Description op_descs[] = { diff --git a/src/tests/eo/constructors/constructors_mixin.c b/src/tests/eo/constructors/constructors_mixin.c index ca7343ffe0..3c21129487 100644 --- a/src/tests/eo/constructors/constructors_mixin.c +++ b/src/tests/eo/constructors/constructors_mixin.c @@ -18,12 +18,12 @@ _add_and_print_set(Eo *obj, void *class_data EINA_UNUSED, int x) extern int my_init_count; -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); - my_init_count++; + + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } static void diff --git a/src/tests/eo/constructors/constructors_simple.c b/src/tests/eo/constructors/constructors_simple.c index 5e9b60f0d1..ed22905ade 100644 --- a/src/tests/eo/constructors/constructors_simple.c +++ b/src/tests/eo/constructors/constructors_simple.c @@ -39,12 +39,12 @@ _GET_SET_FUNC(b) extern int my_init_count; -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); - my_init_count++; + + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } static Eo* diff --git a/src/tests/eo/constructors/constructors_simple2.c b/src/tests/eo/constructors/constructors_simple2.c index 0318a9ff09..b1b6bbe71f 100644 --- a/src/tests/eo/constructors/constructors_simple2.c +++ b/src/tests/eo/constructors/constructors_simple2.c @@ -8,12 +8,13 @@ #define MY_CLASS SIMPLE2_CLASS -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_error_set(obj); + return obj; } static Eo_Op_Description op_descs[] = { diff --git a/src/tests/eo/constructors/constructors_simple3.c b/src/tests/eo/constructors/constructors_simple3.c index 9c720b51eb..16d3fc8063 100644 --- a/src/tests/eo/constructors/constructors_simple3.c +++ b/src/tests/eo/constructors/constructors_simple3.c @@ -8,10 +8,10 @@ #define MY_CLASS SIMPLE3_CLASS -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - (void) obj; + return obj; } static Eo_Op_Description op_descs[] = { diff --git a/src/tests/eo/constructors/constructors_simple7.c b/src/tests/eo/constructors/constructors_simple7.c index cd0298948d..79dce35c06 100644 --- a/src/tests/eo/constructors/constructors_simple7.c +++ b/src/tests/eo/constructors/constructors_simple7.c @@ -11,11 +11,11 @@ #define MY_CLASS SIMPLE7_CLASS -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { /* FIXME: Actually test it. */ - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } static Eo_Op_Description op_descs [] = { diff --git a/src/tests/eo/mixin/mixin_mixin.c b/src/tests/eo/mixin/mixin_mixin.c index d91a04fe11..f5c23348d6 100644 --- a/src/tests/eo/mixin/mixin_mixin.c +++ b/src/tests/eo/mixin/mixin_mixin.c @@ -17,10 +17,10 @@ _ab_sum_get(Eo *obj, void *class_data EINA_UNUSED) return a + b; } -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } static void diff --git a/src/tests/eo/mixin/mixin_mixin2.c b/src/tests/eo/mixin/mixin_mixin2.c index 6df0a85fec..60f3d40080 100644 --- a/src/tests/eo/mixin/mixin_mixin2.c +++ b/src/tests/eo/mixin/mixin_mixin2.c @@ -32,10 +32,11 @@ _ab_sum_get(Eo *obj, void *class_data) return sum; } -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); + return obj; } static void diff --git a/src/tests/eo/mixin/mixin_mixin3.c b/src/tests/eo/mixin/mixin_mixin3.c index 6d0d99d4f8..cd2d732898 100644 --- a/src/tests/eo/mixin/mixin_mixin3.c +++ b/src/tests/eo/mixin/mixin_mixin3.c @@ -32,10 +32,10 @@ _ab_sum_get(Eo *obj, void *class_data EINA_UNUSED) return sum; } -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } static void diff --git a/src/tests/eo/signals/signals_simple.c b/src/tests/eo/signals/signals_simple.c index a928cec854..f113e511d9 100644 --- a/src/tests/eo/signals/signals_simple.c +++ b/src/tests/eo/signals/signals_simple.c @@ -60,15 +60,17 @@ _cb_deled(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_inf return EO_CALLBACK_CONTINUE; } -static void +static Eo * _constructor(Eo *obj, void *class_data EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_do(obj, eo_event_callback_add(EO_EV_CALLBACK_ADD, _cb_added, NULL)); eo_do(obj, eo_event_callback_add(EO_EV_CALLBACK_DEL, _cb_deled, NULL)); eo_do(obj, eo_key_data_set("cb_count", (intptr_t) 0, NULL)); + + return obj; } EAPI EO_VOID_FUNC_BODYV(simple_a_set, EO_FUNC_CALL(a), int a); diff --git a/src/tests/eo/suite/eo_test_general.c b/src/tests/eo/suite/eo_test_general.c index 037567d6da..bb4f4ed291 100644 --- a/src/tests/eo/suite/eo_test_general.c +++ b/src/tests/eo/suite/eo_test_general.c @@ -296,12 +296,12 @@ static Eina_Bool _man_should_con = EINA_TRUE; static Eina_Bool _man_should_des = EINA_TRUE; static const Eo_Class *cur_klass = NULL; -static void +static Eo * _man_con(Eo *obj, void *data EINA_UNUSED, va_list *list EINA_UNUSED) { if (_man_should_con) eo_manual_free_set(obj, EINA_TRUE); - eo_do_super(obj, cur_klass, eo_constructor()); + return eo_do_super_ret(obj, cur_klass, obj, eo_constructor()); } static void diff --git a/src/tests/eo/suite/eo_test_threaded_calls.c b/src/tests/eo/suite/eo_test_threaded_calls.c index 33520f20c5..21b6015cd3 100644 --- a/src/tests/eo/suite/eo_test_threaded_calls.c +++ b/src/tests/eo/suite/eo_test_threaded_calls.c @@ -49,12 +49,14 @@ _try_swap_stack(Eo *obj EINA_UNUSED, void *class_data) } } -static void -_constructor(Eo *obj EINA_UNUSED, void *class_data EINA_UNUSED, int v) +static Eo * +_constructor(Eo *obj, void *class_data EINA_UNUSED, int v) { Thread_Test_Public_Data *pd = class_data; pd->v = v; + + return obj; } static Eo_Op_Description op_descs[] = { diff --git a/src/tests/eolian_cxx/a.c b/src/tests/eolian_cxx/a.c index f8edfadeb6..885c9ea173 100644 --- a/src/tests/eolian_cxx/a.c +++ b/src/tests/eolian_cxx/a.c @@ -15,9 +15,9 @@ typedef struct _A_Data A_Data; #define MY_CLASS A_CLASS -static void _a_eo_base_constructor(Eo *obj EINA_UNUSED, A_Data *pd EINA_UNUSED) +static Eo *_a_eo_base_constructor(Eo *obj EINA_UNUSED, A_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } #include "a.eo.c" diff --git a/src/tests/eolian_cxx/b.c b/src/tests/eolian_cxx/b.c index 7b7ce50379..f32617b38d 100644 --- a/src/tests/eolian_cxx/b.c +++ b/src/tests/eolian_cxx/b.c @@ -16,9 +16,9 @@ typedef struct _B_Data B_Data; #define MY_CLASS B_CLASS -static void _b_eo_base_constructor(Eo *obj EINA_UNUSED, B_Data *pd EINA_UNUSED) +static Eo *_b_eo_base_constructor(Eo *obj EINA_UNUSED, B_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } #include "b.eo.c" diff --git a/src/tests/eolian_cxx/c.c b/src/tests/eolian_cxx/c.c index be8ad2cdc8..f113c8f813 100644 --- a/src/tests/eolian_cxx/c.c +++ b/src/tests/eolian_cxx/c.c @@ -16,9 +16,9 @@ typedef struct _C_Data C_Data; #define MY_CLASS C_CLASS -static void _c_eo_base_constructor(Eo *obj EINA_UNUSED, C_Data *pd EINA_UNUSED) +static Eo *_c_eo_base_constructor(Eo *obj EINA_UNUSED, C_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } #include "c.eo.c" diff --git a/src/tests/eolian_cxx/callback.c b/src/tests/eolian_cxx/callback.c index ef978fbcbe..62612546d7 100644 --- a/src/tests/eolian_cxx/callback.c +++ b/src/tests/eolian_cxx/callback.c @@ -28,13 +28,15 @@ static Eina_Bool _callback_callback_added(void* data EINA_UNUSED, Eo* obj EINA_U return EINA_TRUE; } -static void _callback_eo_base_constructor(Eo *obj EINA_UNUSED, Callback_Data *pd EINA_UNUSED) +static Eo *_callback_eo_base_constructor(Eo *obj, Callback_Data *pd EINA_UNUSED) { pd->callbacks = 0; - eo_do_super(obj, MY_CLASS, eo_constructor()); + obj = eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); eo_event_callback_priority_add(EO_BASE_EVENT_CALLBACK_ADD, EO_CALLBACK_PRIORITY_DEFAULT , &_callback_callback_added, pd); + + return obj; } static void _callback_onecallback(Eo *obj EINA_UNUSED, Callback_Data *pd EINA_UNUSED, Ecore_Cb cb, void *data) diff --git a/src/tests/eolian_cxx/d.c b/src/tests/eolian_cxx/d.c index ef08f81202..8ef24d6916 100644 --- a/src/tests/eolian_cxx/d.c +++ b/src/tests/eolian_cxx/d.c @@ -18,9 +18,9 @@ typedef struct _D_Data D_Data; #define MY_CLASS D_CLASS -static void _d_eo_base_constructor(Eo *obj EINA_UNUSED, D_Data *pd EINA_UNUSED) +static Eo *_d_eo_base_constructor(Eo *obj EINA_UNUSED, D_Data *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } #include "d.eo.c" diff --git a/src/tests/eolian_cxx/simple.c b/src/tests/eolian_cxx/simple.c index c78073ce2d..1009b37831 100644 --- a/src/tests/eolian_cxx/simple.c +++ b/src/tests/eolian_cxx/simple.c @@ -12,9 +12,9 @@ #define MY_CLASS SIMPLE_CLASS -static void _simple_eo_base_constructor(Eo *obj, void *pd EINA_UNUSED) +static Eo *_simple_eo_base_constructor(Eo *obj, void *pd EINA_UNUSED) { - eo_do_super(obj, MY_CLASS, eo_constructor()); + return eo_do_super_ret(obj, MY_CLASS, obj, eo_constructor()); } static Eina_Bool _simple_simple_get(Eo *obj EINA_UNUSED, void *pd EINA_UNUSED)