forked from enlightenment/efl
Eolian/Lexer: support class::constructor/destructor
This commit is contained in:
parent
5ae7cc962f
commit
4d7e908e49
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in New Issue