vitorsousa pushed a commit to branch master.

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

commit dd5c23035312f5da3358cb30ec9359e40314e0ad
Author: Lauro Moura <[email protected]>
Date:   Fri Dec 14 18:52:56 2018 -0200

    eolian-cxx: Add parent/extensions information to klass_def
    
    Summary: Following new Eolian api.
    
    Test Plan: Run newly added test
    
    Reviewers: vitor.sousa, felipealmeida
    
    Reviewed By: vitor.sousa
    
    Subscribers: cedric, #reviewers, #committers
    
    Tags: #efl
    
    Differential Revision: https://phab.enlightenment.org/D7459
---
 src/Makefile_Eolian_Cxx.am                      |  9 +++++++--
 src/lib/eolian_cxx/grammar/klass_def.hpp        | 12 ++++++++++--
 src/tests/eolian_cxx/eolian_cxx_test_binding.cc | 18 ++++++++++++++++++
 src/tests/eolian_cxx/generic.c                  |  2 ++
 src/tests/eolian_cxx/generic.eo                 |  2 +-
 src/tests/eolian_cxx/generic_interface.eo       |  3 +++
 src/tests/eolian_cxx/meson.build                |  1 +
 7 files changed, 42 insertions(+), 5 deletions(-)

diff --git a/src/Makefile_Eolian_Cxx.am b/src/Makefile_Eolian_Cxx.am
index be0cbaf501..9b6c32eb05 100644
--- a/src/Makefile_Eolian_Cxx.am
+++ b/src/Makefile_Eolian_Cxx.am
@@ -110,14 +110,14 @@ endif
 
 
tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-name1_name2_type_generation.$(OBJEXT):
 tests/eolian_cxx/name1_name2_type_generation.eo.h 
tests/eolian_cxx/name1_name2_type_generation.eo.c
 
tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-eolian_cxx_test_inheritance.$(OBJEXT):
 tests/eolian_cxx/simple.eo.hh tests/eolian_cxx/simple.eo.h
-tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-eolian_cxx_test_binding.$(OBJEXT):
 tests/eolian_cxx/generic.eo.hh tests/eolian_cxx/generic.eo.h 
tests/eolian_cxx/name1_name2_type_generation.eo.hh 
tests/eolian_cxx/name1_name2_type_generation.eo.h 
tests/eolian_cxx/name1_name2_type_generation.eo.c
+tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-eolian_cxx_test_binding.$(OBJEXT):
 tests/eolian_cxx/generic.eo.hh tests/eolian_cxx/generic.eo.h 
tests/eolian_cxx/generic.eo.c tests/eolian_cxx/generic_interface.eo.hh 
tests/eolian_cxx/generic_interface.eo.h tests/eolian_cxx/generic_interface.eo.c 
tests/eolian_cxx/name1_name2_type_generation.eo.hh 
tests/eolian_cxx/name1_name2_type_generation.eo.h 
tests/eolian_cxx/name1_name2_type_generation.eo.c
 
tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-eolian_cxx_test_address_of.$(OBJEXT):
 tests/eolian_cxx/a.eo.hh tests/eolian_cxx/b.eo.hh tests/eolian_cxx/c.eo.hh 
tests/eolian_cxx/d.eo.hh tests/eolian_cxx/a.eo.h tests/eolian_cxx/b.eo.h 
tests/eolian_cxx/c.eo.h tests/eolian_cxx/d.eo.h
 
tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-eolian_cxx_test_cyclic.$(OBJEXT):
 tests/eolian_cxx/cyclic1.eo.hh tests/eolian_cxx/cyclic2.eo.hh 
tests/eolian_cxx/cyclic1.eo.c tests/eolian_cxx/cyclic2.eo.c 
tests/eolian_cxx/cyclic1.eo.h tests/eolian_cxx/cyclic2.eo.h
 
 
tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-eolian_cxx_test_wrapper.$(OBJEXT):
 tests/eolian_cxx/a.eo.h tests/eolian_cxx/a.eo.c tests/eolian_cxx/a.eo.hh
 
 tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-simple.$(OBJEXT): 
tests/eolian_cxx/simple.eo.c tests/eolian_cxx/simple.eo.h
-tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-generic.$(OBJEXT):
 tests/eolian_cxx/generic.eo.c tests/eolian_cxx/generic.eo.h
+tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-generic.$(OBJEXT):
 tests/eolian_cxx/generic.eo.c tests/eolian_cxx/generic.eo.h 
tests/eolian_cxx/generic_interface.eo.c tests/eolian_cxx/generic_interface.eo.h
 tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-a.$(OBJEXT): 
tests/eolian_cxx/a.eo.c tests/eolian_cxx/a.eo.h
 tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-b.$(OBJEXT): 
tests/eolian_cxx/b.eo.c tests/eolian_cxx/b.eo.h
 tests/eolian_cxx/$(TESTS_EOLIAN_CXX_OBJNAME)eolian_cxx_suite-c.$(OBJEXT): 
tests/eolian_cxx/c.eo.c tests/eolian_cxx/c.eo.h
@@ -138,6 +138,10 @@ tests/eolian_cxx/generic.eo.c \
 tests/eolian_cxx/generic.eo.h \
 tests/eolian_cxx/generic.eo.hh \
 tests/eolian_cxx/generic.eo.impl.hh \
+tests/eolian_cxx/generic_interface.eo.c \
+tests/eolian_cxx/generic_interface.eo.h \
+tests/eolian_cxx/generic_interface.eo.hh \
+tests/eolian_cxx/generic_interface.eo.impl.hh \
 tests/eolian_cxx/a.eo.hh tests/eolian_cxx/a.eo.impl.hh tests/eolian_cxx/a.eo.c 
tests/eolian_cxx/a.eo.h \
 tests/eolian_cxx/b.eo.hh tests/eolian_cxx/b.eo.impl.hh tests/eolian_cxx/b.eo.c 
tests/eolian_cxx/b.eo.h \
 tests/eolian_cxx/c.eo.hh tests/eolian_cxx/c.eo.impl.hh tests/eolian_cxx/c.eo.c 
tests/eolian_cxx/c.eo.h \
@@ -198,6 +202,7 @@ endif
 EXTRA_DIST2 += \
 tests/eolian_cxx/simple.eo \
 tests/eolian_cxx/generic.eo \
+tests/eolian_cxx/generic_interface.eo \
 tests/eolian_cxx/docs.eo \
 tests/eolian_cxx/a.eo \
 tests/eolian_cxx/b.eo \
diff --git a/src/lib/eolian_cxx/grammar/klass_def.hpp 
b/src/lib/eolian_cxx/grammar/klass_def.hpp
index 08240b6e28..ce54f35dc1 100644
--- a/src/lib/eolian_cxx/grammar/klass_def.hpp
+++ b/src/lib/eolian_cxx/grammar/klass_def.hpp
@@ -987,6 +987,9 @@ struct klass_def
   class_type type;
   std::vector<event_def> events;
   std::set<klass_name, compare_klass_name_by_name> immediate_inherits;
+  eina::optional<klass_name> parent;
+  std::set<klass_name, compare_klass_name_by_name> extensions;
+
   std::set<part_def> parts;
   Eolian_Unit const* unit;
 
@@ -1108,12 +1111,17 @@ struct klass_def
          } catch(std::exception const&) {}
        }
      if(::eolian_class_parent_get(klass))
-       immediate_inherits.insert({::eolian_class_parent_get(klass), {}});
+       {
+          parent = 
eina::optional<klass_name>({::eolian_class_parent_get(klass), {}});
+          immediate_inherits.insert(*parent);
+       }
      for(efl::eina::iterator<Eolian_Class const> inherit_iterator ( 
::eolian_class_extensions_get(klass))
            , inherit_last; inherit_iterator != inherit_last; 
++inherit_iterator)
        {
          Eolian_Class const* inherit = &*inherit_iterator;
-         immediate_inherits.insert({inherit, {}});
+         klass_name extension(inherit, {});
+         immediate_inherits.insert(extension);
+         extensions.insert(extension);
        }
      std::function<void(Eolian_Class const*)> inherit_algo =
        [&] (Eolian_Class const* inherit_klass)
diff --git a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc 
b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc
index 09834069c5..936687a288 100644
--- a/src/tests/eolian_cxx/eolian_cxx_test_binding.cc
+++ b/src/tests/eolian_cxx/eolian_cxx_test_binding.cc
@@ -292,6 +292,23 @@ EFL_START_TEST(eolian_cxx_test_properties)
 }
 EFL_END_TEST
 
+EFL_START_TEST(eolian_cxx_test_parent_extensions)
+{
+  efl::eolian::eolian_init eolian_init;
+  efl::eolian::eolian_state eolian_state;
+
+  klass_def cls = init_test_data("generic.eo", "Generic", eolian_state);
+
+  auto parent = cls.parent;
+  ck_assert(parent.is_engaged());
+  ck_assert_str_eq("Object", parent->eolian_name.c_str());
+
+  ck_assert_int_eq(1, cls.extensions.size());
+  auto extension = *cls.extensions.cbegin();
+  ck_assert_str_eq("Generic_Interface", extension.eolian_name.c_str());
+}
+EFL_END_TEST
+
 void
 eolian_cxx_test_binding(TCase* tc)
 {
@@ -303,4 +320,5 @@ eolian_cxx_test_binding(TCase* tc)
    tcase_add_test(tc, eolian_cxx_test_type_generation_optional);
    tcase_add_test(tc, eolian_cxx_test_type_callback);
    tcase_add_test(tc, eolian_cxx_test_properties);
+   tcase_add_test(tc, eolian_cxx_test_parent_extensions);
 }
diff --git a/src/tests/eolian_cxx/generic.c b/src/tests/eolian_cxx/generic.c
index f558208d4d..ee3a0c3e87 100644
--- a/src/tests/eolian_cxx/generic.c
+++ b/src/tests/eolian_cxx/generic.c
@@ -9,6 +9,7 @@
 #define GENERIC_PROTECTED
 
 #include "generic.eo.h"
+#include "generic_interface.eo.h"
 
 #include <check.h>
 
@@ -138,3 +139,4 @@ static void _generic_beta_method1(Eo *obj EINA_UNUSED, 
Generic_Data* pd EINA_UNU
 {
 }
 #include "generic.eo.c"
+#include "generic_interface.eo.c"
diff --git a/src/tests/eolian_cxx/generic.eo b/src/tests/eolian_cxx/generic.eo
index 6282cbaa95..7f367a975b 100644
--- a/src/tests/eolian_cxx/generic.eo
+++ b/src/tests/eolian_cxx/generic.eo
@@ -5,7 +5,7 @@ struct Generic.Event
   field2: list<ptr(int)>;
 }
 
-class Generic extends Efl.Object
+class Generic extends Efl.Object implements Generic_Interface
 {
    data: Generic_Data;
    methods {
diff --git a/src/tests/eolian_cxx/generic_interface.eo 
b/src/tests/eolian_cxx/generic_interface.eo
new file mode 100644
index 0000000000..9f11c1a73c
--- /dev/null
+++ b/src/tests/eolian_cxx/generic_interface.eo
@@ -0,0 +1,3 @@
+interface Generic_Interface
+{
+}
diff --git a/src/tests/eolian_cxx/meson.build b/src/tests/eolian_cxx/meson.build
index d93fe60c88..a3a0e5707f 100644
--- a/src/tests/eolian_cxx/meson.build
+++ b/src/tests/eolian_cxx/meson.build
@@ -34,6 +34,7 @@ pub_eo_files = [
   'cyclic2.eo',
   'docs.eo',
   'generic.eo',
+  'generic_interface.eo',
   'name1_name2_type_generation.eo',
   'name_name.eo',
   'ns_name.eo',

-- 


Reply via email to