We want to have normal functions as non-default constructors, not va_arg
ones. What we should do is split the object creation to two parts again.
The creation, the constructing (changes using the macro) and the
verification/end part that checks the constructor has been called.
This reverts commit
2ff2ce1894f173b306a896bda595e1a7768c074d.
#define eo2_add(klass, parent, ...) \
({ \
const Eo_Class *_tmp_klass = klass; \
- eo_add_internal(__FILE__, __LINE__, _tmp_klass, parent, eo2_constructor, ## __VA_ARGS__, EO_NOOP); \
+ eo_add_internal(__FILE__, __LINE__, _tmp_klass, parent, ## __VA_ARGS__, EO_NOOP); \
})
/**
/* Run the relevant do stuff. */
if (klass->desc->version == EO2_VERSION)
- {
- eo2_constructor_type constr;
- va_list p_list;
- if(eo2_do_start((Eo *)obj_id, EINA_FALSE))
- {
- va_start(p_list, parent_id);
- while ((constr = va_arg(p_list, eo2_constructor_type)))
- constr();
- va_end(p_list);
- eo2_do_end(NULL);
- do_err = EINA_FALSE;
- }
- else
- do_err = EINA_TRUE;
- }
- else
+ eo2_do((Eo *)obj_id, eo2_constructor());
+ /* Run the relevant do stuff. */
{
va_list p_list;
va_start(p_list, parent_id);
typedef struct _Eo_Object _Eo_Object;
typedef struct _Eo_Base Eo_Base;
typedef struct _Eo_Internal _Eo;
-typedef void (*eo2_constructor_type)(void);
/* Retrieves the pointer to the object from the id */
static inline _Eo_Object *_eo_obj_pointer_get(const Eo_Id obj_id);