free(full_name);
return cl;
}
-
-/*
- * ret false -> clash, class = NULL
- * ret true && class -> only one class corresponding
- * ret true && !class -> no class corresponding
- */
-Eina_Bool database_class_name_validate(const char *class_name, const Eolian_Class **cl)
-{
- char *name = strdup(class_name);
- char *colon = name + 1;
- const Eolian_Class *found_class = NULL;
- const Eolian_Class *candidate;
- if (cl) *cl = NULL;
- do
- {
- colon = strchr(colon, '.');
- if (colon) *colon = '\0';
- candidate = eolian_class_get_by_name(name);
- if (candidate)
- {
- if (found_class)
- {
- ERR("Name clash between class %s and class %s",
- candidate->full_name,
- found_class->full_name);
- free(name);
- return EINA_FALSE; // Names clash
- }
- found_class = candidate;
- }
- if (colon) *colon++ = '.';
- }
- while(colon);
- if (cl) *cl = found_class;
- free(name);
- return EINA_TRUE;
-}
-
-Eina_Bool
-database_class_inherit_add(Eolian_Class *cl, const char *inherit_class_name)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
- cl->inherits = eina_list_append(cl->inherits, eina_stringshare_add(inherit_class_name));
- return EINA_TRUE;
-}
-
-void
-database_class_description_set(Eolian_Class *cl, const char *description)
-{
- EINA_SAFETY_ON_NULL_RETURN(cl);
- cl->description = eina_stringshare_add(description);
-}
-
-void
-database_class_legacy_prefix_set(Eolian_Class *cl, const char *legacy_prefix)
-{
- EINA_SAFETY_ON_NULL_RETURN(cl);
- cl->legacy_prefix = eina_stringshare_add(legacy_prefix);
-}
-
-void
-database_class_eo_prefix_set(Eolian_Class *cl, const char *eo_prefix)
-{
- EINA_SAFETY_ON_NULL_RETURN(cl);
- cl->eo_prefix = eina_stringshare_add(eo_prefix);
-}
-
-void
-database_class_data_type_set(Eolian_Class *cl, const char *data_type)
-{
- EINA_SAFETY_ON_NULL_RETURN(cl);
- cl->data_type = eina_stringshare_add(data_type);
-}
-
-Eina_Bool database_class_function_add(Eolian_Class *cl, Eolian_Function *fid)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
- EINA_SAFETY_ON_FALSE_RETURN_VAL(fid && cl, EINA_FALSE);
- switch (fid->type)
- {
- case EOLIAN_PROPERTY:
- case EOLIAN_PROP_SET:
- case EOLIAN_PROP_GET:
- cl->properties = eina_list_append(cl->properties, fid);
- break;
- case EOLIAN_METHOD:
- cl->methods = eina_list_append(cl->methods, fid);
- break;
- case EOLIAN_CTOR:
- cl->constructors = eina_list_append(cl->constructors, fid);
- break;
- default:
- ERR("Bad function type %d.", fid->type);
- return EINA_FALSE;
- }
- return EINA_TRUE;
-}
-
-Eina_Bool
-database_class_implement_add(Eolian_Class *cl, Eolian_Implement *impl_desc)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(impl_desc, EINA_FALSE);
- EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
- cl->implements = eina_list_append(cl->implements, impl_desc);
- return EINA_TRUE;
-}
-
-Eina_Bool
-database_class_event_add(Eolian_Class *cl, Eolian_Event *event_desc)
-{
- EINA_SAFETY_ON_FALSE_RETURN_VAL(event_desc && cl, EINA_FALSE);
- cl->events = eina_list_append(cl->events, event_desc);
- return EINA_TRUE;
-}
-
-Eina_Bool
-database_class_ctor_enable_set(Eolian_Class *cl, Eina_Bool enable)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
- cl->class_ctor_enable = enable;
- return EINA_TRUE;
-}
-
-Eina_Bool
-database_class_dtor_enable_set(Eolian_Class *cl, Eina_Bool enable)
-{
- EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE);
- cl->class_dtor_enable = enable;
- return EINA_TRUE;
-}
param->name,
param->comment);
foo_id->keys = eina_list_append(foo_id->keys, p);
- database_parameter_nonull_set(p, param->nonull);
+ p->nonull = param->nonull;
param->type = NULL;
p->base = param->base;
param->name,
param->comment);
foo_id->params = eina_list_append(foo_id->params, p);
- database_parameter_nonull_set(p, param->nonull);
+ p->nonull = param->nonull;
param->type = NULL;
p->base = param->base;
param->comment);
p->param_dir = param->way;
foo_id->params = eina_list_append(foo_id->params, p);
- database_parameter_nonull_set(p, param->nonull);
+ p->nonull = param->nonull;
param->type = NULL;
p->base = param->base;
}
else if (acc_param->is_const)
{
- database_parameter_const_attribute_set(desc,
- accessor->type == GETTER,
- EINA_TRUE);
+ if (accessor->type == GETTER)
+ desc->is_const_on_get = EINA_TRUE;
+ else
+ desc->is_const_on_set = EINA_TRUE;
}
}
prop->base.file = NULL;
}
- database_class_function_add(cl, foo_id);
+ cl->properties = eina_list_append(cl->properties, foo_id);
return EINA_TRUE;
foo_id->scope = meth->scope;
- database_class_function_add(cl, foo_id);
+ cl->methods = eina_list_append(cl->methods, foo_id);
if (meth->ret)
{
{
Eolian_Function *foo_id = database_function_new(meth->name, EOLIAN_CTOR);
- database_class_function_add(cl, foo_id);
+ cl->constructors = eina_list_append(cl->constructors, foo_id);
if (meth->ret)
foo_id->get_return_comment = eina_stringshare_ref(meth->ret->comment);
if (!strcmp(impl_name, "class.constructor"))
{
- database_class_ctor_enable_set(cl, EINA_TRUE);
+ cl->class_ctor_enable = EINA_TRUE;
return 1;
}
if (!strcmp(impl_name, "class.destructor"))
{
- database_class_dtor_enable_set(cl, EINA_TRUE);
+ cl->class_dtor_enable = EINA_TRUE;
return 1;
}
foo_id->get_virtual_pure = EINA_TRUE;
return 1;
}
- database_class_implement_add(cl, impl);
+ cl->implements = eina_list_append(cl->implements, impl);
return 0;
}
EINA_LIST_FOREACH(kls->events, l, event)
{
- database_class_event_add(cl, event);
+ cl->events = eina_list_append(cl->events, event);
eina_list_data_set(l, NULL); /* prevent double free */
}
eina_hash_set(_classesf, kls->base.file, cl);
if (kls->comment)
- {
- database_class_description_set(cl, kls->comment);
- }
+ cl->description = eina_stringshare_ref(kls->comment);
EINA_LIST_FOREACH(kls->inherits, l, s)
- {
- database_class_inherit_add(cl, s);
- }
+ cl->inherits = eina_list_append(cl->inherits, eina_stringshare_add(s));
if (kls->legacy_prefix)
- {
- database_class_legacy_prefix_set(cl, kls->legacy_prefix);
- }
+ cl->legacy_prefix = eina_stringshare_ref(kls->legacy_prefix);
if (kls->eo_prefix)
- {
- database_class_eo_prefix_set(cl, kls->eo_prefix);
- }
+ cl->eo_prefix = eina_stringshare_ref(kls->eo_prefix);
if (kls->data_type)
- {
- database_class_data_type_set(cl, kls->data_type);
- }
+ cl->data_type = eina_stringshare_ref(kls->data_type);
if (!_db_fill_ctors (cl, kls)) return EINA_FALSE;
if (!_db_fill_properties(cl, kls)) return EINA_FALSE;
eina_stringshare_del(pdesc->description);
free(pdesc);
}
-
-void
-database_parameter_const_attribute_set(Eolian_Function_Parameter *param, Eina_Bool is_get, Eina_Bool is_const)
-{
- EINA_SAFETY_ON_NULL_RETURN(param);
- if (is_get)
- param->is_const_on_get = is_const;
- else
- param->is_const_on_set = is_const;
-}
-
-void
-database_parameter_type_set(Eolian_Function_Parameter *param, Eolian_Type *types)
-{
- EINA_SAFETY_ON_NULL_RETURN(param);
- param->type = types;
-}
-
-void
-database_parameter_nonull_set(Eolian_Function_Parameter *param, Eina_Bool nonull)
-{
- EINA_SAFETY_ON_NULL_RETURN(param);
- param->nonull = nonull;
-}
return impl->full_name;
}
+/*
+ * ret false -> clash, class = NULL
+ * ret true && class -> only one class corresponding
+ * ret true && !class -> no class corresponding
+ */
+static Eina_Bool
+_class_name_validate(const char *class_name, const Eolian_Class **cl)
+{
+ char *name = strdup(class_name);
+ char *colon = name + 1;
+ const Eolian_Class *found_class = NULL;
+ const Eolian_Class *candidate;
+ if (cl) *cl = NULL;
+ do
+ {
+ colon = strchr(colon, '.');
+ if (colon) *colon = '\0';
+ candidate = eolian_class_get_by_name(name);
+ if (candidate)
+ {
+ if (found_class)
+ {
+ ERR("Name clash between class %s and class %s",
+ candidate->full_name,
+ found_class->full_name);
+ free(name);
+ return EINA_FALSE; // Names clash
+ }
+ found_class = candidate;
+ }
+ if (colon) *colon++ = '.';
+ }
+ while(colon);
+ if (cl) *cl = found_class;
+ free(name);
+ return EINA_TRUE;
+}
+
static Eina_Bool
_fill_class(Eolian_Implement *impl)
{
const Eolian_Class *class = NULL;
if (impl->klass)
return EINA_TRUE;
- if (!database_class_name_validate(impl->full_name, &class) || !class)
+ if (!_class_name_validate(impl->full_name, &class) || !class)
return EINA_FALSE;
impl->klass = class;
return EINA_TRUE;
int database_init();
int database_shutdown();
+char *database_class_to_filename(const char *cname);
+
/* types */
Eina_Bool database_type_add(Eolian_Type *def);
Eolian_Class *database_class_add(const char *class_name, Eolian_Class_Type type);
void database_class_del(Eolian_Class *cl);
-char *database_class_to_filename(const char *cname);
-
-Eina_Bool database_class_inherit_add(Eolian_Class *cl, const char *inherit_class_name);
-Eina_Bool database_class_function_add(Eolian_Class *cl, Eolian_Function *foo_id);
-Eina_Bool database_class_implement_add(Eolian_Class *cl, Eolian_Implement *impl_id);
-Eina_Bool database_class_event_add(Eolian_Class *cl, Eolian_Event *event_desc);
-
-void database_class_description_set(Eolian_Class *cl, const char *description);
-void database_class_legacy_prefix_set(Eolian_Class *cl, const char *legacy_prefix);
-void database_class_eo_prefix_set(Eolian_Class *cl, const char *eo_prefix);
-void database_class_data_type_set(Eolian_Class *cl, const char *data_type);
-Eina_Bool database_class_ctor_enable_set(Eolian_Class *cl, Eina_Bool enable);
-Eina_Bool database_class_dtor_enable_set(Eolian_Class *cl, Eina_Bool enable);
-
-Eina_Bool database_class_name_validate(const char *class_name, const Eolian_Class **cl);
-
/* functions */
Eolian_Function *database_function_new(const char *function_name, Eolian_Function_Type foo_type);
Eolian_Function_Parameter *database_parameter_add(Eolian_Type *type, const char *name, const char *description);
void database_parameter_del(Eolian_Function_Parameter *pdesc);
-void database_parameter_const_attribute_set(Eolian_Function_Parameter *param, Eina_Bool is_get, Eina_Bool is_const);
-void database_parameter_nonull_set(Eolian_Function_Parameter *param, Eina_Bool nonull);
-
/* implements */
void database_implement_del(Eolian_Implement *impl);