diff options
author | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2017-01-16 15:51:11 +0100 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@osg.samsung.com> | 2017-01-16 15:55:06 +0100 |
commit | 35c5e892695ad4e2169003c0dd2a00db8c1679a4 (patch) | |
tree | 0fec985aa08f720b30fa0fbab5181fef6cdb156c /src | |
parent | fbad285eca8bde68de0158395b346bdac25dc3ec (diff) |
eolian: remove/add APIs and clean up implements system
As there is no need to have separate is_auto, is_empty and
is_pure_virtual for functions and implements (each function has
its own base implement by default) I removed the function ones.
Instead, I added a way to retrieve a function's base implement
so that you can instead do the checks on the implement even when
you only have the function.
I also moved base implement build directly into the parser instead
of the database filler. That allows for significant cleanup. I
also removed distinction of implement pointers in Eolian_Function
for get and set as implements now always contain an entire thing
so the pointer was always the same anyway.
Things should still behave more or less the same, but ordering
of generated functions has changed because ordering of implements
has changed.
Diffstat (limited to 'src')
-rw-r--r-- | src/bin/eolian/sources.c | 18 | ||||
-rw-r--r-- | src/bindings/luajit/eolian.lua | 18 | ||||
-rw-r--r-- | src/lib/eolian/Eolian.h | 35 | ||||
-rw-r--r-- | src/lib/eolian/database_fill.c | 124 | ||||
-rw-r--r-- | src/lib/eolian/database_function_api.c | 76 | ||||
-rw-r--r-- | src/lib/eolian/eo_parser.c | 71 | ||||
-rw-r--r-- | src/lib/eolian/eolian_database.h | 9 | ||||
-rw-r--r-- | src/scripts/elua/apps/docgen/doctree.lua | 6 | ||||
-rw-r--r-- | src/tests/eolian/data/docs_ref.h | 26 | ||||
-rw-r--r-- | src/tests/eolian/data/docs_ref_legacy.h | 26 | ||||
-rw-r--r-- | src/tests/eolian/data/object_impl_add_ref.c | 26 | ||||
-rw-r--r-- | src/tests/eolian/data/object_impl_ref.c | 26 | ||||
-rw-r--r-- | src/tests/eolian/data/override_ref.c | 62 | ||||
-rw-r--r-- | src/tests/eolian/eolian_parsing.c | 51 |
14 files changed, 188 insertions, 386 deletions
diff --git a/src/bin/eolian/sources.c b/src/bin/eolian/sources.c index aff1f4b432..f264f531a2 100644 --- a/src/bin/eolian/sources.c +++ b/src/bin/eolian/sources.c | |||
@@ -272,7 +272,7 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid, | |||
272 | 272 | ||
273 | Eina_Bool impl_same_class = (eolian_implement_class_get(impl) == cl); | 273 | Eina_Bool impl_same_class = (eolian_implement_class_get(impl) == cl); |
274 | Eina_Bool impl_need = EINA_TRUE; | 274 | Eina_Bool impl_need = EINA_TRUE; |
275 | if (impl_same_class && eolian_function_is_pure_virtual(fid, ftype)) | 275 | if (impl_same_class && eolian_implement_is_pure_virtual(impl, ftype)) |
276 | impl_need = EINA_FALSE; | 276 | impl_need = EINA_FALSE; |
277 | 277 | ||
278 | Eina_Stringshare *rtpn = rtp ? eolian_type_c_type_get(rtp) | 278 | Eina_Stringshare *rtpn = rtp ? eolian_type_c_type_get(rtp) |
@@ -495,14 +495,14 @@ _gen_func(const Eolian_Class *cl, const Eolian_Function *fid, | |||
495 | 495 | ||
496 | static void | 496 | static void |
497 | _gen_opfunc(const Eolian_Function *fid, Eolian_Function_Type ftype, | 497 | _gen_opfunc(const Eolian_Function *fid, Eolian_Function_Type ftype, |
498 | Eina_Strbuf *buf, Eina_Bool pinit, | 498 | Eina_Strbuf *buf, const Eolian_Implement *impl, Eina_Bool pinit, |
499 | const char *cnamel, const char *ocnamel) | 499 | const char *cnamel, const char *ocnamel) |
500 | { | 500 | { |
501 | Eina_Stringshare *fnm = eolian_function_full_c_name_get(fid, ftype, EINA_FALSE); | 501 | Eina_Stringshare *fnm = eolian_function_full_c_name_get(fid, ftype, EINA_FALSE); |
502 | eina_strbuf_append(buf, " EFL_OBJECT_OP_FUNC("); | 502 | eina_strbuf_append(buf, " EFL_OBJECT_OP_FUNC("); |
503 | eina_strbuf_append(buf, fnm); | 503 | eina_strbuf_append(buf, fnm); |
504 | eina_strbuf_append(buf, ", "); | 504 | eina_strbuf_append(buf, ", "); |
505 | if (!ocnamel && eolian_function_is_pure_virtual(fid, ftype)) | 505 | if (!ocnamel && eolian_implement_is_pure_virtual(impl, ftype)) |
506 | eina_strbuf_append(buf, "NULL),\n"); | 506 | eina_strbuf_append(buf, "NULL),\n"); |
507 | else | 507 | else |
508 | { | 508 | { |
@@ -566,17 +566,17 @@ _gen_initializer(const Eolian_Class *cl, Eina_Strbuf *buf) | |||
566 | switch (ftype) | 566 | switch (ftype) |
567 | { | 567 | { |
568 | case EOLIAN_PROP_GET: | 568 | case EOLIAN_PROP_GET: |
569 | _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, found_get, cnamel, ocnamel); | 569 | _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, imp, found_get, cnamel, ocnamel); |
570 | break; | 570 | break; |
571 | case EOLIAN_PROP_SET: | 571 | case EOLIAN_PROP_SET: |
572 | _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, found_set, cnamel, ocnamel); | 572 | _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, imp, found_set, cnamel, ocnamel); |
573 | break; | 573 | break; |
574 | case EOLIAN_PROPERTY: | 574 | case EOLIAN_PROPERTY: |
575 | _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, found_set, cnamel, ocnamel); | 575 | _gen_opfunc(fid, EOLIAN_PROP_SET, obuf, imp, found_set, cnamel, ocnamel); |
576 | _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, found_get, cnamel, ocnamel); | 576 | _gen_opfunc(fid, EOLIAN_PROP_GET, obuf, imp, found_get, cnamel, ocnamel); |
577 | break; | 577 | break; |
578 | default: | 578 | default: |
579 | _gen_opfunc(fid, EOLIAN_METHOD, obuf, found_get, cnamel, ocnamel); | 579 | _gen_opfunc(fid, EOLIAN_METHOD, obuf, imp, found_get, cnamel, ocnamel); |
580 | break; | 580 | break; |
581 | } | 581 | } |
582 | 582 | ||
@@ -840,7 +840,7 @@ _gen_proto(const Eolian_Class *cl, const Eolian_Function *fid, | |||
840 | const char *cnamel) | 840 | const char *cnamel) |
841 | { | 841 | { |
842 | Eina_Bool impl_same_class = (eolian_implement_class_get(impl) == cl); | 842 | Eina_Bool impl_same_class = (eolian_implement_class_get(impl) == cl); |
843 | if (impl_same_class && eolian_function_is_pure_virtual(fid, ftype)) | 843 | if (impl_same_class && eolian_implement_is_pure_virtual(impl, ftype)) |
844 | return; | 844 | return; |
845 | 845 | ||
846 | char *ocnamel = NULL; | 846 | char *ocnamel = NULL; |
diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua index fb8be5720a..d96b7e690a 100644 --- a/src/bindings/luajit/eolian.lua +++ b/src/bindings/luajit/eolian.lua | |||
@@ -250,9 +250,7 @@ ffi.cdef [[ | |||
250 | const Eolian_Function *eolian_class_function_get_by_name(const Eolian_Class *klass, const char *func_name, Eolian_Function_Type f_type); | 250 | const Eolian_Function *eolian_class_function_get_by_name(const Eolian_Class *klass, const char *func_name, Eolian_Function_Type f_type); |
251 | const char *eolian_function_legacy_get(const Eolian_Function *function_id, Eolian_Function_Type f_type); | 251 | const char *eolian_function_legacy_get(const Eolian_Function *function_id, Eolian_Function_Type f_type); |
252 | const Eolian_Documentation *eolian_function_documentation_get(const Eolian_Function *function_id, Eolian_Function_Type f_type); | 252 | const Eolian_Documentation *eolian_function_documentation_get(const Eolian_Function *function_id, Eolian_Function_Type f_type); |
253 | Eina_Bool eolian_function_is_pure_virtual(const Eolian_Function *function_id, Eolian_Function_Type f_type); | 253 | const Eolian_Implement *eolian_function_implement_get(const Eolian_Function *function_id); |
254 | Eina_Bool eolian_function_is_auto(const Eolian_Function *function_id, Eolian_Function_Type f_type); | ||
255 | Eina_Bool eolian_function_is_empty(const Eolian_Function *function_id, Eolian_Function_Type f_type); | ||
256 | Eina_Bool eolian_function_is_legacy_only(const Eolian_Function *function_id, Eolian_Function_Type ftype); | 254 | Eina_Bool eolian_function_is_legacy_only(const Eolian_Function *function_id, Eolian_Function_Type ftype); |
257 | Eina_Bool eolian_function_is_class(const Eolian_Function *function_id); | 255 | Eina_Bool eolian_function_is_class(const Eolian_Function *function_id); |
258 | Eina_Bool eolian_function_is_c_only(const Eolian_Function *function_id); | 256 | Eina_Bool eolian_function_is_c_only(const Eolian_Function *function_id); |
@@ -783,16 +781,10 @@ M.Function = ffi.metatype("Eolian_Function", { | |||
783 | return v | 781 | return v |
784 | end, | 782 | end, |
785 | 783 | ||
786 | is_pure_virtual = function(self, ftype) | 784 | implement_get = function(self) |
787 | return eolian.eolian_function_is_pure_virtual(self, ftype) ~= 0 | 785 | local v = eolian.eolian_function_implement_get(self) |
788 | end, | 786 | if v == nil then return nil end |
789 | 787 | return v | |
790 | is_auto = function(self, ftype) | ||
791 | return eolian.eolian_function_is_auto(self, ftype) ~= 0 | ||
792 | end, | ||
793 | |||
794 | is_empty = function(self, ftype) | ||
795 | return eolian.eolian_function_is_empty(self, ftype) ~= 0 | ||
796 | end, | 788 | end, |
797 | 789 | ||
798 | is_legacy_only = function(self, ftype) | 790 | is_legacy_only = function(self, ftype) |
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index b06efeee06..97b28cf177 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h | |||
@@ -761,43 +761,14 @@ EAPI Eina_Stringshare *eolian_function_legacy_get(const Eolian_Function *functio | |||
761 | EAPI const Eolian_Documentation *eolian_function_documentation_get(const Eolian_Function *function_id, Eolian_Function_Type f_type); | 761 | EAPI const Eolian_Documentation *eolian_function_documentation_get(const Eolian_Function *function_id, Eolian_Function_Type f_type); |
762 | 762 | ||
763 | /* | 763 | /* |
764 | * @brief Indicates if a function is pure virtual. | 764 | * @brief Returns the implement for a function. |
765 | * | 765 | * |
766 | * @param[in] function_id Id of the function | 766 | * @param[in] function_id Id of the function |
767 | * @param[in] f_type The function type, for property get/set distinction. | 767 | * @return the implement or NULL. |
768 | * @return EINA_TRUE if pure virtual, EINA_FALSE othrewise. | ||
769 | * | ||
770 | * Acceptable input types are METHOD, PROP_GET and PROP_SET. | ||
771 | * | ||
772 | * @ingroup Eolian | ||
773 | */ | ||
774 | EAPI Eina_Bool eolian_function_is_pure_virtual(const Eolian_Function *function_id, Eolian_Function_Type f_type); | ||
775 | |||
776 | /* | ||
777 | * @brief Indicates if a function is auto. | ||
778 | * | ||
779 | * @param[in] function_id Id of the function | ||
780 | * @param[in] f_type The function type, for property get/set distinction. | ||
781 | * @return EINA_TRUE if auto, EINA_FALSE othrewise. | ||
782 | * | ||
783 | * Acceptable input types are METHOD, PROP_GET and PROP_SET. | ||
784 | * | ||
785 | * @ingroup Eolian | ||
786 | */ | ||
787 | EAPI Eina_Bool eolian_function_is_auto(const Eolian_Function *function_id, Eolian_Function_Type f_type); | ||
788 | |||
789 | /* | ||
790 | * @brief Indicates if a function is empty. | ||
791 | * | ||
792 | * @param[in] function_id Id of the function | ||
793 | * @param[in] f_type The function type, for property get/set distinction. | ||
794 | * @return EINA_TRUE if empty, EINA_FALSE othrewise. | ||
795 | * | ||
796 | * Acceptable input types are METHOD, PROP_GET and PROP_SET. | ||
797 | * | 768 | * |
798 | * @ingroup Eolian | 769 | * @ingroup Eolian |
799 | */ | 770 | */ |
800 | EAPI Eina_Bool eolian_function_is_empty(const Eolian_Function *function_id, Eolian_Function_Type f_type); | 771 | EAPI const Eolian_Implement *eolian_function_implement_get(const Eolian_Function *function_id); |
801 | 772 | ||
802 | /* | 773 | /* |
803 | * @brief Indicates if a function is legacy only. | 774 | * @brief Indicates if a function is legacy only. |
diff --git a/src/lib/eolian/database_fill.c b/src/lib/eolian/database_fill.c index 11d083e1f7..fb4d1bc0db 100644 --- a/src/lib/eolian/database_fill.c +++ b/src/lib/eolian/database_fill.c | |||
@@ -30,8 +30,7 @@ _print_linecol(const Eolian_Object *base) | |||
30 | } | 30 | } |
31 | 31 | ||
32 | static Eina_Bool | 32 | static Eina_Bool |
33 | _get_impl_func(Eolian_Class *cl, Eolian_Implement *impl, | 33 | _get_impl_func(Eolian_Class *cl, Eolian_Implement *impl, Eolian_Function_Type ftype) |
34 | Eolian_Function_Type ftype, Eolian_Function **foo_id) | ||
35 | { | 34 | { |
36 | size_t imlen = strlen(impl->full_name); | 35 | size_t imlen = strlen(impl->full_name); |
37 | char *clbuf = alloca(imlen + 1); | 36 | char *clbuf = alloca(imlen + 1); |
@@ -118,7 +117,6 @@ _get_impl_func(Eolian_Class *cl, Eolian_Implement *impl, | |||
118 | return EINA_FALSE; | 117 | return EINA_FALSE; |
119 | } | 118 | } |
120 | 119 | ||
121 | *foo_id = (Eolian_Function *)fid; | ||
122 | impl->foo_id = fid; | 120 | impl->foo_id = fid; |
123 | 121 | ||
124 | return EINA_TRUE; | 122 | return EINA_TRUE; |
@@ -128,7 +126,6 @@ _get_impl_func(Eolian_Class *cl, Eolian_Implement *impl, | |||
128 | static Eina_Bool | 126 | static Eina_Bool |
129 | _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl) | 127 | _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl) |
130 | { | 128 | { |
131 | Eolian_Function *foo_id; | ||
132 | Eolian_Function_Type ftype = EOLIAN_METHOD; | 129 | Eolian_Function_Type ftype = EOLIAN_METHOD; |
133 | 130 | ||
134 | if (impl->is_prop_get && impl->is_prop_set) | 131 | if (impl->is_prop_get && impl->is_prop_set) |
@@ -138,135 +135,32 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl) | |||
138 | else if (impl->is_prop_set) | 135 | else if (impl->is_prop_set) |
139 | ftype = EOLIAN_PROP_SET; | 136 | ftype = EOLIAN_PROP_SET; |
140 | 137 | ||
141 | if (!_get_impl_func(cl, impl, ftype, &foo_id)) | 138 | return _get_impl_func(cl, impl, ftype); |
142 | return EINA_FALSE; | ||
143 | |||
144 | foo_id->get_auto = impl->get_auto; | ||
145 | foo_id->set_auto = impl->set_auto; | ||
146 | foo_id->get_empty = impl->get_empty; | ||
147 | foo_id->set_empty = impl->set_empty; | ||
148 | if (foo_id->get_auto || foo_id->get_empty) | ||
149 | { | ||
150 | if (ftype == EOLIAN_METHOD) | ||
151 | foo_id->set_impl = impl; | ||
152 | foo_id->get_impl = impl; | ||
153 | } | ||
154 | if (foo_id->set_auto || foo_id->set_empty) | ||
155 | foo_id->set_impl = impl; | ||
156 | |||
157 | return EINA_TRUE; | ||
158 | } | ||
159 | |||
160 | static void | ||
161 | _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id) | ||
162 | { | ||
163 | if (foo_id->type == EOLIAN_PROP_SET) | ||
164 | { | ||
165 | if (foo_id->set_impl) return; | ||
166 | } | ||
167 | else if (foo_id->type == EOLIAN_PROP_GET) | ||
168 | { | ||
169 | if (foo_id->get_impl) return; | ||
170 | } | ||
171 | else if (foo_id->get_impl && foo_id->set_impl) return; | ||
172 | |||
173 | Eolian_Implement *impl = calloc(1, sizeof(Eolian_Implement)); | ||
174 | |||
175 | if (foo_id->type == EOLIAN_PROP_SET) | ||
176 | impl->base = foo_id->set_base; | ||
177 | else | ||
178 | impl->base = foo_id->base; | ||
179 | eina_stringshare_ref(impl->base.file); | ||
180 | |||
181 | impl->klass = cl; | ||
182 | impl->foo_id = foo_id; | ||
183 | impl->full_name = eina_stringshare_printf("%s.%s", cl->full_name, | ||
184 | foo_id->name); | ||
185 | |||
186 | if (foo_id->type == EOLIAN_PROPERTY) | ||
187 | { | ||
188 | if (foo_id->get_pure_virtual && !foo_id->get_impl) | ||
189 | { | ||
190 | impl->get_pure_virtual = EINA_TRUE; | ||
191 | impl->is_prop_get = EINA_TRUE; | ||
192 | foo_id->get_impl = impl; | ||
193 | cl->implements = eina_list_append(cl->implements, impl); | ||
194 | /* repeat for set */ | ||
195 | _db_build_implement(cl, foo_id); | ||
196 | return; | ||
197 | } | ||
198 | else if (foo_id->set_pure_virtual && !foo_id->set_impl) | ||
199 | { | ||
200 | impl->set_pure_virtual = EINA_TRUE; | ||
201 | impl->is_prop_set = EINA_TRUE; | ||
202 | foo_id->set_impl = impl; | ||
203 | cl->implements = eina_list_append(cl->implements, impl); | ||
204 | /* repeat for get */ | ||
205 | _db_build_implement(cl, foo_id); | ||
206 | return; | ||
207 | } | ||
208 | if (foo_id->get_impl) | ||
209 | { | ||
210 | impl->is_prop_set = EINA_TRUE; | ||
211 | impl->set_pure_virtual = foo_id->set_pure_virtual; | ||
212 | foo_id->set_impl = impl; | ||
213 | } | ||
214 | else if (foo_id->set_impl) | ||
215 | { | ||
216 | impl->is_prop_get = EINA_TRUE; | ||
217 | foo_id->get_impl = impl; | ||
218 | } | ||
219 | else | ||
220 | foo_id->get_impl = foo_id->set_impl = impl; | ||
221 | } | ||
222 | else if (foo_id->type == EOLIAN_PROP_SET) | ||
223 | { | ||
224 | impl->is_prop_set = EINA_TRUE; | ||
225 | impl->get_pure_virtual = foo_id->get_pure_virtual; | ||
226 | foo_id->set_impl = impl; | ||
227 | } | ||
228 | else if (foo_id->type == EOLIAN_PROP_GET) | ||
229 | { | ||
230 | impl->is_prop_get = EINA_TRUE; | ||
231 | impl->get_pure_virtual = foo_id->set_pure_virtual; | ||
232 | foo_id->get_impl = impl; | ||
233 | } | ||
234 | else | ||
235 | { | ||
236 | impl->get_pure_virtual = foo_id->get_pure_virtual; | ||
237 | foo_id->get_impl = foo_id->set_impl = impl; | ||
238 | } | ||
239 | |||
240 | cl->implements = eina_list_append(cl->implements, impl); | ||
241 | } | 139 | } |
242 | 140 | ||
243 | static Eina_Bool | 141 | static Eina_Bool |
244 | _db_fill_implements(Eolian_Class *cl) | 142 | _db_fill_implements(Eolian_Class *cl) |
245 | { | 143 | { |
246 | Eolian_Implement *impl; | 144 | Eolian_Implement *impl; |
247 | Eolian_Function *foo_id; | ||
248 | Eina_List *l; | 145 | Eina_List *l; |
249 | 146 | ||
250 | Eina_Hash *th = eina_hash_string_small_new(NULL); | 147 | Eina_Hash *th = eina_hash_string_small_new(NULL), |
148 | *pth = eina_hash_string_small_new(NULL); | ||
251 | EINA_LIST_FOREACH(cl->implements, l, impl) | 149 | EINA_LIST_FOREACH(cl->implements, l, impl) |
252 | { | 150 | { |
253 | if (eina_hash_find(th, impl->full_name)) | 151 | Eina_Bool prop = (impl->is_prop_get || impl->is_prop_set); |
152 | if (eina_hash_find(prop ? pth : th, impl->full_name)) | ||
254 | { | 153 | { |
255 | _print_linecol(&impl->base); | 154 | _print_linecol(&impl->base); |
256 | fprintf(stderr, "duplicate implement '%s'\n", impl->full_name); | 155 | fprintf(stderr, "duplicate implement '%s'\n", impl->full_name); |
257 | return EINA_FALSE; | 156 | return EINA_FALSE; |
258 | } | 157 | } |
259 | if (!_db_fill_implement(cl, impl)) | 158 | if ((impl->klass != cl) && !_db_fill_implement(cl, impl)) |
260 | return EINA_FALSE; | 159 | return EINA_FALSE; |
261 | eina_hash_add(th, impl->full_name, impl->full_name); | 160 | eina_hash_add(prop ? pth : th, impl->full_name, impl->full_name); |
262 | } | 161 | } |
263 | eina_hash_free(th); | 162 | eina_hash_free(th); |
264 | 163 | eina_hash_free(pth); | |
265 | EINA_LIST_FOREACH(cl->properties, l, foo_id) | ||
266 | _db_build_implement(cl, foo_id); | ||
267 | |||
268 | EINA_LIST_FOREACH(cl->methods, l, foo_id) | ||
269 | _db_build_implement(cl, foo_id); | ||
270 | 164 | ||
271 | return EINA_TRUE; | 165 | return EINA_TRUE; |
272 | } | 166 | } |
diff --git a/src/lib/eolian/database_function_api.c b/src/lib/eolian/database_function_api.c index 479141af35..1ad2a3ab91 100644 --- a/src/lib/eolian/database_function_api.c +++ b/src/lib/eolian/database_function_api.c | |||
@@ -196,79 +196,11 @@ eolian_function_documentation_get(const Eolian_Function *fid, Eolian_Function_Ty | |||
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | EAPI Eina_Bool | 199 | EAPI const Eolian_Implement * |
200 | eolian_function_is_pure_virtual(const Eolian_Function *fid, Eolian_Function_Type ftype) | 200 | eolian_function_implement_get(const Eolian_Function *fid) |
201 | { | 201 | { |
202 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE); | 202 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL); |
203 | EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_UNRESOLVED, EINA_FALSE); | 203 | return fid->impl; |
204 | EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_PROPERTY, EINA_FALSE); | ||
205 | switch (ftype) | ||
206 | { | ||
207 | case EOLIAN_METHOD: | ||
208 | if (fid->type != EOLIAN_METHOD) | ||
209 | return EINA_FALSE; | ||
210 | return fid->get_pure_virtual; | ||
211 | case EOLIAN_PROP_GET: | ||
212 | if ((fid->type != EOLIAN_PROP_GET) && (fid->type != EOLIAN_PROPERTY)) | ||
213 | return EINA_FALSE; | ||
214 | return fid->get_pure_virtual; | ||
215 | case EOLIAN_PROP_SET: | ||
216 | if ((fid->type != EOLIAN_PROP_SET) && (fid->type != EOLIAN_PROPERTY)) | ||
217 | return EINA_FALSE; | ||
218 | return fid->set_pure_virtual; | ||
219 | default: | ||
220 | return EINA_FALSE; | ||
221 | } | ||
222 | } | ||
223 | |||
224 | EAPI Eina_Bool | ||
225 | eolian_function_is_auto(const Eolian_Function *fid, Eolian_Function_Type ftype) | ||
226 | { | ||
227 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE); | ||
228 | EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_UNRESOLVED, EINA_FALSE); | ||
229 | EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_PROPERTY, EINA_FALSE); | ||
230 | switch (ftype) | ||
231 | { | ||
232 | case EOLIAN_METHOD: | ||
233 | if (fid->type != EOLIAN_METHOD) | ||
234 | return EINA_FALSE; | ||
235 | return fid->get_auto; | ||
236 | case EOLIAN_PROP_GET: | ||
237 | if ((fid->type != EOLIAN_PROP_GET) && (fid->type != EOLIAN_PROPERTY)) | ||
238 | return EINA_FALSE; | ||
239 | return fid->get_auto; | ||
240 | case EOLIAN_PROP_SET: | ||
241 | if ((fid->type != EOLIAN_PROP_SET) && (fid->type != EOLIAN_PROPERTY)) | ||
242 | return EINA_FALSE; | ||
243 | return fid->set_auto; | ||
244 | default: | ||
245 | return EINA_FALSE; | ||
246 | } | ||
247 | } | ||
248 | |||
249 | EAPI Eina_Bool | ||
250 | eolian_function_is_empty(const Eolian_Function *fid, Eolian_Function_Type ftype) | ||
251 | { | ||
252 | EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE); | ||
253 | EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_UNRESOLVED, EINA_FALSE); | ||
254 | EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_PROPERTY, EINA_FALSE); | ||
255 | switch (ftype) | ||
256 | { | ||
257 | case EOLIAN_METHOD: | ||
258 | if (fid->type != EOLIAN_METHOD) | ||
259 | return EINA_FALSE; | ||
260 | return fid->get_empty; | ||
261 | case EOLIAN_PROP_GET: | ||
262 | if ((fid->type != EOLIAN_PROP_GET) && (fid->type != EOLIAN_PROPERTY)) | ||
263 | return EINA_FALSE; | ||
264 | return fid->get_empty; | ||
265 | case EOLIAN_PROP_SET: | ||
266 | if ((fid->type != EOLIAN_PROP_SET) && (fid->type != EOLIAN_PROPERTY)) | ||
267 | return EINA_FALSE; | ||
268 | return fid->set_empty; | ||
269 | default: | ||
270 | return EINA_FALSE; | ||
271 | } | ||
272 | } | 204 | } |
273 | 205 | ||
274 | EAPI Eina_Bool | 206 | EAPI Eina_Bool |
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index eaa28b7359..5dd8376cc8 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c | |||
@@ -1191,8 +1191,8 @@ parse_accessor(Eo_Lexer *ls, Eolian_Function *prop) | |||
1191 | { | 1191 | { |
1192 | case KW_at_pure_virtual: | 1192 | case KW_at_pure_virtual: |
1193 | CASE_LOCK(ls, virtp, "pure_virtual qualifier"); | 1193 | CASE_LOCK(ls, virtp, "pure_virtual qualifier"); |
1194 | if (is_get) prop->get_pure_virtual = EINA_TRUE; | 1194 | if (is_get) prop->impl->get_pure_virtual = EINA_TRUE; |
1195 | else prop->set_pure_virtual = EINA_TRUE; | 1195 | else prop->impl->set_pure_virtual = EINA_TRUE; |
1196 | eo_lexer_get(ls); | 1196 | eo_lexer_get(ls); |
1197 | break; | 1197 | break; |
1198 | case KW_at_protected: | 1198 | case KW_at_protected: |
@@ -1297,11 +1297,11 @@ _func_pure_virtual_set(Eo_Lexer *ls, Eolian_Function *foo_id, Eina_Bool virt) | |||
1297 | return; | 1297 | return; |
1298 | 1298 | ||
1299 | if (foo_id->type == EOLIAN_PROP_GET || foo_id->type == EOLIAN_METHOD) | 1299 | if (foo_id->type == EOLIAN_PROP_GET || foo_id->type == EOLIAN_METHOD) |
1300 | foo_id->get_pure_virtual = EINA_TRUE; | 1300 | foo_id->impl->get_pure_virtual = EINA_TRUE; |
1301 | else if (foo_id->type == EOLIAN_PROP_SET) | 1301 | else if (foo_id->type == EOLIAN_PROP_SET) |
1302 | foo_id->set_pure_virtual = EINA_TRUE; | 1302 | foo_id->impl->set_pure_virtual = EINA_TRUE; |
1303 | else if (foo_id->type == EOLIAN_PROPERTY) | 1303 | else if (foo_id->type == EOLIAN_PROPERTY) |
1304 | foo_id->get_pure_virtual = foo_id->set_pure_virtual = EINA_TRUE; | 1304 | foo_id->impl->get_pure_virtual = foo_id->impl->set_pure_virtual = EINA_TRUE; |
1305 | } | 1305 | } |
1306 | 1306 | ||
1307 | static void | 1307 | static void |
@@ -1309,6 +1309,7 @@ parse_property(Eo_Lexer *ls) | |||
1309 | { | 1309 | { |
1310 | int line, col; | 1310 | int line, col; |
1311 | Eolian_Function *prop = NULL; | 1311 | Eolian_Function *prop = NULL; |
1312 | Eolian_Implement *impl = NULL; | ||
1312 | Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE, | 1313 | Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE, |
1313 | has_keys = EINA_FALSE, has_values = EINA_FALSE, | 1314 | has_keys = EINA_FALSE, has_values = EINA_FALSE, |
1314 | has_protected = EINA_FALSE, has_class = EINA_FALSE, | 1315 | has_protected = EINA_FALSE, has_class = EINA_FALSE, |
@@ -1319,7 +1320,13 @@ parse_property(Eo_Lexer *ls) | |||
1319 | prop->type = EOLIAN_UNRESOLVED; | 1320 | prop->type = EOLIAN_UNRESOLVED; |
1320 | prop->get_scope = prop->set_scope = EOLIAN_SCOPE_PUBLIC; | 1321 | prop->get_scope = prop->set_scope = EOLIAN_SCOPE_PUBLIC; |
1321 | FILL_BASE(prop->base, ls, ls->line_number, ls->column); | 1322 | FILL_BASE(prop->base, ls, ls->line_number, ls->column); |
1323 | impl = calloc(1, sizeof(Eolian_Implement)); | ||
1324 | impl->klass = ls->tmp.kls; | ||
1325 | impl->foo_id = prop; | ||
1326 | FILL_BASE(impl->base, ls, ls->line_number, ls->column); | ||
1327 | prop->impl = impl; | ||
1322 | ls->tmp.kls->properties = eina_list_append(ls->tmp.kls->properties, prop); | 1328 | ls->tmp.kls->properties = eina_list_append(ls->tmp.kls->properties, prop); |
1329 | ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl); | ||
1323 | check(ls, TOK_VALUE); | 1330 | check(ls, TOK_VALUE); |
1324 | if (ls->t.kw == KW_get || ls->t.kw == KW_set) | 1331 | if (ls->t.kw == KW_get || ls->t.kw == KW_set) |
1325 | { | 1332 | { |
@@ -1327,6 +1334,7 @@ parse_property(Eo_Lexer *ls) | |||
1327 | return; | 1334 | return; |
1328 | } | 1335 | } |
1329 | prop->name = eina_stringshare_ref(ls->t.value.s); | 1336 | prop->name = eina_stringshare_ref(ls->t.value.s); |
1337 | impl->full_name = eina_stringshare_printf("%s.%s", ls->tmp.kls->full_name, prop->name); | ||
1330 | eo_lexer_get(ls); | 1338 | eo_lexer_get(ls); |
1331 | for (;;) switch (ls->t.kw) | 1339 | for (;;) switch (ls->t.kw) |
1332 | { | 1340 | { |
@@ -1366,10 +1374,12 @@ body: | |||
1366 | { | 1374 | { |
1367 | case KW_get: | 1375 | case KW_get: |
1368 | CASE_LOCK(ls, get, "get definition") | 1376 | CASE_LOCK(ls, get, "get definition") |
1377 | impl->is_prop_get = EINA_TRUE; | ||
1369 | parse_accessor(ls, prop); | 1378 | parse_accessor(ls, prop); |
1370 | break; | 1379 | break; |
1371 | case KW_set: | 1380 | case KW_set: |
1372 | CASE_LOCK(ls, set, "set definition") | 1381 | CASE_LOCK(ls, set, "set definition") |
1382 | impl->is_prop_set = EINA_TRUE; | ||
1373 | parse_accessor(ls, prop); | 1383 | parse_accessor(ls, prop); |
1374 | break; | 1384 | break; |
1375 | case KW_keys: | 1385 | case KW_keys: |
@@ -1386,7 +1396,10 @@ body: | |||
1386 | end: | 1396 | end: |
1387 | check_match(ls, '}', '{', line, col); | 1397 | check_match(ls, '}', '{', line, col); |
1388 | if (!has_get && !has_set) | 1398 | if (!has_get && !has_set) |
1389 | prop->type = EOLIAN_PROPERTY; | 1399 | { |
1400 | prop->type = EOLIAN_PROPERTY; | ||
1401 | impl->is_prop_get = impl->is_prop_set = EINA_TRUE; | ||
1402 | } | ||
1390 | _func_pure_virtual_set(ls, prop, has_virtp); | 1403 | _func_pure_virtual_set(ls, prop, has_virtp); |
1391 | } | 1404 | } |
1392 | 1405 | ||
@@ -1395,6 +1408,7 @@ parse_method(Eo_Lexer *ls) | |||
1395 | { | 1408 | { |
1396 | int line, col; | 1409 | int line, col; |
1397 | Eolian_Function *meth = NULL; | 1410 | Eolian_Function *meth = NULL; |
1411 | Eolian_Implement *impl = NULL; | ||
1398 | Eina_Bool has_const = EINA_FALSE, has_params = EINA_FALSE, | 1412 | Eina_Bool has_const = EINA_FALSE, has_params = EINA_FALSE, |
1399 | has_return = EINA_FALSE, has_legacy = EINA_FALSE, | 1413 | has_return = EINA_FALSE, has_legacy = EINA_FALSE, |
1400 | has_protected = EINA_FALSE, has_class = EINA_FALSE, | 1414 | has_protected = EINA_FALSE, has_class = EINA_FALSE, |
@@ -1405,7 +1419,13 @@ parse_method(Eo_Lexer *ls) | |||
1405 | meth->type = EOLIAN_METHOD; | 1419 | meth->type = EOLIAN_METHOD; |
1406 | meth->get_scope = meth->set_scope = EOLIAN_SCOPE_PUBLIC; | 1420 | meth->get_scope = meth->set_scope = EOLIAN_SCOPE_PUBLIC; |
1407 | FILL_BASE(meth->base, ls, ls->line_number, ls->column); | 1421 | FILL_BASE(meth->base, ls, ls->line_number, ls->column); |
1422 | impl = calloc(1, sizeof(Eolian_Implement)); | ||
1423 | impl->klass = ls->tmp.kls; | ||
1424 | impl->foo_id = meth; | ||
1425 | FILL_BASE(impl->base, ls, ls->line_number, ls->column); | ||
1426 | meth->impl = impl; | ||
1408 | ls->tmp.kls->methods = eina_list_append(ls->tmp.kls->methods, meth); | 1427 | ls->tmp.kls->methods = eina_list_append(ls->tmp.kls->methods, meth); |
1428 | ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl); | ||
1409 | check(ls, TOK_VALUE); | 1429 | check(ls, TOK_VALUE); |
1410 | if (ls->t.kw == KW_get || ls->t.kw == KW_set) | 1430 | if (ls->t.kw == KW_get || ls->t.kw == KW_set) |
1411 | { | 1431 | { |
@@ -1413,6 +1433,7 @@ parse_method(Eo_Lexer *ls) | |||
1413 | return; | 1433 | return; |
1414 | } | 1434 | } |
1415 | meth->name = eina_stringshare_ref(ls->t.value.s); | 1435 | meth->name = eina_stringshare_ref(ls->t.value.s); |
1436 | impl->full_name = eina_stringshare_printf("%s.%s", ls->tmp.kls->full_name, meth->name); | ||
1416 | eo_lexer_get(ls); | 1437 | eo_lexer_get(ls); |
1417 | for (;;) switch (ls->t.kw) | 1438 | for (;;) switch (ls->t.kw) |
1418 | { | 1439 | { |
@@ -1515,9 +1536,6 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface) | |||
1515 | check_next(ls, ';'); | 1536 | check_next(ls, ';'); |
1516 | return; | 1537 | return; |
1517 | } | 1538 | } |
1518 | impl = calloc(1, sizeof(Eolian_Implement)); | ||
1519 | FILL_BASE(impl->base, ls, iline, icol); | ||
1520 | ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl); | ||
1521 | Eina_Bool glob_auto = EINA_FALSE, glob_empty = EINA_FALSE; | 1539 | Eina_Bool glob_auto = EINA_FALSE, glob_empty = EINA_FALSE; |
1522 | switch (ls->t.kw) | 1540 | switch (ls->t.kw) |
1523 | { | 1541 | { |
@@ -1537,12 +1555,29 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface) | |||
1537 | eo_lexer_get(ls); | 1555 | eo_lexer_get(ls); |
1538 | if (ls->t.token != TOK_VALUE) | 1556 | if (ls->t.token != TOK_VALUE) |
1539 | eo_lexer_syntax_error(ls, "name expected"); | 1557 | eo_lexer_syntax_error(ls, "name expected"); |
1540 | impl->full_name = eina_stringshare_printf("%s.%s", | 1558 | Eina_Stringshare *iname = eina_stringshare_printf("%s.%s", |
1541 | ls->tmp.kls->full_name, | 1559 | ls->tmp.kls->full_name, |
1542 | ls->t.value.s); | 1560 | ls->t.value.s); |
1561 | Eina_List *l; | ||
1562 | Eolian_Implement *fimp; | ||
1563 | EINA_LIST_FOREACH(ls->tmp.kls->implements, l, fimp) | ||
1564 | if (iname == fimp->full_name) | ||
1565 | { | ||
1566 | impl = fimp; | ||
1567 | break; | ||
1568 | } | ||
1569 | eina_stringshare_del(iname); | ||
1570 | if (!impl) | ||
1571 | eo_lexer_syntax_error(ls, "implement of non-existent function"); | ||
1543 | eo_lexer_get(ls); | 1572 | eo_lexer_get(ls); |
1544 | goto propbeg; | 1573 | goto propbeg; |
1545 | } | 1574 | } |
1575 | else | ||
1576 | { | ||
1577 | impl = calloc(1, sizeof(Eolian_Implement)); | ||
1578 | FILL_BASE(impl->base, ls, iline, icol); | ||
1579 | ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl); | ||
1580 | } | ||
1546 | if (ls->t.token != TOK_VALUE) | 1581 | if (ls->t.token != TOK_VALUE) |
1547 | eo_lexer_syntax_error(ls, "class name expected"); | 1582 | eo_lexer_syntax_error(ls, "class name expected"); |
1548 | buf = push_strbuf(ls); | 1583 | buf = push_strbuf(ls); |
@@ -1620,13 +1655,11 @@ propend: | |||
1620 | check_next(ls, '}'); | 1655 | check_next(ls, '}'); |
1621 | } | 1656 | } |
1622 | else | 1657 | else |
1623 | { | 1658 | check_next(ls, ';'); |
1624 | if (glob_auto) | 1659 | if (glob_auto) |
1625 | impl->get_auto = impl->set_auto = EINA_TRUE; | 1660 | impl->get_auto = impl->set_auto = EINA_TRUE; |
1626 | if (glob_empty) | 1661 | if (glob_empty) |
1627 | impl->get_empty = impl->set_empty = EINA_TRUE; | 1662 | impl->get_empty = impl->set_empty = EINA_TRUE; |
1628 | check_next(ls, ';'); | ||
1629 | } | ||
1630 | end: | 1663 | end: |
1631 | if (buf) | 1664 | if (buf) |
1632 | { | 1665 | { |
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index eeace389d6..9040262113 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h | |||
@@ -123,8 +123,7 @@ struct _Eolian_Function | |||
123 | Eolian_Type *set_ret_type; | 123 | Eolian_Type *set_ret_type; |
124 | Eolian_Expression *get_ret_val; | 124 | Eolian_Expression *get_ret_val; |
125 | Eolian_Expression *set_ret_val; | 125 | Eolian_Expression *set_ret_val; |
126 | Eolian_Implement *get_impl; | 126 | Eolian_Implement *impl; |
127 | Eolian_Implement *set_impl; | ||
128 | Eina_Stringshare *get_legacy; | 127 | Eina_Stringshare *get_legacy; |
129 | Eina_Stringshare *set_legacy; | 128 | Eina_Stringshare *set_legacy; |
130 | Eolian_Documentation *common_doc; | 129 | Eolian_Documentation *common_doc; |
@@ -133,12 +132,6 @@ struct _Eolian_Function | |||
133 | Eolian_Documentation *get_return_doc; | 132 | Eolian_Documentation *get_return_doc; |
134 | Eolian_Documentation *set_return_doc; | 133 | Eolian_Documentation *set_return_doc; |
135 | Eina_Bool obj_is_const :1; /* True if the object has to be const. Useful for a few methods. */ | 134 | Eina_Bool obj_is_const :1; /* True if the object has to be const. Useful for a few methods. */ |
136 | Eina_Bool get_pure_virtual :1; | ||
137 | Eina_Bool set_pure_virtual :1; | ||
138 | Eina_Bool get_auto :1; | ||
139 | Eina_Bool set_auto :1; | ||
140 | Eina_Bool get_empty :1; | ||
141 | Eina_Bool set_empty :1; | ||
142 | Eina_Bool get_return_warn_unused :1; /* also used for methods */ | 135 | Eina_Bool get_return_warn_unused :1; /* also used for methods */ |
143 | Eina_Bool set_return_warn_unused :1; | 136 | Eina_Bool set_return_warn_unused :1; |
144 | Eina_Bool get_only_legacy: 1; | 137 | Eina_Bool get_only_legacy: 1; |
diff --git a/src/scripts/elua/apps/docgen/doctree.lua b/src/scripts/elua/apps/docgen/doctree.lua index 0bb9c75a06..b5d81ee579 100644 --- a/src/scripts/elua/apps/docgen/doctree.lua +++ b/src/scripts/elua/apps/docgen/doctree.lua | |||
@@ -322,15 +322,15 @@ M.Function = Node:clone { | |||
322 | end, | 322 | end, |
323 | 323 | ||
324 | is_pure_virtual = function(self, ft) | 324 | is_pure_virtual = function(self, ft) |
325 | return self.func:is_pure_virtual(ft) | 325 | return self.func:implement_get():is_pure_virtual(ft) |
326 | end, | 326 | end, |
327 | 327 | ||
328 | is_auto = function(self, ft) | 328 | is_auto = function(self, ft) |
329 | return self.func:is_auto(ft) | 329 | return self.func:implement_get():is_auto(ft) |
330 | end, | 330 | end, |
331 | 331 | ||
332 | is_empty = function(self, ft) | 332 | is_empty = function(self, ft) |
333 | return self.func:is_empty(ft) | 333 | return self.func:implement_get():is_empty(ft) |
334 | end, | 334 | end, |
335 | 335 | ||
336 | is_legacy_only = function(self, ft) | 336 | is_legacy_only = function(self, ft) |
diff --git a/src/tests/eolian/data/docs_ref.h b/src/tests/eolian/data/docs_ref.h index 8f25fd72ed..bd9224efbd 100644 --- a/src/tests/eolian/data/docs_ref.h +++ b/src/tests/eolian/data/docs_ref.h | |||
@@ -86,45 +86,45 @@ typedef struct _Opaque Opaque; | |||
86 | EWAPI const Efl_Class *docs_class_get(void); | 86 | EWAPI const Efl_Class *docs_class_get(void); |
87 | 87 | ||
88 | /** | 88 | /** |
89 | * @brief Property common documentation. | 89 | * @brief Method documentation. |
90 | * | 90 | * |
91 | * Set documentation. | 91 | * @param[in] a Param documentation. |
92 | * @param[out] b | ||
93 | * @param[out] c Another param documentation. | ||
92 | * | 94 | * |
93 | * @param[in] val Value documentation. | 95 | * @return Return documentation. |
94 | * | 96 | * |
95 | * @since 1.18 | 97 | * @since 1.18 |
96 | * | 98 | * |
97 | * @ingroup Docs | 99 | * @ingroup Docs |
98 | */ | 100 | */ |
99 | EOAPI void docs_prop_set(Eo *obj, int val); | 101 | EOAPI int docs_meth(Eo *obj, int a, float *b, long *c); |
100 | 102 | ||
101 | /** | 103 | /** |
102 | * @brief Property common documentation. | 104 | * @brief Property common documentation. |
103 | * | 105 | * |
104 | * Get documentation. | 106 | * Set documentation. |
105 | * | 107 | * |
106 | * @return Value documentation. | 108 | * @param[in] val Value documentation. |
107 | * | 109 | * |
108 | * @since 1.18 | 110 | * @since 1.18 |
109 | * | 111 | * |
110 | * @ingroup Docs | 112 | * @ingroup Docs |
111 | */ | 113 | */ |
112 | EOAPI int docs_prop_get(const Eo *obj); | 114 | EOAPI void docs_prop_set(Eo *obj, int val); |
113 | 115 | ||
114 | /** | 116 | /** |
115 | * @brief Method documentation. | 117 | * @brief Property common documentation. |
116 | * | 118 | * |
117 | * @param[in] a Param documentation. | 119 | * Get documentation. |
118 | * @param[out] b | ||
119 | * @param[out] c Another param documentation. | ||
120 | * | 120 | * |
121 | * @return Return documentation. | 121 | * @return Value documentation. |
122 | * | 122 | * |
123 | * @since 1.18 | 123 | * @since 1.18 |
124 | * | 124 | * |
125 | * @ingroup Docs | 125 | * @ingroup Docs |
126 | */ | 126 | */ |
127 | EOAPI int docs_meth(Eo *obj, int a, float *b, long *c); | 127 | EOAPI int docs_prop_get(const Eo *obj); |
128 | 128 | ||
129 | EWAPI extern const Efl_Event_Description _DOCS_EVENT_CLICKED; | 129 | EWAPI extern const Efl_Event_Description _DOCS_EVENT_CLICKED; |
130 | 130 | ||
diff --git a/src/tests/eolian/data/docs_ref_legacy.h b/src/tests/eolian/data/docs_ref_legacy.h index 529326c5d7..5d3849ac36 100644 --- a/src/tests/eolian/data/docs_ref_legacy.h +++ b/src/tests/eolian/data/docs_ref_legacy.h | |||
@@ -72,44 +72,44 @@ typedef struct _Opaque Opaque; | |||
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | /** | 74 | /** |
75 | * @brief Property common documentation. | 75 | * @brief Method documentation. |
76 | * | 76 | * |
77 | * Set documentation. | 77 | * @param[in] a Param documentation. |
78 | * @param[out] b | ||
79 | * @param[out] c Another param documentation. | ||
78 | * | 80 | * |
79 | * @param[in] val Value documentation. | 81 | * @return Return documentation. |
80 | * | 82 | * |
81 | * @since 1.18 | 83 | * @since 1.18 |
82 | * | 84 | * |
83 | * @ingroup Docs | 85 | * @ingroup Docs |
84 | */ | 86 | */ |
85 | EAPI void docs_prop_set(Docs *obj, int val); | 87 | EAPI int docs_meth(Docs *obj, int a, float *b, long *c); |
86 | 88 | ||
87 | /** | 89 | /** |
88 | * @brief Property common documentation. | 90 | * @brief Property common documentation. |
89 | * | 91 | * |
90 | * Get documentation. | 92 | * Set documentation. |
91 | * | 93 | * |
92 | * @return Value documentation. | 94 | * @param[in] val Value documentation. |
93 | * | 95 | * |
94 | * @since 1.18 | 96 | * @since 1.18 |
95 | * | 97 | * |
96 | * @ingroup Docs | 98 | * @ingroup Docs |
97 | */ | 99 | */ |
98 | EAPI int docs_prop_get(const Docs *obj); | 100 | EAPI void docs_prop_set(Docs *obj, int val); |
99 | 101 | ||
100 | /** | 102 | /** |
101 | * @brief Method documentation. | 103 | * @brief Property common documentation. |
102 | * | 104 | * |
103 | * @param[in] a Param documentation. | 105 | * Get documentation. |
104 | * @param[out] b | ||
105 | * @param[out] c Another param documentation. | ||
106 | * | 106 | * |
107 | * @return Return documentation. | 107 | * @return Value documentation. |
108 | * | 108 | * |
109 | * @since 1.18 | 109 | * @since 1.18 |
110 | * | 110 | * |
111 | * @ingroup Docs | 111 | * @ingroup Docs |
112 | */ | 112 | */ |
113 | EAPI int docs_meth(Docs *obj, int a, float *b, long *c); | 113 | EAPI int docs_prop_get(const Docs *obj); |
114 | 114 | ||
115 | #endif | 115 | #endif |
diff --git a/src/tests/eolian/data/object_impl_add_ref.c b/src/tests/eolian/data/object_impl_add_ref.c index 1e2aa21431..f97248aa27 100644 --- a/src/tests/eolian/data/object_impl_add_ref.c +++ b/src/tests/eolian/data/object_impl_add_ref.c | |||
@@ -7,19 +7,6 @@ typedef struct | |||
7 | 7 | ||
8 | } Object_Impl_Data; | 8 | } Object_Impl_Data; |
9 | 9 | ||
10 | EOLIAN static void | ||
11 | _object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd) | ||
12 | { | ||
13 | |||
14 | } | ||
15 | |||
16 | EOLIAN static void | ||
17 | _object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd) | ||
18 | { | ||
19 | base_destructor(efl_super(obj, OBJECT_IMPL_CLASS)); | ||
20 | |||
21 | } | ||
22 | |||
23 | EOLIAN static Eina_Bool | 10 | EOLIAN static Eina_Bool |
24 | _object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value) | 11 | _object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value) |
25 | { | 12 | { |
@@ -63,6 +50,19 @@ _object_impl_foo2(const Eo *obj, Object_Impl_Data *pd, int a, const char *b) | |||
63 | } | 50 | } |
64 | 51 | ||
65 | EOLIAN static void | 52 | EOLIAN static void |
53 | _object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd) | ||
54 | { | ||
55 | |||
56 | } | ||
57 | |||
58 | EOLIAN static void | ||
59 | _object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd) | ||
60 | { | ||
61 | base_destructor(efl_super(obj, OBJECT_IMPL_CLASS)); | ||
62 | |||
63 | } | ||
64 | |||
65 | EOLIAN static void | ||
66 | _object_impl_class_constructor(Efl_Class *klass) | 66 | _object_impl_class_constructor(Efl_Class *klass) |
67 | { | 67 | { |
68 | 68 | ||
diff --git a/src/tests/eolian/data/object_impl_ref.c b/src/tests/eolian/data/object_impl_ref.c index 454903c6ab..335613af01 100644 --- a/src/tests/eolian/data/object_impl_ref.c +++ b/src/tests/eolian/data/object_impl_ref.c | |||
@@ -7,19 +7,6 @@ typedef struct | |||
7 | 7 | ||
8 | } Object_Impl_Data; | 8 | } Object_Impl_Data; |
9 | 9 | ||
10 | EOLIAN static void | ||
11 | _object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd) | ||
12 | { | ||
13 | |||
14 | } | ||
15 | |||
16 | EOLIAN static void | ||
17 | _object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd) | ||
18 | { | ||
19 | base_destructor(efl_super(obj, OBJECT_IMPL_CLASS)); | ||
20 | |||
21 | } | ||
22 | |||
23 | EOLIAN static Eina_Bool | 10 | EOLIAN static Eina_Bool |
24 | _object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value) | 11 | _object_impl_a_set(Eo *obj, Object_Impl_Data *pd, const char *part, const Eina_List *value) |
25 | { | 12 | { |
@@ -63,6 +50,19 @@ _object_impl_foo2(const Eo *obj, Object_Impl_Data *pd, int a, const char *b) | |||
63 | } | 50 | } |
64 | 51 | ||
65 | EOLIAN static void | 52 | EOLIAN static void |
53 | _object_impl_base_constructor(Eo *obj, Object_Impl_Data *pd) | ||
54 | { | ||
55 | |||
56 | } | ||
57 | |||
58 | EOLIAN static void | ||
59 | _object_impl_base_destructor(Eo *obj, Object_Impl_Data *pd) | ||
60 | { | ||
61 | base_destructor(efl_super(obj, OBJECT_IMPL_CLASS)); | ||
62 | |||
63 | } | ||
64 | |||
65 | EOLIAN static void | ||
66 | _object_impl_class_constructor(Efl_Class *klass) | 66 | _object_impl_class_constructor(Efl_Class *klass) |
67 | { | 67 | { |
68 | 68 | ||
diff --git a/src/tests/eolian/data/override_ref.c b/src/tests/eolian/data/override_ref.c index 9d6fd8cade..76b9f4095c 100644 --- a/src/tests/eolian/data/override_ref.c +++ b/src/tests/eolian/data/override_ref.c | |||
@@ -1,6 +1,8 @@ | |||
1 | EOAPI EFL_VOID_FUNC_BODY(override_a_set); | ||
1 | 2 | ||
2 | void _override_base_constructor(Eo *obj, Override_Data *pd); | 3 | void _override_a_get(Eo *obj, Override_Data *pd); |
3 | 4 | ||
5 | EOAPI EFL_VOID_FUNC_BODY_CONST(override_a_get); | ||
4 | 6 | ||
5 | static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float a, char b, int c) | 7 | static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float a, char b, int c) |
6 | { | 8 | { |
@@ -11,13 +13,21 @@ static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int | |||
11 | 13 | ||
12 | EOAPI EFL_VOID_FUNC_BODYV(override_b_set, EFL_FUNC_CALL(idx, a, b, c), int idx, float a, char b, int c); | 14 | EOAPI EFL_VOID_FUNC_BODYV(override_b_set, EFL_FUNC_CALL(idx, a, b, c), int idx, float a, char b, int c); |
13 | 15 | ||
14 | static void __eolian_override_bar(Eo *obj EINA_UNUSED, Override_Data *pd EINA_UNUSED, int idx EINA_UNUSED, int *a, char **str) | 16 | static void __eolian_override_b_get(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float *a, char *b, int *c) |
15 | { | 17 | { |
16 | if (a) *a = 250; | 18 | if (a) *a = pd->a; |
17 | if (str) *str = NULL; | 19 | if (b) *b = pd->b; |
20 | if (c) *c = pd->c; | ||
18 | } | 21 | } |
19 | 22 | ||
20 | EOAPI EFL_VOID_FUNC_BODYV(override_bar, EFL_FUNC_CALL(idx, a, str), int idx, int *a, char **str); | 23 | EOAPI EFL_VOID_FUNC_BODYV_CONST(override_b_get, EFL_FUNC_CALL(idx, a, b, c), int idx, float *a, char *b, int *c); |
24 | |||
25 | static void __eolian_override_c_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, int c) | ||
26 | { | ||
27 | c = pd->c; | ||
28 | } | ||
29 | |||
30 | EOAPI EFL_VOID_FUNC_BODYV(override_c_set, EFL_FUNC_CALL(idx, c), int idx, int c); | ||
21 | 31 | ||
22 | static int __eolian_override_c_get(Eo *obj EINA_UNUSED, Override_Data *pd EINA_UNUSED, int idx EINA_UNUSED) | 32 | static int __eolian_override_c_get(Eo *obj EINA_UNUSED, Override_Data *pd EINA_UNUSED, int idx EINA_UNUSED) |
23 | { | 33 | { |
@@ -25,6 +35,18 @@ static int __eolian_override_c_get(Eo *obj EINA_UNUSED, Override_Data *pd EINA_U | |||
25 | } | 35 | } |
26 | 36 | ||
27 | EOAPI EFL_FUNC_BODYV_CONST(override_c_get, int, 50, EFL_FUNC_CALL(idx), int idx); | 37 | EOAPI EFL_FUNC_BODYV_CONST(override_c_get, int, 50, EFL_FUNC_CALL(idx), int idx); |
38 | EOAPI EFL_VOID_FUNC_BODY(override_foo); | ||
39 | |||
40 | static void __eolian_override_bar(Eo *obj EINA_UNUSED, Override_Data *pd EINA_UNUSED, int idx EINA_UNUSED, int *a, char **str) | ||
41 | { | ||
42 | if (a) *a = 250; | ||
43 | if (str) *str = NULL; | ||
44 | } | ||
45 | |||
46 | EOAPI EFL_VOID_FUNC_BODYV(override_bar, EFL_FUNC_CALL(idx, a, str), int idx, int *a, char **str); | ||
47 | |||
48 | void _override_base_constructor(Eo *obj, Override_Data *pd); | ||
49 | |||
28 | 50 | ||
29 | static void __eolian_override_base_z_set(Eo *obj EINA_UNUSED, Override_Data *pd, int a, char b, float c) | 51 | static void __eolian_override_base_z_set(Eo *obj EINA_UNUSED, Override_Data *pd, int a, char b, float c) |
30 | { | 52 | { |
@@ -41,36 +63,22 @@ static void __eolian_override_base_z_get(Eo *obj EINA_UNUSED, Override_Data *pd, | |||
41 | if (c) *c = pd->c; | 63 | if (c) *c = pd->c; |
42 | } | 64 | } |
43 | 65 | ||
44 | EOAPI EFL_VOID_FUNC_BODY(override_a_set); | ||
45 | |||
46 | void _override_a_get(Eo *obj, Override_Data *pd); | ||
47 | |||
48 | EOAPI EFL_VOID_FUNC_BODY_CONST(override_a_get); | ||
49 | |||
50 | void _override_b_get(Eo *obj, Override_Data *pd, int idx, float *a, char *b, int *c); | ||
51 | |||
52 | EOAPI EFL_VOID_FUNC_BODYV_CONST(override_b_get, EFL_FUNC_CALL(idx, a, b, c), int idx, float *a, char *b, int *c); | ||
53 | |||
54 | void _override_c_set(Eo *obj, Override_Data *pd, int idx, int c); | ||
55 | |||
56 | EOAPI EFL_VOID_FUNC_BODYV(override_c_set, EFL_FUNC_CALL(idx, c), int idx, int c); | ||
57 | EOAPI EFL_VOID_FUNC_BODY(override_foo); | ||
58 | 66 | ||
59 | static Eina_Bool | 67 | static Eina_Bool |
60 | _override_class_initializer(Efl_Class *klass) | 68 | _override_class_initializer(Efl_Class *klass) |
61 | { | 69 | { |
62 | EFL_OPS_DEFINE(ops, | 70 | EFL_OPS_DEFINE(ops, |
63 | EFL_OBJECT_OP_FUNC(base_constructor, _override_base_constructor), | 71 | EFL_OBJECT_OP_FUNC(override_a_set, NULL), |
72 | EFL_OBJECT_OP_FUNC(override_a_get, _override_a_get), | ||
64 | EFL_OBJECT_OP_FUNC(override_b_set, __eolian_override_b_set), | 73 | EFL_OBJECT_OP_FUNC(override_b_set, __eolian_override_b_set), |
65 | EFL_OBJECT_OP_FUNC(override_bar, __eolian_override_bar), | 74 | EFL_OBJECT_OP_FUNC(override_b_get, __eolian_override_b_get), |
75 | EFL_OBJECT_OP_FUNC(override_c_set, __eolian_override_c_set), | ||
66 | EFL_OBJECT_OP_FUNC(override_c_get, __eolian_override_c_get), | 76 | EFL_OBJECT_OP_FUNC(override_c_get, __eolian_override_c_get), |
77 | EFL_OBJECT_OP_FUNC(override_foo, NULL), | ||
78 | EFL_OBJECT_OP_FUNC(override_bar, __eolian_override_bar), | ||
79 | EFL_OBJECT_OP_FUNC(base_constructor, _override_base_constructor), | ||
67 | EFL_OBJECT_OP_FUNC(base_z_set, __eolian_override_base_z_set), | 80 | EFL_OBJECT_OP_FUNC(base_z_set, __eolian_override_base_z_set), |
68 | EFL_OBJECT_OP_FUNC(base_z_get, __eolian_override_base_z_get), | 81 | EFL_OBJECT_OP_FUNC(base_z_get, __eolian_override_base_z_get) |
69 | EFL_OBJECT_OP_FUNC(override_a_set, NULL), | ||
70 | EFL_OBJECT_OP_FUNC(override_a_get, _override_a_get), | ||
71 | EFL_OBJECT_OP_FUNC(override_b_get, _override_b_get), | ||
72 | EFL_OBJECT_OP_FUNC(override_c_set, _override_c_set), | ||
73 | EFL_OBJECT_OP_FUNC(override_foo, NULL) | ||
74 | ); | 82 | ); |
75 | return efl_class_functions_set(klass, &ops, NULL); | 83 | return efl_class_functions_set(klass, &ops, NULL); |
76 | } | 84 | } |
diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c index 889d5c9f52..15b032ad49 100644 --- a/src/tests/eolian/eolian_parsing.c +++ b/src/tests/eolian/eolian_parsing.c | |||
@@ -87,10 +87,6 @@ START_TEST(eolian_namespaces) | |||
87 | fail_if(eina_iterator_next(iter, &dummy)); | 87 | fail_if(eina_iterator_next(iter, &dummy)); |
88 | eina_iterator_free(iter); | 88 | eina_iterator_free(iter); |
89 | 89 | ||
90 | /* Virtual regression */ | ||
91 | fail_if(!(fid = eolian_class_function_get_by_name(class112, "a", EOLIAN_UNRESOLVED))); | ||
92 | fail_if(!eolian_function_is_pure_virtual(fid, EOLIAN_PROP_SET)); | ||
93 | |||
94 | eolian_shutdown(); | 90 | eolian_shutdown(); |
95 | } | 91 | } |
96 | END_TEST | 92 | END_TEST |
@@ -170,7 +166,6 @@ END_TEST | |||
170 | START_TEST(eolian_override) | 166 | START_TEST(eolian_override) |
171 | { | 167 | { |
172 | Eina_Iterator *iter; | 168 | Eina_Iterator *iter; |
173 | const Eolian_Function *fid = NULL; | ||
174 | const Eolian_Class *impl_class = NULL; | 169 | const Eolian_Class *impl_class = NULL; |
175 | const Eolian_Function *impl_func = NULL; | 170 | const Eolian_Function *impl_func = NULL; |
176 | const Eolian_Class *class, *base; | 171 | const Eolian_Class *class, *base; |
@@ -185,30 +180,9 @@ START_TEST(eolian_override) | |||
185 | fail_if(!(class = eolian_class_get_by_name("Override"))); | 180 | fail_if(!(class = eolian_class_get_by_name("Override"))); |
186 | fail_if(!(base = eolian_class_get_by_name("Base"))); | 181 | fail_if(!(base = eolian_class_get_by_name("Base"))); |
187 | 182 | ||
188 | /* Base ctor */ | ||
189 | fail_if(!(fid = eolian_class_function_get_by_name(base, "constructor", EOLIAN_METHOD))); | ||
190 | fail_if(!eolian_function_is_pure_virtual(fid, EOLIAN_METHOD)); | ||
191 | |||
192 | /* Property */ | ||
193 | fail_if(!(fid = eolian_class_function_get_by_name(class, "a", EOLIAN_PROPERTY))); | ||
194 | fail_if(!eolian_function_is_pure_virtual(fid, EOLIAN_PROP_SET)); | ||
195 | fail_if(eolian_function_is_pure_virtual(fid, EOLIAN_PROP_GET)); | ||
196 | |||
197 | /* Method */ | ||
198 | fail_if(!(fid = eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD))); | ||
199 | fail_if(!eolian_function_is_pure_virtual(fid, EOLIAN_METHOD)); | ||
200 | |||
201 | /* Implements */ | 183 | /* Implements */ |
202 | fail_if(!(iter = eolian_class_implements_get(class))); | 184 | fail_if(!(iter = eolian_class_implements_get(class))); |
203 | 185 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); /* skip a */ | |
204 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); | ||
205 | fail_if(eolian_implement_is_auto(impl, EOLIAN_METHOD)); | ||
206 | fail_if(eolian_implement_is_empty(impl, EOLIAN_METHOD)); | ||
207 | fail_if(eolian_implement_is_pure_virtual(impl, EOLIAN_METHOD)); | ||
208 | fail_if(!(impl_class = eolian_implement_class_get(impl))); | ||
209 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); | ||
210 | fail_if(impl_class != base); | ||
211 | fail_if(strcmp(eolian_function_name_get(impl_func), "constructor")); | ||
212 | 186 | ||
213 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); | 187 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); |
214 | fail_if(!eolian_implement_is_auto(impl, EOLIAN_PROP_SET)); | 188 | fail_if(!eolian_implement_is_auto(impl, EOLIAN_PROP_SET)); |
@@ -218,12 +192,9 @@ START_TEST(eolian_override) | |||
218 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); | 192 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); |
219 | fail_if(impl_class != class); | 193 | fail_if(impl_class != class); |
220 | fail_if(strcmp(eolian_function_name_get(impl_func), "b")); | 194 | fail_if(strcmp(eolian_function_name_get(impl_func), "b")); |
221 | fail_if(!eolian_function_is_auto(impl_func, EOLIAN_PROP_SET)); | 195 | |
222 | fail_if(eolian_function_is_auto(impl_func, EOLIAN_PROP_GET)); | 196 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); /* skip c */ |
223 | fail_if(eolian_function_is_empty(impl_func, EOLIAN_PROP_SET)); | 197 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); /* skip foo */ |
224 | fail_if(eolian_function_is_empty(impl_func, EOLIAN_PROP_GET)); | ||
225 | fail_if(eolian_function_is_pure_virtual(impl_func, EOLIAN_PROP_SET)); | ||
226 | fail_if(eolian_function_is_pure_virtual(impl_func, EOLIAN_PROP_GET)); | ||
227 | 198 | ||
228 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); | 199 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); |
229 | fail_if(eolian_implement_is_auto(impl, EOLIAN_METHOD)); | 200 | fail_if(eolian_implement_is_auto(impl, EOLIAN_METHOD)); |
@@ -233,9 +204,15 @@ START_TEST(eolian_override) | |||
233 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); | 204 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); |
234 | fail_if(impl_class != class); | 205 | fail_if(impl_class != class); |
235 | fail_if(strcmp(eolian_function_name_get(impl_func), "bar")); | 206 | fail_if(strcmp(eolian_function_name_get(impl_func), "bar")); |
236 | fail_if(eolian_function_is_auto(impl_func, EOLIAN_METHOD)); | 207 | |
237 | fail_if(!eolian_function_is_empty(impl_func, EOLIAN_METHOD)); | 208 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); |
238 | fail_if(eolian_function_is_pure_virtual(impl_func, EOLIAN_METHOD)); | 209 | fail_if(eolian_implement_is_auto(impl, EOLIAN_METHOD)); |
210 | fail_if(eolian_implement_is_empty(impl, EOLIAN_METHOD)); | ||
211 | fail_if(eolian_implement_is_pure_virtual(impl, EOLIAN_METHOD)); | ||
212 | fail_if(!(impl_class = eolian_implement_class_get(impl))); | ||
213 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); | ||
214 | fail_if(impl_class != base); | ||
215 | fail_if(strcmp(eolian_function_name_get(impl_func), "constructor")); | ||
239 | 216 | ||
240 | eina_iterator_free(iter); | 217 | eina_iterator_free(iter); |
241 | 218 | ||
@@ -285,6 +262,8 @@ START_TEST(eolian_ctor_dtor) | |||
285 | /* Base ctor/dtor */ | 262 | /* Base ctor/dtor */ |
286 | fail_if(!(iter = eolian_class_implements_get(class))); | 263 | fail_if(!(iter = eolian_class_implements_get(class))); |
287 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); | 264 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); |
265 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); | ||
266 | fail_if(!(eina_iterator_next(iter, (void**)&impl))); | ||
288 | fail_if(!(impl_class = eolian_implement_class_get(impl))); | 267 | fail_if(!(impl_class = eolian_implement_class_get(impl))); |
289 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); | 268 | fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); |
290 | fail_if(impl_class != base); | 269 | fail_if(impl_class != base); |