q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e99f7876a628453c75f49f7ec279976761eb46b4

commit e99f7876a628453c75f49f7ec279976761eb46b4
Author: Daniel Kolesa <[email protected]>
Date:   Thu Aug 21 16:53:23 2014 +0100

    eolian: some initial validation traversal
---
 src/lib/eolian/database_validate.c | 98 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 98 insertions(+)

diff --git a/src/lib/eolian/database_validate.c 
b/src/lib/eolian/database_validate.c
index 4f91aee..d950390 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -1,7 +1,105 @@
 #include "eolian_database.h"
 
+static Eina_Bool
+_validate_type(const Eolian_Type *tp)
+{
+   (void)tp;
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_validate_expr(const Eolian_Expression *expr, const Eolian_Type *tp)
+{
+   (void)expr;
+   (void)tp;
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_validate_param(const Eolian_Function_Parameter *param)
+{
+   if (!_validate_type(param->type))
+     return EINA_FALSE;
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_validate_function(const Eolian_Function *func)
+{
+   Eina_List *l;
+   const Eolian_Function_Parameter *param;
+
+   if (func->get_ret_type && !_validate_type(func->get_ret_type))
+     return EINA_FALSE;
+
+   if (func->set_ret_type && !_validate_type(func->set_ret_type))
+     return EINA_FALSE;
+
+   if (func->get_ret_val && !_validate_expr(func->get_ret_val,
+                                            func->get_ret_type))
+     return EINA_FALSE;
+
+   if (func->set_ret_val && !_validate_expr(func->set_ret_val,
+                                            func->set_ret_type))
+     return EINA_FALSE;
+
+   EINA_LIST_FOREACH(func->keys, l, param)
+     if (!_validate_param(param))
+       return EINA_FALSE;
+
+   EINA_LIST_FOREACH(func->params, l, param)
+     if (!_validate_param(param))
+       return EINA_FALSE;
+
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_validate_event(const Eolian_Event *event)
+{
+   if (event->type && !_validate_type(event->type))
+     return EINA_FALSE;
+   return EINA_TRUE;
+}
+
+static Eina_Bool
+_validate_class(const Eolian_Class *cl)
+{
+   Eina_List *l;
+   const Eolian_Function *func;
+   const Eolian_Event *event;
+
+   EINA_LIST_FOREACH(cl->properties, l, func)
+     if (!_validate_function(func))
+       return EINA_FALSE;
+
+   EINA_LIST_FOREACH(cl->methods, l, func)
+     if (!_validate_function(func))
+       return EINA_FALSE;
+
+   EINA_LIST_FOREACH(cl->constructors, l, func)
+     if (!_validate_function(func))
+       return EINA_FALSE;
+
+   EINA_LIST_FOREACH(cl->events, l, event)
+     if (!_validate_event(event))
+       return EINA_FALSE;
+
+   return EINA_TRUE;
+}
+
 Eina_Bool
 database_validate(void)
 {
+   const Eolian_Class *cl;
+   Eina_Iterator *iter = eolian_all_classes_get();
+   EINA_ITERATOR_FOREACH(iter, cl)
+     if (!_validate_class(cl))
+       {
+          eina_iterator_free(iter);
+          return EINA_FALSE;
+       }
+   eina_iterator_free(iter);
    return EINA_TRUE;
 }

-- 


Reply via email to