vitorsousa pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=5c7d78d1040b5bdfe6430e84c90d36ab8bf27064

commit 5c7d78d1040b5bdfe6430e84c90d36ab8bf27064
Author: Felipe Magno de Almeida <fel...@expertisesolutions.com.br>
Date:   Wed Mar 2 11:32:16 2016 -0300

    eolian-cxx: Partial fix for generation without eo_do
---
 src/bindings/eo_cxx/eo_event.hh                    |  2 +-
 src/bindings/eo_cxx/eo_inherit_bindings.hh         |  4 +-
 src/bindings/eo_cxx/eo_ops.hh                      | 56 +++++++++++-----------
 .../grammar/eo_class_constructors_generator.hh     |  5 +-
 .../grammar/eo_class_events_generator.hh           | 11 ++---
 .../grammar/eo_class_functions_generator.hh        | 29 +++++++++--
 .../grammar/inheritance_base_generator.hh          |  5 +-
 src/lib/eolian_cxx/grammar/parameters_generator.hh |  7 +--
 src/tests/eolian_cxx/callback.c                    |  4 +-
 9 files changed, 71 insertions(+), 52 deletions(-)

diff --git a/src/bindings/eo_cxx/eo_event.hh b/src/bindings/eo_cxx/eo_event.hh
index d0b335e..5fa6404 100644
--- a/src/bindings/eo_cxx/eo_event.hh
+++ b/src/bindings/eo_cxx/eo_event.hh
@@ -95,7 +95,7 @@ struct _event_deleter
 
   void operator()() const
   {
-    eo_do(_eo, ::eo_event_callback_del(_description, _cb, _data));
+    ::eo_event_callback_del(_eo, _description, _cb, _data);
     ::ecore_main_loop_thread_safe_call_async(&_deleter_call, _data);
   }
 
diff --git a/src/bindings/eo_cxx/eo_inherit_bindings.hh 
b/src/bindings/eo_cxx/eo_inherit_bindings.hh
index cbd2bc8..458036d 100644
--- a/src/bindings/eo_cxx/eo_inherit_bindings.hh
+++ b/src/bindings/eo_cxx/eo_inherit_bindings.hh
@@ -61,7 +61,9 @@ void inherit_constructor_impl(Eo*, Inherit_Private_Data* 
self, void* this_)
 /// @param this_ The <em>user data</em> to be passed to the resolved function.
 /// @param args An heterogeneous sequence of arguments.
 ///
-inline EOAPI EO_VOID_FUNC_BODYV(inherit_constructor, EO_FUNC_CALL(this_), 
void* this_);
+// inline EOAPI EO_VOID_FUNC_BODYV(inherit_constructor, EO_FUNC_CALL(this_), 
void* this_);
+inline
+void inherit_constructor(void* this_);
 
 template <typename T>
 int initialize_operation_description(detail::tag<void>, void*);
diff --git a/src/bindings/eo_cxx/eo_ops.hh b/src/bindings/eo_cxx/eo_ops.hh
index 47d920d..46a33c7 100644
--- a/src/bindings/eo_cxx/eo_ops.hh
+++ b/src/bindings/eo_cxx/eo_ops.hh
@@ -22,112 +22,112 @@ shutdown()
 }
 
 inline Eo*
-ref(const Eo *obj)
+ref(Eo *obj)
 {
    return ::eo_ref(obj);
 }
 
 inline void
-unref(const Eo *obj)
+unref(Eo *obj)
 {
    ::eo_unref(obj);
 }
 
 inline int
-ref_get(const Eo *obj)
+ref_get(Eo *obj)
 {
    return ::eo_ref_get(obj);
 }
 
 inline void
-del(const Eo *obj)
+del(Eo *obj)
 {
    ::eo_del(obj);
 }
 
 inline Eina_Bool
-isa(const Eo *obj, const Eo_Class *klass)
+isa(Eo *obj, Eo_Class *klass)
 {
    return eo_isa(obj, klass);
 }
 
 inline Eo*
-add(const Eo_Class *klass, Eo *parent = NULL)
+add(Eo_Class *klass, Eo *parent = NULL)
 {
    Eo *eo = eo_add_ref(klass, parent);
    return eo;
 }
 
 inline void
-dbg_info_get(const Eo *obj, Eo_Dbg_Info *info)
+dbg_info_get(Eo *obj, Eo_Dbg_Info *info)
 {
-   eo_do(obj, eo_dbg_info_get(info));
+   eo_dbg_info_get(obj, info);
 }
 
 inline void
-base_data_set(const Eo *obj, const char *key, const void *data)
+base_data_set(Eo *obj, const char *key, const void *data)
 {
-   eo_do(obj, eo_key_data_set(key, data));
+   eo_key_data_set(obj, key, data);
 }
 
 inline void*
-base_data_get(const Eo *obj, const char *key)
+base_data_get(Eo *obj, const char *key)
 {
    void *data;
-   eo_do(obj, data = eo_key_data_get(key));
+   data = eo_key_data_get(obj, key);
    return data;
 }
 
 inline void
-base_data_del(const Eo *obj, const char *key)
+base_data_del(Eo *obj, const char *key)
 {
-   eo_do(obj, eo_key_data_del(key));
+   eo_key_data_del(obj, key);
 }
 
 inline void
-parent_set(const Eo *obj, Eo *parent)
+parent_set(Eo *obj, Eo *parent)
 {
-   eo_do(obj, eo_parent_set(parent));
+   eo_parent_set(obj, parent);
 }
 
 inline Eo*
-parent_get(const Eo *obj)
+parent_get(Eo *obj)
 {
    Eo *parent;
-   eo_do(obj, parent = eo_parent_get());
+   parent = eo_parent_get(obj);
    return parent;
 }
 
 inline void
-event_freeze(const Eo *obj)
+event_freeze(Eo *obj)
 {
-   eo_do(obj, eo_event_freeze());
+   eo_event_freeze(obj);
 }
 
 inline void
-event_thaw(const Eo *obj)
+event_thaw(Eo *obj)
 {
-   eo_do(obj, eo_event_thaw());
+   eo_event_thaw(obj);
 }
 
 inline int
-event_freeze_get(const Eo *obj)
+event_freeze_get(Eo *obj)
 {
    int count = -1;
-   eo_do(obj, count = eo_event_freeze_count_get());
+   count = eo_event_freeze_count_get(obj);
    return count;
 }
 
 inline void
-wref_add(const Eo *obj, Eo **wref)
+wref_add(Eo *obj, Eo **wref)
 {
-   eo_do(obj, eo_wref_add(wref));
+   eo_wref_add(obj, wref);
 }
 
 inline void
-wref_del(const Eo *obj, Eo **wref)
+wref_del(Eo *obj, Eo **wref)
 {
-   eo_do(obj, eo_wref_del(wref));
+   eo_wref_del(obj, wref);
 }
 
 } } }
diff --git a/src/lib/eolian_cxx/grammar/eo_class_constructors_generator.hh 
b/src/lib/eolian_cxx/grammar/eo_class_constructors_generator.hh
index 73847a8..74c9c32 100644
--- a/src/lib/eolian_cxx/grammar/eo_class_constructors_generator.hh
+++ b/src/lib/eolian_cxx/grammar/eo_class_constructors_generator.hh
@@ -172,11 +172,10 @@ operator<<(std::ostream& out, 
functors_constructor_methods const& x)
                  {
                     if (d.is_cb)
                       d.out << tab(3)
-                            << "eo_do(_eoptr," << endl
-                            << tab(4) << 
"eo_event_callback_add(EO_BASE_EVENT_DEL, "
+                            << "eo_event_callback_add(_eoptr, 
EO_BASE_EVENT_DEL, "
                             << "&::efl::eolian::free_callback_callback<"
                             << parameter_no_ref_type(d.type, d.name)
-                            << ">, " << callback_tmp(d.name) << "));" << endl;
+                            << ">, " << callback_tmp(d.name) << ");" << endl;
                  })
             << tab(2) << "}" << endl;
 
diff --git a/src/lib/eolian_cxx/grammar/eo_class_events_generator.hh 
b/src/lib/eolian_cxx/grammar/eo_class_events_generator.hh
index b86b4c4..95e155c 100644
--- a/src/lib/eolian_cxx/grammar/eo_class_events_generator.hh
+++ b/src/lib/eolian_cxx/grammar/eo_class_events_generator.hh
@@ -52,10 +52,9 @@ operator<<(std::ostream& out, event_callback_add const& x)
        << tab(1) << "{" << endl
        << tab(2) << "typedef typename std::remove_reference<F>::type 
function_type;" << endl
        << tab(2) << "::std::unique_ptr<function_type> f ( new 
function_type(std::forward<F>(callback_)) );" << endl
-       << tab(2) << "eo_do(" << add_cast_to_t(x._add_cast_to_t) << 
"_concrete_eo_ptr()," << endl
-       << tab(4) << "eo_event_callback_priority_add" << endl
-       << tab(4) << "(" << x._event.eo_name << ", priority_," << endl
-       << tab(4) << "&::efl::eo::_detail::event_callback<" << 
full_name(x._cls) << ", function_type>, f.get()));" << endl
+       << tab(2) << "eo_event_callback_priority_add(" << 
add_cast_to_t(x._add_cast_to_t) << "_concrete_eo_ptr()," << endl
+       << tab(2) << x._event.eo_name << ", priority_," << endl
+       << tab(2) << "&::efl::eo::_detail::event_callback<" << 
full_name(x._cls) << ", function_type>, f.get());" << endl
        << tab(2) << "return ::efl::eo::make_signal_connection" << endl
        << tab(3) << "(f, " << add_cast_to_t(x._add_cast_to_t)
        << "_concrete_eo_ptr(), &::efl::eo::_detail::event_callback<"
@@ -82,8 +81,8 @@ operator<<(std::ostream& out, event_callback_call const& x)
        << tab(1) << "void" << endl
        << tab(1) << "callback_" << x._event.name << "_call(T* info)" << endl
        << tab(1) << "{" << endl
-       << tab(2) << "eo_do(" << add_cast_to_t(x._add_cast_to_t) << 
"_concrete_eo_ptr(), eo_event_callback_call" << endl
-       << tab(4) << "(" << x._event.eo_name << ", info));" << endl
+       << tab(2) << "eo_event_callback_call" << endl
+       << tab(4) << "(" << add_cast_to_t(x._add_cast_to_t) << 
"_concrete_eo_ptr(), " << x._event.eo_name << ", info);" << endl
        << tab(1) << "}" << endl;
    return out;
 }
diff --git a/src/lib/eolian_cxx/grammar/eo_class_functions_generator.hh 
b/src/lib/eolian_cxx/grammar/eo_class_functions_generator.hh
index 1a64a8c..f99254c 100644
--- a/src/lib/eolian_cxx/grammar/eo_class_functions_generator.hh
+++ b/src/lib/eolian_cxx/grammar/eo_class_functions_generator.hh
@@ -20,15 +20,38 @@ struct function_call
    function_call(eo_function const& func) : _func(func) {}
 };
 
+struct parameterized_obj_function_call
+{
+   eo_function const& _func;
+   std::string obj;
+   parameterized_obj_function_call(eo_function const& func, std::string obj) : 
_func(func), obj(obj) {}
+};
+      
 inline std::ostream&
 operator<<(std::ostream& out, function_call const& x)
 {
    bool is_void = function_is_void(x._func);
+   bool is_static = function_is_static(x._func);
    return out << (!is_void ? "_tmp_ret = " : "")
               << "::" << x._func.impl
-              << "(" << parameters_forward_to_c(x._func.params) << ")";
+              << "("
+              << (is_static ? "const_cast<Eo*>(_eo_class())" : 
"_concrete_eo_ptr()")
+              << (x._func.params.empty() ? "" : ",")
+              << parameters_forward_to_c(x._func.params) << ")";
 }
 
+inline std::ostream&
+operator<<(std::ostream& out, parameterized_obj_function_call const& x)
+{
+   bool is_void = function_is_void(x._func);
+   return out << (!is_void ? "_tmp_ret = " : "")
+              << "::" << x._func.impl
+              << "("
+              << x.obj
+              << (x._func.params.empty() ? "" : ",")
+              << parameters_forward_to_c(x._func.params) << ")";
+}
+      
 struct function_declaration
 {
    eo_class const& _cls;
@@ -94,9 +117,7 @@ operator<<(std::ostream& out, function_definition const& x)
 
    out << callbacks_heap_alloc("_concrete_eo_ptr()", func.params, is_static, 
1);
 
-   out << tab(1) << "eo_do("
-       << (is_static ? "_eo_class(), " : "_concrete_eo_ptr(), ")
-       << function_call(x._func) << ");" << endl;
+   out << tab(1) << function_call(x._func) << ";" << endl;
 
    if (!function_is_void(func))
      out << tab(1) << "return " << to_cxx(func.ret, "_tmp_ret") << ";" << endl;
diff --git a/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh 
b/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh
index 561ce8c..5cee5e2 100644
--- a/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh
+++ b/src/lib/eolian_cxx/grammar/inheritance_base_generator.hh
@@ -264,10 +264,7 @@ operator<<(std::ostream& out, 
inheritance_base_operations_function const& x)
    out << callbacks_heap_alloc("dynamic_cast<T*>(this)->_eo_ptr()", 
func.params, function_is_static(x._func), 3)
        << endl;
 
-   out << tab(3)
-       << "eo_do_super(dynamic_cast<T*>(this)->_eo_ptr()," << endl
-       << tab(5) << "dynamic_cast<T*>(this)->_eo_class()," << endl
-       << tab(5) << function_call(func) << ");" << endl;
+   out << tab(3) << parameterized_obj_function_call(func, 
"eo_super(dynamic_cast<T*>(this)->_eo_ptr(), 
dynamic_cast<T*>(this)->_eo_class())") << ";" << endl;
 
    if (!is_void)
      out << tab(4) << "return " << to_cxx(func.ret, "_tmp_ret") << ";" << endl;
diff --git a/src/lib/eolian_cxx/grammar/parameters_generator.hh 
b/src/lib/eolian_cxx/grammar/parameters_generator.hh
index ecda9d8..9d27926 100644
--- a/src/lib/eolian_cxx/grammar/parameters_generator.hh
+++ b/src/lib/eolian_cxx/grammar/parameters_generator.hh
@@ -121,10 +121,11 @@ callback_parameter_free_ev_add
 inline std::ostream&
 operator<<(std::ostream& out, callback_parameter_free_ev_add const& x)
 {
-   out << "eo_do(" << x._eo_raw_expr
-       << ", eo_event_callback_add(EO_BASE_EVENT_DEL, 
&::efl::eolian::free_callback_callback<"
+   out
+       << "eo_event_callback_add(" << x._eo_raw_expr
+       << ", EO_BASE_EVENT_DEL, &::efl::eolian::free_callback_callback<"
        << parameter_no_ref_type(x._type, x._name) << ">, "
-       << callback_tmp(x._name) << "));";
+       << callback_tmp(x._name) << ");";
    return out;
 }
 
diff --git a/src/tests/eolian_cxx/callback.c b/src/tests/eolian_cxx/callback.c
index 757c5a2..cd73160 100644
--- a/src/tests/eolian_cxx/callback.c
+++ b/src/tests/eolian_cxx/callback.c
@@ -21,7 +21,7 @@ static Eina_Bool _callback_callback_added(void* data 
EINA_UNUSED, Eo_Event2 cons
 {
   Callback_Data* pd = event->event_info;
   ++pd->callbacks;
-  eo_event_callback_call(CALLBACK_EVENT_CALL_ON_ADD, &pd->callbacks);
+  eo_event_callback_call(event->obj, CALLBACK_EVENT_CALL_ON_ADD, 
&pd->callbacks);
   return EINA_TRUE;
 }
 
@@ -30,7 +30,7 @@ static Eo *_callback_eo_base_constructor(Eo *obj, 
Callback_Data *pd EINA_UNUSED)
   pd->callbacks = 0;
   obj = eo_constructor(eo_super(obj, MY_CLASS));
 
-  eo_event_callback_priority_add(EO_BASE_EVENT_CALLBACK_ADD, 
EO_CALLBACK_PRIORITY_DEFAULT
+  eo_event_callback_priority_add(obj, EO_BASE_EVENT_CALLBACK_ADD, 
EO_CALLBACK_PRIORITY_DEFAULT
                                  , &_callback_callback_added, pd);
 
   return obj;

-- 


Reply via email to