diff options
author | Jean-Philippe Andre <jp.andre@samsung.com> | 2017-11-22 20:25:29 +0900 |
---|---|---|
committer | Jean-Philippe Andre <jp.andre@samsung.com> | 2017-12-05 10:14:03 +0900 |
commit | d887c4de52ed74b33850ece7ca9ad6477aa48712 (patch) | |
tree | 87f622501594e54a1c79ca2e1fce1123c5b76720 | |
parent | a787c3cc07b8ddcc3288091a9d1b9e0eb06582bc (diff) |
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 :)
-rw-r--r-- | src/examples/elementary/calendar_cxx_example_02.cc | 2 | ||||
-rw-r--r-- | src/lib/eolian_cxx/grammar/class_definition.hpp | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/src/examples/elementary/calendar_cxx_example_02.cc b/src/examples/elementary/calendar_cxx_example_02.cc index fd001f7184..047f5841f8 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 | |||
41 | 41 | ||
42 | void destroy() { | 42 | void destroy() { |
43 | // FIXME: need del() function and no error on unref(). | 43 | // FIXME: need del() function and no error on unref(). |
44 | ::efl_allow_parent_unref_set(m_win._eo_ptr(), true); | 44 | ::efl_allow_parent_unref_set(m_win, true); |
45 | m_win = nullptr; | 45 | m_win = nullptr; |
46 | } | 46 | } |
47 | 47 | ||
diff --git a/src/lib/eolian_cxx/grammar/class_definition.hpp b/src/lib/eolian_cxx/grammar/class_definition.hpp index e326c9d0e3..1e21336d9f 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 | |||
211 | 211 | ||
212 | // EXPERIMENTAL | 212 | // EXPERIMENTAL |
213 | if(!as_generator("#ifdef EFL_CXXPERIMENTAL\n").generate(sink, attributes::unused, context)) return false; | 213 | if(!as_generator("#ifdef EFL_CXXPERIMENTAL\n").generate(sink, attributes::unused, context)) return false; |
214 | // For easy wref, operator-> in wref needs to also return a pointer type | ||
214 | if(!as_generator( scope_tab << "const " << string << "* operator->() const { return this; }\n" | 215 | if(!as_generator( scope_tab << "const " << string << "* operator->() const { return this; }\n" |
215 | ).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false; | 216 | ).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false; |
216 | if(!as_generator( scope_tab << string << "* operator->() { return this; }\n" | 217 | if(!as_generator( scope_tab << string << "* operator->() { return this; }\n" |
217 | ).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false; | 218 | ).generate(sink, std::make_tuple(cls.cxx_name, cls.cxx_name), context)) return false; |
219 | // For easy interfacing with C: no need to use _eo_ptr() | ||
220 | if(!as_generator( scope_tab << "operator Eo*() const { return _eo_ptr(); }\n" | ||
221 | ).generate(sink, attributes::unused, context)) return false; | ||
218 | if(!as_generator("#endif \n").generate(sink, attributes::unused, context)) return false; | 222 | if(!as_generator("#endif \n").generate(sink, attributes::unused, context)) return false; |
219 | 223 | ||
224 | // eo_concrete | ||
220 | if(!as_generator( scope_tab << "::efl::eo::concrete const& _get_concrete() const { return *this; }\n" | 225 | if(!as_generator( scope_tab << "::efl::eo::concrete const& _get_concrete() const { return *this; }\n" |
221 | << scope_tab << "::efl::eo::concrete& _get_concrete() { return *this; }\n" | 226 | << scope_tab << "::efl::eo::concrete& _get_concrete() { return *this; }\n" |
222 | ).generate(sink, attributes::unused, context)) return false; | 227 | ).generate(sink, attributes::unused, context)) return false; |