From b809470d41fe1e428ec27a0821a004fcbc5832ed Mon Sep 17 00:00:00 2001 From: Lauro Moura Date: Tue, 5 Nov 2019 11:59:46 -0300 Subject: [PATCH] eolian: Imply @no_unused if @move in return. Summary: This makes sure the user is warned if it ignores a return value that could potentially be a memory leak. This also makes possible to use `value {}` blocks with `@move` instead of value-less properties with `@no_unused`. Also removed the `@move` from canvas_text_async_layout as it is ignored in the only place it is used. Reviewers: q66 Reviewed By: q66 Subscribers: #reviewers, #committers, bu5hm4n, felipealmeida, cedric, segfaultxavi Tags: #efl Differential Revision: https://phab.enlightenment.org/D10601 --- src/bin/eolian/headers.c | 2 +- src/lib/evas/canvas/efl_canvas_text.eo | 2 +- src/tests/efl_mono/dummy_test_object.c | 12 +++++++++--- src/tests/eolian/data/function_as_argument_ref.h | 2 +- src/tests/eolian/data/struct_ref.h | 2 +- src/tests/eolian/data/typedef_ref.h | 2 +- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/bin/eolian/headers.c b/src/bin/eolian/headers.c index 3a84e0a..ead40d8 100644 --- a/src/bin/eolian/headers.c +++ b/src/bin/eolian/headers.c @@ -168,7 +168,7 @@ _gen_func(const Eolian_State *state, const Eolian_Function *fid, eina_strbuf_append(buf, "void"); eina_strbuf_append(buf, ")"); - if (!eolian_function_return_allow_unused(fid, ftype)) + if (!eolian_function_return_allow_unused(fid, ftype) || return_move) { if (!flagbuf) flagbuf = eina_strbuf_new(); diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo index 511dec2..9bac9fe 100644 --- a/src/lib/evas/canvas/efl_canvas_text.eo +++ b/src/lib/evas/canvas/efl_canvas_text.eo @@ -222,7 +222,7 @@ class @beta Efl.Canvas.Text extends Efl.Canvas.Object implements Efl.Text, Once layout is complete, the result is returned as @Eina.Rect, with w, h fields set. ]] - return: future @move; [[Future for layout result]] + return: future; [[Future for layout result]] } } implements { diff --git a/src/tests/efl_mono/dummy_test_object.c b/src/tests/efl_mono/dummy_test_object.c index 54a2c2c..fb87a8c 100644 --- a/src/tests/efl_mono/dummy_test_object.c +++ b/src/tests/efl_mono/dummy_test_object.c @@ -217,12 +217,16 @@ void _dummy_test_object_out_own_string(EINA_UNUSED Eo *obj, EINA_UNUSED Dummy_Te void _dummy_test_object_call_in_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, const char *str) { - dummy_test_object_in_string(obj, str); + char *ptr = dummy_test_object_in_string(obj, str); + if (ptr) + free(ptr); } void _dummy_test_object_call_in_own_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, char *str) { - dummy_test_object_in_own_string(obj, str); + char *ptr = dummy_test_object_in_own_string(obj, str); + if (ptr) + free(ptr); } const char *_dummy_test_object_call_return_string(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd) @@ -252,7 +256,9 @@ char *_dummy_test_object_call_out_own_string(Eo *obj, EINA_UNUSED Dummy_Test_Obj // Stringshare virtual test helpers void _dummy_test_object_call_in_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Stringshare *str) { - dummy_test_object_in_stringshare(obj, str); + Eina_Stringshare *ptr = dummy_test_object_in_stringshare(obj, str); + if (ptr) + eina_stringshare_del(ptr); } void _dummy_test_object_call_in_own_stringshare(Eo *obj, EINA_UNUSED Dummy_Test_Object_Data *pd, Eina_Stringshare *str) diff --git a/src/tests/eolian/data/function_as_argument_ref.h b/src/tests/eolian/data/function_as_argument_ref.h index 2b677ae..b93a3e0 100644 --- a/src/tests/eolian/data/function_as_argument_ref.h +++ b/src/tests/eolian/data/function_as_argument_ref.h @@ -19,6 +19,6 @@ EWAPI const Efl_Class *function_as_argument_class_get(void); EOAPI void function_as_argument_set_cb(Eo *obj, void *cb_data, SimpleFunc cb, Eina_Free_Cb cb_free_cb); -EOAPI char *function_as_argument_call_cb(Eo *obj, int a, double b) EFL_TRANSFER_OWNERSHIP; +EOAPI char *function_as_argument_call_cb(Eo *obj, int a, double b) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT; #endif diff --git a/src/tests/eolian/data/struct_ref.h b/src/tests/eolian/data/struct_ref.h index ddcb20a..ec7ea52 100644 --- a/src/tests/eolian/data/struct_ref.h +++ b/src/tests/eolian/data/struct_ref.h @@ -38,7 +38,7 @@ EWAPI const Efl_Class *struct_class_get(void); * * @ingroup Struct */ -EOAPI char *struct_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP; +EOAPI char *struct_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT; EOAPI Named *struct_bar(Eo *obj); diff --git a/src/tests/eolian/data/typedef_ref.h b/src/tests/eolian/data/typedef_ref.h index 524f803..dd3f3ad 100644 --- a/src/tests/eolian/data/typedef_ref.h +++ b/src/tests/eolian/data/typedef_ref.h @@ -34,6 +34,6 @@ typedef enum EWAPI const Efl_Class *typedef_class_get(void); -EOAPI char *typedef_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP; +EOAPI char *typedef_foo(Eo *obj, int idx) EFL_TRANSFER_OWNERSHIP EINA_WARN_UNUSED_RESULT; #endif -- 2.7.4