From 9c929ba2ed337a49c7d56f117106ed75d7a8166a Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Sun, 10 Jun 2012 14:04:53 +0000 Subject: [PATCH] Eo: Made constructor/destructor regular ops. This lets us remove some unneeded code and makes everything nicer. SVN revision: 71899 --- legacy/eobj/CMakeLists.txt | 2 +- legacy/eobj/examples/access/inherit.c | 2 - legacy/eobj/examples/access/simple.c | 2 - legacy/eobj/examples/composite_objects/comp.c | 7 +- .../eobj/examples/composite_objects/simple.c | 2 - legacy/eobj/examples/constructors/mixin.c | 12 +- legacy/eobj/examples/constructors/simple.c | 12 +- legacy/eobj/examples/constructors/simple2.c | 19 +++- legacy/eobj/examples/constructors/simple3.c | 17 ++- legacy/eobj/examples/constructors/simple4.c | 2 - legacy/eobj/examples/constructors/simple5.c | 17 ++- legacy/eobj/examples/constructors/simple6.c | 19 +++- legacy/eobj/examples/evas/elw_box.c | 2 +- legacy/eobj/examples/evas/elw_boxedbutton.c | 4 +- legacy/eobj/examples/evas/elw_button.c | 6 +- legacy/eobj/examples/evas/elw_win.c | 2 +- legacy/eobj/examples/evas/evas_obj.c | 6 +- .../examples/function_overrides/inherit.c | 2 - .../examples/function_overrides/inherit2.c | 2 - .../examples/function_overrides/inherit3.c | 2 - .../eobj/examples/function_overrides/main.c | 4 +- .../eobj/examples/function_overrides/simple.c | 2 - legacy/eobj/examples/interface/interface.c | 2 - legacy/eobj/examples/interface/interface2.c | 2 - legacy/eobj/examples/interface/simple.c | 2 - legacy/eobj/examples/mixin/mixin.c | 12 +- legacy/eobj/examples/mixin/mixin2.c | 12 +- legacy/eobj/examples/mixin/mixin3.c | 12 +- legacy/eobj/examples/mixin/simple.c | 2 - legacy/eobj/examples/signals/simple.c | 7 +- legacy/eobj/lib/Eo.h | 43 +++---- legacy/eobj/lib/eo.c | 106 +++++------------- legacy/eobj/lib/eo_base_class.c | 14 ++- legacy/eobj/lib/eo_private.h | 2 + legacy/eobj/tests/class_simple.c | 2 - legacy/eobj/tests/eo_test_class_errors.c | 33 ------ legacy/eobj/tests/eo_test_general.c | 47 ++++---- 37 files changed, 193 insertions(+), 250 deletions(-) diff --git a/legacy/eobj/CMakeLists.txt b/legacy/eobj/CMakeLists.txt index f4e1f2e4c0..0f579e8006 100644 --- a/legacy/eobj/CMakeLists.txt +++ b/legacy/eobj/CMakeLists.txt @@ -39,7 +39,7 @@ configure_file ( include(EFLCheck) add_subdirectory(lib) -add_subdirectory(examples/evas) +#add_subdirectory(examples/evas) add_subdirectory(examples/mixin) add_subdirectory(examples/signals) add_subdirectory(examples/access) diff --git a/legacy/eobj/examples/access/inherit.c b/legacy/eobj/examples/access/inherit.c index 91a88691b7..2bf8abebe3 100644 --- a/legacy/eobj/examples/access/inherit.c +++ b/legacy/eobj/examples/access/inherit.c @@ -40,8 +40,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&INHERIT_BASE_ID, op_desc, INHERIT_SUB_ID_LAST), NULL, 0, - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/access/simple.c b/legacy/eobj/examples/access/simple.c index 13992145c8..12cb082399 100644 --- a/legacy/eobj/examples/access/simple.c +++ b/legacy/eobj/examples/access/simple.c @@ -57,8 +57,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), event_desc, sizeof(Private_Data), - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/composite_objects/comp.c b/legacy/eobj/examples/composite_objects/comp.c index f8ed9f2412..4774974f53 100644 --- a/legacy/eobj/examples/composite_objects/comp.c +++ b/legacy/eobj/examples/composite_objects/comp.c @@ -19,9 +19,9 @@ _a_get(const Eo *obj, const void *class_data EINA_UNUSED, va_list *list) } static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); Eo *simple = eo_add(SIMPLE_CLASS, obj); eo_composite_object_attach(obj, simple); @@ -39,6 +39,7 @@ static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), EO_OP_FUNC_CONST(SIMPLE_ID(SIMPLE_SUB_ID_A_GET), _a_get), EO_OP_FUNC_SENTINEL }; @@ -52,8 +53,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - _constructor, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/composite_objects/simple.c b/legacy/eobj/examples/composite_objects/simple.c index d7e5e257b0..dbb40df556 100644 --- a/legacy/eobj/examples/composite_objects/simple.c +++ b/legacy/eobj/examples/composite_objects/simple.c @@ -60,8 +60,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), event_desc, sizeof(Simple_Public_Data), - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/constructors/mixin.c b/legacy/eobj/examples/constructors/mixin.c index b8d9cf6a04..a572f3f89a 100644 --- a/legacy/eobj/examples/constructors/mixin.c +++ b/legacy/eobj/examples/constructors/mixin.c @@ -20,17 +20,17 @@ _add_and_print_set(const Eo *obj, const void *class_data EINA_UNUSED, va_list *l extern int my_init_count; static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); my_init_count++; } static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); my_init_count--; } @@ -39,6 +39,8 @@ static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), EO_OP_FUNC_CONST(MIXIN_ID(MIXIN_SUB_ID_ADD_AND_SET), _add_and_print_set), EO_OP_FUNC_SENTINEL }; @@ -57,8 +59,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&MIXIN_BASE_ID, op_desc, MIXIN_SUB_ID_LAST), NULL, 0, - _constructor, - _destructor, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/constructors/simple.c b/legacy/eobj/examples/constructors/simple.c index 7918b8c262..c1dddb4e8b 100644 --- a/legacy/eobj/examples/constructors/simple.c +++ b/legacy/eobj/examples/constructors/simple.c @@ -42,17 +42,17 @@ _GET_SET_FUNC(b) extern int my_init_count; static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); my_init_count++; } static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); my_init_count--; } @@ -61,6 +61,8 @@ static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_A_SET), _a_set), EO_OP_FUNC_CONST(SIMPLE_ID(SIMPLE_SUB_ID_A_GET), _a_get), EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_B_SET), _b_set), @@ -93,8 +95,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), NULL, sizeof(Private_Data), - _constructor, - _destructor, _class_constructor, _class_destructor }; diff --git a/legacy/eobj/examples/constructors/simple2.c b/legacy/eobj/examples/constructors/simple2.c index 2980dca060..9effd917b4 100644 --- a/legacy/eobj/examples/constructors/simple2.c +++ b/legacy/eobj/examples/constructors/simple2.c @@ -7,22 +7,31 @@ #define MY_CLASS SIMPLE2_CLASS static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); eo_error_set(obj); } +static void +_class_constructor(Eo_Class *klass) +{ + const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC_SENTINEL + }; + + eo_class_funcs_set(klass, func_desc); +} + static const Eo_Class_Description class_desc = { "Simple2", EO_CLASS_TYPE_REGULAR, EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - _constructor, - NULL, - NULL, + _class_constructor, NULL }; diff --git a/legacy/eobj/examples/constructors/simple3.c b/legacy/eobj/examples/constructors/simple3.c index a09ec461f4..7ecc874d23 100644 --- a/legacy/eobj/examples/constructors/simple3.c +++ b/legacy/eobj/examples/constructors/simple3.c @@ -7,20 +7,29 @@ #define MY_CLASS SIMPLE3_CLASS static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { (void) obj; } +static void +_class_constructor(Eo_Class *klass) +{ + const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC_SENTINEL + }; + + eo_class_funcs_set(klass, func_desc); +} + static const Eo_Class_Description class_desc = { "Simple3", EO_CLASS_TYPE_REGULAR, EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - _constructor, - NULL, - NULL, + _class_constructor, NULL }; diff --git a/legacy/eobj/examples/constructors/simple4.c b/legacy/eobj/examples/constructors/simple4.c index 43099d34f5..0c7eb62726 100644 --- a/legacy/eobj/examples/constructors/simple4.c +++ b/legacy/eobj/examples/constructors/simple4.c @@ -12,8 +12,6 @@ static const Eo_Class_Description class_desc = { NULL, 0, NULL, - NULL, - NULL, NULL }; diff --git a/legacy/eobj/examples/constructors/simple5.c b/legacy/eobj/examples/constructors/simple5.c index e8438c0fa1..098a168354 100644 --- a/legacy/eobj/examples/constructors/simple5.c +++ b/legacy/eobj/examples/constructors/simple5.c @@ -7,20 +7,29 @@ #define MY_CLASS SIMPLE5_CLASS static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { (void) obj; } +static void +_class_constructor(Eo_Class *klass) +{ + const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), + EO_OP_FUNC_SENTINEL + }; + + eo_class_funcs_set(klass, func_desc); +} + static const Eo_Class_Description class_desc = { "Simple5", EO_CLASS_TYPE_REGULAR, EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - NULL, - _destructor, - NULL, + _class_constructor, NULL }; diff --git a/legacy/eobj/examples/constructors/simple6.c b/legacy/eobj/examples/constructors/simple6.c index b5c143a6de..743f3ef4a0 100644 --- a/legacy/eobj/examples/constructors/simple6.c +++ b/legacy/eobj/examples/constructors/simple6.c @@ -7,22 +7,31 @@ #define MY_CLASS SIMPLE6_CLASS static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); eo_error_set(obj); } +static void +_class_constructor(Eo_Class *klass) +{ + const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), + EO_OP_FUNC_SENTINEL + }; + + eo_class_funcs_set(klass, func_desc); +} + static const Eo_Class_Description class_desc = { "Simple6", EO_CLASS_TYPE_REGULAR, EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - NULL, - _destructor, - NULL, + _class_constructor, NULL }; diff --git a/legacy/eobj/examples/evas/elw_box.c b/legacy/eobj/examples/evas/elw_box.c index 508db158c7..e447ddf692 100644 --- a/legacy/eobj/examples/evas/elw_box.c +++ b/legacy/eobj/examples/evas/elw_box.c @@ -28,7 +28,7 @@ _pack_end(Eo *obj EINA_UNUSED, void *class_data, va_list *list) static void _constructor(Eo *obj, void *class_data) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); Widget_Data *wd = class_data; diff --git a/legacy/eobj/examples/evas/elw_boxedbutton.c b/legacy/eobj/examples/evas/elw_boxedbutton.c index 21c465a1fb..8bdc3081a1 100644 --- a/legacy/eobj/examples/evas/elw_boxedbutton.c +++ b/legacy/eobj/examples/evas/elw_boxedbutton.c @@ -16,9 +16,9 @@ typedef struct #define MY_CLASS ELW_BOXEDBUTTON_CLASS static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); Eo *bt = eo_add(ELW_BUTTON_CLASS, obj); eo_composite_object_attach(obj, bt); diff --git a/legacy/eobj/examples/evas/elw_button.c b/legacy/eobj/examples/evas/elw_button.c index 52e6d5f397..3eecb98bd8 100644 --- a/legacy/eobj/examples/evas/elw_button.c +++ b/legacy/eobj/examples/evas/elw_button.c @@ -50,7 +50,7 @@ _btn_clicked(void *data, Evas_Object *evas_obj, void *event_info) static void _constructor(Eo *obj, void *class_data) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); Widget_Data *wd = class_data; @@ -64,9 +64,9 @@ _constructor(Eo *obj, void *class_data) } static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); //Widget_Data *wd = class_data; /* FIXME: Commented out because it's automatically done because our tree diff --git a/legacy/eobj/examples/evas/elw_win.c b/legacy/eobj/examples/evas/elw_win.c index aad69f5fba..2558b00968 100644 --- a/legacy/eobj/examples/evas/elw_win.c +++ b/legacy/eobj/examples/evas/elw_win.c @@ -25,7 +25,7 @@ my_win_del(void *data, Evas_Object *obj, void *event_info) static void _constructor(Eo *obj, void *class_data) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); Widget_Data *wd = class_data; diff --git a/legacy/eobj/examples/evas/evas_obj.c b/legacy/eobj/examples/evas/evas_obj.c index 1177fd63f0..753f773208 100644 --- a/legacy/eobj/examples/evas/evas_obj.c +++ b/legacy/eobj/examples/evas/evas_obj.c @@ -78,9 +78,9 @@ _child_add(Eo *obj, void *class_data, va_list *list) } static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); /* Add type check. */ Eo *parent = eo_parent_get(obj); @@ -91,7 +91,7 @@ _constructor(Eo *obj, void *class_data EINA_UNUSED) static void _destructor(Eo *obj, void *class_data) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); Widget_Data *wd = class_data; diff --git a/legacy/eobj/examples/function_overrides/inherit.c b/legacy/eobj/examples/function_overrides/inherit.c index a8cde28921..c9d256a25d 100644 --- a/legacy/eobj/examples/function_overrides/inherit.c +++ b/legacy/eobj/examples/function_overrides/inherit.c @@ -12,8 +12,6 @@ static const Eo_Class_Description class_desc = { NULL, 0, NULL, - NULL, - NULL, NULL }; diff --git a/legacy/eobj/examples/function_overrides/inherit2.c b/legacy/eobj/examples/function_overrides/inherit2.c index 2d8ed1702c..a3344571db 100644 --- a/legacy/eobj/examples/function_overrides/inherit2.c +++ b/legacy/eobj/examples/function_overrides/inherit2.c @@ -72,8 +72,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&INHERIT2_BASE_ID, op_desc, INHERIT2_SUB_ID_LAST), NULL, 0, - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/function_overrides/inherit3.c b/legacy/eobj/examples/function_overrides/inherit3.c index 43be75fe42..185962e7da 100644 --- a/legacy/eobj/examples/function_overrides/inherit3.c +++ b/legacy/eobj/examples/function_overrides/inherit3.c @@ -34,8 +34,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/function_overrides/main.c b/legacy/eobj/examples/function_overrides/main.c index 4eb770df00..7e9d2e162a 100644 --- a/legacy/eobj/examples/function_overrides/main.c +++ b/legacy/eobj/examples/function_overrides/main.c @@ -47,8 +47,8 @@ main(int argc, char *argv[]) fail_if(eo_class_do(SIMPLE_CLASS, simple_a_print())); - eo_constructor_super(obj); - eo_destructor_super(obj); + eo_do_super(obj, eo_constructor()); + eo_do_super(obj, eo_destructor()); eo_unref(obj); diff --git a/legacy/eobj/examples/function_overrides/simple.c b/legacy/eobj/examples/function_overrides/simple.c index d3742a54c5..328736edcb 100644 --- a/legacy/eobj/examples/function_overrides/simple.c +++ b/legacy/eobj/examples/function_overrides/simple.c @@ -70,8 +70,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), NULL, sizeof(Simple_Public_Data), - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/interface/interface.c b/legacy/eobj/examples/interface/interface.c index d03a30c663..8015e63273 100644 --- a/legacy/eobj/examples/interface/interface.c +++ b/legacy/eobj/examples/interface/interface.c @@ -20,8 +20,6 @@ static const Eo_Class_Description class_desc = { NULL, 0, NULL, - NULL, - NULL, NULL }; diff --git a/legacy/eobj/examples/interface/interface2.c b/legacy/eobj/examples/interface/interface2.c index 9abf7f01b2..0f60bbc5b7 100644 --- a/legacy/eobj/examples/interface/interface2.c +++ b/legacy/eobj/examples/interface/interface2.c @@ -21,8 +21,6 @@ static const Eo_Class_Description class_desc = { NULL, 0, NULL, - NULL, - NULL, NULL }; diff --git a/legacy/eobj/examples/interface/simple.c b/legacy/eobj/examples/interface/simple.c index 216bc5a3ef..b72ed7668c 100644 --- a/legacy/eobj/examples/interface/simple.c +++ b/legacy/eobj/examples/interface/simple.c @@ -90,8 +90,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), NULL, sizeof(Private_Data), - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/mixin/mixin.c b/legacy/eobj/examples/mixin/mixin.c index f1b112ce89..e643d2a83d 100644 --- a/legacy/eobj/examples/mixin/mixin.c +++ b/legacy/eobj/examples/mixin/mixin.c @@ -20,21 +20,23 @@ _ab_sum_get(const Eo *obj, const void *class_data EINA_UNUSED, va_list *list) } static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); } static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); } static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), EO_OP_FUNC_CONST(MIXIN_ID(MIXIN_SUB_ID_AB_SUM_GET), _ab_sum_get), EO_OP_FUNC_SENTINEL }; @@ -54,8 +56,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&MIXIN_BASE_ID, op_desc, MIXIN_SUB_ID_LAST), NULL, 0, - _constructor, - _destructor, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/mixin/mixin2.c b/legacy/eobj/examples/mixin/mixin2.c index 2244ffdd96..f47c438070 100644 --- a/legacy/eobj/examples/mixin/mixin2.c +++ b/legacy/eobj/examples/mixin/mixin2.c @@ -29,21 +29,23 @@ _ab_sum_get(const Eo *obj, const void *class_data, va_list *list) } static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); } static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); } static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), EO_OP_FUNC_CONST(MIXIN_ID(MIXIN_SUB_ID_AB_SUM_GET), _ab_sum_get), EO_OP_FUNC_SENTINEL }; @@ -57,8 +59,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, sizeof(Mixin2_Public_Data), - _constructor, - _destructor, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/mixin/mixin3.c b/legacy/eobj/examples/mixin/mixin3.c index c1821f9a7b..46a3d7cbf0 100644 --- a/legacy/eobj/examples/mixin/mixin3.c +++ b/legacy/eobj/examples/mixin/mixin3.c @@ -29,21 +29,23 @@ _ab_sum_get(const Eo *obj, const void *class_data EINA_UNUSED, va_list *list) } static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(obj, eo_constructor()); } static void -_destructor(Eo *obj, void *class_data EINA_UNUSED) +_destructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); + eo_do_super(obj, eo_destructor()); } static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), EO_OP_FUNC_CONST(MIXIN_ID(MIXIN_SUB_ID_AB_SUM_GET), _ab_sum_get), EO_OP_FUNC_SENTINEL }; @@ -57,8 +59,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, sizeof(Mixin3_Public_Data), - _constructor, - _destructor, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/mixin/simple.c b/legacy/eobj/examples/mixin/simple.c index 347e3b5f0a..c0c3b79d38 100644 --- a/legacy/eobj/examples/mixin/simple.c +++ b/legacy/eobj/examples/mixin/simple.c @@ -67,8 +67,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), NULL, sizeof(Private_Data), - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/examples/signals/simple.c b/legacy/eobj/examples/signals/simple.c index ad68e33dcc..6bbd3bd7c8 100644 --- a/legacy/eobj/examples/signals/simple.c +++ b/legacy/eobj/examples/signals/simple.c @@ -63,9 +63,9 @@ _cb_deled(void *data, Eo *obj, const Eo_Event_Description *desc, void *event_inf } static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_constructor_super(obj); + eo_do_super(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)); @@ -77,6 +77,7 @@ static void _class_constructor(Eo_Class *klass) { const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), EO_OP_FUNC(SIMPLE_ID(SIMPLE_SUB_ID_A_SET), _a_set), EO_OP_FUNC_SENTINEL }; @@ -100,8 +101,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), event_desc, sizeof(Private_Data), - _constructor, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/lib/Eo.h b/legacy/eobj/lib/Eo.h index e0d8d82fa6..04e9a0cbb9 100644 --- a/legacy/eobj/lib/Eo.h +++ b/legacy/eobj/lib/Eo.h @@ -252,6 +252,7 @@ class_get_func_name(void) \ return _my_class; \ } \ eina_lock_release(&_eo_class_creation_lock); \ + (void) parent_class; \ _my_class = eo_class_new(class_desc, id, parent_class, __VA_ARGS__); \ eina_lock_release(&_my_lock); \ \ @@ -369,8 +370,6 @@ struct _Eo_Class_Description } ops; /**< The ops description, should be filled using #EO_CLASS_DESCRIPTION_OPS */ const Eo_Event_Description **events; /**< The event descriptions for this class. */ size_t data_size; /**< The size of data (private + protected + public) this class needs per object. */ - void (*constructor)(Eo *obj, void *class_data); /**< The constructor of the object. */ - void (*destructor)(Eo *obj, void *class_data); /**< The destructor of the object. */ void (*class_constructor)(Eo_Class *klass); /**< The constructor of the class. */ void (*class_destructor)(Eo_Class *klass); /**< The destructor of the class. */ }; @@ -619,22 +618,6 @@ EAPI Eina_Bool eo_class_do_super_internal(const Eo_Class *klass, Eo_Op op, ...); */ EAPI const Eo_Class *eo_class_get(const Eo *obj); -/** - * @brief Calls the super constructor of the object passed. - * @param obj the object to work on. - * - * @see eo_destructor_super() - */ -EAPI void eo_constructor_super(Eo *obj); - -/** - * @brief Calls the super destructor of the object passed. - * @param obj the object to work on. - * - * @see eo_constructor_super() - */ -EAPI void eo_destructor_super(Eo *obj); - /** * @def eo_error_set * @brief Notify eo that there was an error when constructing, destructing or calling a function of the object. @@ -853,7 +836,7 @@ EAPI void eo_manual_free(Eo *obj); * @brief Use #EO_BASE_CLASS * @internal * */ -EAPI const Eo_Class *eo_base_class_get(void) EINA_CONST; +EAPI const Eo_Class *eo_base_class_get(void); /** * @typedef eo_base_data_free_func @@ -874,6 +857,8 @@ typedef void (*eo_base_data_free_func)(void *); #define EO_BASE_BASE_ID EO_CLASS_ID_TO_BASE_ID(EO_BASE_CLASS_ID) enum { + EO_BASE_SUB_ID_CONSTRUCTOR, + EO_BASE_SUB_ID_DESTRUCTOR, EO_BASE_SUB_ID_DATA_SET, EO_BASE_SUB_ID_DATA_GET, EO_BASE_SUB_ID_DATA_DEL, @@ -971,6 +956,26 @@ enum { if (*wref) eo_do(*wref, eo_wref_del(wref)); \ } while (0) +/** + * @def eo_constructor + * @brief Call the object's constructor. + * + * Should not be used with #eo_do. Only use it with #eo_do_super. + * + * @see #eo_destructor + */ +#define eo_constructor() EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR) + +/** + * @def eo_destructor + * @brief Call the object's destructor. + * + * Should not be used with #eo_do. Only use it with #eo_do_super. + * + * @see #eo_constructor + */ +#define eo_destructor() EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR) + /** * @addtogroup Eo_Events Eo's Event Handling * @{ diff --git a/legacy/eobj/lib/eo.c b/legacy/eobj/lib/eo.c index 63735f4570..a3f5125411 100644 --- a/legacy/eobj/lib/eo.c +++ b/legacy/eobj/lib/eo.c @@ -16,8 +16,7 @@ static Eo_Class **_eo_classes; static Eo_Class_Id _eo_classes_last_id; static Eina_Bool _eo_init_count = 0; -static void _eo_constructor(Eo *obj, const Eo_Class *klass); -static void _eo_destructor(Eo *obj, const Eo_Class *klass); +static void _eo_condtor_reset(Eo *obj); static inline Eina_Bool _eo_error_get(const Eo *obj); static inline void _eo_error_unset(Eo *obj); static inline void *_eo_data_get(const Eo *obj, const Eo_Class *klass); @@ -45,9 +44,11 @@ struct _Eo { Eo_Kls_Itr mro_itr; + Eina_Bool construct_error:1; + Eina_Bool condtor_done:1; + Eina_Bool composite:1; Eina_Bool del:1; - Eina_Bool construct_error:1; Eina_Bool manual_free:1; }; @@ -279,7 +280,7 @@ _eo_kls_itr_init(const Eo_Class *obj_klass, Eo_Kls_Itr *cur, Eo_Op op, Eo_Kls_It prev_state->kls_itr = cur->kls_itr; /* If we are in a constructor/destructor or we changed an op - init. */ - if ((op == EO_NOOP) || (cur->op != op)) + if ((cur->op == EO_NOOP) || (cur->op != op)) { cur->op = op; cur->kls_itr = obj_klass->mro; @@ -317,17 +318,10 @@ _eo_kls_itr_next(Eo_Kls_Itr *cur, Eo_Op op) const Eo_Class **kls_itr = cur->kls_itr; if (*kls_itr) { - if (op != EO_NOOP) - { - const op_type_funcs *fsrc = _dich_func_get(*kls_itr, op); + const op_type_funcs *fsrc = _dich_func_get(*kls_itr, op); - while (*kls_itr && (*(kls_itr++) != fsrc->src)) - ; - } - else - { - kls_itr++; - } + while (*kls_itr && (*(kls_itr++) != fsrc->src)) + ; cur->kls_itr = kls_itr; return *kls_itr; @@ -338,13 +332,6 @@ _eo_kls_itr_next(Eo_Kls_Itr *cur, Eo_Op op) } } -static inline Eina_Bool -_eo_kls_itr_reached_end(const Eo_Kls_Itr *cur) -{ - const Eo_Class **kls_itr = cur->kls_itr; - return !(*kls_itr && *(kls_itr + 1)); -} - static inline const op_type_funcs * _eo_kls_itr_func_get(const Eo_Class *klass, Eo_Kls_Itr *mro_itr, Eo_Op op, Eo_Kls_Itr *prev_state) { @@ -883,8 +870,6 @@ eo_class_new(const Eo_Class_Description *desc, Eo_Class_Id id, const Eo_Class *p /* Check restrictions on Interface types. */ if (desc->type == EO_CLASS_TYPE_INTERFACE) { - EINA_SAFETY_ON_FALSE_RETURN_VAL(!desc->constructor, NULL); - EINA_SAFETY_ON_FALSE_RETURN_VAL(!desc->destructor, NULL); EINA_SAFETY_ON_FALSE_RETURN_VAL(!desc->class_constructor, NULL); EINA_SAFETY_ON_FALSE_RETURN_VAL(!desc->class_destructor, NULL); EINA_SAFETY_ON_FALSE_RETURN_VAL(!desc->data_size, NULL); @@ -1135,9 +1120,10 @@ eo_add(const Eo_Class *klass, Eo *parent) _eo_kls_itr_init(klass, &obj->mro_itr, EO_NOOP, &prev_state); _eo_error_unset(obj); + _eo_condtor_reset(obj); _eo_ref(obj); - _eo_constructor(obj, klass); + eo_do(obj, eo_constructor()); if (EINA_UNLIKELY(_eo_error_get(obj))) { @@ -1145,7 +1131,7 @@ eo_add(const Eo_Class *klass, Eo *parent) goto fail; } - if (EINA_UNLIKELY(!_eo_kls_itr_reached_end(&obj->mro_itr))) + if (!obj->condtor_done) { const Eo_Class *cur_klass = _eo_kls_itr_get(&obj->mro_itr); ERR("Object of class '%s' - Not all of the object constructors have been executed, last destructor was of class: '%s'", klass->desc->name, cur_klass->desc->name); @@ -1252,13 +1238,15 @@ _eo_del_internal(Eo *obj) _eo_kls_itr_init(klass, &obj->mro_itr, EO_NOOP, &prev_state); _eo_error_unset(obj); - _eo_destructor(obj, klass); + _eo_condtor_reset(obj); + + eo_do(obj, eo_destructor()); if (_eo_error_get(obj)) { ERR("Object of class '%s' - One of the object destructors have failed.", klass->desc->name); } - if (!_eo_kls_itr_reached_end(&obj->mro_itr)) + if (!obj->condtor_done) { const Eo_Class *cur_klass = _eo_kls_itr_get(&obj->mro_itr); ERR("Object of class '%s' - Not all of the object destructors have been executed, last destructor was of class: '%s'", klass->desc->name, cur_klass->desc->name); @@ -1370,6 +1358,18 @@ _eo_error_unset(Eo *obj) obj->construct_error = EINA_FALSE; } +void +_eo_condtor_done(Eo *obj) +{ + obj->condtor_done = EINA_TRUE; +} + +static void +_eo_condtor_reset(Eo *obj) +{ + obj->condtor_done = EINA_FALSE; +} + /** * @internal * @brief Check if there was an error when constructing, destructing or calling a function of the object. @@ -1382,58 +1382,6 @@ _eo_error_get(const Eo *obj) return obj->construct_error; } -static inline void -_eo_constructor_default(Eo *obj) -{ - eo_constructor_super(obj); -} - -static inline void -_eo_destructor_default(Eo *obj) -{ - eo_destructor_super(obj); -} - -static void -_eo_constructor(Eo *obj, const Eo_Class *klass) -{ - if (!klass) - return; - - if (klass->desc->constructor) - klass->desc->constructor(obj, _eo_data_get(obj, klass)); - else - _eo_constructor_default(obj); -} - -static void -_eo_destructor(Eo *obj, const Eo_Class *klass) -{ - if (!klass) - return; - - if (klass->desc->destructor) - klass->desc->destructor(obj, _eo_data_get(obj, klass)); - else - _eo_destructor_default(obj); -} - -EAPI void -eo_constructor_super(Eo *obj) -{ - EO_MAGIC_RETURN(obj, EO_EINA_MAGIC); - - _eo_constructor(obj, _eo_kls_itr_next(&obj->mro_itr, EO_NOOP)); -} - -EAPI void -eo_destructor_super(Eo *obj) -{ - EO_MAGIC_RETURN(obj, EO_EINA_MAGIC); - - _eo_destructor(obj, _eo_kls_itr_next(&obj->mro_itr, EO_NOOP)); -} - static inline void * _eo_data_get(const Eo *obj, const Eo_Class *klass) { diff --git a/legacy/eobj/lib/eo_base_class.c b/legacy/eobj/lib/eo_base_class.c index a90d37ab60..ffb88587d4 100644 --- a/legacy/eobj/lib/eo_base_class.c +++ b/legacy/eobj/lib/eo_base_class.c @@ -484,19 +484,23 @@ EAPI const Eo_Event_Description _EO_EV_DEL = EO_EVENT_DESCRIPTION("del", "Obj is being deleted."); static void -_constructor(Eo *obj, void *class_data EINA_UNUSED) +_constructor(Eo *obj, void *class_data EINA_UNUSED, va_list *list EINA_UNUSED) { DBG("%p - %s.", obj, eo_class_name_get(MY_CLASS)); + + _eo_condtor_done(obj); } static void -_destructor(Eo *obj, void *class_data) +_destructor(Eo *obj, void *class_data, va_list *list EINA_UNUSED) { DBG("%p - %s.", obj, eo_class_name_get(MY_CLASS)); _eo_generic_data_del_all(class_data); _wref_destruct(class_data); _eo_callback_remove_all(class_data); + + _eo_condtor_done(obj); } static void @@ -505,6 +509,8 @@ _class_constructor(Eo_Class *klass) event_freeze_count = 0; const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _destructor), EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DATA_SET), _data_set), EO_OP_FUNC_CONST(EO_BASE_ID(EO_BASE_SUB_ID_DATA_GET), _data_get), EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DATA_DEL), _data_del), @@ -528,6 +534,8 @@ _class_constructor(Eo_Class *klass) } static const Eo_Op_Description op_desc[] = { + EO_OP_DESCRIPTION(EO_BASE_SUB_ID_CONSTRUCTOR, "Constructor"), + EO_OP_DESCRIPTION(EO_BASE_SUB_ID_DESTRUCTOR, "Destructor"), EO_OP_DESCRIPTION(EO_BASE_SUB_ID_DATA_SET, "Set data for key."), EO_OP_DESCRIPTION_CONST(EO_BASE_SUB_ID_DATA_GET, "Get data for key."), EO_OP_DESCRIPTION(EO_BASE_SUB_ID_DATA_DEL, "Del key."), @@ -560,8 +568,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(NULL, op_desc, EO_BASE_SUB_ID_LAST), event_desc, sizeof(Private_Data), - _constructor, - _destructor, _class_constructor, NULL }; diff --git a/legacy/eobj/lib/eo_private.h b/legacy/eobj/lib/eo_private.h index 631ce01c6a..7759a2af5b 100644 --- a/legacy/eobj/lib/eo_private.h +++ b/legacy/eobj/lib/eo_private.h @@ -54,5 +54,7 @@ extern int _eo_log_dom; #endif #define DBG(...) EINA_LOG_DOM_DBG(_eo_log_dom, __VA_ARGS__) +void _eo_condtor_done(Eo *obj); + #endif diff --git a/legacy/eobj/tests/class_simple.c b/legacy/eobj/tests/class_simple.c index 58d6d290ec..866a336754 100644 --- a/legacy/eobj/tests/class_simple.c +++ b/legacy/eobj/tests/class_simple.c @@ -58,8 +58,6 @@ static const Eo_Class_Description class_desc = { EO_CLASS_DESCRIPTION_OPS(&SIMPLE_BASE_ID, op_desc, SIMPLE_SUB_ID_LAST), NULL, sizeof(Simple_Public_Data), - NULL, - NULL, _class_constructor, NULL }; diff --git a/legacy/eobj/tests/eo_test_class_errors.c b/legacy/eobj/tests/eo_test_class_errors.c index fcafc4fee6..4f503361f1 100644 --- a/legacy/eobj/tests/eo_test_class_errors.c +++ b/legacy/eobj/tests/eo_test_class_errors.c @@ -40,8 +40,6 @@ START_TEST(eo_incomplete_desc) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -108,8 +106,6 @@ START_TEST(eo_inherit_errors) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -120,8 +116,6 @@ START_TEST(eo_inherit_errors) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -132,8 +126,6 @@ START_TEST(eo_inherit_errors) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -173,8 +165,6 @@ START_TEST(eo_inconsistent_mro) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -185,8 +175,6 @@ START_TEST(eo_inconsistent_mro) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -197,8 +185,6 @@ START_TEST(eo_inconsistent_mro) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -209,8 +195,6 @@ START_TEST(eo_inconsistent_mro) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -236,7 +220,6 @@ START_TEST(eo_inconsistent_mro) } END_TEST -static void _stub_constructor(Eo *obj EINA_UNUSED, void *data EINA_UNUSED) {} static void _stub_class_constructor(Eo_Class *klass EINA_UNUSED) {} START_TEST(eo_bad_interface) @@ -252,8 +235,6 @@ START_TEST(eo_bad_interface) NULL, 10, NULL, - NULL, - NULL, NULL }; @@ -261,18 +242,6 @@ START_TEST(eo_bad_interface) fail_if(klass); class_desc.data_size = 0; - class_desc.constructor = _stub_constructor; - - klass = eo_class_new(&class_desc, 0, NULL, NULL); - fail_if(klass); - - class_desc.constructor = NULL; - class_desc.destructor = _stub_constructor; - - klass = eo_class_new(&class_desc, 0, NULL, NULL); - fail_if(klass); - - class_desc.destructor = NULL; class_desc.class_constructor = _stub_class_constructor; klass = eo_class_new(&class_desc, 0, NULL, NULL); @@ -343,8 +312,6 @@ START_TEST(eo_op_types) EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - NULL, - NULL, _const_ops_class_constructor, NULL }; diff --git a/legacy/eobj/tests/eo_test_general.c b/legacy/eobj/tests/eo_test_general.c index c37bf3d74e..bba143cfce 100644 --- a/legacy/eobj/tests/eo_test_general.c +++ b/legacy/eobj/tests/eo_test_general.c @@ -31,8 +31,6 @@ START_TEST(eo_data_fetch) NULL, 10, NULL, - NULL, - NULL, NULL }; @@ -96,8 +94,6 @@ START_TEST(eo_static_classes) NULL, 0, NULL, - NULL, - NULL, NULL }; @@ -114,18 +110,36 @@ START_TEST(eo_static_classes) } END_TEST +static Eina_Bool _man_should_con = EINA_TRUE; +static Eina_Bool _man_should_des = EINA_TRUE; + static void -_man_con(Eo *obj, void *data EINA_UNUSED) +_man_con(Eo *obj, void *data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_manual_free_set(obj, EINA_TRUE); - eo_constructor_super(obj); + if (_man_should_con) + eo_manual_free_set(obj, EINA_TRUE); + eo_do_super(obj, eo_constructor()); } static void -_man_des(Eo *obj, void *data EINA_UNUSED) +_man_des(Eo *obj, void *data EINA_UNUSED, va_list *list EINA_UNUSED) { - eo_destructor_super(obj); - eo_manual_free_set(obj, EINA_FALSE); + eo_do_super(obj, eo_destructor()); + if (_man_should_des) + eo_manual_free_set(obj, EINA_FALSE); +} + + +static void +_man_class_constructor(Eo_Class *klass) +{ + const Eo_Op_Func_Description func_desc[] = { + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _man_con), + EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_DESTRUCTOR), _man_des), + EO_OP_FUNC_SENTINEL + }; + + eo_class_funcs_set(klass, func_desc); } START_TEST(eo_man_free) @@ -139,9 +153,7 @@ START_TEST(eo_man_free) EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 10, - _man_con, - _man_des, - NULL, + _man_class_constructor, NULL }; @@ -157,7 +169,7 @@ START_TEST(eo_man_free) eo_manual_free(obj); eo_unref(obj); - class_desc.destructor = NULL; + _man_should_des = EINA_FALSE; klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL); fail_if(!klass); @@ -172,7 +184,7 @@ START_TEST(eo_man_free) eo_unref(obj); eo_manual_free(obj); - class_desc.constructor = NULL; + _man_should_con = EINA_FALSE; klass = eo_class_new(&class_desc, 0, EO_BASE_CLASS, NULL); fail_if(!klass); @@ -360,8 +372,6 @@ START_TEST(eo_op_errors) EO_CLASS_DESCRIPTION_OPS(NULL, NULL, 0), NULL, 0, - NULL, - NULL, _op_errors_class_constructor, NULL }; @@ -525,9 +535,6 @@ START_TEST(eo_magic_checks) eo_error_set((Eo *) buf); - eo_constructor_super((Eo *) buf); - eo_destructor_super((Eo *) buf); - fail_if(eo_data_get((Eo *) buf, SIMPLE_CLASS)); eo_composite_object_attach((Eo *) buf, obj);