eolian: remove Eo_Param_Def, reduce allocations, simplify code

This commit is contained in:
Daniel Kolesa 2014-09-10 14:24:41 +01:00
parent d13f16b0e2
commit 9aff324457
4 changed files with 20 additions and 71 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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);
}
}