summaryrefslogtreecommitdiffstats
path: root/eo_definitions.c
diff options
context:
space:
mode:
Diffstat (limited to 'eo_definitions.c')
-rw-r--r--eo_definitions.c100
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);
+}
+