q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=eb25e92770f9524e2921a512a326aea202e4b032

commit eb25e92770f9524e2921a512a326aea202e4b032
Author: Daniel Kolesa <d.kol...@samsung.com>
Date:   Fri Sep 6 15:08:27 2019 +0200

    eolian: change composite syntax from block to inheritance section
    
    This makes more sense as these are related to inheritance tree.
    Therefore, change while we still can.
    
    Fixes T8183
---
 src/lib/elementary/efl_ui_collection.eo           |  9 ++-
 src/lib/elementary/efl_ui_image_zoomable.eo       |  5 +-
 src/lib/elementary/efl_ui_list_view.eo            |  6 +-
 src/lib/elementary/efl_ui_panel.eo                |  4 +-
 src/lib/elementary/efl_ui_radio_box.eo            |  4 +-
 src/lib/elementary/efl_ui_scroller.eo             |  7 +-
 src/lib/elementary/efl_ui_tab_bar.eo              |  9 +--
 src/lib/elementary/efl_ui_tags.eo                 |  7 +-
 src/lib/elementary/efl_ui_text.eo                 |  6 +-
 src/lib/elementary/efl_ui_video.eo                |  7 +-
 src/lib/elementary/efl_ui_widget_focus_manager.eo |  8 +--
 src/lib/elementary/efl_ui_win.eo                  |  4 +-
 src/lib/eolian/eo_parser.c                        | 79 +++++++++++------------
 src/tests/eolian/data/unimpl.eo                   |  5 +-
 14 files changed, 66 insertions(+), 94 deletions(-)

diff --git a/src/lib/elementary/efl_ui_collection.eo 
b/src/lib/elementary/efl_ui_collection.eo
index ecd0eb1e94..9fad710f65 100644
--- a/src/lib/elementary/efl_ui_collection.eo
+++ b/src/lib/elementary/efl_ui_collection.eo
@@ -6,6 +6,10 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base 
implements
                    Efl.Ui.Multi_Selectable,
                    Efl.Ui.Focus.Manager_Sub,
                    Efl.Ui.Widget_Focus_Manager
+   composite
+                   Efl.Ui.Scrollable_Interactive,
+                   Efl.Ui.Scrollbar,
+                   Efl.Ui.Focus.Manager
 {
    [[This widget displays a list of items in an arrangement controlled by an 
external @.position_manager
      object. By using different @.position_manager objects this widget can 
show unidimensional lists or
@@ -95,10 +99,5 @@ class @beta Efl.Ui.Collection extends Efl.Ui.Layout_Base 
implements
       item,clicked : Efl.Ui.Item; [[A $clicked event occurred over an item.]]
       item,clicked,any : Efl.Ui.Item; [[A $clicked,any event occurred over an 
item.]]
    }
-   composite {
-      Efl.Ui.Scrollable_Interactive;
-      Efl.Ui.Scrollbar;
-      Efl.Ui.Focus.Manager;
-   }
 }
 
diff --git a/src/lib/elementary/efl_ui_image_zoomable.eo 
b/src/lib/elementary/efl_ui_image_zoomable.eo
index 4669a4f4a4..62ae9bc591 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.eo
+++ b/src/lib/elementary/efl_ui_image_zoomable.eo
@@ -5,6 +5,7 @@ struct @extern Elm.Photocam.Progress; [[Photocam progress 
information.]]
 class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom,
                              Efl.Ui.Scrollable_Interactive,
                              Efl.Ui.Scrollbar
+   composite Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar
 {
    [[Elementary Image Zoomable class]]
    methods {
@@ -84,8 +85,4 @@ class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image 
implements Efl.Ui.Zoom,
       download,done: void; [[Called when photocam download finished]]
       download,error: Elm.Photocam.Error; [[Called when photocam download 
failed]]
    }
-   composite {
-      Efl.Ui.Scrollable_Interactive;
-      Efl.Ui.Scrollbar;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_list_view.eo 
b/src/lib/elementary/efl_ui_list_view.eo
index f1490b3b26..5c49394ec4 100644
--- a/src/lib/elementary/efl_ui_list_view.eo
+++ b/src/lib/elementary/efl_ui_list_view.eo
@@ -10,6 +10,8 @@ struct @beta Efl.Ui.List_View_Item_Event
 class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements 
Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar,
                 Efl.Access.Widget.Action, Efl.Access.Selection, 
Efl.Ui.Focus.Composition, Efl.Ui.Focus.Manager_Sub,
                 Efl.Ui.Container_Selectable, Efl.Ui.List_View_Model, 
Efl.Ui.Widget_Focus_Manager
+   composite
+                Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar
 {
    methods {
       @property homogeneous {
@@ -90,8 +92,4 @@ class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base 
implements Efl.Ui.Scroll
       Efl.Access.Selection.all_children_select;
       Efl.Access.Selection.access_selection_clear;
    }
-   composite {
-      Efl.Ui.Scrollable_Interactive;
-      Efl.Ui.Scrollbar;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_panel.eo 
b/src/lib/elementary/efl_ui_panel.eo
index 0cde869b3e..24182af750 100644
--- a/src/lib/elementary/efl_ui_panel.eo
+++ b/src/lib/elementary/efl_ui_panel.eo
@@ -18,6 +18,7 @@ struct @beta Efl.Ui.Panel_Scroll_Info
 class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
                          implements Efl.Ui.Focus.Layer, 
Efl.Ui.Scrollable_Interactive, Efl.Content,
                                     Efl.Access.Widget.Action
+                         composite Efl.Ui.Scrollable_Interactive
 {
    [[Elementary panel class]]
    methods {
@@ -93,7 +94,4 @@ class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
    events {
       toggled: void; [[Called when the hidden state was toggled]]
    }
-   composite {
-      Efl.Ui.Scrollable_Interactive;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_radio_box.eo 
b/src/lib/elementary/efl_ui_radio_box.eo
index aa2d91c835..54bd92e3df 100644
--- a/src/lib/elementary/efl_ui_radio_box.eo
+++ b/src/lib/elementary/efl_ui_radio_box.eo
@@ -1,4 +1,5 @@
 class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group
+   composite Efl.Ui.Radio_Group
 {
    [[A standard @Efl.Ui.Box container which automatically handles grouping of 
any @Efl.Ui.Radio
      widget added to it.
@@ -19,7 +20,4 @@ class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements 
Efl.Ui.Radio_Group
       Efl.Pack_Linear.pack_unpack_at;
       Efl.Object.constructor;
    }
-   composite {
-      Efl.Ui.Radio_Group;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_scroller.eo 
b/src/lib/elementary/efl_ui_scroller.eo
index 36f42c16b0..7a2bb90306 100644
--- a/src/lib/elementary/efl_ui_scroller.eo
+++ b/src/lib/elementary/efl_ui_scroller.eo
@@ -4,6 +4,9 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base 
implements
                        Efl.Ui.Focus.Manager_Sub,
                        Efl.Ui.Widget_Focus_Manager,
                        Efl.Content
+   composite
+                       Efl.Ui.Scrollable_Interactive,
+                       Efl.Ui.Scrollbar
 {
    [[Efl ui scroller class]]
    implements {
@@ -19,8 +22,4 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base 
implements
       Efl.Ui.Widget_Focus_Manager.focus_manager_create;
       Efl.Ui.Scrollable_Interactive.match_content { set; }
    }
-   composite {
-      Efl.Ui.Scrollable_Interactive;
-      Efl.Ui.Scrollbar;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_tab_bar.eo 
b/src/lib/elementary/efl_ui_tab_bar.eo
index 1d27afe62e..b4aabe1197 100644
--- a/src/lib/elementary/efl_ui_tab_bar.eo
+++ b/src/lib/elementary/efl_ui_tab_bar.eo
@@ -1,4 +1,6 @@
-class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements 
Efl.Ui.Single_Selectable, Efl.Pack_Linear
+class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base
+   implements Efl.Ui.Single_Selectable, Efl.Pack_Linear
+   composite Efl.Pack_Linear, Efl.Pack
 {
    [[Tab Bar class]]
    methods {
@@ -23,9 +25,4 @@ class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base 
implements Efl.Ui.Single_S
       Efl.Container.content_count;
       Efl.Container.content_iterate;
    }
-   composite {
-      Efl.Pack_Linear;
-      Efl.Pack;
-      Efl.Pack_Linear;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_tags.eo 
b/src/lib/elementary/efl_ui_tags.eo
index 6f8c739f06..96f1fb0eb8 100644
--- a/src/lib/elementary/efl_ui_tags.eo
+++ b/src/lib/elementary/efl_ui_tags.eo
@@ -1,4 +1,6 @@
-class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, 
Efl.Ui.Format
+class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base
+   implements Efl.Text, Efl.Ui.Format
+   composite Efl.Text
 {
    [[A widget displaying a list of tags. The user can remove tags by clicking
      on each tag "close" button and add new tags by typing text in the text
@@ -61,7 +63,4 @@ class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements 
Efl.Text, Efl.Ui.F
       /* FIXME: Not future-proof */
       expand,state,changed: int; [[Called when expanded state changed]]
    }
-   composite {
-      Efl.Text;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_text.eo 
b/src/lib/elementary/efl_ui_text.eo
index a8cee69e40..691c0271bd 100644
--- a/src/lib/elementary/efl_ui_text.eo
+++ b/src/lib/elementary/efl_ui_text.eo
@@ -4,6 +4,8 @@ import elm_general;
 class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements 
Efl.Input.Clickable,
                  Efl.Access.Text, Efl.Access.Editable.Text, Efl.File,
                  Efl.Ui.Text_Selectable, Efl.Text_Interactive, Efl.Text_Markup
+   composite
+                 Efl.Text_Interactive, Efl.Text_Markup
 {
    [[A flexible text widget which can be static (as a label) or editable by
      the user (as a text entry). It provides all sorts of editing facilities
@@ -374,8 +376,4 @@ class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base 
implements Efl.Input.Clickabl
       anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]]
       cursor,changed,manual: void; [[Called on manual cursor change]]
    }
-   composite {
-      Efl.Text_Interactive;
-      Efl.Text_Markup;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_video.eo 
b/src/lib/elementary/efl_ui_video.eo
index d6b42f9abb..c00326ef30 100644
--- a/src/lib/elementary/efl_ui_video.eo
+++ b/src/lib/elementary/efl_ui_video.eo
@@ -1,4 +1,6 @@
-class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, 
Efl.Player, Efl.Access.Widget.Action
+class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base
+   implements Efl.File, Efl.Player, Efl.Access.Widget.Action
+   composite Efl.Player
 {
    [[Efl UI video class]]
    methods {
@@ -50,7 +52,4 @@ class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base 
implements Efl.File, Efl.Pla
       Efl.Player.stop;
       Efl.Player.play { get; set; }
    }
-   composite {
-      Efl.Player;
-   }
 }
diff --git a/src/lib/elementary/efl_ui_widget_focus_manager.eo 
b/src/lib/elementary/efl_ui_widget_focus_manager.eo
index e5cc1a2691..d12a4a0c79 100644
--- a/src/lib/elementary/efl_ui_widget_focus_manager.eo
+++ b/src/lib/elementary/efl_ui_widget_focus_manager.eo
@@ -1,4 +1,7 @@
-mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends 
Efl.Ui.Focus.Manager
+mixin Efl.Ui.Widget_Focus_Manager
+   requires Efl.Ui.Widget
+   extends Efl.Ui.Focus.Manager
+   composite Efl.Ui.Focus.Manager
 {
   [[Helper mixin for widgets which also can act as focus managers.
 
@@ -23,7 +26,4 @@ mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget 
extends Efl.Ui.Focus.Ma
       Efl.Object.destructor;
       Efl.Ui.Widget.focus_state_apply;
   }
-  composite {
-      Efl.Ui.Focus.Manager;
-  }
 }
diff --git a/src/lib/elementary/efl_ui_win.eo b/src/lib/elementary/efl_ui_win.eo
index 42c309dfb6..94859d9277 100644
--- a/src/lib/elementary/efl_ui_win.eo
+++ b/src/lib/elementary/efl_ui_win.eo
@@ -139,6 +139,7 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements 
Efl.Canvas.Scene, Efl.Access.W
                   Efl.Content, Efl.Input.State, Efl.Input.Interface, 
Efl.Screen,
                   Efl.Text, Efl.Config,
                   Efl.Ui.Widget_Focus_Manager, Efl.Ui.Focus.Manager_Window_Root
+   composite      Efl.Config
 {
    [[Efl UI window class.
 
@@ -895,7 +896,4 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements 
Efl.Canvas.Scene, Efl.Access.W
       pause: void; [[Called when the window is not going be displayed for some 
time]]
       resume: void; [[Called before a window is rendered after a pause event]]
    }
-   composite {
-      Efl.Config;
-   }
 }
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 04a16c2502..975c2a880b 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1958,43 +1958,6 @@ parse_parts(Eo_Lexer *ls)
    check_match(ls, '}', '{', line, col);
 }
 
-static void
-parse_composite(Eo_Lexer *ls)
-{
-   int line, col;
-   if (ls->klass->type == EOLIAN_CLASS_INTERFACE)
-     eo_lexer_syntax_error(ls, "composite section not allowed in interfaces");
-   eo_lexer_get(ls);
-   line = ls->line_number, col = ls->column;
-   check_next(ls, '{');
-   while (ls->t.token != '}')
-     {
-        Eina_Strbuf *buf = eina_strbuf_new();
-        eo_lexer_dtor_push(ls, EINA_FREE_CB(eina_strbuf_free), buf);
-        eo_lexer_context_push(ls);
-        parse_name(ls, buf);
-        const char *nm = eina_strbuf_string_get(buf);
-        char *fnm = database_class_to_filename(nm);
-        if (!eina_hash_find(ls->state->filenames_eo, fnm))
-          {
-             free(fnm);
-             char ebuf[PATH_MAX];
-             eo_lexer_context_restore(ls);
-             snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm);
-             eo_lexer_syntax_error(ls, ebuf);
-             return;
-          }
-        /* do not introduce a dependency */
-        database_defer(ls->state, fnm, EINA_FALSE);
-        free(fnm);
-        ls->klass->composite = eina_list_append(ls->klass->composite,
-          eina_stringshare_add(nm));
-        eo_lexer_dtor_pop(ls);
-        check_next(ls, ';');
-     }
-   check_match(ls, '}', '{', line, col);
-}
-
 static void
 parse_implements(Eo_Lexer *ls, Eina_Bool iface)
 {
@@ -2065,7 +2028,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
              has_data          = EINA_FALSE,
              has_methods       = EINA_FALSE,
              has_parts         = EINA_FALSE,
-             has_composite     = EINA_FALSE,
              has_implements    = EINA_FALSE,
              has_constructors  = EINA_FALSE,
              has_events        = EINA_FALSE;
@@ -2112,10 +2074,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
         CASE_LOCK(ls, parts, "parts definition")
         parse_parts(ls);
         break;
-      case KW_composite:
-        CASE_LOCK(ls, composite, "composite definition")
-        parse_composite(ls);
-        break;
       case KW_implements:
         CASE_LOCK(ls, implements, "implements definition")
         parse_implements(ls, type == EOLIAN_CLASS_INTERFACE);
@@ -2200,6 +2158,7 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf)
    const char *required;
    char *fnm;
 
+   eina_strbuf_reset(buf);
    eo_lexer_context_push(ls);
    parse_name(ls, buf);
    required = eina_strbuf_string_get(buf);
@@ -2212,6 +2171,31 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf)
    free(fnm);
 }
 
+static void
+_composite_add(Eo_Lexer *ls, Eina_Strbuf *buf)
+{
+   eina_strbuf_reset(buf);
+   eo_lexer_context_push(ls);
+   parse_name(ls, buf);
+   const char *nm = eina_strbuf_string_get(buf);
+   char *fnm = database_class_to_filename(nm);
+   if (!eina_hash_find(ls->state->filenames_eo, fnm))
+     {
+        free(fnm);
+        char ebuf[PATH_MAX];
+        eo_lexer_context_restore(ls);
+        snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm);
+        eo_lexer_syntax_error(ls, ebuf);
+        return;
+     }
+   /* do not introduce a dependency */
+   database_defer(ls->state, fnm, EINA_FALSE);
+   free(fnm);
+   ls->klass->composite = eina_list_append(ls->klass->composite,
+     eina_stringshare_add(nm));
+   eo_lexer_context_pop(ls);
+}
+
 static void
 parse_class(Eo_Lexer *ls, Eolian_Class_Type type)
 {
@@ -2312,6 +2296,17 @@ tags_done:
                _inherit_dep(ls, ibuf, EINA_FALSE);
              while (test_next(ls, ','));
           }
+
+        if (ls->t.kw == KW_composite)
+          {
+             if (type == EOLIAN_CLASS_INTERFACE)
+                eo_lexer_syntax_error(ls, "composite not allowed in 
interfaces");
+             eo_lexer_get(ls);
+             do
+               _composite_add(ls, ibuf);
+             while (test_next(ls, ','));
+          }
+
         eo_lexer_dtor_pop(ls);
      }
 inherit_done:
diff --git a/src/tests/eolian/data/unimpl.eo b/src/tests/eolian/data/unimpl.eo
index a1420e07c6..e08699a231 100644
--- a/src/tests/eolian/data/unimpl.eo
+++ b/src/tests/eolian/data/unimpl.eo
@@ -1,7 +1,4 @@
-class Unimpl implements Iface {
-    composite {
-        Iface;
-    }
+class Unimpl implements Iface composite Iface {
     implements {
         Iface.foo;
     }

-- 


Reply via email to