summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2014-08-22 11:17:22 +0100
committerDaniel Kolesa <d.kolesa@samsung.com>2014-08-22 11:17:31 +0100
commitd043c8449262ee4cc17ea23a2e69e999e5c23bc0 (patch)
treedff521f963147c14420083d89093db1f7afae051
parentde7f4cc22c509ccd29ac32a0a2762c44783fa3bf (diff)
downloadefl-d043c8449262ee4cc17ea23a2e69e999e5c23bc0.tar.gz
eolian: more validation code (alias/struct/enum/constant/global)
-rw-r--r--src/lib/eolian/database_validate.c52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c
index d9503908cc..d8932c2deb 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -89,10 +89,39 @@ _validate_class(const Eolian_Class *cl)
return EINA_TRUE;
}
+static Eina_Bool
+_validate_variable(const Eolian_Variable *var)
+{
+ if (!_validate_type(var->base_type))
+ return EINA_FALSE;
+
+ if (var->value && !_validate_expr(var->value, var->base_type))
+ return EINA_FALSE;
+
+ return EINA_TRUE;
+}
+
+static Eina_Bool
+_type_map_cb(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED,
+ const Eolian_Type *tp, Eina_Bool *success)
+{
+ *success = _validate_type(tp);
+ return *success;
+}
+
+static Eina_Bool
+_var_map_cb(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED,
+ const Eolian_Variable *var, Eina_Bool *success)
+{
+ *success = _validate_variable(var);
+ return *success;
+}
+
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))
@@ -101,5 +130,28 @@ database_validate(void)
return EINA_FALSE;
}
eina_iterator_free(iter);
+
+ Eina_Bool succ = EINA_TRUE;
+
+ eina_hash_foreach(_aliases, (Eina_Hash_Foreach)_type_map_cb, &succ);
+ if (!succ)
+ return EINA_FALSE;
+
+ eina_hash_foreach(_structs, (Eina_Hash_Foreach)_type_map_cb, &succ);
+ if (!succ)
+ return EINA_FALSE;
+
+ eina_hash_foreach(_enums, (Eina_Hash_Foreach)_type_map_cb, &succ);
+ if (!succ)
+ return EINA_FALSE;
+
+ eina_hash_foreach(_globals, (Eina_Hash_Foreach)_var_map_cb, &succ);
+ if (!succ)
+ return EINA_FALSE;
+
+ eina_hash_foreach(_constants, (Eina_Hash_Foreach)_var_map_cb, &succ);
+ if (!succ)
+ return EINA_FALSE;
+
return EINA_TRUE;
}