(exp).line = l; \
(exp).column = c;
+#define FILL_DOC(ls, def, docf) \
+ if (ls->t.token == TOK_DOC) \
+ { \
+ def->docf = ls->t.value.doc; \
+ ls->t.value.doc = NULL; \
+ eo_lexer_get(ls); \
+ }
+
static void
error_expected(Eo_Lexer *ls, int token)
{
if (def->name) eina_stringshare_del(def->name);
database_type_del(def->type);
if (def->comment) eina_stringshare_del(def->comment);
+ database_doc_del(def->doc);
free(def);
}
def->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, def, doc);
while (ls->t.token != '}')
{
const char *fname;
fdef->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, fdef, doc);
}
check_match(ls, '}', '{', bline, bcolumn);
FILL_BASE(def->base, ls, line, column);
if (def->name) eina_stringshare_del(def->name);
database_expr_del(def->value);
if (def->comment) eina_stringshare_del(def->comment);
+ database_doc_del(def->doc);
free(def);
}
def->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, def, doc);
if (ls->t.token == TOK_VALUE && ls->t.kw == KW_legacy)
{
if (eo_lexer_lookahead(ls) == ':')
fdef->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, fdef, doc);
if (!want_next)
break;
}
def->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, def, doc);
return def;
}
def->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, def, doc);
return def;
}
{
Eolian_Type *type;
Eina_Stringshare *comment;
+ Eolian_Documentation *doc;
Eolian_Expression *default_ret_val;
Eina_Bool warn_unused:1;
} Eo_Ret_Def;
else
ret->type = parse_type(ls);
ret->comment = NULL;
+ ret->doc = NULL;
ret->default_ret_val = NULL;
ret->warn_unused = EINA_FALSE;
if (ls->t.token == '(')
ret->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, ret, doc);
}
static void
par->description = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, par, doc);
}
static void
prop->set_description = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ if (is_get)
+ {
+ FILL_DOC(ls, prop, get_doc);
+ }
+ else
+ {
+ FILL_DOC(ls, prop, set_doc);
+ }
for (;;) switch (ls->t.kw)
{
case KW_return:
{
prop->get_ret_type = ret.type;
prop->get_return_comment = ret.comment;
+ prop->get_return_doc = ret.doc;
prop->get_ret_val = ret.default_ret_val;
prop->get_return_warn_unused = ret.warn_unused;
}
{
prop->set_ret_type = ret.type;
prop->set_return_comment = ret.comment;
+ prop->set_return_doc = ret.doc;
prop->set_ret_val = ret.default_ret_val;
prop->set_return_warn_unused = ret.warn_unused;
}
prop->common_description = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, prop, common_doc);
for (;;) switch (ls->t.kw)
{
case KW_get:
meth->common_description = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, meth, common_doc);
for (;;) switch (ls->t.kw)
{
case KW_return:
if (ret.default_ret_val) pop_expr(ls);
meth->get_ret_type = ret.type;
meth->get_return_comment = ret.comment;
+ meth->get_return_doc = ret.doc;
meth->get_ret_val = ret.default_ret_val;
meth->get_return_warn_unused = ret.warn_unused;
break;
ev->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, ev, doc);
ev->klass = ls->tmp.kls;
}
ls->tmp.kls->description = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, ls->tmp.kls, doc);
if (type == EOLIAN_CLASS_INTERFACE)
{
ls->tmp.kls->data_type = eina_stringshare_add("null");
def->comment = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
}
- test_next(ls, TOK_DOC);
+ FILL_DOC(ls, def, doc);
FILL_BASE(def->base, ls, line, col);
database_struct_add(def);
pop_type(ls);