eolian: only allow reference (ownable) types in containers
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 2 Nov 2017 12:51:02 +0000 (13:51 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Thu, 2 Nov 2017 12:51:02 +0000 (13:51 +0100)
src/lib/ecore_con/efl_net_control.eo
src/lib/ecore_con/efl_net_dialer_http.eo
src/lib/ecore_con/efl_net_dialer_websocket.eo
src/lib/efl/interfaces/efl_gfx_types.eot
src/lib/efl/interfaces/efl_observable.eo
src/lib/elementary/efl_access_action.eo
src/lib/eolian/database_validate.c
src/lib/evas/canvas/efl_canvas_text.eo
src/lib/evas/canvas/evas_canvas3d_node.eo

index 3e8b70d..d93f459 100644 (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 {
index af2a3d8..9115cf2 100644 (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 {
index 534f5b7..4aef2b4 100644 (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 {
index 20ddeea..1250d43 100644 (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
index 517113b..8aa7bba 100644 (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 {
index ca5d345..12e313a 100644 (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 {
index 22df42d..ecfb806 100644 (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);
index 00a0565..891dc97 100644 (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
          ]]
       }
index 0c19fe9..f9b1825 100644 (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.