Eolian/Lexer: support class::constructor/destructor

This commit is contained in:
Daniel Zaoui 2014-02-18 15:16:51 +02:00
parent 5ae7cc962f
commit 4d7e908e49
5 changed files with 68 additions and 4 deletions

View File

@ -441,6 +441,10 @@ EAPI const Eina_List *eolian_class_events_list_get(const char *class_name);
*/
EAPI Eina_Bool eolian_class_event_information_get(Eolian_Event event, const char **event_name, const char **event_desc);
EAPI Eina_Bool eolian_class_ctor_enable_get(const char *class_name);
EAPI Eina_Bool eolian_class_dtor_enable_get(const char *class_name);
#endif
#ifdef __cplusplus

View File

@ -1371,9 +1371,9 @@ _eof_trans:
{
toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
if (toknz->tmp.params)
*(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param);
*(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param);
else
ABORT(toknz, "got a param but there is no property nor method waiting for it");
ABORT(toknz, "got a param but there is no property nor method waiting for it");
INF(" %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
}
break;
@ -1687,7 +1687,7 @@ _eof_trans:
toknz->tmp.param = NULL;
toknz->current_nesting--;
if (toknz->tmp.prop)
{ toknz->cs = 308; goto _again;}
{ toknz->cs = 308; goto _again;}
else if (toknz->tmp.meth)
{ toknz->cs = 321; goto _again;}
else
@ -1728,7 +1728,7 @@ _eof_trans:
toknz->tmp.param = NULL;
toknz->current_nesting--;
if (toknz->tmp.prop)
{ toknz->cs = 308; goto _again;}
{ toknz->cs = 308; goto _again;}
else if (toknz->tmp.meth)
{ toknz->cs = 321; goto _again;}
else
@ -2809,6 +2809,16 @@ eo_tokenizer_database_fill(const char *filename)
database_class_function_add(kls->name, foo_id);
continue;
}
if (!strcmp(class, "class::constructor"))
{
database_class_ctor_enable_set(kls->name, EINA_TRUE);
continue;
}
if (!strcmp(class, "class::destructor"))
{
database_class_dtor_enable_set(kls->name, EINA_TRUE);
continue;
}
char *func = strstr(class, "::");
if (func) *func = '\0';
func += 2;

View File

@ -1215,6 +1215,16 @@ eo_tokenizer_database_fill(const char *filename)
database_class_function_add(kls->name, foo_id);
continue;
}
if (!strcmp(class, "class::constructor"))
{
database_class_ctor_enable_set(kls->name, EINA_TRUE);
continue;
}
if (!strcmp(class, "class::destructor"))
{
database_class_dtor_enable_set(kls->name, EINA_TRUE);
continue;
}
char *func = strstr(class, "::");
if (func) *func = '\0';
func += 2;

View File

@ -20,6 +20,8 @@ typedef struct
Eina_List *destructors; /* List destructor_name -> _Function_Id */
Eina_List *implements; /* List implements name -> _Implement_Desc */
Eina_List *events; /* List event_name -> _Event_Desc */
Eina_Bool class_ctor_enable:1;
Eina_Bool class_dtor_enable:1;
} Class_desc;
typedef struct
@ -801,6 +803,38 @@ eolian_class_event_information_get(Eolian_Event event, const char **event_name,
return EINA_TRUE;
}
Eina_Bool
database_class_ctor_enable_set(const char *class_name, Eina_Bool enable)
{
Class_desc *desc = _class_get(class_name);
if (!desc) return EINA_FALSE;
desc->class_ctor_enable = enable;
return EINA_TRUE;
}
Eina_Bool
database_class_dtor_enable_set(const char *class_name, Eina_Bool enable)
{
Class_desc *desc = _class_get(class_name);
if (!desc) return EINA_FALSE;
desc->class_dtor_enable = enable;
return EINA_TRUE;
}
Eina_Bool
eolian_class_ctor_enable_get(const char *class_name)
{
Class_desc *desc = _class_get(class_name);
return desc?desc->class_ctor_enable:EINA_FALSE;
}
Eina_Bool
eolian_class_dtor_enable_get(const char *class_name)
{
Class_desc *desc = _class_get(class_name);
return desc?desc->class_dtor_enable:EINA_FALSE;
}
static void
_implements_print(Eolian_Implement impl, int nb_spaces)
{

View File

@ -76,6 +76,12 @@ database_implement_legacy_return_add(Eolian_Implement_Legacy leg, Eina_Stringsha
Eina_Bool
database_class_implement_add(const char *class_name, Eolian_Implement impl_id);
Eina_Bool
database_class_ctor_enable_set(const char *class_name, Eina_Bool enable);
Eina_Bool
database_class_dtor_enable_set(const char *class_name, Eina_Bool enable);
Eolian_Event
database_event_new(const char *event_name, const char *event_desc);