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 */
 

-- 


Reply via email to