q66 pushed a commit to branch master.

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

commit b81e05def505f840d64f36404b7b2a146d9a7652
Author: Daniel Kolesa <[email protected]>
Date:   Mon Jul 21 17:12:35 2014 +0100

    eolian: new API: eolian_type_alias_find_by_name, remove the old APIs that 
take an alias name, update tests
---
 src/lib/eolian/Eolian.h            | 30 +++++-------------------------
 src/lib/eolian/database_type_api.c | 28 ++++------------------------
 src/lib/eolian/eo_parser.c         |  1 +
 src/tests/eolian/data/extern.eo    |  2 +-
 src/tests/eolian/data/typedef.eo   |  2 +-
 src/tests/eolian/eolian_parsing.c  | 31 ++++++++++++++++++++++---------
 6 files changed, 34 insertions(+), 60 deletions(-)

diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index e4d72f1..8f9d63b 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -761,37 +761,17 @@ EAPI Eina_Bool eolian_class_ctor_enable_get(const 
Eolian_Class *klass);
 EAPI Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
 
 /*
- * @brief Find the type for a certain alias
+ * @brief Find the an alias type by name. Supports namespaces.
  *
- * @param[in] alias alias of the type definition
- * @return real type of the type definition
+ * @param[in] name the name of the alias
+ * @return the alias type or NULL
  *
  * @ingroup Eolian
  */
-EAPI const Eolian_Type *eolian_type_find_by_alias(const char *alias);
+EAPI const Eolian_Type *eolian_type_alias_find_by_name(const char *name);
 
 /*
- * @brief Check if a typedef is extern.
- *
- * @param[in] alias alias of the typedef
- * @return EINA_TRUE if it's extern, EINA_FALSE otherwise.
- *
- * @ingroup Eolian
- */
-EAPI Eina_Bool eolian_typedef_is_extern(const char *alias);
-
-/*
- * @brief Find the filename for a certain alias
- *
- * @param[in] alias alias of the type definition
- * @return the filename or NULL if @c alias is not found
- *
- * @ingroup Eolian
- */
-EAPI Eina_Stringshare *eolian_typedef_file_get(const char *alias);
-
-/*
- * @brief Find a struct by name
+ * @brief Find a struct by name. Supports namespaces.
  *
  * @param[in] name the name of the struct
  * @return the struct or NULL
diff --git a/src/lib/eolian/database_type_api.c 
b/src/lib/eolian/database_type_api.c
index 1b386e8..ba9cd47 100644
--- a/src/lib/eolian/database_type_api.c
+++ b/src/lib/eolian/database_type_api.c
@@ -3,33 +3,13 @@
 #include "eo_definitions.h"
 
 EAPI const Eolian_Type *
-eolian_type_find_by_alias(const char *alias)
+eolian_type_alias_find_by_name(const char *name)
 {
    if (!_aliases) return NULL;
-   Eina_Stringshare *shr = eina_stringshare_add(alias);
-   Eolian_Type *def = eina_hash_find(_aliases, shr);
-   eina_stringshare_del(shr);
-   return def ? def->base_type : NULL;
-}
-
-EAPI Eina_Bool
-eolian_typedef_is_extern(const char *alias)
-{
-   if (!_aliases) return EINA_FALSE;
-   Eina_Stringshare *shr = eina_stringshare_add(alias);
-   Eolian_Type *def = eina_hash_find(_aliases, shr);
-   eina_stringshare_del(shr);
-   return def ? def->is_extern : EINA_FALSE;
-}
-
-EAPI Eina_Stringshare *
-eolian_typedef_file_get(const char *alias)
-{
-   if (!_aliases) return EINA_FALSE;
-   Eina_Stringshare *shr = eina_stringshare_add(alias);
-   Eolian_Type *def = eina_hash_find(_aliases, shr);
+   Eina_Stringshare *shr = eina_stringshare_add(name);
+   Eolian_Type *tp = eina_hash_find(_aliases, shr);
    eina_stringshare_del(shr);
-   return def ? eina_stringshare_ref(def->file) : NULL;
+   return tp;
 }
 
 EAPI const Eolian_Type *
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index bb9a77d..597ea9c 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -471,6 +471,7 @@ parse_typedef(Eo_Lexer *ls)
         is_extern = EINA_TRUE;
         eo_lexer_get(ls);
      }
+   def->type = EOLIAN_TYPE_ALIAS;
    def->is_extern = is_extern;
    buf = push_strbuf(ls);
    line = ls->line_number;
diff --git a/src/tests/eolian/data/extern.eo b/src/tests/eolian/data/extern.eo
index b039b6c..2c6b472 100644
--- a/src/tests/eolian/data/extern.eo
+++ b/src/tests/eolian/data/extern.eo
@@ -2,7 +2,7 @@
 type Foo: int;
 
 /* extern type */
-type @extern Evas_Coord: int;
+type @extern Evas.Coord: int;
 
 /* regular struct */
 struct X
diff --git a/src/tests/eolian/data/typedef.eo b/src/tests/eolian/data/typedef.eo
index fa132f9..e5c691f 100644
--- a/src/tests/eolian/data/typedef.eo
+++ b/src/tests/eolian/data/typedef.eo
@@ -1,4 +1,4 @@
-type Evas_Coord: int; /* Simple type definition */
+type Evas.Coord: int; /* Simple type definition */
 type List_Objects: own(Eina.List*)< Eo *>; /* A little more complex */
 
 class Dummy {
diff --git a/src/tests/eolian/eolian_parsing.c 
b/src/tests/eolian/eolian_parsing.c
index 128c6d2..69ae557 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -221,7 +221,7 @@ END_TEST
 
 START_TEST(eolian_typedef)
 {
-   const Eolian_Type *type = NULL;
+   const Eolian_Type *atype = NULL, *type = NULL;
    const char *type_name = NULL;
    Eina_Iterator *iter = NULL;
    const Eolian_Class *class;
@@ -236,7 +236,12 @@ START_TEST(eolian_typedef)
    fail_if(!eolian_class_function_find_by_name(class, "foo", EOLIAN_METHOD));
 
    /* Basic type */
-   fail_if(!(type = eolian_type_find_by_alias("Evas_Coord")));
+   fail_if(!(atype = eolian_type_alias_find_by_name("Evas.Coord")));
+   fail_if(eolian_type_type_get(atype) != EOLIAN_TYPE_ALIAS);
+   fail_if(!(type_name = eolian_type_name_get(atype)));
+   fail_if(strcmp(type_name, "Coord"));
+   eina_stringshare_del(type_name);
+   fail_if(!(type = eolian_type_base_type_get(atype)));
    fail_if(!(type_name = eolian_type_name_get(type)));
    fail_if(eolian_type_is_own(type));
    fail_if(eolian_type_is_const(type));
@@ -245,12 +250,16 @@ START_TEST(eolian_typedef)
    eina_stringshare_del(type_name);
 
    /* File */
-   fail_if(!(file = eolian_typedef_file_get("Evas_Coord")));
+   fail_if(!(file = eolian_type_file_get(atype)));
    fail_if(strcmp(file, "typedef.eo"));
    eina_stringshare_del(file);
 
    /* Complex type */
-   fail_if(!(type = eolian_type_find_by_alias("List_Objects")));
+   fail_if(!(atype = eolian_type_alias_find_by_name("List_Objects")));
+   fail_if(!(type_name = eolian_type_name_get(atype)));
+   fail_if(strcmp(type_name, "List_Objects"));
+   eina_stringshare_del(type_name);
+   fail_if(!(type = eolian_type_base_type_get(atype)));
    fail_if(!(type_name = eolian_type_c_type_get(type)));
    fail_if(!eolian_type_is_own(type));
    fail_if(strcmp(type_name, "Eina_List *"));
@@ -491,7 +500,7 @@ END_TEST
 
 START_TEST(eolian_struct)
 {
-   const Eolian_Type *type = NULL, *field = NULL;
+   const Eolian_Type *atype = NULL, *type = NULL, *field = NULL;
    const Eolian_Class *class;
    const char *type_name;
    const char *file;
@@ -541,14 +550,16 @@ START_TEST(eolian_struct)
    fail_if(eolian_type_type_get(field) != EOLIAN_TYPE_REGULAR_STRUCT);
 
    /* typedef */
-   fail_if(!(type = eolian_type_find_by_alias("Foo")));
+   fail_if(!(atype = eolian_type_alias_find_by_name("Foo")));
+   fail_if(!(type = eolian_type_base_type_get(atype)));
    fail_if(!(type_name = eolian_type_name_get(type)));
    fail_if(eolian_type_type_get(type) != EOLIAN_TYPE_STRUCT);
    fail_if(strcmp(type_name, "_Foo"));
    eina_stringshare_del(type_name);
 
    /* typedef - anon */
-   fail_if(!(type = eolian_type_find_by_alias("Bar")));
+   fail_if(!(atype = eolian_type_alias_find_by_name("Bar")));
+   fail_if(!(type = eolian_type_base_type_get(atype)));
    fail_if(!!(type_name = eolian_type_name_get(type)));
    fail_if(eolian_type_type_get(type) != EOLIAN_TYPE_STRUCT);
 
@@ -571,10 +582,12 @@ START_TEST(eolian_extern)
    fail_if(!eolian_class_function_find_by_name(class, "foo", EOLIAN_METHOD));
 
    /* regular type */
-   fail_if(eolian_typedef_is_extern("Foo"));
+   fail_if(!(type = eolian_type_alias_find_by_name("Foo")));
+   fail_if(eolian_type_is_extern(type));
 
    /* extern type */
-   fail_if(!eolian_typedef_is_extern("Evas_Coord"));
+   fail_if(!(type = eolian_type_alias_find_by_name("Evas.Coord")));
+   fail_if(!eolian_type_is_extern(type));
 
    /* regular struct */
    fail_if(!(type = eolian_type_struct_find_by_name("X")));

-- 


Reply via email to