forked from enlightenment/efl
eolian: remove Eo_Param_Def, reduce allocations, simplify code
This commit is contained in:
parent
d13f16b0e2
commit
9aff324457
|
@ -1,33 +1,5 @@
|
|||
#include "eo_parser.h"
|
||||
|
||||
static void
|
||||
_db_fill_param(Eina_List **plist, Eo_Param_Def *param)
|
||||
{
|
||||
Eolian_Function_Parameter *p = database_parameter_add(param->type,
|
||||
param->value,
|
||||
param->name,
|
||||
param->comment);
|
||||
p->param_dir = param->way;
|
||||
*plist = eina_list_append(*plist, p);
|
||||
p->nonull = param->nonull;
|
||||
param->type = NULL;
|
||||
|
||||
p->base = param->base;
|
||||
param->base.file = NULL;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_db_fill_params(Eina_List *oplist, Eina_List **plist)
|
||||
{
|
||||
Eo_Param_Def *param;
|
||||
Eina_List *l;
|
||||
|
||||
EINA_LIST_FOREACH(oplist, l, param)
|
||||
_db_fill_param(plist, param);
|
||||
|
||||
return EINA_TRUE;
|
||||
}
|
||||
|
||||
static Eina_Bool
|
||||
_db_fill_accessor(Eolian_Function *foo_id, Eo_Class_Def *kls,
|
||||
Eo_Property_Def *prop, Eo_Accessor_Def *accessor)
|
||||
|
@ -138,8 +110,8 @@ _db_fill_property(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Property_Def *prop)
|
|||
foo_id->scope = prop->scope;
|
||||
foo_id->is_class = prop->is_class;
|
||||
|
||||
if (!_db_fill_params (prop->keys , &(foo_id->keys ))) goto failure;
|
||||
if (!_db_fill_params (prop->values, &(foo_id->params))) goto failure;
|
||||
foo_id->keys = prop->keys ; prop->keys = NULL;
|
||||
foo_id->params = prop->values; prop->values = NULL;
|
||||
if (!_db_fill_accessors(foo_id, kls, prop)) goto failure;
|
||||
|
||||
if (!prop->accessors)
|
||||
|
@ -199,7 +171,7 @@ _db_fill_method(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Method_Def *meth)
|
|||
if (meth->only_legacy)
|
||||
foo_id->get_only_legacy = EINA_TRUE;
|
||||
|
||||
_db_fill_params(meth->params, &(foo_id->params));
|
||||
foo_id->params = meth->params; meth->params = NULL;
|
||||
|
||||
if (kls->type == EOLIAN_CLASS_INTERFACE)
|
||||
foo_id->get_virtual_pure = EINA_TRUE;
|
||||
|
|
|
@ -12,16 +12,6 @@ eo_definitions_ret_free(Eo_Ret_Def *ret)
|
|||
free(ret);
|
||||
}
|
||||
|
||||
static void
|
||||
eo_definitions_param_free(Eo_Param_Def *param)
|
||||
{
|
||||
if (param->base.file) eina_stringshare_del(param->base.file);
|
||||
if (param->type) database_type_del(param->type);
|
||||
if (param->name) eina_stringshare_del(param->name);
|
||||
if (param->comment) eina_stringshare_del(param->comment);
|
||||
free(param);
|
||||
}
|
||||
|
||||
static void
|
||||
eo_definitions_accessor_param_free(Eo_Accessor_Param *param)
|
||||
{
|
||||
|
@ -54,7 +44,7 @@ eo_definitions_accessor_free(Eo_Accessor_Def *accessor)
|
|||
static void
|
||||
eo_definitions_property_def_free(Eo_Property_Def *prop)
|
||||
{
|
||||
Eo_Param_Def *param;
|
||||
Eolian_Function_Parameter *param;
|
||||
Eo_Accessor_Def *accessor;
|
||||
|
||||
if (prop->base.file)
|
||||
|
@ -64,10 +54,10 @@ eo_definitions_property_def_free(Eo_Property_Def *prop)
|
|||
eina_stringshare_del(prop->name);
|
||||
|
||||
EINA_LIST_FREE(prop->keys, param)
|
||||
eo_definitions_param_free(param);
|
||||
database_parameter_del(param);
|
||||
|
||||
EINA_LIST_FREE(prop->values, param)
|
||||
eo_definitions_param_free(param);
|
||||
database_parameter_del(param);
|
||||
|
||||
EINA_LIST_FREE(prop->accessors, accessor)
|
||||
eo_definitions_accessor_free(accessor);
|
||||
|
@ -78,7 +68,7 @@ eo_definitions_property_def_free(Eo_Property_Def *prop)
|
|||
static void
|
||||
eo_definitions_method_def_free(Eo_Method_Def *meth)
|
||||
{
|
||||
Eo_Param_Def *param;
|
||||
Eolian_Function_Parameter *param;
|
||||
|
||||
if (meth->base.file)
|
||||
eina_stringshare_del(meth->base.file);
|
||||
|
@ -94,7 +84,7 @@ eo_definitions_method_def_free(Eo_Method_Def *meth)
|
|||
eina_stringshare_del(meth->legacy);
|
||||
|
||||
EINA_LIST_FREE(meth->params, param)
|
||||
eo_definitions_param_free(param);
|
||||
database_parameter_del(param);
|
||||
|
||||
free(meth);
|
||||
}
|
||||
|
@ -148,7 +138,7 @@ void
|
|||
eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
|
||||
{
|
||||
Eina_Strbuf *buf;
|
||||
Eo_Param_Def *par;
|
||||
Eolian_Function_Parameter *par;
|
||||
Eolian_Type *tp;
|
||||
Eolian_Variable *var;
|
||||
const char *s;
|
||||
|
@ -157,7 +147,7 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
|
|||
eina_strbuf_free(buf);
|
||||
|
||||
EINA_LIST_FREE(tmp->params, par)
|
||||
eo_definitions_param_free(par);
|
||||
database_parameter_del(par);
|
||||
|
||||
if (tmp->legacy_def)
|
||||
eina_stringshare_del(tmp->legacy_def);
|
||||
|
@ -181,7 +171,7 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
|
|||
eo_definitions_method_def_free(tmp->meth);
|
||||
|
||||
if (tmp->param)
|
||||
eo_definitions_param_free(tmp->param);
|
||||
database_parameter_del(tmp->param);
|
||||
|
||||
if (tmp->accessor)
|
||||
eo_definitions_accessor_free(tmp->accessor);
|
||||
|
|
|
@ -16,19 +16,6 @@ typedef struct _Eo_Ret_Def
|
|||
Eina_Bool warn_unused:1;
|
||||
} Eo_Ret_Def;
|
||||
|
||||
/* PARAM */
|
||||
|
||||
typedef struct _Eo_Param_Def
|
||||
{
|
||||
Eolian_Object base;
|
||||
Eolian_Parameter_Dir way;
|
||||
Eolian_Type *type;
|
||||
Eolian_Expression *value;
|
||||
Eina_Stringshare *name;
|
||||
Eina_Stringshare *comment;
|
||||
Eina_Bool nonull:1;
|
||||
} Eo_Param_Def;
|
||||
|
||||
/* ACCESSOR */
|
||||
|
||||
typedef enum _Eo_Accessor_Type
|
||||
|
@ -116,7 +103,7 @@ typedef struct _Eo_Lexer_Temps
|
|||
Eina_List *var_defs;
|
||||
Eo_Property_Def *prop;
|
||||
Eo_Method_Def *meth;
|
||||
Eo_Param_Def *param;
|
||||
Eolian_Function_Parameter *param;
|
||||
Eo_Accessor_Def *accessor;
|
||||
Eo_Accessor_Param *accessor_param;
|
||||
Eina_List *str_items;
|
||||
|
|
|
@ -1134,7 +1134,7 @@ parse_return(Eo_Lexer *ls, Eina_Bool allow_void)
|
|||
static void
|
||||
parse_param(Eo_Lexer *ls, Eina_Bool allow_inout, Eina_Bool is_vals)
|
||||
{
|
||||
Eo_Param_Def *par = calloc(1, sizeof(Eo_Param_Def));
|
||||
Eolian_Function_Parameter *par = calloc(1, sizeof(Eolian_Function_Parameter));
|
||||
par->base.file = eina_stringshare_ref(ls->filename);
|
||||
par->base.line = ls->line_number;
|
||||
par->base.column = ls->column;
|
||||
|
@ -1143,23 +1143,23 @@ parse_param(Eo_Lexer *ls, Eina_Bool allow_inout, Eina_Bool is_vals)
|
|||
{
|
||||
if (ls->t.kw == KW_at_in)
|
||||
{
|
||||
par->way = EOLIAN_IN_PARAM;
|
||||
par->param_dir = EOLIAN_IN_PARAM;
|
||||
eo_lexer_get(ls);
|
||||
}
|
||||
else if (ls->t.kw == KW_at_out)
|
||||
{
|
||||
par->way = EOLIAN_OUT_PARAM;
|
||||
par->param_dir = EOLIAN_OUT_PARAM;
|
||||
eo_lexer_get(ls);
|
||||
}
|
||||
else if (ls->t.kw == KW_at_inout)
|
||||
{
|
||||
par->way = EOLIAN_INOUT_PARAM;
|
||||
par->param_dir = EOLIAN_INOUT_PARAM;
|
||||
eo_lexer_get(ls);
|
||||
}
|
||||
else
|
||||
par->way = EOLIAN_IN_PARAM;
|
||||
par->param_dir = EOLIAN_IN_PARAM;
|
||||
}
|
||||
if (par->way == EOLIAN_OUT_PARAM || par->way == EOLIAN_INOUT_PARAM)
|
||||
if (par->param_dir == EOLIAN_OUT_PARAM || par->param_dir == EOLIAN_INOUT_PARAM)
|
||||
par->type = parse_type_void(ls);
|
||||
else
|
||||
par->type = parse_type(ls);
|
||||
|
@ -1167,7 +1167,7 @@ parse_param(Eo_Lexer *ls, Eina_Bool allow_inout, Eina_Bool is_vals)
|
|||
check(ls, TOK_VALUE);
|
||||
par->name = eina_stringshare_ref(ls->t.value.s);
|
||||
eo_lexer_get(ls);
|
||||
if ((is_vals || (par->way == EOLIAN_OUT_PARAM)) && (ls->t.token == '('))
|
||||
if ((is_vals || (par->param_dir == EOLIAN_OUT_PARAM)) && (ls->t.token == '('))
|
||||
{
|
||||
int line = ls->line_number, col = ls->column;
|
||||
ls->expr_mode = EINA_TRUE;
|
||||
|
@ -1185,7 +1185,7 @@ parse_param(Eo_Lexer *ls, Eina_Bool allow_inout, Eina_Bool is_vals)
|
|||
check_next(ls, ';');
|
||||
if (ls->t.token == TOK_COMMENT)
|
||||
{
|
||||
par->comment = eina_stringshare_ref(ls->t.value.s);
|
||||
par->description = eina_stringshare_ref(ls->t.value.s);
|
||||
eo_lexer_get(ls);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue