eolian: add some stuff into eo_definitions needed for the new parser and temporarily adjust the lexer for it

This commit is contained in:
Daniel Kolesa 2014-06-18 10:17:19 +01:00
parent 0d417e6ebf
commit 2056b99e85
4 changed files with 75 additions and 14 deletions

View File

@ -8,7 +8,7 @@ eo_definitions_ret_free(Eo_Ret_Def *ret)
{
if (ret->type) eina_stringshare_del(ret->type);
if (ret->comment) eina_stringshare_del(ret->comment);
if (ret->dflt_ret_val) free(ret->dflt_ret_val);
if (ret->dflt_ret_val) eina_stringshare_del(ret->dflt_ret_val);
free(ret);
}
@ -127,7 +127,6 @@ void
eo_definitions_class_def_free(Eo_Class_Def *kls)
{
const char *s;
Eina_List *l;
Eo_Property_Def *prop;
Eo_Method_Def *meth;
Eo_Event_Def *sgn;
@ -144,7 +143,7 @@ eo_definitions_class_def_free(Eo_Class_Def *kls)
if (kls->data_type)
eina_stringshare_del(kls->data_type);
EINA_LIST_FOREACH(kls->inherits, l, s)
EINA_LIST_FREE(kls->inherits, s)
if (s) eina_stringshare_del(s);
EINA_LIST_FREE(kls->implements, impl)
@ -165,3 +164,52 @@ eo_definitions_class_def_free(Eo_Class_Def *kls)
free(kls);
}
void
eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
{
Eina_Strbuf *buf;
Eo_Param_Def *par;
const char *s;
EINA_LIST_FREE(tmp->str_bufs, buf)
eina_strbuf_free(buf);
EINA_LIST_FREE(tmp->params, par)
eo_definitions_param_free(par);
if (tmp->legacy_def)
eina_stringshare_del(tmp->legacy_def);
if (tmp->kls)
eo_definitions_class_def_free(tmp->kls);
if (tmp->ret_def)
eo_definitions_ret_free(tmp->ret_def);
if (tmp->type_def)
eo_definitions_type_def_free(tmp->type_def);
if (tmp->prop)
eo_definitions_property_def_free(tmp->prop);
if (tmp->meth)
eo_definitions_method_def_free(tmp->meth);
if (tmp->param)
eo_definitions_param_free(tmp->param);
if (tmp->accessor)
eo_definitions_accessor_free(tmp->accessor);
if (tmp->accessor_param)
eo_definitions_accessor_param_free(tmp->accessor_param);
EINA_LIST_FREE(tmp->str_items, s)
if (s) eina_stringshare_del(s);
if (tmp->event)
eo_definitions_event_def_free(tmp->event);
if (tmp->impl)
eo_definitions_impl_def_free(tmp->impl);
}

View File

@ -10,7 +10,7 @@ typedef struct _eo_ret_def
{
const char *type;
const char *comment;
char *dflt_ret_val;
const char *dflt_ret_val;
Eina_Bool warn_unused:1;
} Eo_Ret_Def;
@ -73,7 +73,6 @@ typedef struct _eo_property_def
typedef enum _eo_method_type {
METH_REGULAR,
METH_CONSTRUCTOR,
METH_DESTRUCTOR,
METH_TYPE_LAST
} Eo_Method_Type;
@ -100,13 +99,6 @@ typedef struct _eo_event_def
/* IMPLEMENT */
typedef struct _eo_implement_legacy_param_def
{
const char *eo_name;
const char *legacy_name;
const char *comment;
} Eo_Implement_Legacy_Param_Def;
typedef struct _eo_implement_def
{
const char *meth_name;
@ -138,7 +130,28 @@ typedef struct _eo_type_def
const char *type;
} Eo_Type_Def;
/* TEMPS */
typedef struct _Eo_Lexer_Temps
{
Eina_List *str_bufs;
Eina_List *params;
const char *legacy_def;
Eo_Class_Def *kls;
Eo_Ret_Def *ret_def;
Eo_Type_Def *type_def;
Eo_Property_Def *prop;
Eo_Method_Def *meth;
Eo_Param_Def *param;
Eo_Accessor_Def *accessor;
Eo_Accessor_Param *accessor_param;
Eina_List *str_items;
Eo_Event_Def *event;
Eo_Implement_Def *impl;
} Eo_Lexer_Temps;
void eo_definitions_class_def_free(Eo_Class_Def *kls);
void eo_definitions_type_def_free(Eo_Type_Def *type);
void eo_definitions_temps_free(Eo_Lexer_Temps *tmp);
#endif /* __EO_DEFINITIONS_H__ */

View File

@ -301,7 +301,8 @@ _eo_tokenizer_return_get(Eo_Lexer *toknz, char *p)
ret_val = malloc(end - s + 2); /* string + '\0' */
memcpy(ret_val, s, end - s + 1);
ret_val[end - s + 1] = '\0';
ret->dflt_ret_val = ret_val;
ret->dflt_ret_val = eina_stringshare_add(ret_val);
free(ret_val);
memset(s, ' ', end - s + 1);
}
*p = ';';

View File

@ -49,7 +49,6 @@ typedef struct _eo_tokenizer
Eina_List *str_items;
Eo_Event_Def *event;
Eo_Implement_Def *impl;
Eo_Implement_Legacy_Param_Def *impl_leg_param;
int fscope;
} tmp;