q66 pushed a commit to branch master.

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

commit a5e66b3421ef96c4b16fbd7a4fc57f739e6c52ff
Author: Daniel Kolesa <d.kol...@osg.samsung.com>
Date:   Fri May 26 15:01:00 2017 +0200

    eolian: doc token ref resolver now takes unit
---
 src/bindings/luajit/eolian.lua     |  6 +++---
 src/lib/eolian/Eolian.h            |  3 ++-
 src/lib/eolian/database_validate.c |  3 ++-
 src/lib/eolian/eolian_database.c   | 21 +++++++++------------
 src/tests/eolian/eolian_parsing.c  |  4 ++--
 5 files changed, 18 insertions(+), 19 deletions(-)

diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua
index 19c91bdc4e..473a587aec 100644
--- a/src/bindings/luajit/eolian.lua
+++ b/src/bindings/luajit/eolian.lua
@@ -398,7 +398,7 @@ ffi.cdef [[
     void eolian_doc_token_init(Eolian_Doc_Token *tok);
     Eolian_Doc_Token_Type eolian_doc_token_type_get(const Eolian_Doc_Token 
*tok);
     char *eolian_doc_token_text_get(const Eolian_Doc_Token *tok);
-    Eolian_Doc_Ref_Type eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, 
const void **data, const void **data2);
+    Eolian_Doc_Ref_Type eolian_doc_token_ref_get(const Eolian_Unit *unit, 
const Eolian_Doc_Token *tok, const void **data, const void **data2);
 ]]
 
 local cutil = require("cutil")
@@ -1597,9 +1597,9 @@ M.Eolian_Doc_Token = ffi.metatype("Eolian_Doc_Token", {
             return ret
         end,
 
-        ref_get = function(self)
+        ref_get = function(self, unit)
             local stor = ffi.new("const void *[2]")
-            local tp = tonumber(eolian.eolian_doc_token_ref_get(self, stor, 
stor + 1))
+            local tp = tonumber(eolian.eolian_doc_token_ref_get(unit, self, 
stor, stor + 1))
             local reft = M.doc_ref_type
             if tp == reft.CLASS then
                 return tp, ffi.cast("const Eolian_Class *", stor[0])
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index 13e4770c23..dc8dfc3f9c 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -2431,12 +2431,13 @@ EAPI char *eolian_doc_token_text_get(const 
Eolian_Doc_Token *tok);
  * and the second data is the event, when it's a struct field or enum field
  * the first data is is the struct/enum and the second data is the field.
  *
+ * @param[in] unit the unit to look in
  * @param[in] tok the token
  * @param[out] data the primary data
  * @param[out] data2 the secondary data
  * @return the kind of reference this is
  */
-EAPI Eolian_Doc_Ref_Type eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, 
const void **data, const void **data2);
+EAPI Eolian_Doc_Ref_Type eolian_doc_token_ref_get(const Eolian_Unit *unit, 
const Eolian_Doc_Token *tok, const void **data, const void **data2);
 
 #endif
 
diff --git a/src/lib/eolian/database_validate.c 
b/src/lib/eolian/database_validate.c
index f8dac39aa5..1ce5d4e38f 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -21,7 +21,8 @@ _validate_docstr(Eina_Stringshare *str, const Eolian_Object 
*info)
         eolian_doc_token_init(&tok);
         while (ret && (doc = eolian_documentation_tokenize(doc, &tok)))
           if (eolian_doc_token_type_get(&tok) == EOLIAN_DOC_TOKEN_REF)
-            if (eolian_doc_token_ref_get(&tok, NULL, NULL) == 
EOLIAN_DOC_REF_INVALID)
+            /* FIXME: pass unit properly */
+            if (eolian_doc_token_ref_get(NULL, &tok, NULL, NULL) == 
EOLIAN_DOC_REF_INVALID)
               {
                  char *refn = eolian_doc_token_text_get(&tok);
                  fprintf(stderr, "eolian:%s:%d:%d: failed validating reference 
'%s'\n",
diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c
index 8b1c1f0bbb..94804334d8 100644
--- a/src/lib/eolian/eolian_database.c
+++ b/src/lib/eolian/eolian_database.c
@@ -456,7 +456,8 @@ eolian_doc_token_text_get(const Eolian_Doc_Token *tok)
 }
 
 static Eolian_Doc_Ref_Type
-_resolve_event(char *name, const void **data, const void **data2)
+_resolve_event(const Eolian_Unit *src, char *name, const void **data,
+               const void **data2)
 {
    /* never trust the user */
    if (name[0] == ',')
@@ -467,8 +468,7 @@ _resolve_event(char *name, const void **data, const void 
**data2)
      return EOLIAN_DOC_REF_INVALID;
 
    *evname++ = '\0';
-   /* FIXME: pass unit properly */
-   const Eolian_Class *cl = eolian_class_get_by_name(NULL, name);
+   const Eolian_Class *cl = eolian_class_get_by_name(src, name);
    if (!cl)
      return EOLIAN_DOC_REF_INVALID;
 
@@ -482,8 +482,8 @@ _resolve_event(char *name, const void **data, const void 
**data2)
 }
 
 EAPI Eolian_Doc_Ref_Type
-eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, const void **data,
-                         const void **data2)
+eolian_doc_token_ref_get(const Eolian_Unit *unit, const Eolian_Doc_Token *tok,
+                         const void **data, const void **data2)
 {
    if (tok->type != EOLIAN_DOC_TOKEN_REF)
      return EOLIAN_DOC_REF_INVALID;
@@ -498,7 +498,7 @@ eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, const 
void **data,
         char *ename = alloca(elen + 1);
         memcpy(ename, tok->text + 1, elen);
         ename[elen] = '\0';
-        return _resolve_event(ename, data, data2);
+        return _resolve_event(unit, ename, data, data2);
      }
 
    char *name = alloca(nlen + 1);
@@ -539,8 +539,7 @@ eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, const 
void **data,
    *suffix++ = '\0';
 
    /* try a struct field */
-   /* FIXME: pass unit properly */
-   const Eolian_Typedecl *tpd = eolian_typedecl_struct_get_by_name(NULL, name);
+   const Eolian_Typedecl *tpd = eolian_typedecl_struct_get_by_name(unit, name);
    if (tpd)
      {
         const Eolian_Struct_Type_Field *fld = 
eolian_typedecl_struct_field_get(tpd, suffix);
@@ -553,8 +552,7 @@ eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, const 
void **data,
      }
 
    /* try an enum field */
-   /* FIXME: pass unit properly */
-   tpd = eolian_typedecl_enum_get_by_name(NULL, name);
+   tpd = eolian_typedecl_enum_get_by_name(unit, name);
    if (tpd)
      {
         const Eolian_Enum_Type_Field *fld = 
eolian_typedecl_enum_field_get(tpd, suffix);
@@ -584,8 +582,7 @@ eolian_doc_token_ref_get(const Eolian_Doc_Token *tok, const 
void **data,
         *suffix++ = '\0';
      }
 
-   /* FIXME: pass unit properly */
-   const Eolian_Class *cl = eolian_class_get_by_name(NULL, name);
+   const Eolian_Class *cl = eolian_class_get_by_name(unit, name);
    if (!cl)
      return EOLIAN_DOC_REF_INVALID;
 
diff --git a/src/tests/eolian/eolian_parsing.c 
b/src/tests/eolian/eolian_parsing.c
index e0769538df..16645ab198 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -1217,7 +1217,7 @@ START_TEST(eolian_docs)
    fail_if(eolian_doc_token_type_get(&tok) != EOLIAN_DOC_TOKEN_REF);
    txt = eolian_doc_token_text_get(&tok);
    fail_if(strcmp(txt, "pants"));
-   fail_if(eolian_doc_token_ref_get(&tok, NULL, NULL) != EOLIAN_DOC_REF_VAR);
+   fail_if(eolian_doc_token_ref_get(unit, &tok, NULL, NULL) != 
EOLIAN_DOC_REF_VAR);
    free(txt);
    tdoc = eolian_documentation_tokenize(tdoc, &tok);
    fail_if(eolian_doc_token_type_get(&tok) != EOLIAN_DOC_TOKEN_TEXT);
@@ -1228,7 +1228,7 @@ START_TEST(eolian_docs)
    fail_if(eolian_doc_token_type_get(&tok) != EOLIAN_DOC_TOKEN_REF);
    txt = eolian_doc_token_text_get(&tok);
    fail_if(strcmp(txt, "Docs.meth"));
-   fail_if(eolian_doc_token_ref_get(&tok, NULL, NULL) != EOLIAN_DOC_REF_FUNC);
+   fail_if(eolian_doc_token_ref_get(unit, &tok, NULL, NULL) != 
EOLIAN_DOC_REF_FUNC);
    free(txt);
    tdoc = eolian_documentation_tokenize(tdoc, &tok);
    fail_if(eolian_doc_token_type_get(&tok) != EOLIAN_DOC_TOKEN_TEXT);

-- 


Reply via email to