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.]] 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.]] 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...]] 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 { 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 { request_headers_get {
[[Returns an iterator to the key-value pairs for request headers]] [[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 { @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. 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 { 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. 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 { response_headers_clear {

View File

@ -268,7 +268,7 @@ class Efl.Net.Dialer.Websocket (Efl.Loop_User, Efl.Net.Dialer) {
request_headers_get { request_headers_get {
[[Returns an iterator to the key-value pairs for request headers]] [[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 { @property cookie_jar {

View File

@ -158,8 +158,8 @@ enum Efl.Gfx.Change.Flag
struct Efl.Gfx.Event.Render_Post struct Efl.Gfx.Event.Render_Post
{ {
[[Data sent along a "render,post" event, after a frame has been rendered.]] [[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_area: list<ptr(Eina.Rect)>; [[A list of rectangles that were
updated in the canvas.]] updated in the canvas.]]
} }
enum Efl.Gfx.Size.Hint.Aspect 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. [[Return a new iterator associated to this observable.
@since 1.19]] @since 1.19]]
return: iterator<Efl.Observable.Tuple> @owned; [[Iterator for observer]] return: iterator<ptr(Efl.Observable.Tuple)> @owned; [[Iterator for observer]]
} }
} }
implements { implements {

View File

@ -47,7 +47,7 @@ mixin Efl.Access.Action ()
get @pure_virtual { get @pure_virtual {
} }
values { 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 { action_do @protected @pure_virtual @beta {

View File

@ -181,10 +181,11 @@ _validate_type(Eolian_Type *tp)
{ {
if (tp->base_type) if (tp->base_type)
{ {
int kwid = eo_lexer_keyword_str_to_id(tp->full_name);
if (!tp->freefunc) if (!tp->freefunc)
{ {
tp->freefunc = eina_stringshare_add(eo_complex_frees[ 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; Eolian_Type *itp = tp->base_type;
/* validate types in brackets so freefuncs get written... */ /* validate types in brackets so freefuncs get written... */
@ -192,6 +193,16 @@ _validate_type(Eolian_Type *tp)
{ {
if (!_validate_type(itp)) if (!_validate_type(itp))
return EINA_FALSE; 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; itp = itp->next_type;
} }
return _validate(&tp->base); 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 cur1: const(ptr(Efl.Text.Cursor.Cursor)); [[Start of range]]
@in cur2: const(ptr(Efl.Text.Cursor.Cursor)); [[End 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 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 cur1: ptr(const(Efl.Text.Cursor.Cursor)); [[Start of range]]
@in cur2: ptr(const(Efl.Text.Cursor.Cursor)); [[End 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 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 { scene_root_get {
[[Get hash table of scenes using this node as root.]] [[Get hash table of scenes using this node as root.]]
/* FIXME: void_ptr is actually uintptr and that is also wrong */
return: hash<Evas.Canvas3D.Object, uintptr>; [[ scenes using this node as root. FIXME: Actually a scene, not object.]] return: hash<Evas.Canvas3D.Object, void_ptr>; [[ scenes using this node as root. FIXME: Actually a scene, not object.]]
} }
position_set { position_set {
[[Set the position of the given node. [[Set the position of the given node.