From d2fb3c5cb065b63b83cc3e5dddd63fccf4dbd6ec Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Mon, 30 Jun 2014 21:52:57 +0100 Subject: [PATCH] eolian: function type parsing --- src/lib/eolian/eo_parser.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 2d98a4b..35a5ecd 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -147,6 +147,32 @@ parse_name_list(Eo_Lexer *ls) 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 * parse_type(Eo_Lexer *ls) { @@ -181,6 +207,8 @@ parse_type(Eo_Lexer *ls) eo_lexer_get(ls); has_struct = EINA_TRUE; break; + case KW_func: + return parse_function_type(ls); default: break; } -- 2.7.4