Eolian/Library: add log domain and NULL checks

This commit is contained in:
Daniel Zaoui 2014-02-19 14:09:36 +02:00
parent 920c035c57
commit 748a01c47f
4 changed files with 150 additions and 85 deletions

View File

@ -2689,6 +2689,7 @@ eo_tokenizer_database_fill(const char *filename)
Eo_Implement_Def *impl; Eo_Implement_Def *impl;
/* Eo_Ret_Def *ret; */ /* Eo_Ret_Def *ret; */
INF("Parsing %s", filename);
Eo_Tokenizer *toknz = eo_tokenizer_get(); Eo_Tokenizer *toknz = eo_tokenizer_get();
if (!toknz) if (!toknz)
{ {

View File

@ -3,10 +3,26 @@
#include "eo_lexer.h" #include "eo_lexer.h"
static int _eolian_init_counter = 0; static int _eolian_init_counter = 0;
int _eolian_log_dom = -1;
EAPI int eolian_init(void) EAPI int eolian_init(void)
{ {
const char *log_dom = "eolian";
if (_eolian_init_counter > 0) return ++_eolian_init_counter; if (_eolian_init_counter > 0) return ++_eolian_init_counter;
INF("Init");
eina_init();
_eolian_log_dom = eina_log_domain_register(log_dom, EINA_COLOR_LIGHTBLUE);
if (_eolian_log_dom < 0)
{
EINA_LOG_ERR("Could not register log domain: %s", log_dom);
return EINA_FALSE;
}
eina_log_timing(_eolian_log_dom,
EINA_LOG_STATE_STOP,
EINA_LOG_STATE_INIT);
database_init(); database_init();
eo_tokenizer_init(); eo_tokenizer_init();
return ++_eolian_init_counter; return ++_eolian_init_counter;
@ -23,8 +39,17 @@ EAPI int eolian_shutdown(void)
if (_eolian_init_counter == 0) if (_eolian_init_counter == 0)
{ {
INF("Shutdown");
eina_log_timing(_eolian_log_dom,
EINA_LOG_STATE_START,
EINA_LOG_STATE_SHUTDOWN);
eo_tokenizer_shutdown(); eo_tokenizer_shutdown();
database_shutdown(); database_shutdown();
eina_log_domain_unregister(_eolian_log_dom);
_eolian_log_dom = -1;
eina_shutdown();
} }
return _eolian_init_counter; return _eolian_init_counter;

View File

@ -126,6 +126,7 @@ _class_get(const char *class_name)
Eina_Stringshare *shr = eina_stringshare_add(class_name); Eina_Stringshare *shr = eina_stringshare_add(class_name);
Class_desc *cl = eina_hash_find(_classes, shr); Class_desc *cl = eina_hash_find(_classes, shr);
eina_stringshare_del(shr); eina_stringshare_del(shr);
EINA_SAFETY_ON_NULL_RETURN_VAL(class_name, NULL);
return cl; return cl;
} }
@ -144,7 +145,7 @@ database_shutdown()
{ {
if (_database_init_count <= 0) if (_database_init_count <= 0)
{ {
EINA_LOG_ERR("Init count not greater than 0 in shutdown."); ERR("Init count not greater than 0 in shutdown.");
return 0; return 0;
} }
_database_init_count--; _database_init_count--;
@ -174,7 +175,7 @@ Eina_Bool
database_class_file_set(const char *class_name, const char *file_name) database_class_file_set(const char *class_name, const char *file_name)
{ {
Class_desc *cl = _class_get(class_name); Class_desc *cl = _class_get(class_name);
if (!cl) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
cl->file = eina_stringshare_add(file_name); cl->file = eina_stringshare_add(file_name);
return EINA_TRUE; return EINA_TRUE;
} }
@ -203,33 +204,27 @@ EAPI Eolian_Class_Type
eolian_class_type_get(const char *class_name) eolian_class_type_get(const char *class_name)
{ {
Class_desc *cl = _class_get(class_name); Class_desc *cl = _class_get(class_name);
return (cl?cl->type:EOLIAN_CLASS_UNKNOWN_TYPE); EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EOLIAN_CLASS_UNKNOWN_TYPE);
return cl->type;
} }
Eina_Bool Eina_Bool
database_class_del(const char *class_name) database_class_del(const char *class_name)
{ {
Class_desc *cl = _class_get(class_name); Class_desc *cl = _class_get(class_name);
if (cl) EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
{ eina_hash_del(_classes, class_name, NULL);
eina_hash_del(_classes, class_name, NULL); _class_del(cl);
_class_del(cl); return EINA_TRUE;
return EINA_TRUE;
}
return EINA_FALSE;
} }
static Eina_Bool _class_name_get(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED, void *data, void *fdata) static Eina_Bool _class_name_get(const Eina_Hash *hash EINA_UNUSED, const void *key EINA_UNUSED, void *data, void *fdata)
{ {
Class_desc *desc = data; Class_desc *desc = data;
Eina_List **list = fdata; Eina_List **list = fdata;
if (desc && list) EINA_SAFETY_ON_FALSE_RETURN_VAL(desc && list , EINA_FALSE);
{ *list = eina_list_append(*list, desc->name);
*list = eina_list_append(*list, desc->name); return EINA_TRUE;
return EINA_TRUE;
}
return EINA_FALSE;
} }
EAPI const Eina_List * EAPI const Eina_List *
@ -249,7 +244,7 @@ Eina_Bool
database_class_inherit_add(const char *class_name, const char *inherit_class_name) database_class_inherit_add(const char *class_name, const char *inherit_class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
desc->inherits = eina_list_append(desc->inherits, eina_stringshare_add(inherit_class_name)); desc->inherits = eina_list_append(desc->inherits, eina_stringshare_add(inherit_class_name));
return EINA_TRUE; return EINA_TRUE;
} }
@ -258,42 +253,48 @@ EAPI const char *
eolian_class_description_get(const char *class_name) eolian_class_description_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return (desc ? desc->description : NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
return desc->description;
} }
void void
database_class_description_set(const char *class_name, const char *description) database_class_description_set(const char *class_name, const char *description)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (desc) desc->description = eina_stringshare_add(description); EINA_SAFETY_ON_NULL_RETURN(desc);
desc->description = eina_stringshare_add(description);
} }
EAPI const char* EAPI const char*
eolian_class_legacy_prefix_get(const char *class_name) eolian_class_legacy_prefix_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return (desc ? desc->legacy_prefix : NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
return desc->legacy_prefix;
} }
void void
database_class_legacy_prefix_set(const char *class_name, const char *legacy_prefix) database_class_legacy_prefix_set(const char *class_name, const char *legacy_prefix)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (desc) desc->legacy_prefix = eina_stringshare_add(legacy_prefix); EINA_SAFETY_ON_NULL_RETURN(desc);
desc->legacy_prefix = eina_stringshare_add(legacy_prefix);
} }
EAPI const Eina_List * EAPI const Eina_List *
eolian_class_inherits_list_get(const char *class_name) eolian_class_inherits_list_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return (desc?desc->inherits:NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
return desc->inherits;
} }
EAPI const Eina_List* EAPI const Eina_List*
eolian_class_implements_list_get(const char *class_name) eolian_class_implements_list_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return (desc ? desc->implements : NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
return desc->implements;
} }
Eolian_Function Eolian_Function
@ -310,6 +311,7 @@ void
database_function_type_set(Eolian_Function function_id, Eolian_Function_Type foo_type) database_function_type_set(Eolian_Function function_id, Eolian_Function_Type foo_type)
{ {
_Function_Id *fid = (_Function_Id *)function_id; _Function_Id *fid = (_Function_Id *)function_id;
EINA_SAFETY_ON_NULL_RETURN(fid);
switch (foo_type) switch (foo_type)
{ {
case SET: case SET:
@ -327,7 +329,8 @@ database_function_type_set(Eolian_Function function_id, Eolian_Function_Type foo
Eina_Bool database_class_function_add(const char *class_name, Eolian_Function foo_id) Eina_Bool database_class_function_add(const char *class_name, Eolian_Function foo_id)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!foo_id || !desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
EINA_SAFETY_ON_FALSE_RETURN_VAL(foo_id && desc, EINA_FALSE);
_Function_Id *fid = (_Function_Id *) foo_id; _Function_Id *fid = (_Function_Id *) foo_id;
switch (fid->type) switch (fid->type)
{ {
@ -352,6 +355,7 @@ Eina_Bool database_class_function_add(const char *class_name, Eolian_Function fo
desc->dflt_dtor = foo_id; desc->dflt_dtor = foo_id;
break; break;
default: default:
ERR("Bad function type %d.", fid->type);
return EINA_FALSE; return EINA_FALSE;
} }
return EINA_TRUE; return EINA_TRUE;
@ -360,9 +364,9 @@ Eina_Bool database_class_function_add(const char *class_name, Eolian_Function fo
Eolian_Implement Eolian_Implement
database_implement_new(const char *class_name, const char *func_name, Eolian_Function_Type type) database_implement_new(const char *class_name, const char *func_name, Eolian_Function_Type type)
{ {
if (!class_name || !func_name) return NULL; EINA_SAFETY_ON_FALSE_RETURN_VAL(class_name && func_name, NULL);
_Implement_Desc *impl_desc = calloc(1, sizeof(_Implement_Desc)); _Implement_Desc *impl_desc = calloc(1, sizeof(_Implement_Desc));
if (!impl_desc) return NULL; EINA_SAFETY_ON_NULL_RETURN_VAL(impl_desc, NULL);
impl_desc->class_name = eina_stringshare_add(class_name); impl_desc->class_name = eina_stringshare_add(class_name);
impl_desc->func_name = eina_stringshare_add(func_name); impl_desc->func_name = eina_stringshare_add(func_name);
impl_desc->type = type; impl_desc->type = type;
@ -372,8 +376,9 @@ database_implement_new(const char *class_name, const char *func_name, Eolian_Fun
Eina_Bool Eina_Bool
database_class_implement_add(const char *class_name, Eolian_Implement impl_desc) database_class_implement_add(const char *class_name, Eolian_Implement impl_desc)
{ {
EINA_SAFETY_ON_NULL_RETURN_VAL(impl_desc, EINA_FALSE);
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!impl_desc || !desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
desc->implements = eina_list_append(desc->implements, impl_desc); desc->implements = eina_list_append(desc->implements, impl_desc);
return EINA_TRUE; return EINA_TRUE;
} }
@ -382,7 +387,7 @@ EAPI Eina_Bool
eolian_implement_information_get(Eolian_Implement impl, const char **class_name, const char **func_name, Eolian_Function_Type *type) eolian_implement_information_get(Eolian_Implement impl, const char **class_name, const char **func_name, Eolian_Function_Type *type)
{ {
_Implement_Desc *_impl = (_Implement_Desc *)impl; _Implement_Desc *_impl = (_Implement_Desc *)impl;
if (!_impl) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(_impl, EINA_FALSE);
if (class_name) *class_name = _impl->class_name; if (class_name) *class_name = _impl->class_name;
if (func_name) *func_name = _impl->func_name; if (func_name) *func_name = _impl->func_name;
if (type) *type = _impl->type; if (type) *type = _impl->type;
@ -393,6 +398,7 @@ Eolian_Implement_Legacy
database_implement_legacy_add(Eolian_Implement impl, const char *legacy_function_name) database_implement_legacy_add(Eolian_Implement impl, const char *legacy_function_name)
{ {
_Implement_Desc *_impl = (_Implement_Desc *)impl; _Implement_Desc *_impl = (_Implement_Desc *)impl;
EINA_SAFETY_ON_NULL_RETURN_VAL(_impl, NULL);
_impl->leg_desc = calloc(1, sizeof(_Implement_Legacy_Desc)); _impl->leg_desc = calloc(1, sizeof(_Implement_Legacy_Desc));
_Implement_Legacy_Desc *leg_desc = (_Implement_Legacy_Desc *)_impl->leg_desc; _Implement_Legacy_Desc *leg_desc = (_Implement_Legacy_Desc *)_impl->leg_desc;
if (leg_desc && legacy_function_name) leg_desc->legacy_function_name = legacy_function_name; if (leg_desc && legacy_function_name) leg_desc->legacy_function_name = legacy_function_name;
@ -405,7 +411,7 @@ database_implement_legacy_param_add(Eolian_Implement_Legacy leg,
Eina_Stringshare *comment) Eina_Stringshare *comment)
{ {
_Implement_Legacy_Desc *_leg = (_Implement_Legacy_Desc *)leg; _Implement_Legacy_Desc *_leg = (_Implement_Legacy_Desc *)leg;
if (!_leg) return NULL; EINA_SAFETY_ON_NULL_RETURN_VAL(_leg, NULL);
_Implement_Legacy_Param *param = calloc(1, sizeof(_Implement_Legacy_Param)); _Implement_Legacy_Param *param = calloc(1, sizeof(_Implement_Legacy_Param));
param->eo_param = eo_param; param->eo_param = eo_param;
@ -422,7 +428,7 @@ eolian_implement_legacy_param_info_get(Eolian_Implement_Legacy_Parameter param,
Eina_Stringshare **comment) Eina_Stringshare **comment)
{ {
_Implement_Legacy_Param *_param = (_Implement_Legacy_Param *)param; _Implement_Legacy_Param *_param = (_Implement_Legacy_Param *)param;
if (!_param) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(_param, EINA_FALSE);
if (eo_param) *eo_param = _param->eo_param; if (eo_param) *eo_param = _param->eo_param;
if (leg_param) *leg_param = _param->leg_param; if (leg_param) *leg_param = _param->leg_param;
@ -434,7 +440,7 @@ Eina_Bool
database_implement_legacy_return_add(Eolian_Implement_Legacy leg, Eina_Stringshare *ret_type, Eina_Stringshare *ret_value) database_implement_legacy_return_add(Eolian_Implement_Legacy leg, Eina_Stringshare *ret_type, Eina_Stringshare *ret_value)
{ {
_Implement_Legacy_Desc *_leg = (_Implement_Legacy_Desc *)leg; _Implement_Legacy_Desc *_leg = (_Implement_Legacy_Desc *)leg;
if (!_leg) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(_leg, EINA_FALSE);
_leg->ret_type = ret_type; _leg->ret_type = ret_type;
_leg->ret_value = ret_value; _leg->ret_value = ret_value;
return EINA_TRUE; return EINA_TRUE;
@ -444,6 +450,7 @@ Eolian_Implement_Legacy
eolian_implement_legacy_desc_get(Eolian_Implement impl) eolian_implement_legacy_desc_get(Eolian_Implement impl)
{ {
_Implement_Desc *_impl = (_Implement_Desc *)impl; _Implement_Desc *_impl = (_Implement_Desc *)impl;
EINA_SAFETY_ON_NULL_RETURN_VAL(_impl, NULL);
return (Eolian_Implement_Legacy) (_impl->leg_desc); return (Eolian_Implement_Legacy) (_impl->leg_desc);
} }
@ -453,7 +460,7 @@ eolian_implement_legacy_information_get(const Eolian_Implement_Legacy leg_desc,
Eina_Stringshare **ret_type, Eina_Stringshare **ret_value) Eina_Stringshare **ret_type, Eina_Stringshare **ret_value)
{ {
_Implement_Legacy_Desc *_leg = (_Implement_Legacy_Desc *)leg_desc; _Implement_Legacy_Desc *_leg = (_Implement_Legacy_Desc *)leg_desc;
if (!_leg) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(_leg, EINA_FALSE);
if (leg_func_name) *leg_func_name = _leg->legacy_function_name; if (leg_func_name) *leg_func_name = _leg->legacy_function_name;
if (params) *params = _leg->params; if (params) *params = _leg->params;
if (ret_type) *ret_type = _leg->ret_type; if (ret_type) *ret_type = _leg->ret_type;
@ -461,11 +468,13 @@ eolian_implement_legacy_information_get(const Eolian_Implement_Legacy leg_desc,
return EINA_TRUE; return EINA_TRUE;
} }
EAPI Eolian_Function eolian_class_function_find_by_name(const char *class_name, const char *func_name, Eolian_Function_Type f_type) EAPI Eolian_Function
eolian_class_function_find_by_name(const char *class_name, const char *func_name, Eolian_Function_Type f_type)
{ {
Eina_List *itr; Eina_List *itr;
Eolian_Function foo_id; Eolian_Function foo_id;
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
if (f_type == UNRESOLVED || f_type == METHOD_FUNC) if (f_type == UNRESOLVED || f_type == METHOD_FUNC)
EINA_LIST_FOREACH(desc->methods, itr, foo_id) EINA_LIST_FOREACH(desc->methods, itr, foo_id)
@ -513,7 +522,7 @@ EAPI const Eina_List *
eolian_class_functions_list_get(const char *class_name, Eolian_Function_Type foo_type) eolian_class_functions_list_get(const char *class_name, Eolian_Function_Type foo_type)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!desc) return NULL; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
switch (foo_type) switch (foo_type)
{ {
case PROPERTY_FUNC: case PROPERTY_FUNC:
@ -532,6 +541,7 @@ EAPI Eolian_Function
eolian_class_default_constructor_get(const char *class_name) eolian_class_default_constructor_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
return desc->dflt_ctor; return desc->dflt_ctor;
} }
@ -539,6 +549,7 @@ EAPI Eolian_Function
eolian_class_default_destructor_get(const char *class_name) eolian_class_default_destructor_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
return desc->dflt_dtor; return desc->dflt_dtor;
} }
@ -546,6 +557,7 @@ EAPI Eolian_Function_Type
eolian_function_type_get(Eolian_Function function_id) eolian_function_type_get(Eolian_Function function_id)
{ {
_Function_Id *fid = (_Function_Id *)function_id; _Function_Id *fid = (_Function_Id *)function_id;
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, UNRESOLVED);
return fid->type; return fid->type;
} }
@ -553,6 +565,7 @@ EAPI const char *
eolian_function_name_get(Eolian_Function function_id) eolian_function_name_get(Eolian_Function function_id)
{ {
_Function_Id *fid = (_Function_Id *)function_id; _Function_Id *fid = (_Function_Id *)function_id;
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
return fid->name; return fid->name;
} }
@ -560,7 +573,7 @@ Eina_Bool
database_function_set_as_virtual_pure(Eolian_Function function_id) database_function_set_as_virtual_pure(Eolian_Function function_id)
{ {
_Function_Id *fid = (_Function_Id *)function_id; _Function_Id *fid = (_Function_Id *)function_id;
if (!fid) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
fid->virtual_pure = EINA_TRUE; fid->virtual_pure = EINA_TRUE;
return EINA_TRUE; return EINA_TRUE;
} }
@ -569,15 +582,16 @@ EAPI Eina_Bool
eolian_function_is_virtual_pure(Eolian_Function function_id) eolian_function_is_virtual_pure(Eolian_Function function_id)
{ {
_Function_Id *fid = (_Function_Id *)function_id; _Function_Id *fid = (_Function_Id *)function_id;
if (!fid) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
return fid->virtual_pure; return fid->virtual_pure;
} }
void void
database_function_data_set(Eolian_Function function_id, const char *key, const char *data) database_function_data_set(Eolian_Function function_id, const char *key, const char *data)
{ {
_Function_Id *fid = (_Function_Id *)function_id;
EINA_SAFETY_ON_NULL_RETURN(key); EINA_SAFETY_ON_NULL_RETURN(key);
_Function_Id *fid = (_Function_Id *)function_id;
EINA_SAFETY_ON_NULL_RETURN(fid);
if (data) if (data)
{ {
if (!eina_hash_find(fid->data, key)) if (!eina_hash_find(fid->data, key))
@ -593,7 +607,8 @@ EAPI const char *
eolian_function_data_get(Eolian_Function function_id, const char *key) eolian_function_data_get(Eolian_Function function_id, const char *key)
{ {
_Function_Id *fid = (_Function_Id *)function_id; _Function_Id *fid = (_Function_Id *)function_id;
return (fid ? eina_hash_find(fid->data, key) : NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
return eina_hash_find(fid->data, key);
} }
static _Parameter_Desc * static _Parameter_Desc *
@ -611,12 +626,9 @@ Eolian_Function_Parameter
database_property_key_add(Eolian_Function foo_id, const char *type, const char *name, const char *description) database_property_key_add(Eolian_Function foo_id, const char *type, const char *name, const char *description)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
_Parameter_Desc *param = NULL; EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
if (fid) _Parameter_Desc *param = _parameter_new(type, name, description);
{ fid->keys = eina_list_append(fid->keys, param);
param = _parameter_new(type, name, description);
fid->keys = eina_list_append(fid->keys, param);
}
return (Eolian_Function_Parameter)param; return (Eolian_Function_Parameter)param;
} }
@ -624,12 +636,9 @@ Eolian_Function_Parameter
database_property_value_add(Eolian_Function foo_id, const char *type, const char *name, const char *description) database_property_value_add(Eolian_Function foo_id, const char *type, const char *name, const char *description)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
_Parameter_Desc *param = NULL; EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
if (fid) _Parameter_Desc *param = _parameter_new(type, name, description);
{ fid->params = eina_list_append(fid->params, param);
param = _parameter_new(type, name, description);
fid->params= eina_list_append(fid->params, param);
}
return (Eolian_Function_Parameter)param; return (Eolian_Function_Parameter)param;
} }
@ -637,13 +646,10 @@ Eolian_Function_Parameter
database_method_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description) database_method_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
_Parameter_Desc *param = NULL; EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
if (fid) _Parameter_Desc *param = _parameter_new(type, name, description);
{ param->param_dir = param_dir;
param = _parameter_new(type, name, description); fid->params = eina_list_append(fid->params, param);
param->param_dir = param_dir;
fid->params= eina_list_append(fid->params, param);
}
return (Eolian_Function_Parameter)param; return (Eolian_Function_Parameter)param;
} }
@ -651,21 +657,20 @@ EAPI Eolian_Function_Parameter
eolian_function_parameter_get(const Eolian_Function foo_id, const char *param_name) eolian_function_parameter_get(const Eolian_Function foo_id, const char *param_name)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
if (fid) EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
{ Eina_List *itr;
Eina_List *itr; _Parameter_Desc *param;
_Parameter_Desc *param; EINA_LIST_FOREACH(fid->keys, itr, param)
EINA_LIST_FOREACH(fid->keys, itr, param) if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param; EINA_LIST_FOREACH(fid->params, itr, param)
EINA_LIST_FOREACH(fid->params, itr, param) if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
}
return NULL; return NULL;
} }
EAPI Eina_Stringshare* EAPI Eina_Stringshare*
eolian_parameter_type_get(const Eolian_Function_Parameter param) eolian_parameter_type_get(const Eolian_Function_Parameter param)
{ {
EINA_SAFETY_ON_NULL_RETURN_VAL(param, NULL);
eina_stringshare_ref(((_Parameter_Desc*)param)->type); eina_stringshare_ref(((_Parameter_Desc*)param)->type);
return ((_Parameter_Desc*)param)->type; return ((_Parameter_Desc*)param)->type;
} }
@ -673,6 +678,7 @@ eolian_parameter_type_get(const Eolian_Function_Parameter param)
EAPI Eina_Stringshare* EAPI Eina_Stringshare*
eolian_parameter_name_get(const Eolian_Function_Parameter param) eolian_parameter_name_get(const Eolian_Function_Parameter param)
{ {
EINA_SAFETY_ON_NULL_RETURN_VAL(param, NULL);
eina_stringshare_ref(((_Parameter_Desc*)param)->name); eina_stringshare_ref(((_Parameter_Desc*)param)->name);
return ((_Parameter_Desc*)param)->name; return ((_Parameter_Desc*)param)->name;
} }
@ -681,7 +687,8 @@ EAPI const Eina_List *
eolian_property_keys_list_get(Eolian_Function foo_id) eolian_property_keys_list_get(Eolian_Function foo_id)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
return (fid?fid->keys:NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
return fid->keys;
} }
EAPI const Eina_List * EAPI const Eina_List *
@ -694,7 +701,8 @@ EAPI const Eina_List *
eolian_parameters_list_get(Eolian_Function foo_id) eolian_parameters_list_get(Eolian_Function foo_id)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
return (fid?fid->params:NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(fid, NULL);
return fid->params;
} }
/* Get parameter information */ /* Get parameter information */
@ -702,7 +710,7 @@ EAPI void
eolian_parameter_information_get(Eolian_Function_Parameter param_desc, Eolian_Parameter_Dir *param_dir, const char **type, const char **name, const char **description) eolian_parameter_information_get(Eolian_Function_Parameter param_desc, Eolian_Parameter_Dir *param_dir, const char **type, const char **name, const char **description)
{ {
_Parameter_Desc *param = (_Parameter_Desc *)param_desc; _Parameter_Desc *param = (_Parameter_Desc *)param_desc;
if (!param) return; EINA_SAFETY_ON_NULL_RETURN(param);
if (param_dir) *param_dir = param->param_dir; if (param_dir) *param_dir = param->param_dir;
if (type) *type = param->type; if (type) *type = param->type;
if (name) *name = param->name; if (name) *name = param->name;
@ -713,7 +721,7 @@ void
database_parameter_get_const_attribute_set(Eolian_Function_Parameter param_desc, Eina_Bool is_const) database_parameter_get_const_attribute_set(Eolian_Function_Parameter param_desc, Eina_Bool is_const)
{ {
_Parameter_Desc *param = (_Parameter_Desc *)param_desc; _Parameter_Desc *param = (_Parameter_Desc *)param_desc;
if (!param) return; EINA_SAFETY_ON_NULL_RETURN(param);
param->is_const = is_const; param->is_const = is_const;
} }
@ -721,7 +729,8 @@ EAPI Eina_Bool
eolian_parameter_get_const_attribute_get(Eolian_Function_Parameter param_desc) eolian_parameter_get_const_attribute_get(Eolian_Function_Parameter param_desc)
{ {
_Parameter_Desc *param = (_Parameter_Desc *)param_desc; _Parameter_Desc *param = (_Parameter_Desc *)param_desc;
return param?param->is_const:EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(param, EINA_FALSE);
return param->is_const;
} }
void database_function_return_type_set(Eolian_Function foo_id, Eolian_Function_Type ftype, const char *ret_type) void database_function_return_type_set(Eolian_Function foo_id, Eolian_Function_Type ftype, const char *ret_type)
@ -756,17 +765,16 @@ void
database_function_object_set_as_const(Eolian_Function foo_id, Eina_Bool is_const) database_function_object_set_as_const(Eolian_Function foo_id, Eina_Bool is_const)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
if (fid) EINA_SAFETY_ON_NULL_RETURN(fid);
{ fid->obj_is_const = is_const;
fid->obj_is_const = is_const;
}
} }
EAPI Eina_Bool EAPI Eina_Bool
eolian_function_object_is_const(Eolian_Function foo_id) eolian_function_object_is_const(Eolian_Function foo_id)
{ {
_Function_Id *fid = (_Function_Id *)foo_id; _Function_Id *fid = (_Function_Id *)foo_id;
return (fid?fid->obj_is_const:EINA_FALSE); EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
return fid->obj_is_const;
} }
Eolian_Event Eolian_Event
@ -793,7 +801,7 @@ Eina_Bool
database_class_event_add(const char *class_name, Eolian_Event event_desc) database_class_event_add(const char *class_name, Eolian_Event event_desc)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!event_desc || !desc) return EINA_FALSE; EINA_SAFETY_ON_FALSE_RETURN_VAL(event_desc && desc, EINA_FALSE);
desc->events = eina_list_append(desc->events, event_desc); desc->events = eina_list_append(desc->events, event_desc);
return EINA_TRUE; return EINA_TRUE;
} }
@ -802,14 +810,15 @@ EAPI const Eina_List*
eolian_class_events_list_get(const char *class_name) eolian_class_events_list_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return (desc ? desc->events : NULL); EINA_SAFETY_ON_NULL_RETURN_VAL(desc, NULL);
return desc->events;
} }
EAPI Eina_Bool EAPI Eina_Bool
eolian_class_event_information_get(Eolian_Event event, const char **event_name, const char **event_comment) eolian_class_event_information_get(Eolian_Event event, const char **event_name, const char **event_comment)
{ {
_Event_Desc *_event_desc = (_Event_Desc *) event; _Event_Desc *_event_desc = (_Event_Desc *) event;
if (!_event_desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(_event_desc, EINA_FALSE);
if (event_name) *event_name = _event_desc->name; if (event_name) *event_name = _event_desc->name;
if (event_comment) *event_comment = _event_desc->comment; if (event_comment) *event_comment = _event_desc->comment;
return EINA_TRUE; return EINA_TRUE;
@ -819,7 +828,7 @@ Eina_Bool
database_class_ctor_enable_set(const char *class_name, Eina_Bool enable) database_class_ctor_enable_set(const char *class_name, Eina_Bool enable)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
desc->class_ctor_enable = enable; desc->class_ctor_enable = enable;
return EINA_TRUE; return EINA_TRUE;
} }
@ -828,7 +837,7 @@ Eina_Bool
database_class_dtor_enable_set(const char *class_name, Eina_Bool enable) database_class_dtor_enable_set(const char *class_name, Eina_Bool enable)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
if (!desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
desc->class_dtor_enable = enable; desc->class_dtor_enable = enable;
return EINA_TRUE; return EINA_TRUE;
} }
@ -837,14 +846,16 @@ Eina_Bool
eolian_class_ctor_enable_get(const char *class_name) eolian_class_ctor_enable_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return desc?desc->class_ctor_enable:EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
return desc->class_ctor_enable;
} }
Eina_Bool Eina_Bool
eolian_class_dtor_enable_get(const char *class_name) eolian_class_dtor_enable_get(const char *class_name)
{ {
Class_desc *desc = _class_get(class_name); Class_desc *desc = _class_get(class_name);
return desc?desc->class_dtor_enable:EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
return desc->class_dtor_enable;
} }
static void static void
@ -905,6 +916,7 @@ _event_print(Eolian_Event ev, int nb_spaces)
static Eina_Bool _function_print(const _Function_Id *fid, int nb_spaces) static Eina_Bool _function_print(const _Function_Id *fid, int nb_spaces)
{ {
Eolian_Function foo_id = (Eolian_Function) fid; Eolian_Function foo_id = (Eolian_Function) fid;
EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
const char *ret_desc = eolian_function_description_get(foo_id, EOLIAN_RETURN_COMMENT); const char *ret_desc = eolian_function_description_get(foo_id, EOLIAN_RETURN_COMMENT);
switch (fid->type) switch (fid->type)
{ {
@ -1003,7 +1015,7 @@ static Eina_Bool _class_print(const Eina_Hash *hash EINA_UNUSED, const void *key
const char *types[5] = {"", "Regular", "Regular Non Instantiable", "Mixin", "Interface"}; const char *types[5] = {"", "Regular", "Regular Non Instantiable", "Mixin", "Interface"};
Class_desc *desc = data; Class_desc *desc = data;
if (!desc) return EINA_FALSE; EINA_SAFETY_ON_NULL_RETURN_VAL(desc, EINA_FALSE);
printf("Class %s:\n", desc->name); printf("Class %s:\n", desc->name);
if (desc->description) if (desc->description)
printf(" description: <%s>\n", desc->description); printf(" description: <%s>\n", desc->description);

View File

@ -3,6 +3,33 @@
#include <Eolian.h> #include <Eolian.h>
extern int _eolian_log_dom;
#ifdef CRI
#undef CRI
#endif
#define CRI(...) EINA_LOG_DOM_CRIT(_eolian_log_dom, __VA_ARGS__)
#ifdef ERR
#undef ERR
#endif
#define ERR(...) EINA_LOG_DOM_ERR(_eolian_log_dom, __VA_ARGS__)
#ifdef WRN
#undef WRN
#endif
#define WRN(...) EINA_LOG_DOM_WARN(_eolian_log_dom, __VA_ARGS__)
#ifdef INF
#undef INF
#endif
#define INF(...) EINA_LOG_DOM_INFO(_eolian_log_dom, __VA_ARGS__)
#ifdef DBG
#undef DBG
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_eolian_log_dom, __VA_ARGS__)
int database_init(); int database_init();
int database_shutdown(); int database_shutdown();