}
static Eolian_Type *
-parse_type_void(Eo_Lexer *ls)
+parse_type_void_base(Eo_Lexer *ls, Eina_Bool noptr)
{
Eolian_Type *def;
const char *ctype;
pline = ls->line_number;
pcol = ls->column;
check_next(ls, '(');
- def = parse_type_void(ls);
+ def = parse_type_void_base(ls, EINA_TRUE);
FILL_BASE(def->base, ls, line, col);
def->is_const = EINA_TRUE;
check_match(ls, ')', '(', pline, pcol);
pcolumn = ls->column;
check_next(ls, '(');
eo_lexer_context_push(ls);
- def = parse_type_void(ls);
+ def = parse_type_void_base(ls, EINA_TRUE);
if (def->type != EOLIAN_TYPE_POINTER)
{
eo_lexer_context_restore(ls);
pcolumn = ls->column;
check_next(ls, '(');
eo_lexer_context_push(ls);
- def = parse_type_void(ls);
+ def = parse_type_void_base(ls, EINA_TRUE);
if (def->type != EOLIAN_TYPE_POINTER)
{
eo_lexer_context_restore(ls);
}
}
parse_ptr:
+ /* check: complex/class type must always be behind a pointer */
+ if (!noptr && ((def->type == EOLIAN_TYPE_CLASS) || (def->type == EOLIAN_TYPE_COMPLEX)))
+ check(ls, '*');
while (ls->t.token == '*')
{
Eolian_Type *pdef;
}
static Eolian_Type *
+parse_type_void(Eo_Lexer *ls)
+{
+ return parse_type_void_base(ls, EINA_FALSE);
+}
+
+static Eolian_Type *
parse_typedef(Eo_Lexer *ls)
{
Eolian_Declaration *decl;