eolian: doc token ref resolver now takes unit
This commit is contained in:
parent
81a1d9659a
commit
a5e66b3421
|
@ -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])
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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",
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue