I believe this broke elm_check when clouseau is enabled.
See the bt at the end of the file.


On Wed, Dec 6, 2017 at 7:30 PM, Daniel Kolesa <dan...@octaforge.org> wrote:

> On Wed, Dec 6, 2017, at 10:22, Jean-Philippe André wrote:
> > This breaks the C# bindings as some Eolian APIs are changed :(
>
> Then the C# binding people should fix that themselves. Eolian is
> unstable API right now and if you add in new code relying on it then
> you're responsible for it. I'm not going to deal with any new bindings
> code introduced into our repository at this point, not JS, not C#,
> sorry.
>
> D5
>
> >
> > On Wed, Dec 6, 2017 at 12:42 AM, Daniel Kolesa <dan...@octaforge.org>
> > wrote:
> >
> > > q66 pushed a commit to branch master.
> > >
> > > http://git.enlightenment.org/core/efl.git/commit/?id=
> > > 8a1f93f698315b43de28b755bce5fc9a4d85d59a
> > >
> > > commit 8a1f93f698315b43de28b755bce5fc9a4d85d59a
> > > Author: Daniel Kolesa <d.kol...@osg.samsung.com>
> > > 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
> > >
> > > --
> > >
> > > --
> > > Jean-Philippe André
> > >
> > >
> > ------------------------------------------------------------
> ------------------
>
>
BACKTRACE



#0  0x00007ffff670ad47 in eina_hash_add (hash=0x1b, key=0x555555a04a7c,
data=0x5555559c7750) at /home/jpeg/e/core/efl/src/lib/eina/eina_hash.c:939
#1  0x00007fffdf3919d5 in _scan_cb (name=0x55555587e557
"evas_canvas3d_camera.eo", path=0x55555587c494
"/opt/e/share/eolian/include/evas-1", data=0x5555559c7690)
    at /home/jpeg/e/core/efl/src/lib/eolian/eolian_database.c:662
#2  0x00007ffff6770afb in eina_file_dir_list (dir=0x55555587c494
"/opt/e/share/eolian/include/evas-1", recursive=1 '\001', cb=0x7fffdf391920
<_scan_cb>, data=0x5555559c7690)
    at /home/jpeg/e/core/efl/src/lib/eina/eina_file.c:576
#3  0x00007ffff6770b42 in eina_file_dir_list (dir=0x5555559c9490
"/opt/e/share/eolian/include", recursive=1 '\001', cb=0x7fffdf391920
<_scan_cb>, data=0x5555559c7690)
    at /home/jpeg/e/core/efl/src/lib/eina/eina_file.c:580
#4  0x00007fffdf39190b in eolian_directory_scan (state=0x5555559c7690,
dir=0x5555559c9490 "/opt/e/share/eolian/include") at
/home/jpeg/e/core/efl/src/lib/eolian/eolian_database.c:670
#5  0x00007fffdf391a4e in eolian_system_directory_scan
(state=0x5555559c7690) at
/home/jpeg/e/core/efl/src/lib/eolian/eolian_database.c:681
#6  0x00007fffdf5b1ab1 in clouseau_debug_init () at
/home/jpeg/e/tools/clouseau/src/lib/clouseau_debug.c:900
#7  0x00007ffff62c2b28 in _elm_clouseau_reload () at
/home/jpeg/e/core/efl/src/lib/elementary/elm_main.c:366
#8  0x00007ffff6193d05 in elm_config_clouseau_enabled_set (enable=1 '\001')
at /home/jpeg/e/core/efl/src/lib/elementary/elm_config.c:3868
#9  0x00007ffff61a6e62 in _efl_config_global_efl_config_config_set
(obj=0x400000008eeb, _pd=0x555555849b20, name=0x55555559b4ea
"clouseau_enabled", val=0x555555a06b70)
    at /home/jpeg/e/core/efl/src/lib/elementary/elm_config.c:4929
#10 0x00007ffff11ffdea in efl_config_set (obj=0x400000008eeb,
name=0x55555559b4ea "clouseau_enabled", value=0x555555a06b70) at
../src/lib/efl/interfaces/efl_config.eo.c:1
#11 0x0000555555577c0b in efl_config_bool_set (obj=0x400000008eeb,
name=0x55555559b4ea "clouseau_enabled", val=1 '\001') at
/home/jpeg/e/core/efl/src/lib/elementary/elm_config.h:2215
#12 0x0000555555576592 in elm_config_eoapi (_i=0) at
/home/jpeg/e/core/efl/src/tests/elementary/elm_test_config.c:104
#13 0x00007ffff7bd36a7 in  () at /usr/lib/libcheck.so.0
#14 0x00007ffff7bd3bdb in srunner_run_tagged () at /usr/lib/libcheck.so.0
#15 0x0000555555560de8 in _efl_suite_build_and_run (argc=0,
argv=0x7fffffffdcd0, suite_name=0x555555592b18 "Elementary",
etc=0x5555557a3580 <etc>)



-- 
Jean-Philippe André
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to