q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=1bcca58d826a2d8fcd88b529b8e5863c6f54ec47
commit 1bcca58d826a2d8fcd88b529b8e5863c6f54ec47 Author: Daniel Kolesa <d.kol...@samsung.com> Date: Thu Aug 1 16:47:52 2019 +0200 eolian: disallow ptr() in containers in stable API --- src/lib/efl/interfaces/efl_gfx_types.eot | 4 ++-- src/lib/eolian/database_validate.c | 7 +++++++ src/tests/eolian/data/complex_type.eo | 4 +--- src/tests/eolian/data/owning.eo | 8 ++------ src/tests/eolian/data/owning_ref.c | 4 ++-- src/tests/eolian/data/typedef.eo | 4 +--- src/tests/eolian/eolian_parsing.c | 4 ++-- 7 files changed, 17 insertions(+), 18 deletions(-) diff --git a/src/lib/efl/interfaces/efl_gfx_types.eot b/src/lib/efl/interfaces/efl_gfx_types.eot index 4792820083..64bde5a6c7 100644 --- a/src/lib/efl/interfaces/efl_gfx_types.eot +++ b/src/lib/efl/interfaces/efl_gfx_types.eot @@ -161,8 +161,8 @@ enum Efl.Gfx.Change_Flag struct Efl.Gfx.Event.Render_Post { [[Data sent along a "render,post" event, after a frame has been rendered.]] - updated_area: list<ptr(Eina.Rect)>; [[A list of rectangles that were - updated in the canvas.]] + updated_area: list<Eina.Rect>; [[A list of rectangles that were + updated in the canvas.]] } enum Efl.Gfx.Hint_Aspect diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c index ff36d71a3e..c5945724ef 100644 --- a/src/lib/eolian/database_validate.c +++ b/src/lib/eolian/database_validate.c @@ -255,6 +255,13 @@ _validate_type(Validate_State *vals, Eolian_Type *tp) /* validate types in brackets so transitive fields get written */ while (itp) { + if (vals->stable && itp->is_ptr) + { + _eo_parser_log(&itp->base, + "pointer types not allowed in '%s' in stable context", + tp->base.name); + return EINA_FALSE; + } if (!_validate_type(vals, itp)) return EINA_FALSE; itp = itp->next_type; diff --git a/src/tests/eolian/data/complex_type.eo b/src/tests/eolian/data/complex_type.eo index f2c03676e0..1c8c30823a 100644 --- a/src/tests/eolian/data/complex_type.eo +++ b/src/tests/eolian/data/complex_type.eo @@ -1,10 +1,8 @@ -struct @free(efl_del) @extern Eo; - class Complex_Type { methods { @property a { set { - return: list<array<ptr(Eo) @owned> > @owned; + return: list<array<strbuf @owned> > @owned; } get { } diff --git a/src/tests/eolian/data/owning.eo b/src/tests/eolian/data/owning.eo index ae926a5e35..e0c97c52fe 100644 --- a/src/tests/eolian/data/owning.eo +++ b/src/tests/eolian/data/owning.eo @@ -1,7 +1,3 @@ -struct @free(free_a) Test.A { - t : int; -} - class Owning { methods { test1 { @@ -14,8 +10,8 @@ class Owning { } test2 { params { - test1 : list<ptr(Test.A) @owned> @owned; - test2 : hash<string, ptr(Test.A) @owned> @owned; + test1 : list<array<int> @owned> @owned; + test2 : hash<string, array<int> @owned> @owned; } } diff --git a/src/tests/eolian/data/owning_ref.c b/src/tests/eolian/data/owning_ref.c index 10a7f10a13..6c9b30debe 100644 --- a/src/tests/eolian/data/owning_ref.c +++ b/src/tests/eolian/data/owning_ref.c @@ -18,10 +18,10 @@ void _owning_test2(Eo *obj, Owning_Data *pd, Eina_List *test1, Eina_Hash *test2) static void _owning_test2_ownership_fallback(Eina_List *test1, Eina_Hash *test2) { - Test_A *test1_iter; + Eina_Array *test1_iter; EINA_LIST_FREE(test1,test1_iter) { - free_a(test1_iter); + eina_array_free(test1_iter); } eina_hash_free_cb_set(test2,NULL); eina_hash_free(test2); diff --git a/src/tests/eolian/data/typedef.eo b/src/tests/eolian/data/typedef.eo index 31bf9c627c..ab4d991954 100644 --- a/src/tests/eolian/data/typedef.eo +++ b/src/tests/eolian/data/typedef.eo @@ -1,7 +1,5 @@ -struct @extern Eo; - type Evas.Coord: int; /* Simple type definition */ -type List_Objects: list<ptr(Eo)>; /* A little more complex */ +type List_Objects: list<Typedef>; /* A little more complex */ type Evas.Coord2: Evas.Coord; type Evas.Coord3: Evas.Coord2; diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c index ccabb263fd..f1294b720c 100644 --- a/src/tests/eolian/eolian_parsing.c +++ b/src/tests/eolian/eolian_parsing.c @@ -383,7 +383,7 @@ EFL_START_TEST(eolian_typedef) fail_if(!(type = eolian_type_base_type_get(type))); fail_if(!!eolian_type_next_type_get(type)); fail_if(!(type_name = eolian_type_c_type_get(type, EOLIAN_C_TYPE_DEFAULT))); - fail_if(strcmp(type_name, "Eo *")); + fail_if(strcmp(type_name, "Typedef *")); fail_if(eolian_type_is_owned(type)); eina_stringshare_del(type_name); @@ -446,7 +446,7 @@ EFL_START_TEST(eolian_complex_type) fail_if(!!eolian_type_next_type_get(type)); fail_if(!(type_name = eolian_type_c_type_get(type, EOLIAN_C_TYPE_DEFAULT))); fail_if(!eolian_type_is_owned(type)); - fail_if(strcmp(type_name, "Eo *")); + fail_if(strcmp(type_name, "Eina_Strbuf *")); eina_stringshare_del(type_name); /* Properties parameter type */ fail_if(!(iter = eolian_property_values_get(fid, EOLIAN_PROP_GET))); --