eolian: less clumsy return type handling

This commit is contained in:
Daniel Kolesa 2017-08-28 17:22:09 +02:00
parent 700ec978cc
commit eeca57fdb0
1 changed files with 5 additions and 10 deletions

View File

@ -1002,7 +1002,7 @@ typedef struct _Eo_Ret_Def
} Eo_Ret_Def;
static void
parse_return(Eo_Lexer *ls, Eo_Ret_Def *ret, Eina_Bool allow_void)
parse_return(Eo_Lexer *ls, Eo_Ret_Def *ret, Eina_Bool allow_void, Eina_Bool allow_def)
{
eo_lexer_get(ls);
check_next(ls, ':');
@ -1013,7 +1013,7 @@ parse_return(Eo_Lexer *ls, Eo_Ret_Def *ret, Eina_Bool allow_void)
ret->doc = NULL;
ret->default_ret_val = NULL;
ret->warn_unused = EINA_FALSE;
if (ls->t.token == '(')
if (allow_def && (ls->t.token == '('))
{
int line = ls->line_number, col = ls->column;
ls->expr_mode = EINA_TRUE;
@ -1208,7 +1208,7 @@ parse_accessor:
case KW_return:
CASE_LOCK(ls, return, "return")
Eo_Ret_Def ret;
parse_return(ls, &ret, is_get);
parse_return(ls, &ret, is_get, EINA_TRUE);
pop_type(ls);
if (ret.default_ret_val) pop_expr(ls);
if (is_get)
@ -1440,13 +1440,8 @@ body:
case KW_return:
CASE_LOCK(ls, return, "return");
Eo_Ret_Def ret;
parse_return(ls, &ret, EINA_FALSE);
parse_return(ls, &ret, EINA_FALSE, EINA_FALSE);
pop_type(ls);
if (ret.default_ret_val)
{
eo_lexer_syntax_error(ls, "default return value invalid for function pointer");
return NULL;
}
meth->get_ret_type = ret.type;
meth->get_return_doc = ret.doc;
meth->get_ret_val = NULL;
@ -1548,7 +1543,7 @@ body:
case KW_return:
CASE_LOCK(ls, return, "return")
Eo_Ret_Def ret;
parse_return(ls, &ret, EINA_FALSE);
parse_return(ls, &ret, EINA_FALSE, EINA_TRUE);
pop_type(ls);
if (ret.default_ret_val) pop_expr(ls);
meth->get_ret_type = ret.type;