eolian: only allow reference (ownable) types in containers

This commit is contained in:
Daniel Kolesa 2017-11-02 13:51:02 +01:00
parent 3989f11f11
commit cf63573e73
9 changed files with 25 additions and 14 deletions

View File

@ -44,7 +44,7 @@ struct Efl.Net.Control.Agent_Request_Input {
access_point: Efl.Net.Control.Access_Point; [[The access point that triggered this request.]]
fields: Efl.Net.Control.Agent_Request_Input.Field; [[Bitwise OR of fields present in this request.]]
passphrase_type: string; [[Extra detail on the meaning for the passphrase field, such as wep, psk, response (IEEE802.X GTC/OTP), string...]]
informational: list<Efl.Net.Control.Agent_Request_Input.Information>; [[Such as the previous passphrase, VPN host]]
informational: list<ptr(Efl.Net.Control.Agent_Request_Input.Information)>; [[Such as the previous passphrase, VPN host]]
}
struct Efl.Net.Control.Agent_Error {

View File

@ -189,7 +189,7 @@ class Efl.Net.Dialer.Http (Efl.Loop_User, Efl.Net.Dialer, Efl.Io.Sizer) {
request_headers_get {
[[Returns an iterator to the key-value pairs for request headers]]
return: iterator<Efl.Net.Http.Header> @owned @warn_unused; [[Iterator for request headers]]
return: iterator<ptr(Efl.Net.Http.Header)> @owned @warn_unused; [[Iterator for request headers]]
}
@property request_content_length {
@ -252,7 +252,7 @@ class Efl.Net.Dialer.Http (Efl.Loop_User, Efl.Net.Dialer, Efl.Io.Sizer) {
This will be usable after "headers,done" event is dispatched.
]]
return: iterator<Efl.Net.Http.Header> @owned @warn_unused; [[Iterator for response headers]]
return: iterator<ptr(Efl.Net.Http.Header)> @owned @warn_unused; [[Iterator for response headers]]
}
response_headers_all_get {
@ -277,7 +277,7 @@ class Efl.Net.Dialer.Http (Efl.Loop_User, Efl.Net.Dialer, Efl.Io.Sizer) {
This will be usable after "headers,done" event is dispatched.
]]
return: iterator<Efl.Net.Http.Header> @owned @warn_unused; [[Iterator for all response headers]]
return: iterator<ptr(Efl.Net.Http.Header)> @owned @warn_unused; [[Iterator for all response headers]]
}
response_headers_clear {

View File

@ -268,7 +268,7 @@ class Efl.Net.Dialer.Websocket (Efl.Loop_User, Efl.Net.Dialer) {
request_headers_get {
[[Returns an iterator to the key-value pairs for request headers]]
return: iterator<Efl.Net.Http.Header> @owned @warn_unused; [[Iterator to key value pairs]]
return: iterator<ptr(Efl.Net.Http.Header)> @owned @warn_unused; [[Iterator to key value pairs]]
}
@property cookie_jar {

View File

@ -158,8 +158,8 @@ enum Efl.Gfx.Change.Flag
struct Efl.Gfx.Event.Render_Post
{
[[Data sent along a "render,post" event, after a frame has been rendered.]]
updated_area: list <Eina.Rect>; [[A list of rectangles that were
updated in the canvas.]]
updated_area: list<ptr(Eina.Rect)>; [[A list of rectangles that were
updated in the canvas.]]
}
enum Efl.Gfx.Size.Hint.Aspect

View File

@ -56,7 +56,7 @@ class Efl.Observable (Efl.Object) {
[[Return a new iterator associated to this observable.
@since 1.19]]
return: iterator<Efl.Observable.Tuple> @owned; [[Iterator for observer]]
return: iterator<ptr(Efl.Observable.Tuple)> @owned; [[Iterator for observer]]
}
}
implements {

View File

@ -47,7 +47,7 @@ mixin Efl.Access.Action ()
get @pure_virtual {
}
values {
actions: list<Elm_Atspi_Action>; [[Contains statically allocated strings]]
actions: list<ptr(Elm_Atspi_Action)>; [[Contains statically allocated strings]]
}
}
action_do @protected @pure_virtual @beta {

View File

@ -181,10 +181,11 @@ _validate_type(Eolian_Type *tp)
{
if (tp->base_type)
{
int kwid = eo_lexer_keyword_str_to_id(tp->full_name);
if (!tp->freefunc)
{
tp->freefunc = eina_stringshare_add(eo_complex_frees[
eo_lexer_keyword_str_to_id(tp->full_name) - KW_accessor]);
kwid - KW_accessor]);
}
Eolian_Type *itp = tp->base_type;
/* validate types in brackets so freefuncs get written... */
@ -192,6 +193,16 @@ _validate_type(Eolian_Type *tp)
{
if (!_validate_type(itp))
return EINA_FALSE;
if ((kwid >= KW_accessor) && (kwid <= KW_list))
{
if (!database_type_is_ownable(itp))
{
snprintf(buf, sizeof(buf),
"%s cannot contain value types (%s)",
tp->full_name, itp->full_name);
return _obj_error(&itp->base, buf);
}
}
itp = itp->next_type;
}
return _validate(&tp->base);

View File

@ -179,7 +179,7 @@ Efl.Text.Cursor, Efl.Text.Annotate, Efl.Text.Markup)
@in cur1: const(ptr(Efl.Text.Cursor.Cursor)); [[Start of range]]
@in cur2: const(ptr(Efl.Text.Cursor.Cursor)); [[End of range]]
}
return: iterator<Eina.Rect> @owned; [[
return: iterator<ptr(Eina.Rect)> @owned; [[
Iterator on all geoemtries of the given range
]]
}
@ -197,7 +197,7 @@ Efl.Text.Cursor, Efl.Text.Annotate, Efl.Text.Markup)
@in cur1: ptr(const(Efl.Text.Cursor.Cursor)); [[Start of range]]
@in cur2: ptr(const(Efl.Text.Cursor.Cursor)); [[End of range]]
}
return: iterator<Eina.Rect> @owned; [[
return: iterator<ptr(Eina.Rect)> @owned; [[
Iterator on all simple geometries of the given range
]]
}

View File

@ -54,8 +54,8 @@ class Evas.Canvas3D.Node (Evas.Canvas3D.Object)
}
scene_root_get {
[[Get hash table of scenes using this node as root.]]
return: hash<Evas.Canvas3D.Object, uintptr>; [[ scenes using this node as root. FIXME: Actually a scene, not object.]]
/* FIXME: void_ptr is actually uintptr and that is also wrong */
return: hash<Evas.Canvas3D.Object, void_ptr>; [[ scenes using this node as root. FIXME: Actually a scene, not object.]]
}
position_set {
[[Set the position of the given node.