diff options
author | Daniel Kolesa <d.kolesa@samsung.com> | 2014-08-22 11:17:22 +0100 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@samsung.com> | 2014-08-22 11:17:31 +0100 |
commit | d043c8449262ee4cc17ea23a2e69e999e5c23bc0 (patch) | |
tree | dff521f963147c14420083d89093db1f7afae051 | |
parent | de7f4cc22c509ccd29ac32a0a2762c44783fa3bf (diff) | |
download | efl-d043c8449262ee4cc17ea23a2e69e999e5c23bc0.tar.gz |
eolian: more validation code (alias/struct/enum/constant/global)
-rw-r--r-- | src/lib/eolian/database_validate.c | 52 |
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; } |