eolian: store classes in temporary state

This commit is contained in:
Daniel Kolesa 2017-12-06 13:59:17 +01:00
parent 14cd25a8d3
commit 9fb3abc662
4 changed files with 16 additions and 16 deletions

View File

@ -35,9 +35,9 @@ EAPI const Eolian_Class *
eolian_class_get_by_name(const Eolian_Unit *unit EINA_UNUSED,
const char *class_name)
{
if (!_classes) return NULL;
if (!_state->unit.classes) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(class_name);
Eolian_Class *cl = eina_hash_find(_classes, shr);
Eolian_Class *cl = eina_hash_find(_state->unit.classes, shr);
eina_stringshare_del(shr);
return cl;
}
@ -46,9 +46,9 @@ EAPI const Eolian_Class *
eolian_class_get_by_file(const Eolian_Unit *unit EINA_UNUSED,
const char *file_name)
{
if (!_classesf) return NULL;
if (!_state->classes_f) return NULL;
Eina_Stringshare *shr = eina_stringshare_add(file_name);
Eolian_Class *cl = eina_hash_find(_classesf, shr);
Eolian_Class *cl = eina_hash_find(_state->classes_f, shr);
eina_stringshare_del(shr);
return cl;
}
@ -63,7 +63,7 @@ eolian_class_type_get(const Eolian_Class *cl)
EAPI Eina_Iterator *
eolian_all_classes_get(const Eolian_Unit *unit EINA_UNUSED)
{
return (_classes ? eina_hash_iterator_data_new(_classes) : NULL);
return (_state ? eina_hash_iterator_data_new(_state->unit.classes) : NULL);
}
EAPI const Eolian_Documentation *

View File

@ -2537,8 +2537,8 @@ eo_parser_database_fill(const char *filename, Eina_Bool eot, Eolian_Class **fcl)
if (!_db_fill_ctors(cl))
goto error;
eina_hash_set(_classes, cl->full_name, cl);
eina_hash_set(_classesf, cl->base.file, cl);
eina_hash_set(_state->unit.classes, cl->full_name, cl);
eina_hash_set(_state->classes_f, cl->base.file, cl);
eolian_object_ref(&cl->base);
if (fcl) *fcl = cl;

View File

@ -8,13 +8,11 @@
#include "eolian_database.h"
#include "eolian_priv.h"
Eina_Hash *_classes = NULL;
Eina_Hash *_aliases = NULL;
Eina_Hash *_structs = NULL;
Eina_Hash *_enums = NULL;
Eina_Hash *_globals = NULL;
Eina_Hash *_constants = NULL;
Eina_Hash *_classesf = NULL;
Eina_Hash *_aliasesf = NULL;
Eina_Hash *_structsf = NULL;
Eina_Hash *_enumsf = NULL;
@ -48,13 +46,11 @@ database_init()
{
if (_database_init_count > 0) return ++_database_init_count;
eina_init();
_classes = eina_hash_stringshared_new(EINA_FREE_CB(database_class_del));
_aliases = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
_structs = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
_enums = eina_hash_stringshared_new(EINA_FREE_CB(database_typedecl_del));
_globals = eina_hash_stringshared_new(EINA_FREE_CB(database_var_del));
_constants = eina_hash_stringshared_new(EINA_FREE_CB(database_var_del));
_classesf = eina_hash_stringshared_new(NULL);
_aliasesf = eina_hash_stringshared_new(_hashlist_free);
_structsf = eina_hash_stringshared_new(_hashlist_free);
_enumsf = eina_hash_stringshared_new(_hashlist_free);
@ -84,14 +80,12 @@ database_shutdown()
if (_database_init_count == 0)
{
eolian_free(_state);
eina_hash_free(_classes ); _classes = NULL;
eolian_free(_state); _state = NULL;
eina_hash_free(_aliases ); _aliases = NULL;
eina_hash_free(_structs ); _structs = NULL;
eina_hash_free(_enums ); _enums = NULL;
eina_hash_free(_globals ); _globals = NULL;
eina_hash_free(_constants ); _constants = NULL;
eina_hash_free(_classesf ); _classesf = NULL;
eina_hash_free(_aliasesf ); _aliasesf = NULL;
eina_hash_free(_structsf ); _structsf = NULL;
eina_hash_free(_enumsf ); _enumsf = NULL;
@ -648,6 +642,9 @@ eolian_new(void)
return NULL;
database_unit_init(&state->unit, NULL);
state->classes_f = eina_hash_stringshared_new(NULL);
return state;
}

View File

@ -31,13 +31,11 @@ extern Eina_Prefix *_eolian_prefix;
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_eolian_log_dom, __VA_ARGS__)
extern Eina_Hash *_classes;
extern Eina_Hash *_aliases;
extern Eina_Hash *_structs;
extern Eina_Hash *_enums;
extern Eina_Hash *_globals;
extern Eina_Hash *_constants;
extern Eina_Hash *_classesf;
extern Eina_Hash *_aliasesf;
extern Eina_Hash *_structsf;
extern Eina_Hash *_enumsf;
@ -59,6 +57,9 @@ extern Eina_Hash *_parsingeos;
/* for deferred dependency parsing */
extern Eina_Hash *_defereos;
/* TODO: remove */
extern Eolian *_state;
struct _Eolian_Unit
{
Eolian_Unit *parent;
@ -74,6 +75,8 @@ struct _Eolian_Unit
struct _Eolian
{
Eolian_Unit unit;
Eina_Hash *classes_f;
};
typedef struct _Eolian_Object