forked from enlightenment/efl
Eolian: Format changes
- Support keys/values for properties instead of params - Direction for parameters syntax changed from in to @in... - obj:const changed to const in .eo
This commit is contained in:
parent
a8661af73e
commit
5ae7cc962f
|
@ -158,6 +158,20 @@ eo1_fundef_generate(const char *classname, Eolian_Function func, Eolian_Function
|
|||
eina_strbuf_append_printf(str_typecheck, ", EO_TYPECHECK(%s*, ret)", rettype);
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(eolian_property_keys_list_get(func), l, data)
|
||||
{
|
||||
const char *pname;
|
||||
const char *ptype;
|
||||
eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, NULL);
|
||||
|
||||
eina_strbuf_append_printf(str_pardesc, tmpl_eo_pardesc, "in", pname);
|
||||
|
||||
if (eina_strbuf_length_get(str_par)) eina_strbuf_append(str_par, ", ");
|
||||
eina_strbuf_append(str_par, pname);
|
||||
|
||||
eina_strbuf_append_printf(str_typecheck, ", EO_TYPECHECK(%s, %s)", ptype, pname);
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(eolian_parameters_list_get(func), l, data)
|
||||
{
|
||||
const char *pname;
|
||||
|
@ -329,6 +343,20 @@ eo1_bind_func_generate(const char *classname, Eolian_Function funcid, Eolian_Fun
|
|||
const Eina_List *l;
|
||||
void *data;
|
||||
|
||||
EINA_LIST_FOREACH(eolian_property_keys_list_get(funcid), l, data)
|
||||
{
|
||||
const char *pname;
|
||||
const char *ptype;
|
||||
eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, NULL);
|
||||
Eina_Bool is_const = eolian_parameter_get_const_attribute_get(data);
|
||||
eina_strbuf_append_printf(va_args, " %s%s %s = va_arg(*list, %s%s);\n",
|
||||
ftype == GET && is_const?"const ":"", ptype, pname,
|
||||
ftype == GET && is_const?"const ":"", _varg_upgr(ptype));
|
||||
eina_strbuf_append_printf(params, ", %s", pname);
|
||||
eina_strbuf_append_printf(full_params, ", %s%s %s",
|
||||
ftype == GET && eolian_parameter_get_const_attribute_get(data)?"const ":"",
|
||||
ptype, pname);
|
||||
}
|
||||
if (!var_as_ret)
|
||||
{
|
||||
EINA_LIST_FOREACH(eolian_parameters_list_get(funcid), l, data)
|
||||
|
@ -369,7 +397,8 @@ eo1_bind_func_generate(const char *classname, Eolian_Function funcid, Eolian_Fun
|
|||
eina_strbuf_replace_all(fbody, "@#ret_type", "void");
|
||||
}
|
||||
|
||||
if (eina_list_count(eolian_parameters_list_get(funcid)) == 0)
|
||||
if (eina_list_count(eolian_parameters_list_get(funcid)) == 0 &&
|
||||
(eina_list_count(eolian_property_keys_list_get(funcid)) == 0))
|
||||
{
|
||||
eina_strbuf_replace_all(fbody, "@#list_unused", " EINA_UNUSED");
|
||||
}
|
||||
|
|
|
@ -96,6 +96,17 @@ _eapi_decl_func_generate(const char *classname, Eolian_Function funcid, Eolian_F
|
|||
const Eina_List *l;
|
||||
void *data;
|
||||
|
||||
EINA_LIST_FOREACH(eolian_property_keys_list_get(funcid), l, data)
|
||||
{
|
||||
const char *pname;
|
||||
const char *pdesc;
|
||||
const char *ptype;
|
||||
eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, &pdesc);
|
||||
eina_strbuf_append_printf(fparam, ", %s%s %s",
|
||||
eolian_parameter_get_const_attribute_get(data)?"const":"",
|
||||
ptype, pname);
|
||||
eina_strbuf_append_printf(descparam, " * @param %s\n", pname);
|
||||
}
|
||||
if (!var_as_ret)
|
||||
{
|
||||
EINA_LIST_FOREACH(eolian_parameters_list_get(funcid), l, data)
|
||||
|
@ -187,6 +198,17 @@ _eapi_func_generate(const char *classname, Eolian_Function funcid, Eolian_Functi
|
|||
|
||||
tmpstr[0] = '\0';
|
||||
|
||||
EINA_LIST_FOREACH(eolian_property_keys_list_get(funcid), l, data)
|
||||
{
|
||||
const char *pname;
|
||||
const char *ptype;
|
||||
eolian_parameter_information_get((Eolian_Function_Parameter)data, NULL, &ptype, &pname, NULL);
|
||||
eina_strbuf_append_printf(fparam, ", %s%s %s",
|
||||
ftype == GET && eolian_parameter_get_const_attribute_get(data)?"const ":"",
|
||||
ptype, pname);
|
||||
if (eina_strbuf_length_get(eoparam)) eina_strbuf_append(eoparam, ", ");
|
||||
eina_strbuf_append_printf(eoparam, "%s", pname);
|
||||
}
|
||||
if (!var_as_ret)
|
||||
{
|
||||
EINA_LIST_FOREACH(eolian_parameters_list_get(funcid), l, data)
|
||||
|
|
|
@ -296,10 +296,30 @@ EAPI const char *eolian_function_data_get(Eolian_Function function_id, const cha
|
|||
EAPI Eolian_Function_Parameter eolian_function_parameter_get(const Eolian_Function function_id, const char *param_name);
|
||||
|
||||
/*
|
||||
* @brief Returns a list of parameter handles for a function pointed by its id.
|
||||
* @brief Returns a list of keys params of a given function.
|
||||
*
|
||||
* @param[in] function_id Id of the function
|
||||
* @return a handle to this parameter.
|
||||
* @return list of Eolian_Function_Parameter
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI const Eina_List *eolian_property_keys_list_get(Eolian_Function foo_id);
|
||||
|
||||
/*
|
||||
* @brief Returns a list of values params of a given function.
|
||||
*
|
||||
* @param[in] function_id Id of the function
|
||||
* @return list of Eolian_Function_Parameter
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
EAPI const Eina_List *eolian_property_values_list_get(Eolian_Function foo_id);
|
||||
|
||||
/*
|
||||
* @brief Returns a list of parameter handles for a method/ctor/dtor.
|
||||
*
|
||||
* @param[in] function_id Id of the function
|
||||
* @return list of Eolian_Function_Parameter
|
||||
*
|
||||
* @ingroup Eolian
|
||||
*/
|
||||
|
|
|
@ -43,7 +43,10 @@ eo_definitions_property_def_free(Eo_Property_Def *prop)
|
|||
if (prop->name)
|
||||
eina_stringshare_del(prop->name);
|
||||
|
||||
EINA_LIST_FREE(prop->params, param)
|
||||
EINA_LIST_FREE(prop->keys, param)
|
||||
eo_definitions_param_free(param);
|
||||
|
||||
EINA_LIST_FREE(prop->values, param)
|
||||
eo_definitions_param_free(param);
|
||||
|
||||
EINA_LIST_FREE(prop->accessors, accessor)
|
||||
|
|
|
@ -59,7 +59,8 @@ typedef struct _eo_accessor_def
|
|||
typedef struct _eo_property_def
|
||||
{
|
||||
const char *name;
|
||||
Eina_List *params;
|
||||
Eina_List *keys;
|
||||
Eina_List *values;
|
||||
Eina_List *accessors;
|
||||
} Eo_Property_Def;
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -35,6 +35,7 @@ typedef struct _eo_tokenizer
|
|||
|
||||
Eina_List *classes;
|
||||
struct {
|
||||
Eina_List **params;
|
||||
Eolian_Class_Type kls_type;
|
||||
Eo_Class_Def *kls;
|
||||
Eo_Property_Def *prop;
|
||||
|
|
|
@ -194,17 +194,17 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
|
|||
s++;
|
||||
|
||||
param->way = PARAM_IN;
|
||||
if (strncmp(toknz->saved.tok, "in ", 3) == 0)
|
||||
if (strncmp(toknz->saved.tok, "@in ", 3) == 0)
|
||||
{
|
||||
toknz->saved.tok += 3;
|
||||
param->way = PARAM_IN;
|
||||
}
|
||||
else if (strncmp(toknz->saved.tok, "out ", 4) == 0)
|
||||
else if (strncmp(toknz->saved.tok, "@out ", 4) == 0)
|
||||
{
|
||||
toknz->saved.tok += 4;
|
||||
param->way = PARAM_OUT;
|
||||
}
|
||||
else if (strncmp(toknz->saved.tok, "inout ", 6) == 0)
|
||||
else if (strncmp(toknz->saved.tok, "@inout ", 6) == 0)
|
||||
{
|
||||
toknz->saved.tok += 6;
|
||||
param->way = PARAM_INOUT;
|
||||
|
@ -423,10 +423,8 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
|
|||
|
||||
action end_param {
|
||||
toknz->tmp.param = _eo_tokenizer_param_get(toknz, fpc);
|
||||
if (toknz->tmp.prop)
|
||||
toknz->tmp.prop->params = eina_list_append(toknz->tmp.prop->params, toknz->tmp.param);
|
||||
else if (toknz->tmp.meth)
|
||||
toknz->tmp.meth->params = eina_list_append(toknz->tmp.meth->params, toknz->tmp.param);
|
||||
if (toknz->tmp.params)
|
||||
*(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param);
|
||||
else
|
||||
ABORT(toknz, "got a param but there is no property nor method waiting for it");
|
||||
INF(" %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
|
||||
|
@ -445,7 +443,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
|
|||
}
|
||||
|
||||
param_comment = ws* eo_comment %end_param_comment;
|
||||
param = alpha+ >save_fpc (alnum_u | '*' | ws )+ %end_param end_statement param_comment?;
|
||||
param = ('@'|alpha+) >save_fpc (alnum_u | '*' | ws )+ %end_param end_statement param_comment?;
|
||||
|
||||
tokenize_params := |*
|
||||
ignore+; #=> show_ignore;
|
||||
|
@ -471,15 +469,23 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
|
|||
fgoto tokenize_accessor;
|
||||
}
|
||||
|
||||
action begin_property_params {
|
||||
INF(" params {");
|
||||
action begin_property_keys {
|
||||
INF(" keys {");
|
||||
toknz->current_nesting++;
|
||||
toknz->tmp.params = &(toknz->tmp.prop->keys);
|
||||
fgoto tokenize_params;
|
||||
}
|
||||
|
||||
action begin_property_values {
|
||||
INF(" values {");
|
||||
toknz->current_nesting++;
|
||||
toknz->tmp.params = &(toknz->tmp.prop->values);
|
||||
fgoto tokenize_params;
|
||||
}
|
||||
|
||||
action end_property {
|
||||
if (eina_list_count(toknz->tmp.prop->params) == 0)
|
||||
WRN("property '%s' has no parameters.", toknz->tmp.prop->name);
|
||||
if (eina_list_count(toknz->tmp.prop->values) == 0)
|
||||
WRN("property '%s' has no values.", toknz->tmp.prop->name);
|
||||
if (eina_list_count(toknz->tmp.prop->accessors) == 0)
|
||||
WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
|
||||
INF(" }");
|
||||
|
@ -491,14 +497,16 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
|
|||
|
||||
prop_get = 'get' ignore* begin_def;
|
||||
prop_set = 'set' ignore* begin_def;
|
||||
prop_params = 'params' ignore* begin_def;
|
||||
prop_keys = 'keys' ignore* begin_def;
|
||||
prop_values = 'values' ignore* begin_def;
|
||||
|
||||
tokenize_property := |*
|
||||
ignore+; #=> show_ignore;
|
||||
comment => show_comment;
|
||||
prop_get => begin_property_get;
|
||||
prop_set => begin_property_set;
|
||||
prop_params => begin_property_params;
|
||||
prop_keys => begin_property_keys;
|
||||
prop_values => begin_property_values;
|
||||
end_def => end_property;
|
||||
any => show_error;
|
||||
*|;
|
||||
|
@ -545,6 +553,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
|
|||
action begin_method_params {
|
||||
INF(" params {");
|
||||
toknz->current_nesting++;
|
||||
toknz->tmp.params = &(toknz->tmp.meth->params);
|
||||
fgoto tokenize_params;
|
||||
}
|
||||
|
||||
|
@ -600,7 +609,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
|
|||
meth_legacy = 'legacy' ws+ ident %end_method_legacy end_statement;
|
||||
meth_rettype_comment = ws* eo_comment %end_method_rettype_comment;
|
||||
meth_rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws )+ %end_method_rettype end_statement meth_rettype_comment?;
|
||||
meth_obj_const = 'object' ws* colon ws* 'const' %end_method_obj_const end_statement;
|
||||
meth_obj_const = 'const' %end_method_obj_const end_statement;
|
||||
|
||||
tokenize_method := |*
|
||||
ignore+; #=> show_ignore;
|
||||
|
@ -1034,9 +1043,14 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
|
|||
EINA_LIST_FOREACH(kls->properties, l, prop)
|
||||
{
|
||||
printf(" property: %s\n", prop->name);
|
||||
EINA_LIST_FOREACH(prop->params, m, param)
|
||||
EINA_LIST_FOREACH(prop->keys, m, param)
|
||||
{
|
||||
printf(" param: %s : %s (%s)\n",
|
||||
printf(" key: %s : %s (%s)\n",
|
||||
param->name, param->type, param->comment);
|
||||
}
|
||||
EINA_LIST_FOREACH(prop->values, m, param)
|
||||
{
|
||||
printf(" value: %s : %s (%s)\n",
|
||||
param->name, param->type, param->comment);
|
||||
}
|
||||
EINA_LIST_FOREACH(prop->accessors, m, accessor)
|
||||
|
@ -1117,7 +1131,7 @@ eo_tokenizer_database_fill(const char *filename)
|
|||
database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
|
||||
EINA_LIST_FOREACH(meth->params, m, param)
|
||||
{
|
||||
database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
|
||||
database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1129,18 +1143,17 @@ eo_tokenizer_database_fill(const char *filename)
|
|||
database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
|
||||
EINA_LIST_FOREACH(meth->params, m, param)
|
||||
{
|
||||
database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
|
||||
database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
|
||||
}
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(kls->properties, l, prop)
|
||||
{
|
||||
Eolian_Function foo_id = database_function_new(prop->name, UNRESOLVED);
|
||||
EINA_LIST_FOREACH(prop->params, m, param)
|
||||
{
|
||||
/* IN_PARAM doesn't care */
|
||||
database_function_parameter_add(foo_id, EOLIAN_IN_PARAM, param->type, param->name, param->comment);
|
||||
}
|
||||
EINA_LIST_FOREACH(prop->keys, m, param)
|
||||
database_property_key_add(foo_id, param->type, param->name, param->comment);
|
||||
EINA_LIST_FOREACH(prop->values, m, param)
|
||||
database_property_value_add(foo_id, param->type, param->name, param->comment);
|
||||
EINA_LIST_FOREACH(prop->accessors, m, accessor)
|
||||
{
|
||||
database_function_type_set(foo_id, (accessor->type == SETTER?SET:GET));
|
||||
|
@ -1184,9 +1197,7 @@ eo_tokenizer_database_fill(const char *filename)
|
|||
database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
|
||||
database_function_object_set_as_const(foo_id, meth->obj_const);
|
||||
EINA_LIST_FOREACH(meth->params, m, param)
|
||||
{
|
||||
database_function_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
|
||||
}
|
||||
database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
|
||||
}
|
||||
|
||||
EINA_LIST_FOREACH(kls->implements, l, impl)
|
||||
|
|
|
@ -25,6 +25,7 @@ typedef struct
|
|||
typedef struct
|
||||
{
|
||||
Eina_Stringshare *name;
|
||||
Eina_List *keys; /* list of _Parameter_Desc */
|
||||
Eina_List *params; /* list of _Parameter_Desc */
|
||||
Eolian_Function_Type type;
|
||||
Eina_Hash *data;
|
||||
|
@ -581,21 +582,55 @@ eolian_function_data_get(Eolian_Function function_id, const char *key)
|
|||
return (fid ? eina_hash_find(fid->data, key) : NULL);
|
||||
}
|
||||
|
||||
Eolian_Function_Parameter
|
||||
database_function_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description)
|
||||
static _Parameter_Desc *
|
||||
_parameter_new(const char *type, const char *name, const char *description)
|
||||
{
|
||||
_Parameter_Desc *param = NULL;
|
||||
param = calloc(1, sizeof(*param));
|
||||
param->name = eina_stringshare_add(name);
|
||||
param->type = eina_stringshare_add(type);
|
||||
param->description = eina_stringshare_add(description);
|
||||
return param;
|
||||
}
|
||||
|
||||
Eolian_Function_Parameter
|
||||
database_property_key_add(Eolian_Function foo_id, const char *type, const char *name, const char *description)
|
||||
{
|
||||
_Function_Id *fid = (_Function_Id *)foo_id;
|
||||
_Parameter_Desc *param = NULL;
|
||||
if (fid)
|
||||
{
|
||||
param = calloc(1, sizeof(*param));
|
||||
param->param_dir = param_dir;
|
||||
param->name = eina_stringshare_add(name);
|
||||
param->type = eina_stringshare_add(type);
|
||||
param->description = eina_stringshare_add(description);
|
||||
fid->params = eina_list_append(fid->params, 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;
|
||||
}
|
||||
|
||||
Eolian_Function_Parameter
|
||||
database_property_value_add(Eolian_Function foo_id, const char *type, const char *name, const char *description)
|
||||
{
|
||||
_Function_Id *fid = (_Function_Id *)foo_id;
|
||||
_Parameter_Desc *param = NULL;
|
||||
if (fid)
|
||||
{
|
||||
param = _parameter_new(type, name, description);
|
||||
fid->params= eina_list_append(fid->params, param);
|
||||
}
|
||||
return (Eolian_Function_Parameter)param;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
_Function_Id *fid = (_Function_Id *)foo_id;
|
||||
_Parameter_Desc *param = NULL;
|
||||
if (fid)
|
||||
{
|
||||
param = _parameter_new(type, name, description);
|
||||
param->param_dir = param_dir;
|
||||
fid->params= eina_list_append(fid->params, param);
|
||||
}
|
||||
return (Eolian_Function_Parameter)param;
|
||||
}
|
||||
|
||||
EAPI Eolian_Function_Parameter
|
||||
|
@ -606,6 +641,8 @@ eolian_function_parameter_get(const Eolian_Function foo_id, const char *param_na
|
|||
{
|
||||
Eina_List *itr;
|
||||
_Parameter_Desc *param;
|
||||
EINA_LIST_FOREACH(fid->keys, itr, param)
|
||||
if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
|
||||
EINA_LIST_FOREACH(fid->params, itr, param)
|
||||
if (!strcmp(param->name, param_name)) return (Eolian_Function_Parameter)param;
|
||||
}
|
||||
|
@ -626,6 +663,19 @@ eolian_parameter_name_get(const Eolian_Function_Parameter param)
|
|||
return ((_Parameter_Desc*)param)->name;
|
||||
}
|
||||
|
||||
EAPI const Eina_List *
|
||||
eolian_property_keys_list_get(Eolian_Function foo_id)
|
||||
{
|
||||
_Function_Id *fid = (_Function_Id *)foo_id;
|
||||
return (fid?fid->keys:NULL);
|
||||
}
|
||||
|
||||
EAPI const Eina_List *
|
||||
eolian_property_values_list_get(Eolian_Function foo_id)
|
||||
{
|
||||
return eolian_parameters_list_get(foo_id);
|
||||
}
|
||||
|
||||
EAPI const Eina_List *
|
||||
eolian_parameters_list_get(Eolian_Function foo_id)
|
||||
{
|
||||
|
|
|
@ -42,8 +42,14 @@ void database_function_data_set(Eolian_Function function_id, const char *key, co
|
|||
/* Add a description to a function */
|
||||
#define database_function_description_set(foo_id, key, desc) database_function_data_set((foo_id), (key), (desc))
|
||||
|
||||
/* Add a parameter to a function */
|
||||
Eolian_Function_Parameter database_function_parameter_add(Eolian_Function foo_id, Eolian_Parameter_Dir param_dir, const char *type, const char *name, const char *description);
|
||||
/* Add a key to a property */
|
||||
Eolian_Function_Parameter database_property_key_add(Eolian_Function foo_id, const char *type, const char *name, const char *description);
|
||||
|
||||
/* Add a value to a property */
|
||||
Eolian_Function_Parameter database_property_value_add(Eolian_Function foo_id, const char *type, const char *name, const char *description);
|
||||
|
||||
/* Add a parameter to a method */
|
||||
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);
|
||||
|
||||
void database_parameter_get_const_attribute_set(Eolian_Function_Parameter param_desc, Eina_Bool is_const);
|
||||
|
||||
|
|
Loading…
Reference in New Issue