forked from enlightenment/efl
eolian: remove accessor structures
This commit is contained in:
parent
d55ab5e5cf
commit
ffb8e79034
|
@ -1,83 +1,6 @@
|
||||||
#include "eo_parser.h"
|
#include "eo_parser.h"
|
||||||
|
|
||||||
static Eina_Bool
|
static void
|
||||||
_db_fill_accessor(Eolian_Function *foo_id, Eo_Class_Def *kls,
|
|
||||||
Eo_Accessor_Def *accessor)
|
|
||||||
{
|
|
||||||
if (accessor->type == SETTER)
|
|
||||||
foo_id->type = (foo_id->type == EOLIAN_PROP_GET) ? EOLIAN_PROPERTY
|
|
||||||
: EOLIAN_PROP_SET;
|
|
||||||
else
|
|
||||||
foo_id->type = (foo_id->type == EOLIAN_PROP_SET) ? EOLIAN_PROPERTY
|
|
||||||
: EOLIAN_PROP_GET;
|
|
||||||
|
|
||||||
if (accessor->ret && accessor->ret->type)
|
|
||||||
{
|
|
||||||
if (accessor->type == SETTER)
|
|
||||||
{
|
|
||||||
foo_id->set_ret_type = accessor->ret->type;
|
|
||||||
foo_id->set_ret_val = accessor->ret->default_ret_val;
|
|
||||||
foo_id->set_return_comment = eina_stringshare_ref(accessor->ret->comment);
|
|
||||||
foo_id->set_return_warn_unused = accessor->ret->warn_unused;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foo_id->get_ret_type = accessor->ret->type;
|
|
||||||
foo_id->get_ret_val = accessor->ret->default_ret_val;
|
|
||||||
foo_id->get_return_comment = eina_stringshare_ref(accessor->ret->comment);
|
|
||||||
foo_id->get_return_warn_unused = accessor->ret->warn_unused;
|
|
||||||
}
|
|
||||||
accessor->ret->type = NULL;
|
|
||||||
accessor->ret->default_ret_val = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (accessor->type == SETTER)
|
|
||||||
{
|
|
||||||
foo_id->set_description = eina_stringshare_ref(accessor->comment);
|
|
||||||
if (accessor->legacy)
|
|
||||||
foo_id->set_legacy = eina_stringshare_ref(accessor->legacy);
|
|
||||||
foo_id->set_only_legacy = accessor->only_legacy;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
foo_id->get_description = eina_stringshare_ref(accessor->comment);
|
|
||||||
if (accessor->legacy)
|
|
||||||
foo_id->get_legacy = eina_stringshare_ref(accessor->legacy);
|
|
||||||
foo_id->get_only_legacy = accessor->only_legacy;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (kls->type == EOLIAN_CLASS_INTERFACE)
|
|
||||||
{
|
|
||||||
if (accessor->type == SETTER)
|
|
||||||
foo_id->set_virtual_pure = EINA_TRUE;
|
|
||||||
else
|
|
||||||
foo_id->get_virtual_pure = EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (accessor->type == GETTER)
|
|
||||||
foo_id->base = accessor->base;
|
|
||||||
else
|
|
||||||
foo_id->set_base = accessor->base;
|
|
||||||
|
|
||||||
accessor->base.file = NULL;
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Eina_Bool
|
|
||||||
_db_fill_accessors(Eolian_Function *foo_id, Eo_Class_Def *kls,
|
|
||||||
Eo_Property_Def *prop)
|
|
||||||
{
|
|
||||||
if (prop->get_accessor && !_db_fill_accessor(foo_id, kls, prop->get_accessor))
|
|
||||||
return EINA_FALSE;
|
|
||||||
if (prop->set_accessor && !_db_fill_accessor(foo_id, kls, prop->set_accessor))
|
|
||||||
return EINA_FALSE;
|
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static Eina_Bool
|
|
||||||
_db_fill_property(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Property_Def *prop)
|
_db_fill_property(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Property_Def *prop)
|
||||||
{
|
{
|
||||||
Eolian_Function *foo_id = database_function_new(prop->name,
|
Eolian_Function *foo_id = database_function_new(prop->name,
|
||||||
|
@ -88,7 +11,75 @@ _db_fill_property(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Property_Def *prop)
|
||||||
|
|
||||||
foo_id->keys = prop->keys ; prop->keys = NULL;
|
foo_id->keys = prop->keys ; prop->keys = NULL;
|
||||||
foo_id->params = prop->values; prop->values = NULL;
|
foo_id->params = prop->values; prop->values = NULL;
|
||||||
if (!_db_fill_accessors(foo_id, kls, prop)) goto failure;
|
|
||||||
|
if (prop->get_ret)
|
||||||
|
{
|
||||||
|
foo_id->get_ret_type = prop->get_ret->type;
|
||||||
|
prop->get_ret->type = NULL;
|
||||||
|
foo_id->get_ret_val = prop->get_ret->default_ret_val;
|
||||||
|
prop->get_ret->default_ret_val = NULL;
|
||||||
|
foo_id->get_return_comment = prop->get_ret->comment;
|
||||||
|
prop->get_ret->comment = NULL;
|
||||||
|
foo_id->get_return_warn_unused = prop->get_ret->warn_unused;
|
||||||
|
}
|
||||||
|
if (prop->set_ret)
|
||||||
|
{
|
||||||
|
foo_id->set_ret_type = prop->set_ret->type;
|
||||||
|
prop->set_ret->type = NULL;
|
||||||
|
foo_id->set_ret_val = prop->set_ret->default_ret_val;
|
||||||
|
prop->set_ret->default_ret_val = NULL;
|
||||||
|
foo_id->set_return_comment = prop->set_ret->comment;
|
||||||
|
prop->set_ret->comment = NULL;
|
||||||
|
foo_id->set_return_warn_unused = prop->set_ret->warn_unused;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prop->get_legacy)
|
||||||
|
{
|
||||||
|
foo_id->get_legacy = prop->get_legacy;
|
||||||
|
prop->get_legacy = NULL;
|
||||||
|
}
|
||||||
|
if (prop->set_legacy)
|
||||||
|
{
|
||||||
|
foo_id->set_legacy = prop->set_legacy;
|
||||||
|
prop->set_legacy = NULL;
|
||||||
|
}
|
||||||
|
foo_id->get_only_legacy = prop->get_only_legacy;
|
||||||
|
foo_id->set_only_legacy = prop->set_only_legacy;
|
||||||
|
|
||||||
|
if (prop->get_comment)
|
||||||
|
{
|
||||||
|
foo_id->get_description = prop->get_comment;
|
||||||
|
prop->get_comment = NULL;
|
||||||
|
}
|
||||||
|
if (prop->set_comment)
|
||||||
|
{
|
||||||
|
foo_id->set_description = prop->set_comment;
|
||||||
|
prop->set_comment = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prop->get_accessor)
|
||||||
|
{
|
||||||
|
if (kls->type == EOLIAN_CLASS_INTERFACE)
|
||||||
|
foo_id->get_virtual_pure = EINA_TRUE;
|
||||||
|
if (foo_id->type == EOLIAN_PROP_SET)
|
||||||
|
foo_id->type = EOLIAN_PROPERTY;
|
||||||
|
else
|
||||||
|
foo_id->type = EOLIAN_PROP_GET;
|
||||||
|
foo_id->base = prop->base;
|
||||||
|
prop->base.file = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (prop->set_accessor)
|
||||||
|
{
|
||||||
|
if (kls->type == EOLIAN_CLASS_INTERFACE)
|
||||||
|
foo_id->set_virtual_pure = EINA_TRUE;
|
||||||
|
if (foo_id->type == EOLIAN_PROP_GET)
|
||||||
|
foo_id->type = EOLIAN_PROPERTY;
|
||||||
|
else
|
||||||
|
foo_id->type = EOLIAN_PROP_SET;
|
||||||
|
foo_id->set_base = prop->set_base;
|
||||||
|
prop->set_base.file = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (!prop->get_accessor && !prop->set_accessor)
|
if (!prop->get_accessor && !prop->set_accessor)
|
||||||
{
|
{
|
||||||
|
@ -100,24 +91,16 @@ _db_fill_property(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Property_Def *prop)
|
||||||
}
|
}
|
||||||
|
|
||||||
cl->properties = eina_list_append(cl->properties, foo_id);
|
cl->properties = eina_list_append(cl->properties, foo_id);
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
|
|
||||||
failure:
|
|
||||||
database_function_del(foo_id);
|
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static void
|
||||||
_db_fill_properties(Eolian_Class *cl, Eo_Class_Def *kls)
|
_db_fill_properties(Eolian_Class *cl, Eo_Class_Def *kls)
|
||||||
{
|
{
|
||||||
Eo_Property_Def *prop;
|
Eo_Property_Def *prop;
|
||||||
Eina_List *l;
|
Eina_List *l;
|
||||||
|
|
||||||
EINA_LIST_FOREACH(kls->properties, l, prop)
|
EINA_LIST_FOREACH(kls->properties, l, prop)
|
||||||
if (!_db_fill_property(cl, kls, prop)) return EINA_FALSE;
|
_db_fill_property(cl, kls, prop);
|
||||||
|
|
||||||
return EINA_TRUE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eina_Bool
|
static Eina_Bool
|
||||||
|
@ -144,8 +127,7 @@ _db_fill_method(Eolian_Class *cl, Eo_Class_Def *kls, Eo_Method_Def *meth)
|
||||||
foo_id->obj_is_const = meth->obj_const;
|
foo_id->obj_is_const = meth->obj_const;
|
||||||
foo_id->is_class = meth->is_class;
|
foo_id->is_class = meth->is_class;
|
||||||
|
|
||||||
if (meth->only_legacy)
|
foo_id->get_only_legacy = meth->only_legacy;
|
||||||
foo_id->get_only_legacy = EINA_TRUE;
|
|
||||||
|
|
||||||
foo_id->params = meth->params; meth->params = NULL;
|
foo_id->params = meth->params; meth->params = NULL;
|
||||||
|
|
||||||
|
@ -443,7 +425,8 @@ _db_fill_class(Eo_Class_Def *kls)
|
||||||
if (kls->data_type)
|
if (kls->data_type)
|
||||||
cl->data_type = eina_stringshare_ref(kls->data_type);
|
cl->data_type = eina_stringshare_ref(kls->data_type);
|
||||||
|
|
||||||
if (!_db_fill_properties (cl, kls)) return EINA_FALSE;
|
_db_fill_properties(cl, kls);
|
||||||
|
|
||||||
if (!_db_fill_methods (cl, kls)) return EINA_FALSE;
|
if (!_db_fill_methods (cl, kls)) return EINA_FALSE;
|
||||||
if (!_db_fill_implements (cl, kls)) return EINA_FALSE;
|
if (!_db_fill_implements (cl, kls)) return EINA_FALSE;
|
||||||
if (!_db_fill_constructors(cl, kls)) return EINA_FALSE;
|
if (!_db_fill_constructors(cl, kls)) return EINA_FALSE;
|
||||||
|
|
|
@ -12,24 +12,6 @@ eo_definitions_ret_free(Eo_Ret_Def *ret)
|
||||||
free(ret);
|
free(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
eo_definitions_accessor_free(Eo_Accessor_Def *accessor)
|
|
||||||
{
|
|
||||||
if (accessor->base.file)
|
|
||||||
eina_stringshare_del(accessor->base.file);
|
|
||||||
|
|
||||||
if (accessor->comment)
|
|
||||||
eina_stringshare_del(accessor->comment);
|
|
||||||
|
|
||||||
if (accessor->legacy)
|
|
||||||
eina_stringshare_del(accessor->legacy);
|
|
||||||
|
|
||||||
if (accessor->ret)
|
|
||||||
eo_definitions_ret_free(accessor->ret);
|
|
||||||
|
|
||||||
free(accessor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
eo_definitions_property_def_free(Eo_Property_Def *prop)
|
eo_definitions_property_def_free(Eo_Property_Def *prop)
|
||||||
{
|
{
|
||||||
|
@ -47,10 +29,23 @@ eo_definitions_property_def_free(Eo_Property_Def *prop)
|
||||||
EINA_LIST_FREE(prop->values, param)
|
EINA_LIST_FREE(prop->values, param)
|
||||||
database_parameter_del(param);
|
database_parameter_del(param);
|
||||||
|
|
||||||
if (prop->get_accessor)
|
if (prop->get_comment)
|
||||||
eo_definitions_accessor_free(prop->get_accessor);
|
eina_stringshare_del(prop->get_comment);
|
||||||
if (prop->set_accessor)
|
|
||||||
eo_definitions_accessor_free(prop->set_accessor);
|
if (prop->set_comment)
|
||||||
|
eina_stringshare_del(prop->set_comment);
|
||||||
|
|
||||||
|
if (prop->get_legacy)
|
||||||
|
eina_stringshare_del(prop->get_legacy);
|
||||||
|
|
||||||
|
if (prop->set_legacy)
|
||||||
|
eina_stringshare_del(prop->set_legacy);
|
||||||
|
|
||||||
|
if (prop->get_ret)
|
||||||
|
eo_definitions_ret_free(prop->get_ret);
|
||||||
|
|
||||||
|
if (prop->set_ret)
|
||||||
|
eo_definitions_ret_free(prop->set_ret);
|
||||||
|
|
||||||
free(prop);
|
free(prop);
|
||||||
}
|
}
|
||||||
|
@ -163,9 +158,6 @@ eo_definitions_temps_free(Eo_Lexer_Temps *tmp)
|
||||||
if (tmp->param)
|
if (tmp->param)
|
||||||
database_parameter_del(tmp->param);
|
database_parameter_del(tmp->param);
|
||||||
|
|
||||||
if (tmp->accessor)
|
|
||||||
eo_definitions_accessor_free(tmp->accessor);
|
|
||||||
|
|
||||||
EINA_LIST_FREE(tmp->str_items, s)
|
EINA_LIST_FREE(tmp->str_items, s)
|
||||||
if (s) eina_stringshare_del(s);
|
if (s) eina_stringshare_del(s);
|
||||||
|
|
||||||
|
|
|
@ -16,35 +16,26 @@ typedef struct _Eo_Ret_Def
|
||||||
Eina_Bool warn_unused:1;
|
Eina_Bool warn_unused:1;
|
||||||
} Eo_Ret_Def;
|
} Eo_Ret_Def;
|
||||||
|
|
||||||
/* ACCESSOR */
|
|
||||||
|
|
||||||
typedef enum _Eo_Accessor_Type
|
|
||||||
{
|
|
||||||
SETTER,
|
|
||||||
GETTER
|
|
||||||
} Eo_Accessor_Type;
|
|
||||||
|
|
||||||
typedef struct _Eo_Accessor_Def
|
|
||||||
{
|
|
||||||
Eolian_Object base;
|
|
||||||
Eo_Accessor_Type type;
|
|
||||||
Eo_Ret_Def *ret;
|
|
||||||
Eina_Stringshare *comment;
|
|
||||||
Eina_Stringshare* legacy;
|
|
||||||
Eina_Bool only_legacy:1;
|
|
||||||
} Eo_Accessor_Def;
|
|
||||||
|
|
||||||
/* PROPERTY */
|
/* PROPERTY */
|
||||||
|
|
||||||
typedef struct _Eo_Property_Def
|
typedef struct _Eo_Property_Def
|
||||||
{
|
{
|
||||||
Eolian_Object base;
|
Eolian_Object base;
|
||||||
|
Eolian_Object set_base;
|
||||||
Eina_Stringshare *name;
|
Eina_Stringshare *name;
|
||||||
|
Eo_Ret_Def *get_ret;
|
||||||
|
Eo_Ret_Def *set_ret;
|
||||||
Eina_List *keys;
|
Eina_List *keys;
|
||||||
Eina_List *values;
|
Eina_List *values;
|
||||||
Eo_Accessor_Def *get_accessor;
|
Eina_Stringshare *get_comment;
|
||||||
Eo_Accessor_Def *set_accessor;
|
Eina_Stringshare *set_comment;
|
||||||
|
Eina_Stringshare *get_legacy;
|
||||||
|
Eina_Stringshare *set_legacy;
|
||||||
int scope;
|
int scope;
|
||||||
|
Eina_Bool get_accessor: 1;
|
||||||
|
Eina_Bool set_accessor: 1;
|
||||||
|
Eina_Bool get_only_legacy: 1;
|
||||||
|
Eina_Bool set_only_legacy: 1;
|
||||||
Eina_Bool is_class:1;
|
Eina_Bool is_class:1;
|
||||||
} Eo_Property_Def;
|
} Eo_Property_Def;
|
||||||
|
|
||||||
|
@ -98,7 +89,6 @@ typedef struct _Eo_Lexer_Temps
|
||||||
Eo_Property_Def *prop;
|
Eo_Property_Def *prop;
|
||||||
Eo_Method_Def *meth;
|
Eo_Method_Def *meth;
|
||||||
Eolian_Function_Parameter *param;
|
Eolian_Function_Parameter *param;
|
||||||
Eo_Accessor_Def *accessor;
|
|
||||||
Eina_List *str_items;
|
Eina_List *str_items;
|
||||||
Eolian_Event *event;
|
Eolian_Event *event;
|
||||||
Eolian_Implement *impl;
|
Eolian_Implement *impl;
|
||||||
|
|
|
@ -1215,40 +1215,57 @@ parse_legacy(Eo_Lexer *ls)
|
||||||
check_next(ls, ';');
|
check_next(ls, ';');
|
||||||
}
|
}
|
||||||
|
|
||||||
static Eo_Accessor_Def *
|
static void
|
||||||
parse_accessor(Eo_Lexer *ls)
|
parse_accessor(Eo_Lexer *ls, Eo_Property_Def *prop)
|
||||||
{
|
{
|
||||||
int line, col;
|
int line, col;
|
||||||
Eo_Accessor_Def *acc = NULL;
|
|
||||||
Eina_Bool has_return = EINA_FALSE, has_legacy = EINA_FALSE,
|
Eina_Bool has_return = EINA_FALSE, has_legacy = EINA_FALSE,
|
||||||
has_eo = EINA_FALSE;
|
has_eo = EINA_FALSE;
|
||||||
acc = calloc(1, sizeof(Eo_Accessor_Def));
|
Eina_Bool is_get = (ls->t.kw == KW_get);
|
||||||
acc->base.file = eina_stringshare_ref(ls->filename);
|
if (is_get)
|
||||||
acc->base.line = ls->line_number;
|
{
|
||||||
acc->base.column = ls->column;
|
prop->base.file = eina_stringshare_ref(ls->filename);
|
||||||
ls->tmp.accessor = acc;
|
prop->base.line = ls->line_number;
|
||||||
acc->type = (ls->t.kw == KW_get) ? GETTER : SETTER;
|
prop->base.column = ls->column;
|
||||||
|
prop->get_accessor = EINA_TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
prop->set_base.file = eina_stringshare_ref(ls->filename);
|
||||||
|
prop->set_base.line = ls->line_number;
|
||||||
|
prop->set_base.column = ls->column;
|
||||||
|
prop->set_accessor = EINA_TRUE;
|
||||||
|
}
|
||||||
eo_lexer_get(ls);
|
eo_lexer_get(ls);
|
||||||
line = ls->line_number;
|
line = ls->line_number;
|
||||||
col = ls->column;
|
col = ls->column;
|
||||||
check_next(ls, '{');
|
check_next(ls, '{');
|
||||||
if (ls->t.token == TOK_COMMENT)
|
if (ls->t.token == TOK_COMMENT)
|
||||||
{
|
{
|
||||||
acc->comment = eina_stringshare_ref(ls->t.value.s);
|
if (is_get)
|
||||||
|
prop->get_comment = eina_stringshare_ref(ls->t.value.s);
|
||||||
|
else
|
||||||
|
prop->set_comment = eina_stringshare_ref(ls->t.value.s);
|
||||||
eo_lexer_get(ls);
|
eo_lexer_get(ls);
|
||||||
}
|
}
|
||||||
for (;;) switch (ls->t.kw)
|
for (;;) switch (ls->t.kw)
|
||||||
{
|
{
|
||||||
case KW_return:
|
case KW_return:
|
||||||
CASE_LOCK(ls, return, "return")
|
CASE_LOCK(ls, return, "return")
|
||||||
parse_return(ls, acc->type == GETTER);
|
parse_return(ls, is_get);
|
||||||
acc->ret = ls->tmp.ret_def;
|
if (is_get)
|
||||||
|
prop->get_ret = ls->tmp.ret_def;
|
||||||
|
else
|
||||||
|
prop->set_ret = ls->tmp.ret_def;
|
||||||
ls->tmp.ret_def = NULL;
|
ls->tmp.ret_def = NULL;
|
||||||
break;
|
break;
|
||||||
case KW_legacy:
|
case KW_legacy:
|
||||||
CASE_LOCK(ls, legacy, "legacy name")
|
CASE_LOCK(ls, legacy, "legacy name")
|
||||||
parse_legacy(ls);
|
parse_legacy(ls);
|
||||||
acc->legacy = ls->tmp.legacy_def;
|
if (is_get)
|
||||||
|
prop->get_legacy = ls->tmp.legacy_def;
|
||||||
|
else
|
||||||
|
prop->set_legacy = ls->tmp.legacy_def;
|
||||||
ls->tmp.legacy_def = NULL;
|
ls->tmp.legacy_def = NULL;
|
||||||
break;
|
break;
|
||||||
case KW_eo:
|
case KW_eo:
|
||||||
|
@ -1257,15 +1274,16 @@ parse_accessor(Eo_Lexer *ls)
|
||||||
check_next(ls, ':');
|
check_next(ls, ':');
|
||||||
check_kw_next(ls, KW_null);
|
check_kw_next(ls, KW_null);
|
||||||
check_next(ls, ';');
|
check_next(ls, ';');
|
||||||
acc->only_legacy = EINA_TRUE;
|
if (is_get)
|
||||||
|
prop->get_only_legacy = EINA_TRUE;
|
||||||
|
else
|
||||||
|
prop->set_only_legacy = EINA_TRUE;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
check_match(ls, '}', '{', line, col);
|
check_match(ls, '}', '{', line, col);
|
||||||
ls->tmp.accessor = NULL;
|
|
||||||
return acc;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -1324,11 +1342,11 @@ body:
|
||||||
{
|
{
|
||||||
case KW_get:
|
case KW_get:
|
||||||
CASE_LOCK(ls, get, "get definition")
|
CASE_LOCK(ls, get, "get definition")
|
||||||
prop->get_accessor = parse_accessor(ls);
|
parse_accessor(ls, prop);
|
||||||
break;
|
break;
|
||||||
case KW_set:
|
case KW_set:
|
||||||
CASE_LOCK(ls, set, "set definition")
|
CASE_LOCK(ls, set, "set definition")
|
||||||
prop->set_accessor = parse_accessor(ls);
|
parse_accessor(ls, prop);
|
||||||
break;
|
break;
|
||||||
case KW_keys:
|
case KW_keys:
|
||||||
CASE_LOCK(ls, keys, "keys definition")
|
CASE_LOCK(ls, keys, "keys definition")
|
||||||
|
|
Loading…
Reference in New Issue