summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Zaoui <daniel.zaoui@samsung.com>2014-05-21 15:34:08 +0300
committerDaniel Zaoui <daniel.zaoui@samsung.com>2014-05-21 15:55:28 +0300
commite1abaf7c37867aaf2ce7c00b26682f545b2584c6 (patch)
tree1ebb3a07de5c7d714762742f94ae0806b7608d5b
parentbc70a1bd84dec728d2b9d417b4a3c92aecddeb75 (diff)
downloadefl-e1abaf7c37867aaf2ce7c00b26682f545b2584c6.tar.gz
Eolian: fix class lookup during parsing.
If classes A and B are stored in a same file, when A inherits from B, and A needs to be generated, the generator, even if B is parsed, will not search the class in the database but will look for some b.eo. This patch fixes that issue by checking the existence of the classes into the database before looking for a corresponding file.
-rw-r--r--src/lib/eolian/eolian_database.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c
index 75b92eb816..9bd7c612e0 100644
--- a/src/lib/eolian/eolian_database.c
+++ b/src/lib/eolian/eolian_database.c
@@ -1299,16 +1299,19 @@ EAPI Eina_Bool eolian_eo_file_parse(const char *filepath)
}
EINA_LIST_FOREACH(eolian_class_inherits_list_get(class_name), itr, inherit_name)
{
- char *filename = strdup(inherit_name);
- eina_str_tolower(&filename);
- filepath = eina_hash_find(_filenames, filename);
- if (!filepath)
+ if (!eolian_class_exists(inherit_name))
{
- ERR("Unable to find class %s", inherit_name);
- return EINA_FALSE;
+ char *filename = strdup(inherit_name);
+ eina_str_tolower(&filename);
+ filepath = eina_hash_find(_filenames, filename);
+ if (!filepath)
+ {
+ ERR("Unable to find class %s", inherit_name);
+ return EINA_FALSE;
+ }
+ if (!eolian_eo_file_parse(filepath)) return EINA_FALSE;
+ free(filename);
}
- if (!eolian_eo_file_parse(filepath)) return EINA_FALSE;
- free(filename);
}
EINA_LIST_FOREACH(eolian_class_implements_list_get(class_name), itr, impl)
{