From f36e5bd543a1fed2bc93bc803e326684269e28d0 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Fri, 22 Sep 2017 17:10:42 +0200 Subject: [PATCH] eolian: add mstring This is a new type representing a mutable string (no const). Regular strings cannot be made mutable with @owned because they might be hidden behind typedefs. --- src/lib/ecore_con/efl_net_dialer_http.eo | 2 +- src/lib/elementary/efl_access_action.eo | 2 +- src/lib/elementary/elm_entry.eo | 2 +- src/lib/elementary/elm_interface_atspi_text.eo | 6 +++--- src/lib/elementary/elm_web.eo | 4 ++-- src/lib/eolian/database_type.c | 7 +------ src/lib/eolian/eo_lexer.c | 2 +- src/lib/eolian/eo_lexer.h | 3 ++- src/lib/evas/canvas/efl_canvas_text.eo | 2 +- src/tests/eolian/data/complex_type.eo | 2 +- src/tests/eolian/data/decl.eo | 2 +- src/tests/eolian/data/enum.eo | 2 +- src/tests/eolian/data/extern.eo | 2 +- src/tests/eolian/data/free_func.eo | 2 +- src/tests/eolian/data/function_as_argument.eo | 2 +- src/tests/eolian/data/function_types.eot | 2 +- src/tests/eolian/data/struct.eo | 2 +- src/tests/eolian/data/typedef.eo | 2 +- src/tests/eolian/data/var.eo | 2 +- src/tests/eolian_cxx/complex.eo | 4 ++-- src/tests/eolian_cxx/name1_name2_type_generation.eo | 4 ++-- 21 files changed, 27 insertions(+), 31 deletions(-) diff --git a/src/lib/ecore_con/efl_net_dialer_http.eo b/src/lib/ecore_con/efl_net_dialer_http.eo index 0e6244d..af2a3d8 100644 --- a/src/lib/ecore_con/efl_net_dialer_http.eo +++ b/src/lib/ecore_con/efl_net_dialer_http.eo @@ -383,7 +383,7 @@ class Efl.Net.Dialer.Http (Efl.Loop_User, Efl.Net.Dialer, Efl.Io.Sizer) { params { epochtime: int64; [[UNIX Epoch time - seconds since 1/1/1970]] } - return: string @owned @warn_unused; [[Newly allocated null-terminated string on success or NULL on errors]] + return: mstring @owned @warn_unused; [[Newly allocated null-terminated string on success or NULL on errors]] } } diff --git a/src/lib/elementary/efl_access_action.eo b/src/lib/elementary/efl_access_action.eo index 577464c..931ecf2 100644 --- a/src/lib/elementary/efl_access_action.eo +++ b/src/lib/elementary/efl_access_action.eo @@ -59,7 +59,7 @@ mixin Efl.Access.Action () params { @in id: int; [[ID for widget]] } - return: string @owned @warn_unused; [[Should be freed by the user.]] + return: mstring @owned @warn_unused; [[Should be freed by the user.]] } } } diff --git a/src/lib/elementary/elm_entry.eo b/src/lib/elementary/elm_entry.eo index 11f2af6..a76fda2 100644 --- a/src/lib/elementary/elm_entry.eo +++ b/src/lib/elementary/elm_entry.eo @@ -632,7 +632,7 @@ class Elm.Entry (Efl.Ui.Layout, Elm.Interface_Scrollable, Efl.Ui.Clickable, Only the text is returned, any format that may exist will not be part of the return value. You must free the string when done with \@ref free. ]] - return: string @owned @warn_unused; [[Character]] + return: mstring @owned @warn_unused; [[Character]] } } @property selection { diff --git a/src/lib/elementary/elm_interface_atspi_text.eo b/src/lib/elementary/elm_interface_atspi_text.eo index 8485d08..3cd2ddc 100644 --- a/src/lib/elementary/elm_interface_atspi_text.eo +++ b/src/lib/elementary/elm_interface_atspi_text.eo @@ -70,7 +70,7 @@ interface Elm.Interface.Atspi.Text () end_offset: ptr(int); [[Offset indicating end of string according to given granularity. -1 in case of error.]] } values { - string: string @owned; [[Newly allocated UTF-8 encoded string. Must be free by a user.]] + string: mstring @owned; [[Newly allocated UTF-8 encoded string. Must be free by a user.]] } } @property text @protected { @@ -82,7 +82,7 @@ interface Elm.Interface.Atspi.Text () end_offset: int; [[End offset of text.]] } values { - text: string @owned; [[UTF-8 encoded text.]] + text: mstring @owned; [[UTF-8 encoded text.]] } } @property caret_offset @protected { @@ -108,7 +108,7 @@ interface Elm.Interface.Atspi.Text () end_offset: ptr(int); [[Position in text to which given attribute is set.]] } values { - value: string @owned; [[Value of text attribute. Should be free()]] + value: mstring @owned; [[Value of text attribute. Should be free()]] } } @property attributes @protected { diff --git a/src/lib/elementary/elm_web.eo b/src/lib/elementary/elm_web.eo index f1c8e98..db349fd 100644 --- a/src/lib/elementary/elm_web.eo +++ b/src/lib/elementary/elm_web.eo @@ -339,8 +339,8 @@ class Elm.Web (Elm.Widget) The string returned must be freed by the user when it's done with it. ]] - /* FIXME: const doesn't belong here */ - return: const(string) @owned @warn_unused; [[A newly allocated string, or + /* FIXME: owned const string? */ + return: string @owned @warn_unused; [[A newly allocated string, or $null if nothing is selected or an error occurred.]] } diff --git a/src/lib/eolian/database_type.c b/src/lib/eolian/database_type.c index d9a8f17..a05fa25 100644 --- a/src/lib/eolian/database_type.c +++ b/src/lib/eolian/database_type.c @@ -146,12 +146,7 @@ database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name, } int kw = eo_lexer_keyword_str_to_id(tp->name); if (kw && eo_lexer_is_type_keyword(kw)) - { - /* FIXME: deal with aliased strings? */ - if ((kw == KW_string) && !tp->owned) - eina_strbuf_append(buf, "const "); - eina_strbuf_append(buf, eo_lexer_get_c_type(kw)); - } + eina_strbuf_append(buf, eo_lexer_get_c_type(kw)); else eina_strbuf_append(buf, tp->name); } diff --git a/src/lib/eolian/eo_lexer.c b/src/lib/eolian/eo_lexer.c index caae8dd..dc5d01f 100644 --- a/src/lib/eolian/eo_lexer.c +++ b/src/lib/eolian/eo_lexer.c @@ -75,7 +75,7 @@ static const char * const ctypes[] = "Eina_Accessor", "Eina_Array", "Eina_Iterator", "Eina_Hash", "Eina_List", "Efl_Future", - "Eina_Value", "char *", "Eina_Stringshare *", + "Eina_Value", "char *", "const char *", "Eina_Stringshare *", "void *", diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h index 2e7d0e5..88e68a4 100644 --- a/src/lib/eolian/eo_lexer.h +++ b/src/lib/eolian/eo_lexer.h @@ -54,7 +54,8 @@ enum Tokens \ KW(accessor), KW(array), KW(iterator), KW(hash), KW(list), \ KW(future), \ - KW(generic_value), KW(string), KW(stringshare), \ + KW(generic_value), \ + KW(mstring), KW(string), KW(stringshare), \ \ KW(void_ptr), \ KW(__builtin_free_cb), \ diff --git a/src/lib/evas/canvas/efl_canvas_text.eo b/src/lib/evas/canvas/efl_canvas_text.eo index 7d7b0f9..b0f075f 100644 --- a/src/lib/evas/canvas/efl_canvas_text.eo +++ b/src/lib/evas/canvas/efl_canvas_text.eo @@ -159,7 +159,7 @@ Efl.Text.Font, Efl.Text.Style, Efl.Text.Format, Efl.Text.Cursor, Efl.Text.Annota @since 1.18 ]] legacy: null; - return: string @owned; [[The text in the given range]] + return: mstring @owned; [[The text in the given range]] params { @in cur1: const(ptr(Efl.Text.Cursor.Cursor)); [[Start of range]] @in cur2: const(ptr(Efl.Text.Cursor.Cursor)); [[End of range]] diff --git a/src/tests/eolian/data/complex_type.eo b/src/tests/eolian/data/complex_type.eo index 2976125..d4f85c9 100644 --- a/src/tests/eolian/data/complex_type.eo +++ b/src/tests/eolian/data/complex_type.eo @@ -12,7 +12,7 @@ class Complex_Type { } foo { params { - buf: string @owned; + buf: mstring @owned; } return: list @owned; [[comment for method return]] } diff --git a/src/tests/eolian/data/decl.eo b/src/tests/eolian/data/decl.eo index de1ed88..ed036bc 100644 --- a/src/tests/eolian/data/decl.eo +++ b/src/tests/eolian/data/decl.eo @@ -16,7 +16,7 @@ class Decl { params { idx: int; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian/data/enum.eo b/src/tests/eolian/data/enum.eo index 4275b24..73e8da0 100644 --- a/src/tests/eolian/data/enum.eo +++ b/src/tests/eolian/data/enum.eo @@ -39,7 +39,7 @@ class Enum { params { idx: int; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian/data/extern.eo b/src/tests/eolian/data/extern.eo index d59caa2..217fb69 100644 --- a/src/tests/eolian/data/extern.eo +++ b/src/tests/eolian/data/extern.eo @@ -22,7 +22,7 @@ class Extern { params { idx: int; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian/data/free_func.eo b/src/tests/eolian/data/free_func.eo index 5e77e5c..6a3228b 100644 --- a/src/tests/eolian/data/free_func.eo +++ b/src/tests/eolian/data/free_func.eo @@ -24,7 +24,7 @@ class Free_Func { params { idx: int; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian/data/function_as_argument.eo b/src/tests/eolian/data/function_as_argument.eo index 4c27253..5a14e86 100644 --- a/src/tests/eolian/data/function_as_argument.eo +++ b/src/tests/eolian/data/function_as_argument.eo @@ -19,7 +19,7 @@ class Function_As_Argument { a: int; b: double; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian/data/function_types.eot b/src/tests/eolian/data/function_types.eot index 5eae0e2..e8bc186 100644 --- a/src/tests/eolian/data/function_types.eot +++ b/src/tests/eolian/data/function_types.eot @@ -16,7 +16,7 @@ function SimpleFunc { function ComplexFunc { params { @in c: string; - @out d: string @owned; + @out d: mstring @owned; } return: double; }; diff --git a/src/tests/eolian/data/struct.eo b/src/tests/eolian/data/struct.eo index cb8981d..cb664f3 100644 --- a/src/tests/eolian/data/struct.eo +++ b/src/tests/eolian/data/struct.eo @@ -23,7 +23,7 @@ class Struct { params { idx: int; } - return: string @owned; + return: mstring @owned; } bar { return: ptr(Named); diff --git a/src/tests/eolian/data/typedef.eo b/src/tests/eolian/data/typedef.eo index 59a33cb..ad6ed00 100644 --- a/src/tests/eolian/data/typedef.eo +++ b/src/tests/eolian/data/typedef.eo @@ -33,7 +33,7 @@ class Typedef { params { idx: int; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian/data/var.eo b/src/tests/eolian/data/var.eo index 6605d30..a618f03 100644 --- a/src/tests/eolian/data/var.eo +++ b/src/tests/eolian/data/var.eo @@ -16,7 +16,7 @@ class Var { params { idx: int; } - return: string @owned; + return: mstring @owned; } } } diff --git a/src/tests/eolian_cxx/complex.eo b/src/tests/eolian_cxx/complex.eo index df1c337..b9442a2 100644 --- a/src/tests/eolian_cxx/complex.eo +++ b/src/tests/eolian_cxx/complex.eo @@ -40,7 +40,7 @@ class Complex (Efl.Object) } instringowncont { params { - l: list; + l: list; } } instringcontown { @@ -121,7 +121,7 @@ class Complex (Efl.Object) } outstringowncont { params { - @out l: list; + @out l: list; } } outstringcontown { diff --git a/src/tests/eolian_cxx/name1_name2_type_generation.eo b/src/tests/eolian_cxx/name1_name2_type_generation.eo index 833a540..ee4d044 100644 --- a/src/tests/eolian_cxx/name1_name2_type_generation.eo +++ b/src/tests/eolian_cxx/name1_name2_type_generation.eo @@ -56,7 +56,7 @@ class Name1.Name2.Type_Generation (Efl.Object) } instringown { params { - @in v: string @owned; + @in v: mstring @owned; } } instringptrown { @@ -102,7 +102,7 @@ class Name1.Name2.Type_Generation (Efl.Object) return: ptr(string); } returnstringown { - return: string @owned; + return: mstring @owned; } returnstringownptr { return: ptr(string) @owned; -- 2.7.4