if (ls->current != 0xBF)
return;
next_char(ls);
+
+ Eolian_Unit *ncunit = calloc(1, sizeof(Eolian_Unit));
+ database_unit_init(ncunit, ls->filename);
+ eina_hash_add(_units, ls->filename, ncunit);
}
static void
Eina_Hash *_defereos = NULL;
+static Eolian_Unit *_cunit = NULL;
+
static int _database_init_count = 0;
static void
}
void
-database_unit_del(Eolian_Unit *unit EINA_UNUSED)
+database_unit_init(Eolian_Unit *unit, Eina_Stringshare *fname)
+{
+ Eolian_Unit *ocunit = _cunit;
+ unit->parent = ocunit;
+ if (ocunit)
+ eina_hash_add(ocunit->children, fname, unit);
+
+ unit->children = eina_hash_stringshared_new(NULL);
+ unit->classes = eina_hash_stringshared_new(NULL);
+ unit->globals = eina_hash_stringshared_new(NULL);
+ unit->constants = eina_hash_stringshared_new(NULL);
+ unit->aliases = eina_hash_stringshared_new(NULL);
+ unit->structs = eina_hash_stringshared_new(NULL);
+ unit->enums = eina_hash_stringshared_new(NULL);
+ _cunit = unit;
+}
+
+void
+database_unit_del(Eolian_Unit *unit)
{
+ if (!unit)
+ return;
+
+ eina_hash_free(unit->classes);
+ eina_hash_free(unit->globals);
+ eina_hash_free(unit->constants);
+ eina_hash_free(unit->aliases);
+ eina_hash_free(unit->structs);
+ eina_hash_free(unit->enums);
}
#define EO_SUFFIX ".eo"
/* a hash holding all declarations, for redef checking etc */
extern Eina_Hash *_decls;
+extern Eina_Hash *_declsf;
+
+extern Eina_Hash *_units;
/* holds parsed/currently parsing eot files to keep track */
extern Eina_Hash *_parsedeos;
struct _Eolian_Unit
{
- Eina_List *dependencies;
- Eina_List *classes;
- Eina_List *globals;
- Eina_List *constants;
- Eina_List *aliases;
- Eina_List *structs;
- Eina_List *enums;
+ Eolian_Unit *parent;
+ Eina_Hash *children;
+ Eina_Hash *classes;
+ Eina_Hash *globals;
+ Eina_Hash *constants;
+ Eina_Hash *aliases;
+ Eina_Hash *structs;
+ Eina_Hash *enums;
};
int database_init(void);
void database_doc_del(Eolian_Documentation *doc);
+void database_unit_init(Eolian_Unit *unit, Eina_Stringshare *fname);
void database_unit_del(Eolian_Unit *unit);
/* types */