summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2017-12-05 16:40:04 +0100
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2017-12-05 16:41:42 +0100
commit8a1f93f698315b43de28b755bce5fc9a4d85d59a (patch)
tree7b5c181026830c880b6853806657a53157c4d5dc
parent67e1c2ab8818eda7d88ac61741824b1a903bc69d (diff)
downloadefl-8a1f93f698315b43de28b755bce5fc9a4d85d59a.tar.gz
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.
-rw-r--r--src/bin/eolian/main.c9
-rw-r--r--src/bin/eolian_cxx/eolian_cxx.cc23
-rw-r--r--src/bindings/luajit/eolian.lua96
-rw-r--r--src/lib/eolian/Eolian.h116
-rw-r--r--src/lib/eolian/eolian_database.c20
-rw-r--r--src/scripts/elua/modules/lualian.lua16
-rw-r--r--src/tests/eolian/eolian_parsing.c119
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