static Eolian_Typedecl*
parse_function_pointer(Eo_Lexer *ls)
{
- int line, col;
+ int bline, bcol;
+ int line = ls->line_number, col = ls->column;
+
Eolian_Typedecl *def = push_typedecl(ls);
Eina_Strbuf *buf = push_strbuf(ls);
Eolian_Function *meth = NULL;
has_beta = EINA_FALSE;
eo_lexer_get(ls);
- parse_name(ls, buf);
def->type = EOLIAN_TYPEDECL_FUNCTION_POINTER;
- def->is_extern = EINA_FALSE;
-
- FILL_BASE(def->base, ls, ls->line_number, ls->column);
+ def->is_extern = (ls->t.kw == KW_at_extern);
+ if (def->is_extern)
+ eo_lexer_get(ls);
+ parse_name(ls, buf);
_fill_name(eina_stringshare_add(eina_strbuf_string_get(buf)),
&def->full_name, &def->name, &def->namespaces);
meth->type = EOLIAN_FUNCTION_POINTER;
meth->get_scope = meth->set_scope = EOLIAN_SCOPE_PUBLIC;
meth->name = eina_stringshare_ref(def->name);
- FILL_BASE(meth->base, ls, ls->line_number, ls->column);
def->function_pointer = meth;
goto body;
}
body:
- line = ls->line_number;
- col = ls->column;
+ bline = ls->line_number;
+ bcol = ls->column;
check_next(ls, '{');
FILL_DOC(ls, def, doc);
for (;;) switch (ls->t.kw)
goto end;
}
end:
- check_match(ls, '}', '{', line, col);
+ check_match(ls, '}', '{', bline, bcol);
check_next(ls, ';');
+ FILL_BASE(def->base, ls, line, col);
+ FILL_BASE(meth->base, ls, line, col);
return def;
}