eolian: remove static_array and terminated_array
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Fri, 22 Sep 2017 16:01:15 +0000 (18:01 +0200)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Fri, 22 Sep 2017 16:01:15 +0000 (18:01 +0200)
These types are of questionable value and the API was not entirely
thought out - remove for now, and if a legitimate use is found
later, they may be readded (with a better API), but typically it
seems best to redesign the bad APIs around safe containers...

13 files changed:
src/bin/eolian/types.c
src/bindings/luajit/eolian.lua
src/lib/eolian/Eolian.h
src/lib/eolian/database_type_api.c
src/lib/eolian/database_validate.c
src/lib/eolian/eo_lexer.c
src/lib/eolian/eo_lexer.h
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.h
src/scripts/elua/apps/docgen/doctree.lua
src/tests/eolian/data/struct.eo
src/tests/eolian/data/struct_ref.c
src/tests/eolian/eolian_parsing.c

index ec06c818693f351fd1c3bd8b6ed64a8df9c11d8c..ae4cd72d63ccbf66e718e1afd6369fc8b1eab882 100644 (file)
@@ -41,22 +41,10 @@ _type_generate(const Eolian_Unit *src, const Eolian_Typedecl *tp,
              {
                 const Eolian_Type *mtp = eolian_typedecl_struct_field_type_get(memb);
                 Eina_Stringshare *ct = NULL;
-                if (eolian_type_type_get(mtp) == EOLIAN_TYPE_STATIC_ARRAY)
-                  {
-                     ct = eolian_type_c_type_get(eolian_type_base_type_get(mtp),
-                                                 EOLIAN_C_TYPE_DEFAULT);
-                     eina_strbuf_append_printf(buf, "  %s%s%s[%zu];",
-                        ct, strchr(ct, '*') ? "" : " ",
-                        eolian_typedecl_struct_field_name_get(memb),
-                        eolian_type_array_size_get(mtp));
-                  }
-                else
-                  {
-                     ct = eolian_type_c_type_get(mtp, EOLIAN_C_TYPE_DEFAULT);
-                     eina_strbuf_append_printf(buf, "  %s%s%s;",
-                        ct, strchr(ct, '*') ? "" : " ",
-                        eolian_typedecl_struct_field_name_get(memb));
-                  }
+                ct = eolian_type_c_type_get(mtp, EOLIAN_C_TYPE_DEFAULT);
+                eina_strbuf_append_printf(buf, "  %s%s%s;",
+                   ct, strchr(ct, '*') ? "" : " ",
+                   eolian_typedecl_struct_field_name_get(memb));
                 eina_stringshare_del(ct);
                 const Eolian_Documentation *fdoc
                    = eolian_typedecl_struct_field_documentation_get(memb);
index 7deca593720d06666a926bd0f5b48814cb08d501..1f3c0096825c4f5b3692600e56ac0d5400ec6ae3 100644 (file)
@@ -80,8 +80,6 @@ ffi.cdef [[
         EOLIAN_TYPE_VOID,
         EOLIAN_TYPE_REGULAR,
         EOLIAN_TYPE_CLASS,
-        EOLIAN_TYPE_STATIC_ARRAY,
-        EOLIAN_TYPE_TERMINATED_ARRAY,
         EOLIAN_TYPE_UNDEFINED
     } Eolian_Type_Type;
 
@@ -342,7 +340,6 @@ ffi.cdef [[
     const Eolian_Type *eolian_typedecl_aliased_base_get(const Eolian_Typedecl *tp);
 
     const Eolian_Class *eolian_type_class_get(const Eolian_Unit *unit, const Eolian_Type *tp);
-    size_t eolian_type_array_size_get(const Eolian_Type *tp);
     Eina_Bool eolian_type_is_owned(const Eolian_Type *tp);
     Eina_Bool eolian_type_is_const(const Eolian_Type *tp);
     Eina_Bool eolian_type_is_ptr(const Eolian_Type *tp);
@@ -504,9 +501,7 @@ M.type_type = {
     VOID             = 1,
     REGULAR          = 2,
     CLASS            = 3,
-    STATIC_ARRAY     = 4,
-    TERMINATED_ARRAY = 5,
-    UNDEFINED        = 6
+    UNDEFINED        = 4
 }
 
 M.typedecl_type = {
@@ -715,10 +710,6 @@ M.Type = ffi.metatype("Eolian_Type", {
             return v
         end,
 
-        array_size_get = function(self)
-            return tonumber(eolian.eolian_type_array_size_get(self))
-        end,
-
         is_owned = function(self)
             return eolian.eolian_type_is_owned(self) ~= 0
         end,
index 5ec4abba429e79edc0e4aa507884303218b87df0..458a7343e602ace581adee284420d53401469e99 100644 (file)
@@ -228,8 +228,6 @@ typedef enum
    EOLIAN_TYPE_VOID,
    EOLIAN_TYPE_REGULAR,
    EOLIAN_TYPE_CLASS,
-   EOLIAN_TYPE_STATIC_ARRAY,
-   EOLIAN_TYPE_TERMINATED_ARRAY,
    EOLIAN_TYPE_UNDEFINED
 } Eolian_Type_Type;
 
@@ -1824,16 +1822,6 @@ EAPI const Eolian_Type *eolian_type_aliased_base_get(const Eolian_Type *tp);
  */
 EAPI const Eolian_Class *eolian_type_class_get(const Eolian_Unit *unit, const Eolian_Type *tp);
 
-/*
- * @brief Get the size of an EOLIAN_TYPE_STATIC_ARRAY.
- *
- * @param[in] tp the type.
- * @return the size or 0.
- *
- * @ingroup Eolian
- */
-EAPI size_t eolian_type_array_size_get(const Eolian_Type *tp);
-
 /*
  * @brief Get whether the given type is owned.
  *
index 8d83a8f273195c9b581ec883345736c6a29b2228..f1db367ec4b30ea1b9081af600d726e4e73fb175 100644 (file)
@@ -319,13 +319,6 @@ eolian_type_class_get(const Eolian_Unit *unit, const Eolian_Type *tp)
    return eolian_class_get_by_name(unit, tp->full_name);
 }
 
-EAPI size_t
-eolian_type_array_size_get(const Eolian_Type *tp)
-{
-   EINA_SAFETY_ON_NULL_RETURN_VAL(tp, 0);
-   return tp->static_size;
-}
-
 EAPI Eina_Bool
 eolian_type_is_owned(const Eolian_Type *tp)
 {
index 980ec628bb77614f8ac5c25a62018ebc8e9fe2a8..0a296224da22a33f12f6853898bcb920b3917476 100644 (file)
@@ -208,17 +208,6 @@ _validate_type(Eolian_Type *tp)
              tp->freefunc = eina_stringshare_ref(tpp->freefunc);
            return EINA_TRUE;
         }
-      case EOLIAN_TYPE_TERMINATED_ARRAY:
-        if (!database_type_is_ownable(tp->base_type, EINA_TRUE))
-          {
-             snprintf(buf, sizeof(buf),
-                      "invalid base type '%s' for terminated array",
-                      tp->base_type->full_name);
-             return _type_error(tp, buf);
-          }
-        return _validate_type(tp->base_type);
-      case EOLIAN_TYPE_STATIC_ARRAY:
-        return _validate_type(tp->base_type);
       case EOLIAN_TYPE_CLASS:
         {
            /* FIXME: pass unit properly */
index 9318186b8295ae2fa70f80f044ae4b2785f2f0bc..188af3c20ef74d00c4bf5c4a5858dfed209e47ec 100644 (file)
@@ -71,8 +71,6 @@ static const char * const ctypes[] =
 
    "void",
 
-   NULL, NULL, /* array types */
-
    "Eina_Accessor *", "Eina_Array *", "Eina_Iterator *", "Eina_Hash *",
    "Eina_List *",
    "Efl_Future *",
index 88e68a4690e20f0656d07c7cf62f27b80d64f86a..849cc98efb19ec42d655c86d5bb563c8dd19c0e2 100644 (file)
@@ -50,8 +50,6 @@ enum Tokens
     \
     KW(void), \
     \
-    KW(static_array), KW(terminated_array), \
-    \
     KW(accessor), KW(array), KW(iterator), KW(hash), KW(list), \
     KW(future),                                   \
     KW(generic_value), \
index 3095864c6f9cd7a289495a1c309fb2e8ec6d4761..a3bdc8c41c9d57d92b8dbae6400da6d3407672fe 100644 (file)
@@ -751,48 +751,6 @@ parse_type_void(Eo_Lexer *ls, Eina_Bool allow_ref, Eina_Bool allow_sarray)
         def->type = EOLIAN_TYPE_UNDEFINED;
         eo_lexer_get(ls);
      }
-   else if (ls->t.kw == KW_static_array)
-     {
-        if (!allow_sarray)
-          eo_lexer_syntax_error(ls, "static arrays not allowed in this context");
-        def->type = EOLIAN_TYPE_STATIC_ARRAY;
-        eo_lexer_get(ls);
-        check_next(ls, '<');
-        def->base_type = parse_type(ls, EINA_FALSE, EINA_FALSE);
-        pop_type(ls);
-        check_next(ls, ',');
-        check(ls, TOK_NUMBER);
-        eo_lexer_context_push(ls);
-        if (ls->t.kw == NUM_FLOAT || ls->t.kw == NUM_DOUBLE)
-          {
-             eo_lexer_context_restore(ls);
-             eo_lexer_syntax_error(ls, "integer expected");
-          }
-        eo_lexer_context_pop(ls);
-        switch (ls->t.kw)
-          {
-           case NUM_INT   : def->static_size = ls->t.value.i;   break;
-           case NUM_UINT  : def->static_size = ls->t.value.u;   break;
-           case NUM_LONG  : def->static_size = ls->t.value.l;   break;
-           case NUM_ULONG : def->static_size = ls->t.value.ul;  break;
-           case NUM_LLONG : def->static_size = ls->t.value.ll;  break;
-           case NUM_ULLONG: def->static_size = ls->t.value.ull; break;
-           default:
-             eo_lexer_syntax_error(ls, "wrong type, internal error");
-             break;
-          }
-        eo_lexer_get(ls);
-        check_next(ls, '>');
-     }
-   else if (ls->t.kw == KW_terminated_array)
-     {
-        def->type = EOLIAN_TYPE_TERMINATED_ARRAY;
-        eo_lexer_get(ls);
-        check_next(ls, '<');
-        def->base_type = parse_type(ls, EINA_FALSE, EINA_FALSE);
-        pop_type(ls);
-        check_next(ls, '>');
-     }
    else
      {
         int tpid = ls->t.kw;
index d0118d0653309d6b7f77b6b73785367d94212407..1a165a42e8a256636de51168b1c2aa9d956cddad 100644 (file)
@@ -162,7 +162,6 @@ struct _Eolian_Type
    Eina_Stringshare *full_name;
    Eina_List        *namespaces;
    Eina_Stringshare *freefunc;
-   size_t static_size;
    Eina_Bool is_const  :1;
    Eina_Bool is_ptr    :1;
    Eina_Bool owned     :1;
index f3876829aac562c5d58719337755fbd275aafa5b..146479fa005d434532e03dc8a4d0cdc1030383a2 100644 (file)
@@ -667,8 +667,6 @@ M.Type = Node:clone {
     VOID = eolian.type_type.VOID,
     REGULAR = eolian.type_type.REGULAR,
     CLASS = eolian.type_type.CLASS,
-    STATIC_ARRAY = eolian.type_type.STATIC_ARRAY,
-    TERMINATED_ARRAY = eolian.type_type.TERMINATED_ARRAY,
     UNDEFINED = eolian.type_type.UNDEFINED,
 
     __ctor = function(self, tp)
@@ -721,10 +719,6 @@ M.Type = Node:clone {
         return self.type:class_get(nil)
     end,
 
-    array_size_get = function(self)
-        return self.type_array_size_get()
-    end,
-
     is_owned = function(self)
         return self.type:is_owned()
     end,
@@ -779,13 +773,6 @@ M.Type = Node:clone {
                     .. table.concat(stypes, ", ") .. ">")
             end
             return wrap_type_attrs(self, self:full_name_get())
-        elseif tpt == self.STATIC_ARRAY then
-            return wrap_type_attrs(self, "static_array<"
-                .. self:base_type_get():serialize() .. ", "
-                .. self:array_size_get() .. ">")
-        elseif tpt == self.TERMINATED_ARRAY then
-            return wrap_type_attrs(self, "terminated_array<"
-                .. self:base_type_get():serialize() .. ">")
         end
         error("unhandled type type: " .. tpt)
     end
index cb664f366c244751e803903f0ffc3c068dca3290..55e6c50f4c7d489251874bd967a50b57be0206f6 100644 (file)
@@ -1,8 +1,6 @@
 struct Named {
     field: ptr(int);
     something: string;
-    arr: static_array<int, 16>;
-    tarr: terminated_array<string>;
 }
 
 struct Another {
index cb64af6cb37950739779ae52218f19ec70e3a587..42f34a9be247a27f91b86785157d984ee3783e44 100644 (file)
@@ -15,8 +15,6 @@ typedef struct _Named
 {
   int *field;
   const char *something;
-  int arr[16];
-  const char **tarr;
 } Named;
 
 typedef struct _Another
index 79fdb64bb4a53b77add775cd85bd4e1a18f2be90..9e2c0d9bfc586eabd5ceca83052e0ff854ed7d01 100644 (file)
@@ -677,21 +677,6 @@ START_TEST(eolian_struct)
    fail_if(!(type_name = eolian_type_c_type_get(ftype, EOLIAN_C_TYPE_DEFAULT)));
    fail_if(strcmp(type_name, "const char *"));
    eina_stringshare_del(type_name);
-   fail_if(!(field = eolian_typedecl_struct_field_get(tdl, "arr")));
-   fail_if(!(ftype = eolian_typedecl_struct_field_type_get(field)));
-   fail_if(eolian_type_is_ptr(ftype));
-   fail_if(eolian_type_array_size_get(ftype) != 16);
-   fail_if(eolian_type_type_get(ftype) != EOLIAN_TYPE_STATIC_ARRAY);
-   fail_if(!(type_name = eolian_type_c_type_get(ftype, EOLIAN_C_TYPE_DEFAULT)));
-   fail_if(strcmp(type_name, "int *"));
-   eina_stringshare_del(type_name);
-   fail_if(!(field = eolian_typedecl_struct_field_get(tdl, "tarr")));
-   fail_if(!(ftype = eolian_typedecl_struct_field_type_get(field)));
-   fail_if(eolian_type_is_ptr(ftype));
-   fail_if(!(type_name = eolian_type_c_type_get(ftype, EOLIAN_C_TYPE_DEFAULT)));
-   fail_if(eolian_type_type_get(ftype) != EOLIAN_TYPE_TERMINATED_ARRAY);
-   fail_if(strcmp(type_name, "const char **"));
-   eina_stringshare_del(type_name);
 
    /* referencing */
    fail_if(!(tdl = eolian_typedecl_struct_get_by_name(unit, "Another")));