diff options
-rw-r--r-- | eo_definitions.c | 100 | ||||
-rw-r--r-- | eo_definitions.h | 91 | ||||
-rw-r--r-- | eo_tokenizer.h | 72 | ||||
-rw-r--r-- | eo_tokenizer.rl | 98 |
4 files changed, 194 insertions, 167 deletions
diff --git a/eo_definitions.c b/eo_definitions.c new file mode 100644 index 0000000..760337f --- /dev/null +++ b/eo_definitions.c @@ -0,0 +1,100 @@ +#include <stdio.h> +#include <stdlib.h> + +#include "eo_definitions.h" + +void +eo_definitions_ret_free(Eo_Ret_Def *ret) +{ + if (ret->type) eina_stringshare_del(ret->type); + if (ret->comment) eina_stringshare_del(ret->comment); + /* do not free */ +} + +void +eo_definitions_param_free(Eo_Param_Def *param) +{ + if (param->type) eina_stringshare_del(param->type); + if (param->name) eina_stringshare_del(param->name); + if (param->comment) eina_stringshare_del(param->comment); + free(param); +} + +void +eo_definitions_accessor_free(Eo_Accessor_Def *accessor) +{ + const char *s; + Eina_List *l; + + if (accessor->comment) + eina_stringshare_del(accessor->comment); + + EINA_LIST_FOREACH(accessor->legacies, l, s) + if (s) eina_stringshare_del(s); + + eo_definitions_ret_free(&accessor->ret); + + free(accessor); +} + +void +eo_definitions_property_def_free(Eo_Property_Def *prop) +{ + Eo_Param_Def *param; + Eo_Accessor_Def *accessor; + + if (prop->name) + eina_stringshare_del(prop->name); + + EINA_LIST_FREE(prop->params, param) + eo_definitions_param_free(param); + + EINA_LIST_FREE(prop->accessors, accessor) + eo_definitions_accessor_free(accessor); + + free(prop); +} + +void +eo_definitions_method_def_free(Eo_Method_Def *meth) +{ + Eo_Param_Def *param; + + eo_definitions_ret_free(&meth->ret); + + if (meth->name) + eina_stringshare_del(meth->name); + if (meth->comment) + eina_stringshare_del(meth->comment); + + EINA_LIST_FREE(meth->params, param) + eo_definitions_param_free(param); + + free(meth); +} + +void +eo_definitions_class_def_free(Eo_Class_Def *kls) +{ + const char *s; + Eina_List *l; + Eo_Property_Def *prop; + Eo_Method_Def *meth; + + if (kls->name) + eina_stringshare_del(kls->name); + if (kls->comment) + eina_stringshare_del(kls->comment); + + EINA_LIST_FOREACH(kls->inherits, l, s) + if (s) eina_stringshare_del(s); + + EINA_LIST_FREE(kls->properties, prop) + eo_definitions_property_def_free(prop); + + EINA_LIST_FREE(kls->methods, meth) + eo_definitions_method_def_free(meth); + + free(kls); +} + diff --git a/eo_definitions.h b/eo_definitions.h new file mode 100644 index 0000000..844717e --- /dev/null +++ b/eo_definitions.h @@ -0,0 +1,91 @@ +#ifndef __EO_DEFINITIONS_H__ +#define __EO_DEFINITIONS_H__ + +#include <Eina.h> + +/* RET */ + +typedef struct _eo_ret_def +{ + const char *type; + const char *comment; +} Eo_Ret_Def; + +/* PARAM */ + +typedef enum _param_way +{ + IN, + OUT, + INOUT, + PARAM_WAY_LAST +} Param_Way; + +typedef struct _eo_param_def +{ + Param_Way way; + const char *type; + const char *name; + const char *comment; +} Eo_Param_Def; + +/* ACCESSOR */ + +typedef enum _eo_accessor_type +{ + SETTER, + GETTER, + ACCESSOR_TYPE_LAST +} Eo_Accessor_Type; + +typedef struct _eo_accessor_def +{ + Eo_Accessor_Type type; + Eo_Ret_Def ret; + const char *comment; + Eina_List *legacies; +} Eo_Accessor_Def; + +/* PROPERTY */ + +typedef struct _eo_property_def +{ + const char *name; + Eina_List *params; + Eina_List *accessors; +} Eo_Property_Def; + +/* METHOD */ + +typedef struct _eo_method_def +{ + Eo_Ret_Def ret; + const char *name; + const char *comment; + Eina_List *params; +} Eo_Method_Def; + +/* CLASS */ + +typedef struct _eo_class_def +{ + const char *name; + const char *comment; + Eina_List *inherits; + Eina_List *properties; + Eina_List *methods; +} Eo_Class_Def; + +void eo_definitions_ret_free(Eo_Ret_Def *ret); + +void eo_definitions_param_free(Eo_Param_Def *param); + +void eo_definitions_accessor_free(Eo_Accessor_Def *accessor); + +void eo_definitions_property_def_free(Eo_Property_Def *prop); + +void eo_definitions_method_def_free(Eo_Method_Def *prop); + +void eo_definitions_class_def_free(Eo_Class_Def *kls); + +#endif /* __EO_DEFINITIONS_H__ */ diff --git a/eo_tokenizer.h b/eo_tokenizer.h index 6efd2d6..c349a6d 100644 --- a/eo_tokenizer.h +++ b/eo_tokenizer.h @@ -2,6 +2,7 @@ #define __EO_TOKENIZER_H__ #include <Eina.h> +#include "eo_definitions.h" extern int _eo_tokenizer_log_dom; #undef EINA_LOG_DOMAIN_DEFAULT @@ -32,77 +33,6 @@ extern int _eo_tokenizer_log_dom; #endif #define DBG(...) EINA_LOG_DOM_DBG(_eo_tokenizer_log_dom, __VA_ARGS__) -/* RET */ - -typedef struct _eo_ret_def -{ - const char *type; - const char *comment; -} Eo_Ret_Def; - -/* PARAMS */ - -typedef enum _param_way -{ - IN, - OUT, - INOUT, - PARAM_WAY_LAST -} Param_Way; - -typedef struct _eo_param_def -{ - Param_Way way; - const char *type; - const char *name; - const char *comment; -} Eo_Param_Def; - -/* PROPERTIES */ - -typedef enum _eo_accessor_type -{ - SETTER, - GETTER, - ACCESSOR_TYPE_LAST -} Eo_Accessor_Type; - -typedef struct _eo_accessor_def -{ - Eo_Accessor_Type type; - Eo_Ret_Def ret; - const char *comment; - Eina_List *legacies; -} Eo_Accessor_Def; - -typedef struct _eo_property_def -{ - const char *name; - Eina_List *params; - Eina_List *accessors; -} Eo_Property_Def; - -/* METHODS */ - -typedef struct _eo_method_def -{ - Eo_Ret_Def ret; - const char *name; - const char *comment; - Eina_List *params; -} Eo_Method_Def; - -/* CLASSES */ - -typedef struct _eo_class_def -{ - const char *name; - const char *comment; - Eina_List *inherits; - Eina_List *properties; - Eina_List *methods; -} Eo_Class_Def; - /* TOKENIZER */ #define BUFSIZE 256 diff --git a/eo_tokenizer.rl b/eo_tokenizer.rl index a80dfc5..7235c0e 100644 --- a/eo_tokenizer.rl +++ b/eo_tokenizer.rl @@ -565,103 +565,9 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz) printf("\n"); } } - } - -} - -static void -_eo_tokenizer_ret_free(Eo_Ret_Def *ret) -{ - if (ret->type) eina_stringshare_del(ret->type); - if (ret->comment) eina_stringshare_del(ret->comment); - /* do not free */ -} - -static void -_eo_tokenizer_param_free(Eo_Param_Def *param) -{ - if (param->type) eina_stringshare_del(param->type); - if (param->name) eina_stringshare_del(param->name); - if (param->comment) eina_stringshare_del(param->comment); - free(param); -} - -static void -_eo_tokenizer_accessor_free(Eo_Accessor_Def *accessor) -{ - const char *s; - Eina_List *l; - - if (accessor->comment) - eina_stringshare_del(accessor->comment); - - EINA_LIST_FOREACH(accessor->legacies, l, s) - if (s) eina_stringshare_del(s); - - _eo_tokenizer_ret_free(&accessor->ret); - - free(accessor); -} - -static void -_eo_tokenizer_property_def_free(Eo_Property_Def *prop) -{ - Eo_Param_Def *param; - Eo_Accessor_Def *accessor; - - if (prop->name) - eina_stringshare_del(prop->name); - - EINA_LIST_FREE(prop->params, param) - _eo_tokenizer_param_free(param); - - EINA_LIST_FREE(prop->accessors, accessor) - _eo_tokenizer_accessor_free(accessor); - - free(prop); -} - -static void -_eo_tokenizer_method_def_free(Eo_Method_Def *meth) -{ - Eo_Param_Def *param; - - _eo_tokenizer_ret_free(&meth->ret); - - if (meth->name) - eina_stringshare_del(meth->name); - if (meth->comment) - eina_stringshare_del(meth->comment); - EINA_LIST_FREE(meth->params, param) - _eo_tokenizer_param_free(param); - - free(meth); -} - -static void -_eo_tokenizer_class_def_free(Eo_Class_Def *kls) -{ - const char *s; - Eina_List *l; - Eo_Property_Def *prop; - Eo_Method_Def *meth; - - if (kls->name) - eina_stringshare_del(kls->name); - if (kls->comment) - eina_stringshare_del(kls->comment); - - EINA_LIST_FOREACH(kls->inherits, l, s) - if (s) eina_stringshare_del(s); - - EINA_LIST_FREE(kls->properties, prop) - _eo_tokenizer_property_def_free(prop); - - EINA_LIST_FREE(kls->methods, meth) - _eo_tokenizer_method_def_free(meth); + } - free(kls); } void @@ -673,7 +579,7 @@ eo_tokenizer_free(Eo_Tokenizer *toknz) eina_stringshare_del(toknz->source); EINA_LIST_FREE(toknz->classes, kls) - _eo_tokenizer_class_def_free(kls); + eo_definitions_class_def_free(kls); free(toknz); } |