q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=93c93328ac8390bea8039b023950290cc3750080

commit 93c93328ac8390bea8039b023950290cc3750080
Author: Daniel Kolesa <d.kol...@osg.samsung.com>
Date:   Wed Aug 30 15:12:01 2017 +0200

    eolian gen: clean up param gen
---
 src/bin/eolian/headers.c | 134 +++++++++++++++++++----------------------------
 1 file changed, 54 insertions(+), 80 deletions(-)

diff --git a/src/bin/eolian/headers.c b/src/bin/eolian/headers.c
index 71d66f3d65..a0c6879441 100644
--- a/src/bin/eolian/headers.c
+++ b/src/bin/eolian/headers.c
@@ -11,6 +11,58 @@ _get_add_star(Eolian_Function_Type ftype, 
Eolian_Parameter_Dir pdir)
    return "";
 }
 
+int
+eo_gen_type_c_params_gen(Eina_Strbuf *buf, Eolian_Function_Parameter *pr, 
Eolian_Function_Type ftype, int *rpid)
+{
+   const Eolian_Type *prt = eolian_parameter_type_get(pr);
+   const Eolian_Typedecl *ptd = eolian_type_typedecl_get(prt);
+   const char *prn = eolian_parameter_name_get(pr);
+   Eina_Stringshare *prtn = eolian_type_c_type_get(prt, EOLIAN_C_TYPE_PARAM);
+
+   if (ptd && (eolian_typedecl_type_get(ptd) == 
EOLIAN_TYPEDECL_FUNCTION_POINTER))
+     {
+        eina_strbuf_append_printf(buf, "void *%s_data, %s %s, Eina_Free_Cb 
%s_free_cb",
+                                  prn, prtn, prn, prn);
+        eina_stringshare_del(prtn);
+        *rpid = 1;
+        return 3;
+     }
+
+   eina_strbuf_append(buf, prtn);
+   if (prtn[strlen(prtn) - 1] != '*')
+     eina_strbuf_append_char(buf, ' ');
+   eina_strbuf_append(buf, _get_add_star(ftype, 
eolian_parameter_direction_get(pr)));
+   eina_strbuf_append(buf, prn);
+   eina_stringshare_del(prtn);
+   *rpid = 0;
+   return 1;
+}
+
+static void
+_gen_params(Eina_Iterator *itr, Eina_Strbuf *buf, Eina_Strbuf **flagbuf, int 
*nidx, Eolian_Function_Type ftype)
+{
+   Eolian_Function_Parameter *pr;
+   EINA_ITERATOR_FOREACH(itr, pr)
+     {
+        int rpid = 0;
+        if (*nidx)
+          eina_strbuf_append(buf, ", ");
+        *nidx += eo_gen_type_c_params_gen(buf, pr, ftype, &rpid);
+
+        if (!eolian_parameter_is_nonull(pr))
+          continue;
+
+        if (!*flagbuf)
+          {
+             *flagbuf = eina_strbuf_new();
+             eina_strbuf_append_printf(*flagbuf, " EINA_ARG_NONNULL(%d", *nidx 
- rpid);
+          }
+        else
+          eina_strbuf_append_printf(*flagbuf, ", %d", *nidx - rpid);
+     }
+   eina_iterator_free(itr);
+}
+
 static void
 _gen_func(const Eolian_Unit *src, const Eolian_Function *fid,
           Eolian_Function_Type ftype, Eina_Strbuf *buf, char *cname,
@@ -70,7 +122,6 @@ _gen_func(const Eolian_Unit *src, const Eolian_Function *fid,
    eina_strbuf_append(buf, fcn);
    eina_stringshare_del(fcn);
 
-   Eina_Bool first = EINA_TRUE;
    Eina_Strbuf *flagbuf = NULL;
    int nidx = !legacy || !eolian_function_is_class(fid);
 
@@ -86,35 +137,9 @@ _gen_func(const Eolian_Unit *src, const Eolian_Function 
*fid,
           eina_strbuf_append_printf(buf, "%s *obj", cname);
         else
           eina_strbuf_append(buf, "Eo *obj");
-        first = EINA_FALSE;
      }
 
-   {
-      Eolian_Function_Parameter *pr = NULL;
-      Eina_Iterator *itr = eolian_property_keys_get(fid, ftype);
-      EINA_ITERATOR_FOREACH(itr, pr)
-        {
-           const Eolian_Type *prt = eolian_parameter_type_get(pr);
-           const char *prn = eolian_parameter_name_get(pr);
-           Eina_Stringshare *prtn = eolian_type_c_type_get(prt, 
EOLIAN_C_TYPE_PARAM);
-           ++nidx;
-           if (!first)
-             eina_strbuf_append(buf, ", ");
-           eina_strbuf_append_printf(buf, "%s %s", prtn, prn);
-           eina_stringshare_del(prtn);
-           first = EINA_FALSE;
-           if (!eolian_parameter_is_nonull(pr))
-             continue;
-           if (!flagbuf)
-             {
-                flagbuf = eina_strbuf_new();
-                eina_strbuf_append_printf(flagbuf, " EINA_ARG_NONNULL(%d", 
nidx);
-             }
-           else
-             eina_strbuf_append_printf(flagbuf, ", %d", nidx);
-        }
-      eina_iterator_free(itr);
-   }
+   _gen_params(eolian_property_keys_get(fid, ftype), buf, &flagbuf, &nidx, 
EOLIAN_PROPERTY);
 
    if (!var_as_ret)
      {
@@ -123,58 +148,7 @@ _gen_func(const Eolian_Unit *src, const Eolian_Function 
*fid,
           itr = eolian_property_values_get(fid, ftype);
         else
           itr = eolian_function_parameters_get(fid);
-
-        Eolian_Function_Parameter *pr = NULL;
-        EINA_ITERATOR_FOREACH(itr, pr)
-          {
-             const Eolian_Type *prt = eolian_parameter_type_get(pr);
-             const Eolian_Typedecl *ptd = eolian_type_typedecl_get(prt);
-             const char *prn = eolian_parameter_name_get(pr);
-             Eina_Stringshare *prtn = eolian_type_c_type_get(prt, 
EOLIAN_C_TYPE_PARAM);
-
-             if (ptd && eolian_typedecl_type_get(ptd) == 
EOLIAN_TYPEDECL_FUNCTION_POINTER)
-               {
-                  nidx += 3;
-                  if (!first)
-                    eina_strbuf_append(buf, ", ");
-                  eina_strbuf_append_printf(buf, "void *%s_data, %s %s, 
Eina_Free_Cb %s_free_cb",
-                                            prn, prtn, prn, prn);
-                  eina_stringshare_del(prtn);
-                  if (!eolian_parameter_is_nonull(pr))
-                    continue;
-                  if (!flagbuf)
-                    {
-                       flagbuf = eina_strbuf_new();
-                       eina_strbuf_append_printf(flagbuf, " 
EINA_ARG_NONNULL(%d", nidx - 1);
-                    }
-                  else
-                    eina_strbuf_append_printf(flagbuf, ", %d", nidx - 1);
-                  continue;
-               }
-
-             ++nidx;
-             if (!first)
-               eina_strbuf_append(buf, ", ");
-             eina_strbuf_append(buf, prtn);
-             if (prtn[strlen(prtn) - 1] != '*')
-               eina_strbuf_append_char(buf, ' ');
-             eina_strbuf_append(buf,
-                 _get_add_star(ftype, eolian_parameter_direction_get(pr)));
-             eina_strbuf_append(buf, prn);
-             eina_stringshare_del(prtn);
-             first = EINA_FALSE;
-             if (!eolian_parameter_is_nonull(pr))
-               continue;
-             if (!flagbuf)
-               {
-                  flagbuf = eina_strbuf_new();
-                  eina_strbuf_append_printf(flagbuf, " EINA_ARG_NONNULL(%d", 
nidx);
-               }
-             else
-               eina_strbuf_append_printf(flagbuf, ", %d", nidx);
-          }
-
-        eina_iterator_free(itr);
+        _gen_params(itr, buf, &flagbuf, &nidx, ftype);
      }
 
    if (flagbuf)

-- 


Reply via email to