From a2ccdb7b2188c1832665981141fb9e3b9093866c Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 19 Apr 2018 13:40:41 +0200 Subject: [PATCH] eolian: re-enable non-dependencied parsing The issue was that standalone-parsed files (outside of dependencies of some other unit) were not being included in that dependency tree (obviously) which resulted in their own dependency tree being excluded from merging, causing the database hashes to lack the necessary elements. To fix this, I trigger merging of the "standalone" dependency trees separately, by calling _merge_units from defer parsing cb. --- src/lib/eolian/eolian_database.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/lib/eolian/eolian_database.c b/src/lib/eolian/eolian_database.c index f595878222..d9da402d90 100644 --- a/src/lib/eolian/eolian_database.c +++ b/src/lib/eolian/eolian_database.c @@ -876,6 +876,7 @@ database_defer(Eolian_State *state, const char *fname, Eina_Bool isdep) } static Eina_Bool _parse_deferred(Eolian_Unit *parent); +static void _merge_units(Eolian_Unit *unit); typedef struct _Defer_Data { @@ -885,15 +886,22 @@ typedef struct _Defer_Data static Eina_Bool _defer_hash_cb(const Eina_Hash *hash EINA_UNUSED, const void *key, - void *data EINA_UNUSED, void *fdata) + void *data, void *fdata) { Defer_Data *d = fdata; + Eina_Bool alone = ((size_t)data <= 1); Eolian_Unit *parent = d->parent; /* not a dependency; parse standalone */ - /*if ((size_t)data <= 1) - parent = &parent->state->staging.unit;*/ + if (alone) + parent = &parent->state->staging.unit; Eolian_Unit *pdep = _eolian_file_parse_nodep(parent, key); - return (d->succ = (pdep && _parse_deferred(pdep))); + d->succ = (pdep && _parse_deferred(pdep)); + /* standalone-parsed stuff forms its own dependency trees, + * so we have to merge the units manually and separately + */ + if (d->succ && alone) + _merge_units(pdep); + return d->succ; } static Eina_Bool