diff options
author | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2020-03-16 09:04:47 +0100 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2020-03-17 12:11:20 +0100 |
commit | 847bfc88529b9e4a93adf10ff883b8ad21ae74ee (patch) | |
tree | 796c851d7b652b74d7882c9c04e03b57b9983ab8 | |
parent | 01169be6450dc6cd6c82f2ef761e35790d230d8d (diff) | |
download | efl-847bfc88529b9e4a93adf10ff883b8ad21ae74ee.tar.gz |
wip
-rw-r--r-- | src/lib/eo/eo.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lib/eo/eo.c b/src/lib/eo/eo.c index 6d77ed0780..8a272fccca 100644 --- a/src/lib/eo/eo.c +++ b/src/lib/eo/eo.c @@ -1156,7 +1156,7 @@ efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_ for (int i = 0; klass->extensions[i]; i++) { const _Efl_Class *ext = klass->extensions[i]; - /* In case of a none regular APIs, merge in APIs or take over the owned table */ + /* In case of a none regular APIs, merge in the APIs specified on them, *or* simply copy the used vtables from these types */ if (ext->desc->type == EFL_CLASS_TYPE_MIXIN || ext->desc->type == EFL_CLASS_TYPE_INTERFACE) { _vtable_merge_in_no_reg2(ext->base_id2, &klass->vtable2, &ext->vtable2, hitmap); @@ -1178,6 +1178,7 @@ efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_ if (klass->vtable2.chain[class_id].count == 0) { const _Efl_Class *required_klass = _eo_classes[class_id]; + //in case this type is not already inherited, error on everything that is not a mixin if (klass->desc->type != EFL_CLASS_TYPE_MIXIN) { ERR("There is an API implemented, whoms type is not part of this class. %s vs. %s", klass->desc->name, required_klass->desc->name); @@ -1189,6 +1190,7 @@ efl_class_functions_set(const Efl_Class *klass_id, const Efl_Object_Ops *object_ _vtable_prepare_empty_node2(&klass->vtable2, required_klass->vtable2.chain[class_id].count, class_id); } } + //in case we are having a function overwrite for a specific type, copy the relevant vtable if (!hitmap[class_id]) { const Eo_Vtable_Node node = klass->vtable2.chain[class_id]; |