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
This commit is contained in:
Lauro Moura 2018-12-14 18:52:56 -02:00 committed by Vitor Sousa
parent a83c3cdba4
commit dd5c230353
7 changed files with 42 additions and 5 deletions

View File

@ -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 \

View File

@ -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)

View File

@ -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);
}

View File

@ -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"

View File

@ -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 {

View File

@ -0,0 +1,3 @@
interface Generic_Interface
{
}

View File

@ -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',