q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=c1afa1b6b5b90df8e688841d84a250fe03e9f029
commit c1afa1b6b5b90df8e688841d84a250fe03e9f029 Author: Daniel Kolesa <[email protected]> Date: Thu Aug 21 16:23:37 2014 +0100 eolian: add entry point for database validation stage --- src/Makefile_Eolian.am | 3 ++- src/lib/eolian/database_validate.c | 7 +++++++ src/lib/eolian/eolian_database.c | 22 +++++++++++++++++----- src/lib/eolian/eolian_database.h | 1 + 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am index cebdbda..5f881e3 100644 --- a/src/Makefile_Eolian.am +++ b/src/Makefile_Eolian.am @@ -33,7 +33,8 @@ lib_eolian_libeolian_la_SOURCES = \ lib/eolian/database_expr.c \ lib/eolian/database_expr_api.c \ lib/eolian/database_var.c \ - lib/eolian/database_var_api.c + lib/eolian/database_var_api.c \ + lib/eolian/database_validate.c lib_eolian_libeolian_la_CPPFLAGS = -I$(top_builddir)/src/lib/efl @EOLIAN_CFLAGS@ \ -DPACKAGE_DATA_DIR=\"$(datadir)/eolian\" diff --git a/src/lib/eolian/database_validate.c b/src/lib/eolian/database_validate.c new file mode 100644 index 0000000..4f91aee --- /dev/null +++ b/src/lib/eolian/database_validate.c @@ -0,0 +1,7 @@ +#include "eolian_database.h" + +Eina_Bool +database_validate(void) +{ + return EINA_TRUE; +} diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index f7efe13..b954a94 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -19,6 +19,7 @@ Eina_Hash *_filenames = NULL; Eina_Hash *_tfilenames = NULL; static int _database_init_count = 0; +static int _parse_depth = 0; static void _hashlist_free(void *data) @@ -159,19 +160,20 @@ eolian_eo_file_parse(const char *filepath) const Eolian_Class *class = eolian_class_get_by_file(bfilename); const char *inherit_name; Eolian_Implement *impl; + ++_parse_depth; if (!class) { if (!eo_parser_database_fill(filepath, EINA_FALSE)) { free(bfiledup); - return EINA_FALSE; + goto error; } class = eolian_class_get_by_file(bfilename); if (!class) { ERR("No class for file %s", bfilename); free(bfiledup); - return EINA_FALSE; + goto error; } } free(bfiledup); @@ -186,9 +188,9 @@ eolian_eo_file_parse(const char *filepath) if (!filepath) { ERR("Unable to find a file for class %s", inherit_name); - return EINA_FALSE; + goto error; } - if (!eolian_eo_file_parse(filepath)) return EINA_FALSE; + if (!eolian_eo_file_parse(filepath)) goto error; } } eina_iterator_free(itr); @@ -200,11 +202,21 @@ eolian_eo_file_parse(const char *filepath) if (!impl_func) { ERR("Unable to find function %s", eolian_implement_full_name_get(impl)); - return EINA_FALSE; + goto error; } } eina_iterator_free(itr); + + --_parse_depth; + if (!_parse_depth && !database_validate()) + goto error; + + _parse_depth = 0; return EINA_TRUE; + +error: + _parse_depth = 0; + return EINA_FALSE; } static Eina_Bool _tfile_parse(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED, void *data, void *fdata) diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 14a7c94..970cb7b 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -251,6 +251,7 @@ int database_init(); int database_shutdown(); char *database_class_to_filename(const char *cname); +Eina_Bool database_validate(void); /* types */ --
