q66 pushed a commit to branch master.

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

commit 8a1f93f698315b43de28b755bce5fc9a4d85d59a
Author: Daniel Kolesa <[email protected]>
Date:   Tue Dec 5 16:40:04 2017 +0100

    eolian: pass state where necessary
    
    This modifies the API so that global state removal is made
    possible. It's still used internally for now but externally
    the state is contained.
---
 src/bin/eolian/main.c                |   9 ++-
 src/bin/eolian_cxx/eolian_cxx.cc     |  23 +++++--
 src/bindings/luajit/eolian.lua       |  96 ++++++++++++++++------------
 src/lib/eolian/Eolian.h              | 116 +++++++++++++++++++---------------
 src/lib/eolian/eolian_database.c     |  20 +++---
 src/scripts/elua/modules/lualian.lua |  16 +++--
 src/tests/eolian/eolian_parsing.c    | 119 ++++++++++++++++++++++++++---------
 7 files changed, 258 insertions(+), 141 deletions(-)

diff --git a/src/bin/eolian/main.c b/src/bin/eolian/main.c
index fdb5ca2568..92643c6f7e 100644
--- a/src/bin/eolian/main.c
+++ b/src/bin/eolian/main.c
@@ -430,6 +430,8 @@ main(int argc, char **argv)
    eina_init();
    eolian_init();
 
+   Eolian *eos = eolian_new();
+
    const char *dom = "eolian_gen";
    _eolian_gen_log_dom = eina_log_domain_register(dom, EINA_COLOR_GREEN);
    if (_eolian_gen_log_dom < 0)
@@ -530,7 +532,7 @@ main(int argc, char **argv)
 
    if (scan_system)
      {
-        if (!eolian_system_directory_scan())
+        if (!eolian_system_directory_scan(eos))
           {
              fprintf(stderr, "eolian: could not scan system directory\n");
              goto end;
@@ -540,14 +542,14 @@ main(int argc, char **argv)
    const char *inc;
    EINA_LIST_FREE(includes, inc)
      {
-        if (!eolian_directory_scan(inc))
+        if (!eolian_directory_scan(eos, inc))
           {
              fprintf(stderr, "eolian: could not scan '%s'\n", inc);
              goto end;
           }
      }
 
-   const Eolian_Unit *src = eolian_file_parse(input);
+   const Eolian_Unit *src = eolian_file_parse(eos, input);
    if (!src)
      {
         fprintf(stderr, "eolian: could not parse file '%s'\n", input);
@@ -589,6 +591,7 @@ end:
      free(outs[i]);
    free(basen);
 
+   eolian_free(eos);
    eolian_shutdown();
    eina_shutdown();
 
diff --git a/src/bin/eolian_cxx/eolian_cxx.cc b/src/bin/eolian_cxx/eolian_cxx.cc
index 134700ae6c..fac96da5e2 100644
--- a/src/bin/eolian_cxx/eolian_cxx.cc
+++ b/src/bin/eolian_cxx/eolian_cxx.cc
@@ -34,6 +34,7 @@ struct options_type
 {
    std::vector<std::string> include_dirs;
    std::vector<std::string> in_files;
+   mutable Eolian* state;
    mutable Eolian_Unit const* unit;
    std::string out_file;
    bool main_header;
@@ -298,7 +299,7 @@ run(options_type const& opts)
 
        for(auto&& name : opts.in_files)
          {
-           Eolian_Unit const* unit = ::eolian_file_parse(name.c_str());
+           Eolian_Unit const* unit = ::eolian_file_parse(opts.state, 
name.c_str());
            if(!unit)
              {
                EINA_CXX_DOM_LOG_ERR(eolian_cxx::domain)
@@ -346,17 +347,30 @@ run(options_type const& opts)
 }
 
 static void
+state_init(options_type const& opts)
+{
+   Eolian *eos = ::eolian_new();
+   if (!eos)
+     {
+        EINA_CXX_DOM_LOG_ERR(eolian_cxx::domain)
+          << "Eolian failed creating state";
+        assert(false && "Error creating Eolian state");
+     }
+   opts.state = eos;
+}
+
+static void
 database_load(options_type const& opts)
 {
    for (auto src : opts.include_dirs)
      {
-        if (!::eolian_directory_scan(src.c_str()))
+        if (!::eolian_directory_scan(opts.state, src.c_str()))
           {
              EINA_CXX_DOM_LOG_WARN(eolian_cxx::domain)
                << "Couldn't load eolian from '" << src << "'.";
           }
      }
-   if (!::eolian_all_eot_files_parse())
+   if (!::eolian_all_eot_files_parse(opts.state))
      {
         EINA_CXX_DOM_LOG_ERR(eolian_cxx::domain)
           << "Eolian failed parsing eot files";
@@ -368,7 +382,7 @@ database_load(options_type const& opts)
          << "No input file.";
        assert(false && "Error parsing input file");
      }
-   if (!opts.main_header && !::eolian_file_parse(opts.in_files[0].c_str()))
+   if (!opts.main_header && !::eolian_file_parse(opts.state, 
opts.in_files[0].c_str()))
      {
        EINA_CXX_DOM_LOG_ERR(eolian_cxx::domain)
          << "Failed parsing: " << opts.in_files[0] << ".";
@@ -480,6 +494,7 @@ int main(int argc, char **argv)
         efl::eina::eina_init eina_init;
         efl::eolian::eolian_init eolian_init;
         eolian_cxx::options_type opts = opts_get(argc, argv);
+        eolian_cxx::state_init(opts);
         eolian_cxx::database_load(opts);
         eolian_cxx::run(opts);
      }
diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua
index b0c0f7c67e..b7d4d6ec0d 100644
--- a/src/bindings/luajit/eolian.lua
+++ b/src/bindings/luajit/eolian.lua
@@ -13,6 +13,7 @@ ffi.cdef [[
     typedef unsigned char Eina_Bool;
     typedef struct _Eina_Iterator Eina_Iterator;
 
+    typedef struct _Eolian Eolian;
     typedef struct _Eolian_Class Eolian_Class;
     typedef struct _Eolian_Function Eolian_Function;
     typedef struct _Eolian_Type Eolian_Type;
@@ -284,17 +285,19 @@ ffi.cdef [[
         const char *text, *text_end;
     } Eolian_Doc_Token;
 
-    const Eolian_Unit *eolian_file_parse(const char *filepath);
-    Eina_Iterator *eolian_all_eo_file_paths_get(void);
-    Eina_Iterator *eolian_all_eot_file_paths_get(void);
-    Eina_Iterator *eolian_all_eo_files_get(void);
-    Eina_Iterator *eolian_all_eot_files_get(void);
     int eolian_init(void);
     int eolian_shutdown(void);
-    Eina_Bool eolian_directory_scan(const char *dir);
-    Eina_Bool eolian_system_directory_scan();
-    Eina_Bool eolian_all_eo_files_parse();
-    Eina_Bool eolian_all_eot_files_parse();
+    Eolian *eolian_new(void);
+    void eolian_free(Eolian *state);
+    const Eolian_Unit *eolian_file_parse(Eolian *state, const char *filepath);
+    Eina_Iterator *eolian_all_eo_file_paths_get(Eolian *state);
+    Eina_Iterator *eolian_all_eot_file_paths_get(Eolian *state);
+    Eina_Iterator *eolian_all_eo_files_get(Eolian *state);
+    Eina_Iterator *eolian_all_eot_files_get(Eolian *state);
+    Eina_Bool eolian_directory_scan(Eolian *state, const char *dir);
+    Eina_Bool eolian_system_directory_scan(Eolian *state);
+    Eina_Bool eolian_all_eo_files_parse(Eolian *state);
+    Eina_Bool eolian_all_eot_files_parse(Eolian *state);
     const Eolian_Class *eolian_class_get_by_name(const Eolian_Unit *unit, 
const char *class_name);
     const Eolian_Class *eolian_class_get_by_file(const Eolian_Unit *unit, 
const char *file_name);
     const char *eolian_class_file_get(const Eolian_Class *klass);
@@ -509,44 +512,59 @@ M.object_scope = {
     PROTECTED = 3
 }
 
-M.directory_scan = function(dir)
-    return eolian.eolian_directory_scan(dir) ~= 0
-end
+ffi.metatype("Eolian", {
+    __index = {
+        directory_scan = function(self, dir)
+            return eolian.eolian_directory_scan(self, dir) ~= 0
+        end,
 
-M.system_directory_scan = function()
-    return eolian.eolian_system_directory_scan() ~= 0
-end
+        system_directory_scan = function(self)
+            return eolian.eolian_system_directory_scan(self) ~= 0
+        end,
 
-M.file_parse = function(fpath)
-    local v = eolian.eolian_file_parse(fpath)
-    if v == nil then
-        return nil
-    end
-    return v
-end
+        file_parse = function(self, fpath)
+            local v = eolian.eolian_file_parse(self, fpath)
+            if v == nil then
+                return nil
+            end
+            return v
+        end,
 
-M.all_eo_files_parse = function()
-    return eolian.eolian_all_eo_files_parse() ~= 0
-end
+        all_eo_files_parse = function(self)
+            return eolian.eolian_all_eo_files_parse(self) ~= 0
+        end,
 
-M.all_eot_files_parse = function()
-    return eolian.eolian_all_eot_files_parse() ~= 0
-end
+        all_eot_files_parse = function(self)
+            return eolian.eolian_all_eot_files_parse(self) ~= 0
+        end,
 
-M.all_eo_file_paths_get = function()
-    return iterator.String_Iterator(eolian.eolian_all_eo_file_paths_get())
-end
+        all_eo_file_paths_get = function(self)
+            return 
iterator.String_Iterator(eolian.eolian_all_eo_file_paths_get(self))
+        end,
 
-M.all_eot_file_paths_get = function()
-    return iterator.String_Iterator(eolian.eolian_all_eot_file_paths_get())
-end
+        all_eot_file_paths_get = function(self)
+            return 
iterator.String_Iterator(eolian.eolian_all_eot_file_paths_get(self))
+        end,
 
-M.all_eo_files_get = function()
-    return iterator.String_Iterator(eolian.eolian_all_eo_files_get())
-end
+        all_eo_files_get = function(self)
+            return 
iterator.String_Iterator(eolian.eolian_all_eo_files_get(self))
+        end,
+
+        all_eot_files_get = function(self)
+            return 
iterator.String_Iterator(eolian.eolian_all_eot_files_get(self))
+        end,
+
+        unit_get = function(self)
+            return ffi.cast("Eolian_Unit *", self)
+        end
+    },
+    __gc = function(self)
+        eolian.eolian_free(self)
+    end
+})
 
-M.all_eot_files_get = function()
-    return iterator.String_Iterator(eolian.eolian_all_eot_files_get())
+M.new = function()
+    return eolian.eolian_new()
 end
 
 M.declaration_type = {
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index 0e8b9d59c7..bfb8c5387a 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -456,11 +456,53 @@ typedef struct _Eolian_Doc_Token
 } Eolian_Doc_Token;
 
 /*
+ * @brief Init Eolian.
+ *
+ * @ingroup Eolian
+ */
+EAPI int eolian_init(void);
+
+/*
+ * @brief Shutdown Eolian.
+ *
+ * @ingroup Eolian
+ */
+EAPI int eolian_shutdown(void);
+
+/*
+ * @brief Create a new Eolian state.
+ *
+ * This creates a new Eolian state that consists of a "master unit" with
+ * the same address (therefore, you can cast it to Eolian_Unit) plus extra
+ * state information.
+ *
+ * You need to free this with eolian_free once you're done.
+ *
+ * @return A new state (or NULL on failure).
+ *
+ * @ingroup Eolian
+ */
+EAPI Eolian *eolian_new(void);
+
+/*
+ * @brief Free an Eolian state.
+ *
+ * You can use this to free an Eolian state.
+ *
+ * If the input is NULL, this function has no effect.
+ *
+ * @param[in] state the state to free
+ *
+ */
+EAPI void eolian_free(Eolian *state);
+
+/*
  * @brief Parse the given .eo or .eot file and fill the database.
  *
  * The input can be either a full path to the file or only a filename.
  * If it's a filename, it must be scanned for first.
  *
+ * @param[in] state The Eolian state.
  * @param[in] filepath Path to the file to parse.
  * @return The unit corresponding to the parsed file or NULL.
  *
@@ -468,92 +510,59 @@ typedef struct _Eolian_Doc_Token
  *
  * @ingroup Eolian
  */
-EAPI const Eolian_Unit *eolian_file_parse(const char *filepath);
+EAPI const Eolian_Unit *eolian_file_parse(Eolian *state, const char *filepath);
 
 /*
  * @brief Get an iterator to all .eo file names with paths.
  *
+ * @param[in] state The Eolian state.
+ *
  * @see eolian_all_eo_files_get
  * @see eolian_all_eot_file_paths_get
  * @see eolian_all_eot_files_get
  *
  * @ingroup Eolian
  */
-EAPI Eina_Iterator *eolian_all_eo_file_paths_get(void);
+EAPI Eina_Iterator *eolian_all_eo_file_paths_get(Eolian *state);
 
 /*
  * @brief Get an iterator to all .eot file names with paths.
  *
+ * @param[in] state The Eolian state.
+ *
  * @see eolian_all_eo_files_get
  * @see eolian_all_eo_file_paths_get
  * @see eolian_all_eot_files_get
  *
  * @ingroup Eolian
  */
-EAPI Eina_Iterator *eolian_all_eot_file_paths_get(void);
+EAPI Eina_Iterator *eolian_all_eot_file_paths_get(Eolian *state);
 
 /*
  * @brief Get an iterator to all .eo file names (without paths).
  *
+ * @param[in] state The Eolian state.
+ *
  * @see eolian_all_eo_file_paths_get
  * @see eolian_all_eot_file_paths_get
  * @see eolian_all_eot_files_get
  *
  * @ingroup Eolian
  */
-EAPI Eina_Iterator *eolian_all_eo_files_get(void);
+EAPI Eina_Iterator *eolian_all_eo_files_get(Eolian *state);
 
 /*
  * @brief Get an iterator to all .eot file names (without paths).
  *
+ * @param[in] state The Eolian state.
+ *
  * @see eolian_all_eo_file_paths_get
  * @see eolian_all_eot_file_paths_get
  * @see eolian_all_eo_files_get
  *
  * @ingroup Eolian
  */
-EAPI Eina_Iterator *eolian_all_eot_files_get(void);
-
-/*
- * @brief Init Eolian.
- *
- * @ingroup Eolian
- */
-EAPI int eolian_init(void);
-
-/*
- * @brief Shutdown Eolian.
- *
- * @ingroup Eolian
- */
-EAPI int eolian_shutdown(void);
-
-/*
- * @brief Create a new Eolian state.
- *
- * This creates a new Eolian state that consists of a "master unit" with
- * the same address (therefore, you can cast it to Eolian_Unit) plus extra
- * state information.
- *
- * You need to free this with eolian_free once you're done.
- *
- * @return A new state (or NULL on failure).
- *
- * @ingroup Eolian
- */
-EAPI Eolian *eolian_new(void);
-
-/*
- * @brief Free an Eolian state.
- *
- * You can use this to free an Eolian state.
- *
- * If the input is NULL, this function has no effect.
- *
- * @param[in] unit the state to free
- *
- */
-EAPI void eolian_free(Eolian *state);
+EAPI Eina_Iterator *eolian_all_eot_files_get(Eolian *state);
 
 /*
  * @brief Scan the given directory (recursively) and search for .eo and
@@ -561,6 +570,7 @@ EAPI void eolian_free(Eolian *state);
  *
  * The found files are just open to extract the class name.
  *
+ * @param[in] state The Eolian state.
  * @param[in] dir the directory to scan
  * @return EINA_TRUE on success, EINA_FALSE otherwise.
  *
@@ -568,24 +578,28 @@ EAPI void eolian_free(Eolian *state);
  *
  * @ingroup Eolian
  */
-EAPI Eina_Bool eolian_directory_scan(const char *dir);
+EAPI Eina_Bool eolian_directory_scan(Eolian *state, const char *dir);
 
 /*
  * @brief Scan the system directory (recursively) and search for .eo and
  * .eot files.
  *
+ * @param[in] state The Eolian state.
+ *
  * @return EINA_TRUE on success, EINA_FALSE otherwise.
  *
  * @see eolian_directory_scan
  *
  * @ingroup Eolian
  */
-EAPI Eina_Bool eolian_system_directory_scan(void);
+EAPI Eina_Bool eolian_system_directory_scan(Eolian *state);
 
 /*
  * @brief Force parsing of all the .eo files located in the directories
  * given in eolian_directory_scan..
  *
+ * @param[in] state The Eolian state.
+ *
  * @return EINA_TRUE on success, EINA_FALSE otherwise.
  *
  * @see eolian_directory_scan
@@ -593,12 +607,14 @@ EAPI Eina_Bool eolian_system_directory_scan(void);
  *
  * @ingroup Eolian
  */
-EAPI Eina_Bool eolian_all_eo_files_parse(void);
+EAPI Eina_Bool eolian_all_eo_files_parse(Eolian *state);
 
 /*
  * @brief Force parsing of all the .eot files located in the directories
  * given in eolian_directory_scan..
  *
+ * @param[in] state The Eolian state.
+ *
  * @return EINA_TRUE on success, EINA_FALSE otherwise.
  *
  * @see eolian_directory_scan
@@ -606,7 +622,7 @@ EAPI Eina_Bool eolian_all_eo_files_parse(void);
  *
  * @ingroup Eolian
  */
-EAPI Eina_Bool eolian_all_eot_files_parse(void);
+EAPI Eina_Bool eolian_all_eot_files_parse(Eolian *state);
 
 /*
  * @brief Gets a class by its name
diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c
index e68e9d3b0a..0a6601b539 100644
--- a/src/lib/eolian/eolian_database.c
+++ b/src/lib/eolian/eolian_database.c
@@ -685,7 +685,7 @@ _scan_cb(const char *name, const char *path, void *data 
EINA_UNUSED)
 }
 
 EAPI Eina_Bool
-eolian_directory_scan(const char *dir)
+eolian_directory_scan(Eolian *state EINA_UNUSED, const char *dir)
 {
    if (!dir) return EINA_FALSE;
    eina_file_dir_list(dir, EINA_TRUE, _scan_cb, NULL);
@@ -693,13 +693,13 @@ eolian_directory_scan(const char *dir)
 }
 
 EAPI Eina_Bool
-eolian_system_directory_scan()
+eolian_system_directory_scan(Eolian *state)
 {
    Eina_Bool ret;
    Eina_Strbuf *buf = eina_strbuf_new();
    eina_strbuf_append(buf, eina_prefix_data_get(_eolian_prefix));
    eina_strbuf_append(buf, "/include");
-   ret = eolian_directory_scan(eina_strbuf_string_get(buf));
+   ret = eolian_directory_scan(state, eina_strbuf_string_get(buf));
    eina_strbuf_free(buf);
    return ret;
 }
@@ -773,7 +773,7 @@ _parse_deferred()
 static Eolian_Unit unit_tmp;
 
 EAPI const Eolian_Unit *
-eolian_file_parse(const char *filepath)
+eolian_file_parse(Eolian *state EINA_UNUSED, const char *filepath)
 {
    if (!_eolian_file_parse_nodep(filepath))
      return NULL;
@@ -794,7 +794,7 @@ static Eina_Bool _tfile_parse(const Eina_Hash *hash 
EINA_UNUSED, const void *key
 }
 
 EAPI Eina_Bool
-eolian_all_eot_files_parse()
+eolian_all_eot_files_parse(Eolian *state EINA_UNUSED)
 {
    Eina_Bool ret = EINA_TRUE;
 
@@ -819,7 +819,7 @@ static Eina_Bool _file_parse(const Eina_Hash *hash 
EINA_UNUSED, const void *key
 }
 
 EAPI Eina_Bool
-eolian_all_eo_files_parse()
+eolian_all_eo_files_parse(Eolian *state EINA_UNUSED)
 {
    Eina_Bool ret = EINA_TRUE;
 
@@ -836,28 +836,28 @@ eolian_all_eo_files_parse()
 }
 
 EAPI Eina_Iterator *
-eolian_all_eot_files_get(void)
+eolian_all_eot_files_get(Eolian *state EINA_UNUSED)
 {
    if (!_tfilenames) return NULL;
    return eina_hash_iterator_key_new(_tfilenames);
 }
 
 EAPI Eina_Iterator *
-eolian_all_eo_files_get(void)
+eolian_all_eo_files_get(Eolian *state EINA_UNUSED)
 {
    if (!_filenames) return NULL;
    return eina_hash_iterator_key_new(_filenames);
 }
 
 EAPI Eina_Iterator *
-eolian_all_eot_file_paths_get(void)
+eolian_all_eot_file_paths_get(Eolian *state EINA_UNUSED)
 {
    if (!_tfilenames) return NULL;
    return eina_hash_iterator_data_new(_tfilenames);
 }
 
 EAPI Eina_Iterator *
-eolian_all_eo_file_paths_get(void)
+eolian_all_eo_file_paths_get(Eolian *state EINA_UNUSED)
 {
    if (!_filenames) return NULL;
    return eina_hash_iterator_data_new(_filenames);
diff --git a/src/scripts/elua/modules/lualian.lua 
b/src/scripts/elua/modules/lualian.lua
index 035c24db96..3864bd1d02 100644
--- a/src/scripts/elua/modules/lualian.lua
+++ b/src/scripts/elua/modules/lualian.lua
@@ -16,6 +16,14 @@ local obj_scope = eolian.object_scope
 local param_dir = eolian.parameter_dir
 
 local gen_unit
+local gen_state
+
+local get_state = function()
+    if not gen_state then
+        gen_state = eolian.new()
+    end
+    return assert(gen_state, "could not create eolian state")
+end
 
 cutil.init_module(function()
     dom = log.Domain("lualian")
@@ -683,21 +691,21 @@ local gen_class = function(klass)
 end
 
 M.include_dir = function(dir)
-    if not eolian.directory_scan(dir) then
+    if not get_state():directory_scan(dir) then
         error("Failed including directory: " .. dir)
     end
 end
 
 M.load_eot_files = function()
-    return eolian.all_eot_files_parse()
+    return get_state():all_eot_files_parse()
 end
 
 M.system_directory_scan = function()
-    return eolian.system_directory_scan()
+    return get_state():system_directory_scan()
 end
 
 M.generate = function(fname, fstream)
-    local unit = eolian.file_parse(fname)
+    local unit = get_state():file_parse(fname)
     if unit == nil then
         error("Failed parsing file: " .. fname)
     end
diff --git a/src/tests/eolian/eolian_parsing.c 
b/src/tests/eolian/eolian_parsing.c
index ce18e4e137..788ca774c3 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -23,9 +23,10 @@ START_TEST(eolian_namespaces)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
-   fail_if(!(unit = 
eolian_file_parse(PACKAGE_DATA_DIR"/data/nmsp1_class1.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/nmsp1_class1.eo")));
 
    /* Classes existence  */
    fail_if(!(class11 = eolian_class_get_by_name(unit, "nmsp1.class1")));
@@ -89,6 +90,7 @@ START_TEST(eolian_namespaces)
    fail_if(eina_iterator_next(iter, &dummy));
    eina_iterator_free(iter);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -104,8 +106,10 @@ START_TEST(eolian_events)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/events.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/events.eo")));
 
    /* Class */
    fail_if(!(class = eolian_class_get_by_name(unit, "Events")));
@@ -162,6 +166,7 @@ START_TEST(eolian_events)
    fail_if(!eolian_class_event_get_by_name(class, "clicked,double"));
    fail_if(eolian_class_event_get_by_name(class, "clicked,triple"));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -176,9 +181,10 @@ START_TEST(eolian_override)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/override.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/override.eo")));
 
    /* Class */
    fail_if(!(class = eolian_class_get_by_name(unit, "Override")));
@@ -220,6 +226,7 @@ START_TEST(eolian_override)
 
    eina_iterator_free(iter);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -231,14 +238,17 @@ START_TEST(eolian_consts)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/consts.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/consts.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Consts")));
 
    /* Method */
    fail_if(!(fid = eolian_class_function_get_by_name(class, "foo", 
EOLIAN_METHOD)));
    fail_if(EINA_FALSE == eolian_function_object_is_const(fid));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -255,9 +265,10 @@ START_TEST(eolian_ctor_dtor)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/ctor_dtor.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/ctor_dtor.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Ctor_Dtor")));
    fail_if(!(base = eolian_class_get_by_name(unit, "Base")));
 
@@ -307,6 +318,7 @@ START_TEST(eolian_ctor_dtor)
    fail_if(eina_iterator_next(iter, &dummy));
    eina_iterator_free(iter);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -322,8 +334,10 @@ START_TEST(eolian_typedef)
    const char *file;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/typedef.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/typedef.eo")));
 
    /* Check that the class Dummy is still readable */
    fail_if(!(class = eolian_class_get_by_name(unit, "Typedef")));
@@ -388,6 +402,7 @@ START_TEST(eolian_typedef)
    fail_if(!eina_iterator_next(iter, (void**)&tdl));
    fail_if(eina_iterator_next(iter, (void**)&tdl));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -404,8 +419,10 @@ START_TEST(eolian_complex_type)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = 
eolian_file_parse(PACKAGE_DATA_DIR"/data/complex_type.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/complex_type.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Complex_Type")));
 
    /* Properties return type */
@@ -474,6 +491,7 @@ START_TEST(eolian_complex_type)
    fail_if(strcmp(type_name, "char *"));
    eina_stringshare_del(type_name);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -485,8 +503,10 @@ START_TEST(eolian_scope)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/scope.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/scope.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Scope")));
 
    /* Property scope */
@@ -507,6 +527,7 @@ START_TEST(eolian_scope)
    fail_if(!(fid = eolian_class_function_get_by_name(class, "foobar", 
EOLIAN_METHOD)));
    fail_if(eolian_function_scope_get(fid, EOLIAN_METHOD) != 
EOLIAN_SCOPE_PUBLIC);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -525,8 +546,10 @@ START_TEST(eolian_simple_parsing)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = 
eolian_file_parse(PACKAGE_DATA_DIR"/data/class_simple.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/class_simple.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Class_Simple")));
    fail_if(eolian_class_get_by_file(unit, "class_simple.eo") != class);
    fail_if(strcmp(eolian_class_file_get(class), "class_simple.eo"));
@@ -643,6 +666,7 @@ START_TEST(eolian_simple_parsing)
    fail_if(eolian_function_is_beta(fid));
    fail_if(!eolian_type_is_ptr(eolian_function_return_type_get(fid, 
EOLIAN_METHOD)));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -659,9 +683,11 @@ START_TEST(eolian_struct)
    const char *file;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/struct.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/struct.eo")));
 
    /* Check that the class Dummy is still readable */
    fail_if(!(class = eolian_class_get_by_name(unit, "Struct")));
@@ -713,6 +739,7 @@ START_TEST(eolian_struct)
    fail_if(!(tdl = eolian_type_typedecl_get(type)));
    fail_if(eolian_typedecl_type_get(tdl) != EOLIAN_TYPEDECL_STRUCT);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -724,9 +751,11 @@ START_TEST(eolian_extern)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/extern.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/extern.eo")));
 
    /* Check that the class Dummy is still readable */
    fail_if(!(class = eolian_class_get_by_name(unit, "Extern")));
@@ -748,6 +777,7 @@ START_TEST(eolian_extern)
    fail_if(!(tdl = eolian_typedecl_struct_get_by_name(unit, "Y")));
    fail_if(!eolian_typedecl_is_extern(tdl));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -763,9 +793,11 @@ START_TEST(eolian_var)
    const char *name;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/var.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/var.eo")));
 
    /* Check that the class Dummy is still readable */
    fail_if(!(class = eolian_class_get_by_name(unit, "Var")));
@@ -813,6 +845,7 @@ START_TEST(eolian_var)
    fail_if(strcmp(name, "double"));
    fail_if(eolian_variable_value_get(var));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -831,9 +864,11 @@ START_TEST(eolian_enum)
    Eolian_Value v;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/enum.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/enum.eo")));
 
    /* Check that the class Dummy is still readable */
    fail_if(!(class = eolian_class_get_by_name(unit, "Enum")));
@@ -914,6 +949,7 @@ START_TEST(eolian_enum)
    fail_if(v.type != EOLIAN_EXPR_INT);
    fail_if(v.value.i != 5);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -925,8 +961,10 @@ START_TEST(eolian_class_funcs)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
    /* Parsing */
-   fail_if(!(unit = 
eolian_file_parse(PACKAGE_DATA_DIR"/data/class_funcs.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/class_funcs.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Class_Funcs")));
 
    /* Class properties */
@@ -950,6 +988,7 @@ START_TEST(eolian_class_funcs)
    fail_if(eolian_function_is_class(fid));
    fail_if(eolian_function_scope_get(fid, EOLIAN_METHOD) != 
EOLIAN_SCOPE_PROTECTED);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -962,9 +1001,11 @@ START_TEST(eolian_free_func)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/free_func.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/free_func.eo")));
 
    /* Check that the class Dummy is still readable */
    fail_if(!(class = eolian_class_get_by_name(unit, "Free_Func")));
@@ -996,6 +1037,7 @@ START_TEST(eolian_free_func)
    fail_if(!(type = eolian_typedecl_base_type_get(tdl)));
    fail_if(strcmp(eolian_type_free_func_get(type), "ptr_free"));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1009,9 +1051,11 @@ START_TEST(eolian_null)
    Eina_Iterator *iter;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
    /* Parsing */
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/null.eo")));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/null.eo")));
 
    fail_if(!(class = eolian_class_get_by_name(unit, "Null")));
    fail_if(!(func = eolian_class_function_get_by_name(class, "foo", 
EOLIAN_METHOD)));
@@ -1045,6 +1089,7 @@ START_TEST(eolian_null)
    fail_if(eina_iterator_next(iter, (void**)&param));
    eina_iterator_free(iter);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1056,10 +1101,11 @@ START_TEST(eolian_import)
    const Eolian_Unit *unit;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
 
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/import.eo")));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/import.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Import")));
 
    fail_if(!(tdl = eolian_typedecl_alias_get_by_name(unit, "Imported")));
@@ -1068,6 +1114,7 @@ START_TEST(eolian_import)
    fail_if(!(tdl = eolian_typedecl_struct_get_by_name(unit, 
"Imported_Struct")));
    fail_if(strcmp(eolian_typedecl_file_get(tdl), "import_types.eot"));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1082,10 +1129,11 @@ START_TEST(eolian_decl)
    Eina_Iterator *itr;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
 
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/decl.eo")));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/decl.eo")));
    fail_if(!(class = eolian_class_get_by_name(unit, "Decl")));
 
    fail_if(!(itr = eolian_declarations_get_by_file("decl.eo")));
@@ -1130,6 +1178,7 @@ START_TEST(eolian_decl)
    fail_if(!(decl = eolian_declaration_get_by_name("A")));
    fail_if(eolian_declaration_type_get(decl) != EOLIAN_DECL_STRUCT);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1149,10 +1198,11 @@ START_TEST(eolian_docs)
    Eina_Iterator *itr;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
 
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/docs.eo")));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/docs.eo")));
 
    fail_if(!(tdl = eolian_typedecl_struct_get_by_name(unit, "Foo")));
    fail_if(!(doc = eolian_typedecl_documentation_get(tdl)));
@@ -1374,6 +1424,7 @@ START_TEST(eolian_docs)
                   "Event docs."));
    fail_if(eolian_documentation_description_get(doc));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1391,11 +1442,12 @@ START_TEST(eolian_function_types)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
 
    /* Parsing */
-   fail_if(!(unit = 
eolian_file_parse(PACKAGE_DATA_DIR"/data/function_types.eot")));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/function_types.eot")));
 
    /* void func(void); */
    fail_if(!(decl = eolian_typedecl_alias_get_by_name(unit, "VoidFunc")));
@@ -1500,6 +1552,7 @@ START_TEST(eolian_function_types)
 
    fail_if(eina_iterator_next(iter, &dummy));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1517,10 +1570,11 @@ START_TEST(eolian_function_as_arguments)
    void *dummy;
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
 
-   fail_if(!(unit = 
eolian_file_parse(PACKAGE_DATA_DIR"/data/function_as_argument.eo")));
+   fail_if(!(unit = eolian_file_parse(eos, 
PACKAGE_DATA_DIR"/data/function_as_argument.eo")));
 
    fail_if(!(cls = eolian_class_get_by_name(unit, "Function_As_Argument")));
 
@@ -1540,6 +1594,7 @@ START_TEST(eolian_function_as_arguments)
 
    fail_if(eina_iterator_next(iter, &dummy));
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST
@@ -1557,10 +1612,11 @@ START_TEST(eolian_parts)
    };
 
    eolian_init();
+   Eolian *eos = eolian_new();
 
-   fail_if(!eolian_directory_scan(PACKAGE_DATA_DIR"/data"));
+   fail_if(!eolian_directory_scan(eos, PACKAGE_DATA_DIR"/data"));
 
-   fail_if(!(unit = eolian_file_parse(PACKAGE_DATA_DIR"/data/parts.eo")));
+   fail_if(!(unit = eolian_file_parse(eos, PACKAGE_DATA_DIR"/data/parts.eo")));
 
    fail_if(!(cls = eolian_class_get_by_name(unit, "Parts")));
 
@@ -1585,6 +1641,7 @@ START_TEST(eolian_parts)
      }
    eina_iterator_free(iter);
 
+   eolian_free(eos);
    eolian_shutdown();
 }
 END_TEST

-- 


Reply via email to