From d887c4de52ed74b33850ece7ca9ad6477aa48712 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Wed, 22 Nov 2017 20:25:29 +0900 Subject: [PATCH] cxx: Add implicit conversion to Eo* pointer This is part of the experimental stuff. Allows calling C functions without using ._eo_ptr() explicitly. Probably not super useful, assuming the interfaces are done :) --- src/examples/elementary/calendar_cxx_example_02.cc | 2 +- src/lib/eolian_cxx/grammar/class_definition.hpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/examples/elementary/calendar_cxx_example_02.cc b/src/examples/elementary/calendar_cxx_example_02.cc index fd001f7..047f584 100644 --- a/src/examples/elementary/calendar_cxx_example_02.cc +++ b/src/examples/elementary/calendar_cxx_example_02.cc @@ -41,7 +41,7 @@ struct appData void destroy() { // FIXME: need del() function and no error on unref(). - ::efl_allow_parent_unref_set(m_win._eo_ptr(), true); + ::efl_allow_parent_unref_set(m_win, true); m_win = nullptr; } diff --git a/src/lib/eolian_cxx/grammar/class_definition.hpp b/src/lib/eolian_cxx/grammar/class_definition.hpp index e326c9d..1e21336 100644 --- a/src/lib/eolian_cxx/grammar/class_definition.hpp +++ b/src/lib/eolian_cxx/grammar/class_definition.hpp @@ -211,12 +211,17 @@ struct class_definition_generator // EXPERIMENTAL if(!as_generator("#ifdef EFL_CXXPERIMENTAL\n").generate(sink, attributes::unused, context)) return false; + // For easy wref, operator-> in wref needs to also return a pointer type if(!as_generator( scope_tab << "const " << string << "* operator->() const { return this; }\n" ).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false; if(!as_generator( scope_tab << string << "* operator->() { return this; }\n" ).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false; + // For easy interfacing with C: no need to use _eo_ptr() + if(!as_generator( scope_tab << "operator Eo*() const { return _eo_ptr(); }\n" + ).generate(sink, attributes::unused, context)) return false; if(!as_generator("#endif \n").generate(sink, attributes::unused, context)) return false; + // eo_concrete if(!as_generator( scope_tab << "::efl::eo::concrete const& _get_concrete() const { return *this; }\n" << scope_tab << "::efl::eo::concrete& _get_concrete() { return *this; }\n" ).generate(sink, attributes::unused, context)) return false; -- 2.7.4