EOLIAN_TYPE_BUILTIN_BOOL,
+ EOLIAN_TYPE_BUILTIN_SLICE,
+ EOLIAN_TYPE_BUILTIN_RW_SLICE,
+
EOLIAN_TYPE_BUILTIN_VOID,
EOLIAN_TYPE_BUILTIN_ACCESSOR,
EOLIAN_TYPE_BUILTIN_ARRAY,
+ EOLIAN_TYPE_BUILTIN_FUTURE,
EOLIAN_TYPE_BUILTIN_ITERATOR,
EOLIAN_TYPE_BUILTIN_HASH,
EOLIAN_TYPE_BUILTIN_LIST,
-
- EOLIAN_TYPE_BUILTIN_FUTURE,
+ EOLIAN_TYPE_BUILTIN_INARRAY,
+ EOLIAN_TYPE_BUILTIN_INLIST,
EOLIAN_TYPE_BUILTIN_ANY_VALUE,
EOLIAN_TYPE_BUILTIN_ANY_VALUE_PTR,
EOLIAN_TYPE_BUILTIN_MSTRING,
EOLIAN_TYPE_BUILTIN_STRING,
EOLIAN_TYPE_BUILTIN_STRINGSHARE,
+ EOLIAN_TYPE_BUILTIN_STRBUF,
EOLIAN_TYPE_BUILTIN_VOID_PTR,
EOLIAN_TYPE_BUILTIN_FREE_CB
BOOL = 30,
- VOID = 31,
+ SLICE = 31,
+ RW_SLICE = 32,
- ACCESSOR = 32,
- ARRAY = 33,
- ITERATOR = 34,
- HASH = 35,
- LIST = 36,
+ VOID = 33,
- FUTURE = 37,
+ ACCESSOR = 34,
+ ARRAY = 35,
+ FUTURE = 36,
+ ITERATOR = 37,
+ HASH = 38,
+ LIST = 39,
+ INARRAY = 40,
+ INLIST = 41,
- ANY_VALUE = 38,
- ANY_VALUE_PTR = 39,
+ ANY_VALUE = 42,
+ ANY_VALUE_PTR = 43,
- MSTRING = 40,
- STRING = 41,
- STRINGSHARE = 42,
+ MSTRING = 44,
+ STRING = 45,
+ STRINGSHARE = 46,
+ STRBUF = 47.
- VOID_PTR = 43,
- FREE_CB = 44
+ VOID_PTR = 48,
+ FREE_CB = 49
}
M.typedecl_type = {
EOLIAN_TYPE_BUILTIN_BOOL,
+ EOLIAN_TYPE_BUILTIN_SLICE,
+ EOLIAN_TYPE_BUILTIN_RW_SLICE,
+
EOLIAN_TYPE_BUILTIN_VOID,
EOLIAN_TYPE_BUILTIN_ACCESSOR,
EOLIAN_TYPE_BUILTIN_MSTRING,
EOLIAN_TYPE_BUILTIN_STRING,
EOLIAN_TYPE_BUILTIN_STRINGSHARE,
+ EOLIAN_TYPE_BUILTIN_STRBUF,
EOLIAN_TYPE_BUILTIN_VOID_PTR,
EOLIAN_TYPE_BUILTIN_FREE_CB
if (tp->base_type)
{
int kwid = eo_lexer_keyword_str_to_id(tp->base.name);
- if (!tp->freefunc)
+ if (!tp->freefunc && kwid > KW_void)
{
tp->freefunc = eina_stringshare_add(eo_complex_frees[
kwid - KW_accessor]);
"Eina_Bool",
+ "Eina_Slice", "Eina_Rw_Slice",
+
"void",
"Eina_Accessor *", "Eina_Array *", "Eina_Future *", "Eina_Iterator *",
\
KW(bool), \
\
+ KW(slice), KW(rw_slice), \
+ \
KW(void), \
\
KW(accessor), KW(array), KW(future), KW(iterator), KW(hash), KW(list), \
def->btype = ls->t.kw - KW_byte + 1;
def->base.name = eina_stringshare_ref(ls->t.value.s);
eo_lexer_get(ls);
- if (tpid >= KW_accessor && tpid <= KW_inlist)
+ if ((tpid >= KW_accessor && tpid <= KW_inlist) ||
+ (tpid >= KW_slice && tpid <= KW_rw_slice))
{
int bline = ls->line_number, bcol = ls->column;
check_next(ls, '<');
foo {
params {
buf: mstring @owned;
+ sl: slice<ubyte>;
}
return: list<stringshare> @owned; [[comment for method return]]
}
fail_if(eolian_type_builtin_type_get(type) != EOLIAN_TYPE_BUILTIN_STRINGSHARE);
fail_if(strcmp(type_name, "Eina_Stringshare *"));
eina_stringshare_del(type_name);
- /* Methods parameter type */
+ /* Methods parameter types */
fail_if(!(iter = eolian_function_parameters_get(fid)));
+
fail_if(!(eina_iterator_next(iter, (void**)¶m)));
- fail_if(eina_iterator_next(iter, &dummy));
- eina_iterator_free(iter);
fail_if(strcmp(eolian_parameter_name_get(param), "buf"));
fail_if(!(type = eolian_parameter_type_get(param)));
fail_if(!(type_name = eolian_type_c_type_get(type, EOLIAN_C_TYPE_PARAM)));
fail_if(strcmp(type_name, "char *"));
eina_stringshare_del(type_name);
+ fail_if(!(eina_iterator_next(iter, (void**)¶m)));
+ fail_if(strcmp(eolian_parameter_name_get(param), "sl"));
+ fail_if(!(type = eolian_parameter_type_get(param)));
+ fail_if(!(type_name = eolian_type_c_type_get(type, EOLIAN_C_TYPE_PARAM)));
+ fail_if(eolian_type_is_owned(type));
+ fail_if(eolian_type_builtin_type_get(type) != EOLIAN_TYPE_BUILTIN_SLICE);
+ fail_if(strcmp(type_name, "Eina_Slice"));
+ eina_stringshare_del(type_name);
+
+ fail_if(eina_iterator_next(iter, &dummy));
+ eina_iterator_free(iter);
+
eolian_state_free(eos);
}
EFL_END_TEST