forked from enlightenment/efl
eolian: function type parsing
This commit is contained in:
parent
14a85859c5
commit
d2fb3c5cb0
|
@ -147,6 +147,32 @@ parse_name_list(Eo_Lexer *ls)
|
||||||
return ls->tmp.str_items;
|
return ls->tmp.str_items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Eo_Type_Def *parse_type(Eo_Lexer *ls);
|
||||||
|
|
||||||
|
static Eo_Type_Def *
|
||||||
|
parse_function_type(Eo_Lexer *ls)
|
||||||
|
{
|
||||||
|
int line;
|
||||||
|
Eo_Type_Def *def = calloc(1, sizeof(Eo_Type_Def));
|
||||||
|
ls->tmp.type_def = def;
|
||||||
|
eo_lexer_get(ls);
|
||||||
|
if (ls->t.token == TOK_ARROW)
|
||||||
|
{
|
||||||
|
eo_lexer_get(ls);
|
||||||
|
def->ret_type = parse_type(ls);
|
||||||
|
}
|
||||||
|
line = ls->line_number;
|
||||||
|
check_next(ls, '(');
|
||||||
|
if (ls->t.token != ')')
|
||||||
|
{
|
||||||
|
def->arguments = eina_list_append(def->arguments, parse_type(ls));
|
||||||
|
while (test_next(ls, ','))
|
||||||
|
def->arguments = eina_list_append(def->arguments, parse_type(ls));
|
||||||
|
}
|
||||||
|
check_match(ls, ')', '(', line);
|
||||||
|
return def;
|
||||||
|
}
|
||||||
|
|
||||||
static Eo_Type_Def *
|
static Eo_Type_Def *
|
||||||
parse_type(Eo_Lexer *ls)
|
parse_type(Eo_Lexer *ls)
|
||||||
{
|
{
|
||||||
|
@ -181,6 +207,8 @@ parse_type(Eo_Lexer *ls)
|
||||||
eo_lexer_get(ls);
|
eo_lexer_get(ls);
|
||||||
has_struct = EINA_TRUE;
|
has_struct = EINA_TRUE;
|
||||||
break;
|
break;
|
||||||
|
case KW_func:
|
||||||
|
return parse_function_type(ls);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue