diff options
Diffstat (limited to 'eo_definitions.c')
-rw-r--r-- | eo_definitions.c | 100 |
1 files changed, 100 insertions, 0 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); +} + |