diff options
author | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2015-05-20 17:03:14 +0100 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2015-05-20 17:03:37 +0100 |
commit | 5c199857c911c8b301b694ae9311685ae1ff121d (patch) | |
tree | 9e8dad9be8e48f80bd369d8197679d8e71bd171c | |
parent | c02bab4149b2f3984d0f7a0637003d2bcd62fabd (diff) |
eolian: distinguish between get/set for property keys/values retrieval
-rw-r--r-- | src/bin/eolian/eo_generator.c | 16 | ||||
-rw-r--r-- | src/bin/eolian/impl_generator.c | 6 | ||||
-rw-r--r-- | src/bin/eolian/legacy_generator.c | 12 | ||||
-rw-r--r-- | src/bindings/luajit/eolian.lua | 12 | ||||
-rw-r--r-- | src/lib/eolian/Eolian.h | 6 | ||||
-rw-r--r-- | src/lib/eolian/database_function_api.c | 13 | ||||
-rw-r--r-- | src/scripts/elua/modules/lualian.lua | 21 | ||||
-rw-r--r-- | src/tests/eolian/eolian_parsing.c | 8 |
8 files changed, 55 insertions, 39 deletions
diff --git a/src/bin/eolian/eo_generator.c b/src/bin/eolian/eo_generator.c index 508eff9a4a..90dfbc99c5 100644 --- a/src/bin/eolian/eo_generator.c +++ b/src/bin/eolian/eo_generator.c | |||
@@ -95,7 +95,7 @@ eo_fundef_generate(const Eolian_Class *class, const Eolian_Function *func, Eolia | |||
95 | rettypet = eolian_function_return_type_get(func, ftype); | 95 | rettypet = eolian_function_return_type_get(func, ftype); |
96 | if (ftype == EOLIAN_PROP_GET && !rettypet) | 96 | if (ftype == EOLIAN_PROP_GET && !rettypet) |
97 | { | 97 | { |
98 | itr = eolian_property_values_get(func); | 98 | itr = eolian_property_values_get(func, ftype); |
99 | /* We want to check if there is only one parameter */ | 99 | /* We want to check if there is only one parameter */ |
100 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) | 100 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) |
101 | { | 101 | { |
@@ -146,7 +146,7 @@ eo_fundef_generate(const Eolian_Class *class, const Eolian_Function *func, Eolia | |||
146 | Eina_Strbuf *str_retdesc = eina_strbuf_new(); | 146 | Eina_Strbuf *str_retdesc = eina_strbuf_new(); |
147 | Eina_Strbuf *str_typecheck = eina_strbuf_new(); | 147 | Eina_Strbuf *str_typecheck = eina_strbuf_new(); |
148 | 148 | ||
149 | itr = eolian_property_keys_get(func); | 149 | itr = eolian_property_keys_get(func, ftype); |
150 | EINA_ITERATOR_FOREACH(itr, data) | 150 | EINA_ITERATOR_FOREACH(itr, data) |
151 | { | 151 | { |
152 | Eolian_Function_Parameter *param = data; | 152 | Eolian_Function_Parameter *param = data; |
@@ -165,7 +165,7 @@ eo_fundef_generate(const Eolian_Class *class, const Eolian_Function *func, Eolia | |||
165 | 165 | ||
166 | if (!var_as_ret) | 166 | if (!var_as_ret) |
167 | { | 167 | { |
168 | itr = is_prop ? eolian_property_values_get(func) : eolian_function_parameters_get(func); | 168 | itr = is_prop ? eolian_property_values_get(func, ftype) : eolian_function_parameters_get(func); |
169 | EINA_ITERATOR_FOREACH(itr, data) | 169 | EINA_ITERATOR_FOREACH(itr, data) |
170 | { | 170 | { |
171 | Eolian_Function_Parameter *param = data; | 171 | Eolian_Function_Parameter *param = data; |
@@ -390,7 +390,7 @@ eo_bind_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, | |||
390 | add_star = EINA_TRUE; | 390 | add_star = EINA_TRUE; |
391 | if (!rettypet) | 391 | if (!rettypet) |
392 | { | 392 | { |
393 | itr = eolian_property_values_get(funcid); | 393 | itr = eolian_property_values_get(funcid, ftype); |
394 | /* We want to check if there is only one parameter */ | 394 | /* We want to check if there is only one parameter */ |
395 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) | 395 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) |
396 | { | 396 | { |
@@ -408,7 +408,7 @@ eo_bind_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, | |||
408 | suffix = "_set"; | 408 | suffix = "_set"; |
409 | } | 409 | } |
410 | 410 | ||
411 | itr = eolian_property_keys_get(funcid); | 411 | itr = eolian_property_keys_get(funcid, ftype); |
412 | EINA_ITERATOR_FOREACH(itr, data) | 412 | EINA_ITERATOR_FOREACH(itr, data) |
413 | { | 413 | { |
414 | Eolian_Function_Parameter *param = data; | 414 | Eolian_Function_Parameter *param = data; |
@@ -426,7 +426,7 @@ eo_bind_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, | |||
426 | eina_iterator_free(itr); | 426 | eina_iterator_free(itr); |
427 | if (!var_as_ret) | 427 | if (!var_as_ret) |
428 | { | 428 | { |
429 | itr = is_prop ? eolian_property_values_get(funcid) : eolian_function_parameters_get(funcid); | 429 | itr = is_prop ? eolian_property_values_get(funcid, ftype) : eolian_function_parameters_get(funcid); |
430 | EINA_ITERATOR_FOREACH(itr, data) | 430 | EINA_ITERATOR_FOREACH(itr, data) |
431 | { | 431 | { |
432 | Eolian_Function_Parameter *param = data; | 432 | Eolian_Function_Parameter *param = data; |
@@ -559,13 +559,13 @@ eo_bind_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, | |||
559 | Eina_Strbuf *eo_func_decl = eina_strbuf_new(); | 559 | Eina_Strbuf *eo_func_decl = eina_strbuf_new(); |
560 | Eina_Bool has_params = EINA_FALSE; | 560 | Eina_Bool has_params = EINA_FALSE; |
561 | 561 | ||
562 | itr = eolian_property_keys_get(funcid); | 562 | itr = eolian_property_keys_get(funcid, ftype); |
563 | has_params |= (eina_iterator_next(itr, &data)); | 563 | has_params |= (eina_iterator_next(itr, &data)); |
564 | eina_iterator_free(itr); | 564 | eina_iterator_free(itr); |
565 | 565 | ||
566 | if (!has_params && !var_as_ret) | 566 | if (!has_params && !var_as_ret) |
567 | { | 567 | { |
568 | itr = is_prop ? eolian_property_values_get(funcid) : eolian_function_parameters_get(funcid); | 568 | itr = is_prop ? eolian_property_values_get(funcid, ftype) : eolian_function_parameters_get(funcid); |
569 | has_params |= (eina_iterator_next(itr, &data)); | 569 | has_params |= (eina_iterator_next(itr, &data)); |
570 | eina_iterator_free(itr); | 570 | eina_iterator_free(itr); |
571 | } | 571 | } |
diff --git a/src/bin/eolian/impl_generator.c b/src/bin/eolian/impl_generator.c index 490de91aec..5891ae0161 100644 --- a/src/bin/eolian/impl_generator.c +++ b/src/bin/eolian/impl_generator.c | |||
@@ -19,7 +19,7 @@ _params_generate(const Eolian_Function *foo, Eolian_Function_Type ftype, Eina_Bo | |||
19 | Eina_Bool is_prop = (ftype == EOLIAN_PROP_GET || ftype == EOLIAN_PROP_SET); | 19 | Eina_Bool is_prop = (ftype == EOLIAN_PROP_GET || ftype == EOLIAN_PROP_SET); |
20 | eina_strbuf_reset(params); | 20 | eina_strbuf_reset(params); |
21 | eina_strbuf_reset(short_params); | 21 | eina_strbuf_reset(short_params); |
22 | itr = eolian_property_keys_get(foo); | 22 | itr = eolian_property_keys_get(foo, ftype); |
23 | EINA_ITERATOR_FOREACH(itr, param) | 23 | EINA_ITERATOR_FOREACH(itr, param) |
24 | { | 24 | { |
25 | const Eolian_Type *ptypet = eolian_parameter_type_get(param); | 25 | const Eolian_Type *ptypet = eolian_parameter_type_get(param); |
@@ -43,7 +43,7 @@ _params_generate(const Eolian_Function *foo, Eolian_Function_Type ftype, Eina_Bo | |||
43 | if (!var_as_ret) | 43 | if (!var_as_ret) |
44 | { | 44 | { |
45 | Eina_Bool add_star = (ftype == EOLIAN_PROP_GET); | 45 | Eina_Bool add_star = (ftype == EOLIAN_PROP_GET); |
46 | itr = is_prop ? eolian_property_values_get(foo) : eolian_function_parameters_get(foo); | 46 | itr = is_prop ? eolian_property_values_get(foo, ftype) : eolian_function_parameters_get(foo); |
47 | EINA_ITERATOR_FOREACH(itr, param) | 47 | EINA_ITERATOR_FOREACH(itr, param) |
48 | { | 48 | { |
49 | const Eolian_Type *ptypet = eolian_parameter_type_get(param); | 49 | const Eolian_Type *ptypet = eolian_parameter_type_get(param); |
@@ -148,7 +148,7 @@ _prototype_generate(const Eolian_Function *foo, Eolian_Function_Type ftype, Eina | |||
148 | const Eolian_Type *rettypet = eolian_function_return_type_get(foo, ftype); | 148 | const Eolian_Type *rettypet = eolian_function_return_type_get(foo, ftype); |
149 | if (ftype == EOLIAN_PROP_GET && !rettypet) | 149 | if (ftype == EOLIAN_PROP_GET && !rettypet) |
150 | { | 150 | { |
151 | Eina_Iterator *itr = eolian_property_values_get(foo); | 151 | Eina_Iterator *itr = eolian_property_values_get(foo, ftype); |
152 | void *data, *data2; | 152 | void *data, *data2; |
153 | /* We want to check if there is only one parameter */ | 153 | /* We want to check if there is only one parameter */ |
154 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) | 154 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) |
diff --git a/src/bin/eolian/legacy_generator.c b/src/bin/eolian/legacy_generator.c index 20af6d5f0e..b4f31f1270 100644 --- a/src/bin/eolian/legacy_generator.c +++ b/src/bin/eolian/legacy_generator.c | |||
@@ -72,7 +72,7 @@ _eapi_decl_func_generate(const Eolian_Class *class, const Eolian_Function *funci | |||
72 | add_star = EINA_TRUE; | 72 | add_star = EINA_TRUE; |
73 | if (!rettypet) | 73 | if (!rettypet) |
74 | { | 74 | { |
75 | itr = eolian_property_values_get(funcid); | 75 | itr = eolian_property_values_get(funcid, ftype); |
76 | /* We want to check if there is only one parameter */ | 76 | /* We want to check if there is only one parameter */ |
77 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) | 77 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) |
78 | { | 78 | { |
@@ -114,7 +114,7 @@ _eapi_decl_func_generate(const Eolian_Class *class, const Eolian_Function *funci | |||
114 | eina_strbuf_replace_all(fbody, "@#desc", eina_strbuf_string_get(linedesc)); | 114 | eina_strbuf_replace_all(fbody, "@#desc", eina_strbuf_string_get(linedesc)); |
115 | eina_strbuf_free(linedesc); | 115 | eina_strbuf_free(linedesc); |
116 | 116 | ||
117 | itr = eolian_property_keys_get(funcid); | 117 | itr = eolian_property_keys_get(funcid, ftype); |
118 | EINA_ITERATOR_FOREACH(itr, data) | 118 | EINA_ITERATOR_FOREACH(itr, data) |
119 | { | 119 | { |
120 | Eolian_Function_Parameter *param = data; | 120 | Eolian_Function_Parameter *param = data; |
@@ -143,7 +143,7 @@ _eapi_decl_func_generate(const Eolian_Class *class, const Eolian_Function *funci | |||
143 | eina_iterator_free(itr); | 143 | eina_iterator_free(itr); |
144 | if (!var_as_ret) | 144 | if (!var_as_ret) |
145 | { | 145 | { |
146 | itr = is_prop ? eolian_property_values_get(funcid) : eolian_function_parameters_get(funcid); | 146 | itr = is_prop ? eolian_property_values_get(funcid, ftype) : eolian_function_parameters_get(funcid); |
147 | EINA_ITERATOR_FOREACH(itr, data) | 147 | EINA_ITERATOR_FOREACH(itr, data) |
148 | { | 148 | { |
149 | Eolian_Function_Parameter *param = data; | 149 | Eolian_Function_Parameter *param = data; |
@@ -242,7 +242,7 @@ _eapi_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, Eo | |||
242 | add_star = EINA_TRUE; | 242 | add_star = EINA_TRUE; |
243 | if (!rettypet) | 243 | if (!rettypet) |
244 | { | 244 | { |
245 | itr = eolian_property_values_get(funcid); | 245 | itr = eolian_property_values_get(funcid, ftype); |
246 | /* We want to check if there is only one parameter */ | 246 | /* We want to check if there is only one parameter */ |
247 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) | 247 | if (eina_iterator_next(itr, &data) && !eina_iterator_next(itr, &data2)) |
248 | { | 248 | { |
@@ -286,7 +286,7 @@ _eapi_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, Eo | |||
286 | 286 | ||
287 | tmpstr[0] = '\0'; | 287 | tmpstr[0] = '\0'; |
288 | 288 | ||
289 | itr = eolian_property_keys_get(funcid); | 289 | itr = eolian_property_keys_get(funcid, ftype); |
290 | EINA_ITERATOR_FOREACH(itr, data) | 290 | EINA_ITERATOR_FOREACH(itr, data) |
291 | { | 291 | { |
292 | Eolian_Function_Parameter *param = data; | 292 | Eolian_Function_Parameter *param = data; |
@@ -304,7 +304,7 @@ _eapi_func_generate(const Eolian_Class *class, const Eolian_Function *funcid, Eo | |||
304 | eina_iterator_free(itr); | 304 | eina_iterator_free(itr); |
305 | if (!var_as_ret) | 305 | if (!var_as_ret) |
306 | { | 306 | { |
307 | itr = is_prop ? eolian_property_values_get(funcid) : eolian_function_parameters_get(funcid); | 307 | itr = is_prop ? eolian_property_values_get(funcid, ftype) : eolian_function_parameters_get(funcid); |
308 | EINA_ITERATOR_FOREACH(itr, data) | 308 | EINA_ITERATOR_FOREACH(itr, data) |
309 | { | 309 | { |
310 | Eolian_Function_Parameter *param = data; | 310 | Eolian_Function_Parameter *param = data; |
diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index f9f616867d..d806f4aa98 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua | |||
@@ -214,8 +214,8 @@ ffi.cdef [[ | |||
214 | Eina_Bool eolian_function_is_class(const Eolian_Function *function_id); | 214 | Eina_Bool eolian_function_is_class(const Eolian_Function *function_id); |
215 | Eina_Bool eolian_function_is_c_only(const Eolian_Function *function_id); | 215 | Eina_Bool eolian_function_is_c_only(const Eolian_Function *function_id); |
216 | const Eolian_Function_Parameter *eolian_function_parameter_get_by_name(const Eolian_Function *function_id, const char *param_name); | 216 | const Eolian_Function_Parameter *eolian_function_parameter_get_by_name(const Eolian_Function *function_id, const char *param_name); |
217 | Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id); | 217 | Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype); |
218 | Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id); | 218 | Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype); |
219 | Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *function_id); | 219 | Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *function_id); |
220 | Eolian_Parameter_Dir eolian_parameter_direction_get(const Eolian_Function_Parameter *param); | 220 | Eolian_Parameter_Dir eolian_parameter_direction_get(const Eolian_Function_Parameter *param); |
221 | const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Parameter *param); | 221 | const Eolian_Type *eolian_parameter_type_get(const Eolian_Function_Parameter *param); |
@@ -677,14 +677,14 @@ M.Function = ffi.metatype("Eolian_Function", { | |||
677 | return v | 677 | return v |
678 | end, | 678 | end, |
679 | 679 | ||
680 | property_keys_get = function(self) | 680 | property_keys_get = function(self, ftype) |
681 | return Ptr_Iterator("const Eolian_Function_Parameter*", | 681 | return Ptr_Iterator("const Eolian_Function_Parameter*", |
682 | eolian.eolian_property_keys_get(self)) | 682 | eolian.eolian_property_keys_get(self, ftype)) |
683 | end, | 683 | end, |
684 | 684 | ||
685 | property_values_get = function(self) | 685 | property_values_get = function(self, ftype) |
686 | return Ptr_Iterator("const Eolian_Function_Parameter*", | 686 | return Ptr_Iterator("const Eolian_Function_Parameter*", |
687 | eolian.eolian_property_values_get(self)) | 687 | eolian.eolian_property_values_get(self, ftype)) |
688 | end, | 688 | end, |
689 | 689 | ||
690 | parameters_get = function(self) | 690 | parameters_get = function(self) |
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index 7ee02376c7..531be96727 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h | |||
@@ -926,21 +926,23 @@ EAPI Eina_Iterator *eolian_function_parameters_get(const Eolian_Function *functi | |||
926 | * @brief Returns an iterator to the keys params of a given function. | 926 | * @brief Returns an iterator to the keys params of a given function. |
927 | * | 927 | * |
928 | * @param[in] function_id Id of the function | 928 | * @param[in] function_id Id of the function |
929 | * @param[in] ftype The function type, for property get/set distinction. | ||
929 | * @return the iterator | 930 | * @return the iterator |
930 | * | 931 | * |
931 | * @ingroup Eolian | 932 | * @ingroup Eolian |
932 | */ | 933 | */ |
933 | EAPI Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id); | 934 | EAPI Eina_Iterator *eolian_property_keys_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype); |
934 | 935 | ||
935 | /* | 936 | /* |
936 | * @brief Returns an iterator to the values params of a given function. | 937 | * @brief Returns an iterator to the values params of a given function. |
937 | * | 938 | * |
938 | * @param[in] function_id Id of the function | 939 | * @param[in] function_id Id of the function |
940 | * @param[in] ftype The function type, for property get/set distinction. | ||
939 | * @return the iterator | 941 | * @return the iterator |
940 | * | 942 | * |
941 | * @ingroup Eolian | 943 | * @ingroup Eolian |
942 | */ | 944 | */ |
943 | EAPI Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id); | 945 | EAPI Eina_Iterator *eolian_property_values_get(const Eolian_Function *foo_id, Eolian_Function_Type ftype); |
944 | 946 | ||
945 | /* | 947 | /* |
946 | * @brief Get direction of a parameter | 948 | * @brief Get direction of a parameter |
diff --git a/src/lib/eolian/database_function_api.c b/src/lib/eolian/database_function_api.c index d29b9d4304..08a8173729 100644 --- a/src/lib/eolian/database_function_api.c +++ b/src/lib/eolian/database_function_api.c | |||
@@ -178,22 +178,29 @@ eolian_function_parameter_get_by_name(const Eolian_Function *fid, const char *pa | |||
178 | } | 178 | } |
179 | 179 | ||
180 | EAPI Eina_Iterator * | 180 | EAPI Eina_Iterator * |
181 | eolian_property_keys_get(const Eolian_Function *fid) | 181 | eolian_property_keys_get(const Eolian_Function *fid, Eolian_Function_Type ftype) |
182 | { | 182 | { |
183 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL); | 183 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL); |
184 | if (ftype != EOLIAN_PROP_GET && ftype != EOLIAN_PROP_SET) | ||
185 | return NULL; | ||
184 | return (fid->keys ? eina_list_iterator_new(fid->keys) : NULL); | 186 | return (fid->keys ? eina_list_iterator_new(fid->keys) : NULL); |
185 | } | 187 | } |
186 | 188 | ||
187 | EAPI Eina_Iterator * | 189 | EAPI Eina_Iterator * |
188 | eolian_property_values_get(const Eolian_Function *fid) | 190 | eolian_property_values_get(const Eolian_Function *fid, Eolian_Function_Type ftype) |
189 | { | 191 | { |
190 | return eolian_function_parameters_get(fid); | 192 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL); |
193 | if (ftype != EOLIAN_PROP_GET && ftype != EOLIAN_PROP_SET) | ||
194 | return NULL; | ||
195 | return (fid->params ? eina_list_iterator_new(fid->params) : NULL); | ||
191 | } | 196 | } |
192 | 197 | ||
193 | EAPI Eina_Iterator * | 198 | EAPI Eina_Iterator * |
194 | eolian_function_parameters_get(const Eolian_Function *fid) | 199 | eolian_function_parameters_get(const Eolian_Function *fid) |
195 | { | 200 | { |
196 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL); | 201 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL); |
202 | if (fid->type != EOLIAN_METHOD) | ||
203 | return NULL; | ||
197 | return (fid->params ? eina_list_iterator_new(fid->params) : NULL); | 204 | return (fid->params ? eina_list_iterator_new(fid->params) : NULL); |
198 | } | 205 | } |
199 | 206 | ||
diff --git a/src/scripts/elua/modules/lualian.lua b/src/scripts/elua/modules/lualian.lua index 2080bfc735..b2ed32491d 100644 --- a/src/scripts/elua/modules/lualian.lua +++ b/src/scripts/elua/modules/lualian.lua | |||
@@ -260,8 +260,8 @@ local Property = Method:clone { | |||
260 | if self.cached_proto then return self.cached_proto end | 260 | if self.cached_proto then return self.cached_proto end |
261 | 261 | ||
262 | local prop = self.property | 262 | local prop = self.property |
263 | local keys = prop:property_keys_get():to_array() | 263 | local keys = prop:property_keys_get(self.ftype):to_array() |
264 | local vals = prop:property_values_get():to_array() | 264 | local vals = prop:property_values_get(self.ftype):to_array() |
265 | local rett = prop:return_type_get(self.ftype) | 265 | local rett = prop:return_type_get(self.ftype) |
266 | 266 | ||
267 | local proto = { | 267 | local proto = { |
@@ -486,11 +486,14 @@ end | |||
486 | or tp == func_type.METHOD then | 486 | or tp == func_type.METHOD then |
487 | cfuncs[#cfuncs + 1] = cfunc | 487 | cfuncs[#cfuncs + 1] = cfunc |
488 | if tp ~= func_type.METHOD then | 488 | if tp ~= func_type.METHOD then |
489 | for par in cfunc:property_keys_get() do | 489 | for par in cfunc:property_keys_get(func_type.PROP_SET) do |
490 | parnames[#parnames + 1] = build_pn(cn, par:name_get()) | 490 | parnames[#parnames + 1] = build_pn(cn, par:name_get()) |
491 | end | 491 | end |
492 | end | 492 | end |
493 | for par in cfunc:parameters_get() do | 493 | local iter = (tp ~= func_type.METHOD) |
494 | and cfunc:property_values_get(func_type.PROP_SET) | ||
495 | or cfunc:parameters_get() | ||
496 | for par in iter do | ||
494 | if par:direction_get() ~= param_dir.OUT then | 497 | if par:direction_get() ~= param_dir.OUT then |
495 | parnames[#parnames + 1] = build_pn(cn, par:name_get()) | 498 | parnames[#parnames + 1] = build_pn(cn, par:name_get()) |
496 | end | 499 | end |
@@ -507,19 +510,23 @@ end | |||
507 | -- write ctor body | 510 | -- write ctor body |
508 | local j = 1 | 511 | local j = 1 |
509 | for i, cfunc in ipairs(cfuncs) do | 512 | for i, cfunc in ipairs(cfuncs) do |
513 | local tp = cfunc:type_get() | ||
510 | s:write(" self:", cfunc:name_get()) | 514 | s:write(" self:", cfunc:name_get()) |
511 | if cfunc:type_get() ~= func_type.METHOD then | 515 | if cfunc:type_get() ~= func_type.METHOD then |
512 | s:write("_set") | 516 | s:write("_set") |
513 | end | 517 | end |
514 | s:write("(") | 518 | s:write("(") |
515 | local fpars = {} | 519 | local fpars = {} |
516 | if cfunc:type_get() ~= func_type.METHOD then | 520 | if tp ~= func_type.METHOD then |
517 | for par in cfunc:property_keys_get() do | 521 | for par in cfunc:property_keys_get(func_type.PROP_SET) do |
518 | fpars[#fpars + 1] = parnames[j] | 522 | fpars[#fpars + 1] = parnames[j] |
519 | j = j + 1 | 523 | j = j + 1 |
520 | end | 524 | end |
521 | end | 525 | end |
522 | for par in cfunc:parameters_get() do | 526 | local iter = (tp ~= func_type.METHOD) |
527 | and cfunc:property_values_get(func_type.PROP_SET) | ||
528 | or cfunc:parameters_get() | ||
529 | for par in iter do | ||
523 | if par:direction_get() ~= param_dir.OUT then | 530 | if par:direction_get() ~= param_dir.OUT then |
524 | fpars[#fpars + 1] = parnames[j] | 531 | fpars[#fpars + 1] = parnames[j] |
525 | j = j + 1 | 532 | j = j + 1 |
diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c index c4745cc7d6..131a9d3f69 100644 --- a/src/tests/eolian/eolian_parsing.c +++ b/src/tests/eolian/eolian_parsing.c | |||
@@ -450,7 +450,7 @@ START_TEST(eolian_complex_type) | |||
450 | eina_stringshare_del(type_name); | 450 | eina_stringshare_del(type_name); |
451 | eina_iterator_free(iter); | 451 | eina_iterator_free(iter); |
452 | /* Properties parameter type */ | 452 | /* Properties parameter type */ |
453 | fail_if(!(iter = eolian_function_parameters_get(fid))); | 453 | fail_if(!(iter = eolian_property_values_get(fid, EOLIAN_PROP_GET))); |
454 | fail_if(!(eina_iterator_next(iter, (void**)¶m))); | 454 | fail_if(!(eina_iterator_next(iter, (void**)¶m))); |
455 | fail_if(eina_iterator_next(iter, &dummy)); | 455 | fail_if(eina_iterator_next(iter, &dummy)); |
456 | eina_iterator_free(iter); | 456 | eina_iterator_free(iter); |
@@ -595,8 +595,8 @@ START_TEST(eolian_simple_parsing) | |||
595 | fail_if(string); | 595 | fail_if(string); |
596 | 596 | ||
597 | /* Function parameters */ | 597 | /* Function parameters */ |
598 | fail_if(eolian_property_keys_get(fid) != NULL); | 598 | fail_if(eolian_property_keys_get(fid, EOLIAN_PROP_GET) != NULL); |
599 | fail_if(!(iter = eolian_property_values_get(fid))); | 599 | fail_if(!(iter = eolian_property_values_get(fid, EOLIAN_PROP_GET))); |
600 | fail_if(!(eina_iterator_next(iter, (void**)¶m))); | 600 | fail_if(!(eina_iterator_next(iter, (void**)¶m))); |
601 | fail_if(eina_iterator_next(iter, &dummy)); | 601 | fail_if(eina_iterator_next(iter, &dummy)); |
602 | eina_iterator_free(iter); | 602 | eina_iterator_free(iter); |
@@ -639,7 +639,7 @@ START_TEST(eolian_simple_parsing) | |||
639 | fail_if(eolian_function_is_legacy_only(fid, EOLIAN_METHOD)); | 639 | fail_if(eolian_function_is_legacy_only(fid, EOLIAN_METHOD)); |
640 | 640 | ||
641 | /* Function parameters */ | 641 | /* Function parameters */ |
642 | fail_if(!(iter = eolian_property_values_get(fid))); | 642 | fail_if(!(iter = eolian_function_parameters_get(fid))); |
643 | fail_if(!(eina_iterator_next(iter, (void**)¶m))); | 643 | fail_if(!(eina_iterator_next(iter, (void**)¶m))); |
644 | fail_if(eolian_parameter_direction_get(param) != EOLIAN_IN_PARAM); | 644 | fail_if(eolian_parameter_direction_get(param) != EOLIAN_IN_PARAM); |
645 | fail_if(strcmp(eolian_type_name_get(eolian_parameter_type_get(param)), "int")); | 645 | fail_if(strcmp(eolian_type_name_get(eolian_parameter_type_get(param)), "int")); |