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); --