eolian: pass unit to alias get by name
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 25 May 2017 12:56:44 +0000 (14:56 +0200)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Tue, 30 May 2017 15:15:54 +0000 (17:15 +0200)
src/bindings/luajit/eolian.lua
src/lib/eolian/Eolian.h
src/lib/eolian/database_expr.c
src/lib/eolian/database_type_api.c
src/tests/eolian/eolian_parsing.c

index ea4b8ab..d63210b 100644 (file)
@@ -297,7 +297,7 @@ ffi.cdef [[
     Eina_Bool eolian_class_ctor_enable_get(const Eolian_Class *klass);
     Eina_Bool eolian_class_dtor_enable_get(const Eolian_Class *klass);
     const char *eolian_class_c_get_function_name_get(const Eolian_Class *klass);
-    const Eolian_Typedecl *eolian_typedecl_alias_get_by_name(const char *name);
+    const Eolian_Typedecl *eolian_typedecl_alias_get_by_name(const Eolian_Unit *unit, const char *name);
     const Eolian_Typedecl *eolian_typedecl_struct_get_by_name(const char *name);
     const Eolian_Typedecl *eolian_typedecl_enum_get_by_name(const char *name);
     Eina_Iterator *eolian_typedecl_aliases_get_by_file(const char *fname);
@@ -1142,8 +1142,8 @@ M.Class = ffi.metatype("Eolian_Class", {
     }
 })
 
-M.typedecl_alias_get_by_name = function(name)
-    local v = eolian.eolian_typedecl_alias_get_by_name(name)
+M.typedecl_alias_get_by_name = function(unit, name)
+    local v = eolian.eolian_typedecl_alias_get_by_name(unit, name)
     if v == nil then return nil end
     return v
 end
index 266abed..7be3182 100644 (file)
@@ -1370,12 +1370,13 @@ EAPI Eina_Stringshare *eolian_class_c_data_type_get(const Eolian_Class *klass);
 /*
  * @brief Get an alias type declaration by name. Supports namespaces.
  *
+ * @param[in] unit the unit to look in
  * @param[in] name the name of the alias
  * @return the alias type or NULL
  *
  * @ingroup Eolian
  */
-EAPI const Eolian_Typedecl *eolian_typedecl_alias_get_by_name(const char *name);
+EAPI const Eolian_Typedecl *eolian_typedecl_alias_get_by_name(const Eolian_Unit *unit, const char *name);
 
 /*
  * @brief Get a struct declaration by name. Supports namespaces.
index 5717f8b..1cb2526 100644 (file)
@@ -513,7 +513,8 @@ eval_exp(const Eolian_Expression *expr, Eolian_Expression_Mask mask,
                 if (!(mask & EOLIAN_MASK_INT))
                   return expr_type_error(expr, EOLIAN_MASK_INT, mask);
 
-                etpd = eolian_typedecl_alias_get_by_name(fulln);
+                /* FIXME: pass unit properly */
+                etpd = eolian_typedecl_alias_get_by_name(NULL, fulln);
                 while (etpd && etpd->type == EOLIAN_TYPEDECL_ALIAS)
                   {
                      const Eolian_Type *etp = eolian_typedecl_base_type_get(etpd);
index 14a50b0..8d9a5d3 100644 (file)
@@ -7,7 +7,8 @@
 #include "eo_lexer.h"
 
 EAPI const Eolian_Typedecl *
-eolian_typedecl_alias_get_by_name(const char *name)
+eolian_typedecl_alias_get_by_name(const Eolian_Unit *unit EINA_UNUSED,
+                                  const char *name)
 {
    if (!_aliases) return NULL;
    Eina_Stringshare *shr = eina_stringshare_add(name);
index d81da22..64a89c2 100644 (file)
@@ -329,7 +329,7 @@ START_TEST(eolian_typedef)
    fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD));
 
    /* Basic type */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Evas.Coord")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Evas.Coord")));
    fail_if(eolian_typedecl_type_get(tdl) != EOLIAN_TYPEDECL_ALIAS);
    fail_if(!(type_name = eolian_typedecl_name_get(tdl)));
    fail_if(strcmp(type_name, "Coord"));
@@ -348,12 +348,12 @@ START_TEST(eolian_typedef)
    fail_if(strcmp(file, "typedef.eo"));
 
    /* Lowest alias base */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Evas.Coord3")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Evas.Coord3")));
    fail_if(!(type = eolian_typedecl_aliased_base_get(tdl)));
    fail_if(strcmp(eolian_type_name_get(type), "int"));
 
    /* Complex type */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("List_Objects")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "List_Objects")));
    fail_if(!(type_name = eolian_typedecl_name_get(tdl)));
    fail_if(strcmp(type_name, "List_Objects"));
    fail_if(!(type = eolian_typedecl_base_type_get(tdl)));
@@ -742,11 +742,11 @@ START_TEST(eolian_extern)
    fail_if(!eolian_class_function_get_by_name(class, "foo", EOLIAN_METHOD));
 
    /* regular type */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Foo")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Foo")));
    fail_if(eolian_typedecl_is_extern(tdl));
 
    /* extern type */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Evas.Coord")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Evas.Coord")));
    fail_if(!eolian_typedecl_is_extern(tdl));
 
    /* regular struct */
@@ -986,9 +986,9 @@ START_TEST(eolian_free_func)
    fail_if(strcmp(eolian_typedecl_free_func_get(tdl), "test_free"));
 
    /* typedef */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Typedef1")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Typedef1")));
    fail_if(eolian_typedecl_free_func_get(tdl));
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Typedef2")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Typedef2")));
    fail_if(strcmp(eolian_typedecl_free_func_get(tdl), "def_free"));
 
    /* opaque struct */
@@ -998,10 +998,10 @@ START_TEST(eolian_free_func)
    fail_if(strcmp(eolian_typedecl_free_func_get(tdl), "opaque_free"));
 
    /* pointer */
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Pointer1")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Pointer1")));
    fail_if(!(type = eolian_typedecl_base_type_get(tdl)));
    fail_if(eolian_type_free_func_get(type));
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Pointer2")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Pointer2")));
    fail_if(!(type = eolian_typedecl_base_type_get(tdl)));
    fail_if(strcmp(eolian_type_free_func_get(type), "ptr_free"));
 
@@ -1071,7 +1071,7 @@ START_TEST(eolian_import)
    fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/import.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Import")));
 
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Imported")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Imported")));
    fail_if(strcmp(eolian_typedecl_file_get(tdl), "import_types.eot"));
 
    fail_if(!(tdl = eolian_typedecl_struct_get_by_name("Imported_Struct")));
@@ -1287,7 +1287,7 @@ START_TEST(eolian_docs)
                   "Docs for bar."));
    fail_if(eolian_documentation_description_get(doc));
 
-   fail_if(!(tdl = eolian_typedecl_alias_get_by_name("Alias")));
+   fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Alias")));
    fail_if(!(doc = eolian_typedecl_documentation_get(tdl)));
    fail_if(strcmp(eolian_documentation_summary_get(doc),
                   "Docs for typedef."));