summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@samsung.com>2019-09-06 15:08:27 +0200
committerDaniel Kolesa <d.kolesa@samsung.com>2019-09-06 15:14:20 +0200
commiteb25e92770f9524e2921a512a326aea202e4b032 (patch)
tree9ebce4a88bc51f271b35a33436fede609bf09cca /src
parent690dd5d33a39aec8537dbab3321a75e506b306de (diff)
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
Diffstat (limited to '')
-rw-r--r--src/lib/elementary/efl_ui_collection.eo9
-rw-r--r--src/lib/elementary/efl_ui_image_zoomable.eo5
-rw-r--r--src/lib/elementary/efl_ui_list_view.eo6
-rw-r--r--src/lib/elementary/efl_ui_panel.eo4
-rw-r--r--src/lib/elementary/efl_ui_radio_box.eo4
-rw-r--r--src/lib/elementary/efl_ui_scroller.eo7
-rw-r--r--src/lib/elementary/efl_ui_tab_bar.eo9
-rw-r--r--src/lib/elementary/efl_ui_tags.eo7
-rw-r--r--src/lib/elementary/efl_ui_text.eo6
-rw-r--r--src/lib/elementary/efl_ui_video.eo7
-rw-r--r--src/lib/elementary/efl_ui_widget_focus_manager.eo8
-rw-r--r--src/lib/elementary/efl_ui_win.eo4
-rw-r--r--src/lib/eolian/eo_parser.c79
-rw-r--r--src/tests/eolian/data/unimpl.eo5
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
6 Efl.Ui.Multi_Selectable, 6 Efl.Ui.Multi_Selectable,
7 Efl.Ui.Focus.Manager_Sub, 7 Efl.Ui.Focus.Manager_Sub,
8 Efl.Ui.Widget_Focus_Manager 8 Efl.Ui.Widget_Focus_Manager
9 composite
10 Efl.Ui.Scrollable_Interactive,
11 Efl.Ui.Scrollbar,
12 Efl.Ui.Focus.Manager
9{ 13{
10 [[This widget displays a list of items in an arrangement controlled by an external @.position_manager 14 [[This widget displays a list of items in an arrangement controlled by an external @.position_manager
11 object. By using different @.position_manager objects this widget can show unidimensional lists or 15 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
95 item,clicked : Efl.Ui.Item; [[A $clicked event occurred over an item.]] 99 item,clicked : Efl.Ui.Item; [[A $clicked event occurred over an item.]]
96 item,clicked,any : Efl.Ui.Item; [[A $clicked,any event occurred over an item.]] 100 item,clicked,any : Efl.Ui.Item; [[A $clicked,any event occurred over an item.]]
97 } 101 }
98 composite {
99 Efl.Ui.Scrollable_Interactive;
100 Efl.Ui.Scrollbar;
101 Efl.Ui.Focus.Manager;
102 }
103} 102}
104 103
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.]]
5class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom, 5class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom,
6 Efl.Ui.Scrollable_Interactive, 6 Efl.Ui.Scrollable_Interactive,
7 Efl.Ui.Scrollbar 7 Efl.Ui.Scrollbar
8 composite Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar
8{ 9{
9 [[Elementary Image Zoomable class]] 10 [[Elementary Image Zoomable class]]
10 methods { 11 methods {
@@ -84,8 +85,4 @@ class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom,
84 download,done: void; [[Called when photocam download finished]] 85 download,done: void; [[Called when photocam download finished]]
85 download,error: Elm.Photocam.Error; [[Called when photocam download failed]] 86 download,error: Elm.Photocam.Error; [[Called when photocam download failed]]
86 } 87 }
87 composite {
88 Efl.Ui.Scrollable_Interactive;
89 Efl.Ui.Scrollbar;
90 }
91} 88}
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
10class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar, 10class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar,
11 Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Ui.Focus.Composition, Efl.Ui.Focus.Manager_Sub, 11 Efl.Access.Widget.Action, Efl.Access.Selection, Efl.Ui.Focus.Composition, Efl.Ui.Focus.Manager_Sub,
12 Efl.Ui.Container_Selectable, Efl.Ui.List_View_Model, Efl.Ui.Widget_Focus_Manager 12 Efl.Ui.Container_Selectable, Efl.Ui.List_View_Model, Efl.Ui.Widget_Focus_Manager
13 composite
14 Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar
13{ 15{
14 methods { 16 methods {
15 @property homogeneous { 17 @property homogeneous {
@@ -90,8 +92,4 @@ class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scroll
90 Efl.Access.Selection.all_children_select; 92 Efl.Access.Selection.all_children_select;
91 Efl.Access.Selection.access_selection_clear; 93 Efl.Access.Selection.access_selection_clear;
92 } 94 }
93 composite {
94 Efl.Ui.Scrollable_Interactive;
95 Efl.Ui.Scrollbar;
96 }
97} 95}
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
18class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base 18class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
19 implements Efl.Ui.Focus.Layer, Efl.Ui.Scrollable_Interactive, Efl.Content, 19 implements Efl.Ui.Focus.Layer, Efl.Ui.Scrollable_Interactive, Efl.Content,
20 Efl.Access.Widget.Action 20 Efl.Access.Widget.Action
21 composite Efl.Ui.Scrollable_Interactive
21{ 22{
22 [[Elementary panel class]] 23 [[Elementary panel class]]
23 methods { 24 methods {
@@ -93,7 +94,4 @@ class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base
93 events { 94 events {
94 toggled: void; [[Called when the hidden state was toggled]] 95 toggled: void; [[Called when the hidden state was toggled]]
95 } 96 }
96 composite {
97 Efl.Ui.Scrollable_Interactive;
98 }
99} 97}
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 @@
1class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group 1class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group
2 composite Efl.Ui.Radio_Group
2{ 3{
3 [[A standard @Efl.Ui.Box container which automatically handles grouping of any @Efl.Ui.Radio 4 [[A standard @Efl.Ui.Box container which automatically handles grouping of any @Efl.Ui.Radio
4 widget added to it. 5 widget added to it.
@@ -19,7 +20,4 @@ class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group
19 Efl.Pack_Linear.pack_unpack_at; 20 Efl.Pack_Linear.pack_unpack_at;
20 Efl.Object.constructor; 21 Efl.Object.constructor;
21 } 22 }
22 composite {
23 Efl.Ui.Radio_Group;
24 }
25} 23}
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
4 Efl.Ui.Focus.Manager_Sub, 4 Efl.Ui.Focus.Manager_Sub,
5 Efl.Ui.Widget_Focus_Manager, 5 Efl.Ui.Widget_Focus_Manager,
6 Efl.Content 6 Efl.Content
7 composite
8 Efl.Ui.Scrollable_Interactive,
9 Efl.Ui.Scrollbar
7{ 10{
8 [[Efl ui scroller class]] 11 [[Efl ui scroller class]]
9 implements { 12 implements {
@@ -19,8 +22,4 @@ class @beta Efl.Ui.Scroller extends Efl.Ui.Layout_Base implements
19 Efl.Ui.Widget_Focus_Manager.focus_manager_create; 22 Efl.Ui.Widget_Focus_Manager.focus_manager_create;
20 Efl.Ui.Scrollable_Interactive.match_content { set; } 23 Efl.Ui.Scrollable_Interactive.match_content { set; }
21 } 24 }
22 composite {
23 Efl.Ui.Scrollable_Interactive;
24 Efl.Ui.Scrollbar;
25 }
26} 25}
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 @@
1class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_Selectable, Efl.Pack_Linear 1class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base
2 implements Efl.Ui.Single_Selectable, Efl.Pack_Linear
3 composite Efl.Pack_Linear, Efl.Pack
2{ 4{
3 [[Tab Bar class]] 5 [[Tab Bar class]]
4 methods { 6 methods {
@@ -23,9 +25,4 @@ class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_S
23 Efl.Container.content_count; 25 Efl.Container.content_count;
24 Efl.Container.content_iterate; 26 Efl.Container.content_iterate;
25 } 27 }
26 composite {
27 Efl.Pack_Linear;
28 Efl.Pack;
29 Efl.Pack_Linear;
30 }
31} 28}
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 @@
1class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, Efl.Ui.Format 1class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base
2 implements Efl.Text, Efl.Ui.Format
3 composite Efl.Text
2{ 4{
3 [[A widget displaying a list of tags. The user can remove tags by clicking 5 [[A widget displaying a list of tags. The user can remove tags by clicking
4 on each tag "close" button and add new tags by typing text in the text 6 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
61 /* FIXME: Not future-proof */ 63 /* FIXME: Not future-proof */
62 expand,state,changed: int; [[Called when expanded state changed]] 64 expand,state,changed: int; [[Called when expanded state changed]]
63 } 65 }
64 composite {
65 Efl.Text;
66 }
67} 66}
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;
4class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickable, 4class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickable,
5 Efl.Access.Text, Efl.Access.Editable.Text, Efl.File, 5 Efl.Access.Text, Efl.Access.Editable.Text, Efl.File,
6 Efl.Ui.Text_Selectable, Efl.Text_Interactive, Efl.Text_Markup 6 Efl.Ui.Text_Selectable, Efl.Text_Interactive, Efl.Text_Markup
7 composite
8 Efl.Text_Interactive, Efl.Text_Markup
7{ 9{
8 [[A flexible text widget which can be static (as a label) or editable by 10 [[A flexible text widget which can be static (as a label) or editable by
9 the user (as a text entry). It provides all sorts of editing facilities 11 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
374 anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]] 376 anchor,up: Elm.Entry_Anchor_Info; [[called on anchor up]]
375 cursor,changed,manual: void; [[Called on manual cursor change]] 377 cursor,changed,manual: void; [[Called on manual cursor change]]
376 } 378 }
377 composite {
378 Efl.Text_Interactive;
379 Efl.Text_Markup;
380 }
381} 379}
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 @@
1class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Player, Efl.Access.Widget.Action 1class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base
2 implements Efl.File, Efl.Player, Efl.Access.Widget.Action
3 composite Efl.Player
2{ 4{
3 [[Efl UI video class]] 5 [[Efl UI video class]]
4 methods { 6 methods {
@@ -50,7 +52,4 @@ class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Pla
50 Efl.Player.stop; 52 Efl.Player.stop;
51 Efl.Player.play { get; set; } 53 Efl.Player.play { get; set; }
52 } 54 }
53 composite {
54 Efl.Player;
55 }
56} 55}
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 @@
1mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Manager 1mixin Efl.Ui.Widget_Focus_Manager
2 requires Efl.Ui.Widget
3 extends Efl.Ui.Focus.Manager
4 composite Efl.Ui.Focus.Manager
2{ 5{
3 [[Helper mixin for widgets which also can act as focus managers. 6 [[Helper mixin for widgets which also can act as focus managers.
4 7
@@ -23,7 +26,4 @@ mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Ma
23 Efl.Object.destructor; 26 Efl.Object.destructor;
24 Efl.Ui.Widget.focus_state_apply; 27 Efl.Ui.Widget.focus_state_apply;
25 } 28 }
26 composite {
27 Efl.Ui.Focus.Manager;
28 }
29} 29}
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
139 Efl.Content, Efl.Input.State, Efl.Input.Interface, Efl.Screen, 139 Efl.Content, Efl.Input.State, Efl.Input.Interface, Efl.Screen,
140 Efl.Text, Efl.Config, 140 Efl.Text, Efl.Config,
141 Efl.Ui.Widget_Focus_Manager, Efl.Ui.Focus.Manager_Window_Root 141 Efl.Ui.Widget_Focus_Manager, Efl.Ui.Focus.Manager_Window_Root
142 composite Efl.Config
142{ 143{
143 [[Efl UI window class. 144 [[Efl UI window class.
144 145
@@ -895,7 +896,4 @@ class Efl.Ui.Win extends Efl.Ui.Widget implements Efl.Canvas.Scene, Efl.Access.W
895 pause: void; [[Called when the window is not going be displayed for some time]] 896 pause: void; [[Called when the window is not going be displayed for some time]]
896 resume: void; [[Called before a window is rendered after a pause event]] 897 resume: void; [[Called before a window is rendered after a pause event]]
897 } 898 }
898 composite {
899 Efl.Config;
900 }
901} 899}
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
@@ -1959,43 +1959,6 @@ parse_parts(Eo_Lexer *ls)
1959} 1959}
1960 1960
1961static void 1961static void
1962parse_composite(Eo_Lexer *ls)
1963{
1964 int line, col;
1965 if (ls->klass->type == EOLIAN_CLASS_INTERFACE)
1966 eo_lexer_syntax_error(ls, "composite section not allowed in interfaces");
1967 eo_lexer_get(ls);
1968 line = ls->line_number, col = ls->column;
1969 check_next(ls, '{');
1970 while (ls->t.token != '}')
1971 {
1972 Eina_Strbuf *buf = eina_strbuf_new();
1973 eo_lexer_dtor_push(ls, EINA_FREE_CB(eina_strbuf_free), buf);
1974 eo_lexer_context_push(ls);
1975 parse_name(ls, buf);
1976 const char *nm = eina_strbuf_string_get(buf);
1977 char *fnm = database_class_to_filename(nm);
1978 if (!eina_hash_find(ls->state->filenames_eo, fnm))
1979 {
1980 free(fnm);
1981 char ebuf[PATH_MAX];
1982 eo_lexer_context_restore(ls);
1983 snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm);
1984 eo_lexer_syntax_error(ls, ebuf);
1985 return;
1986 }
1987 /* do not introduce a dependency */
1988 database_defer(ls->state, fnm, EINA_FALSE);
1989 free(fnm);
1990 ls->klass->composite = eina_list_append(ls->klass->composite,
1991 eina_stringshare_add(nm));
1992 eo_lexer_dtor_pop(ls);
1993 check_next(ls, ';');
1994 }
1995 check_match(ls, '}', '{', line, col);
1996}
1997
1998static void
1999parse_implements(Eo_Lexer *ls, Eina_Bool iface) 1962parse_implements(Eo_Lexer *ls, Eina_Bool iface)
2000{ 1963{
2001 int line, col; 1964 int line, col;
@@ -2065,7 +2028,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
2065 has_data = EINA_FALSE, 2028 has_data = EINA_FALSE,
2066 has_methods = EINA_FALSE, 2029 has_methods = EINA_FALSE,
2067 has_parts = EINA_FALSE, 2030 has_parts = EINA_FALSE,
2068 has_composite = EINA_FALSE,
2069 has_implements = EINA_FALSE, 2031 has_implements = EINA_FALSE,
2070 has_constructors = EINA_FALSE, 2032 has_constructors = EINA_FALSE,
2071 has_events = EINA_FALSE; 2033 has_events = EINA_FALSE;
@@ -2112,10 +2074,6 @@ parse_class_body(Eo_Lexer *ls, Eolian_Class_Type type)
2112 CASE_LOCK(ls, parts, "parts definition") 2074 CASE_LOCK(ls, parts, "parts definition")
2113 parse_parts(ls); 2075 parse_parts(ls);
2114 break; 2076 break;
2115 case KW_composite:
2116 CASE_LOCK(ls, composite, "composite definition")
2117 parse_composite(ls);
2118 break;
2119 case KW_implements: 2077 case KW_implements:
2120 CASE_LOCK(ls, implements, "implements definition") 2078 CASE_LOCK(ls, implements, "implements definition")
2121 parse_implements(ls, type == EOLIAN_CLASS_INTERFACE); 2079 parse_implements(ls, type == EOLIAN_CLASS_INTERFACE);
@@ -2200,6 +2158,7 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf)
2200 const char *required; 2158 const char *required;
2201 char *fnm; 2159 char *fnm;
2202 2160
2161 eina_strbuf_reset(buf);
2203 eo_lexer_context_push(ls); 2162 eo_lexer_context_push(ls);
2204 parse_name(ls, buf); 2163 parse_name(ls, buf);
2205 required = eina_strbuf_string_get(buf); 2164 required = eina_strbuf_string_get(buf);
@@ -2213,6 +2172,31 @@ _requires_add(Eo_Lexer *ls, Eina_Strbuf *buf)
2213} 2172}
2214 2173
2215static void 2174static void
2175_composite_add(Eo_Lexer *ls, Eina_Strbuf *buf)
2176{
2177 eina_strbuf_reset(buf);
2178 eo_lexer_context_push(ls);
2179 parse_name(ls, buf);
2180 const char *nm = eina_strbuf_string_get(buf);
2181 char *fnm = database_class_to_filename(nm);
2182 if (!eina_hash_find(ls->state->filenames_eo, fnm))
2183 {
2184 free(fnm);
2185 char ebuf[PATH_MAX];
2186 eo_lexer_context_restore(ls);
2187 snprintf(ebuf, sizeof(ebuf), "unknown interface '%s'", nm);
2188 eo_lexer_syntax_error(ls, ebuf);
2189 return;
2190 }
2191 /* do not introduce a dependency */
2192 database_defer(ls->state, fnm, EINA_FALSE);
2193 free(fnm);
2194 ls->klass->composite = eina_list_append(ls->klass->composite,
2195 eina_stringshare_add(nm));
2196 eo_lexer_context_pop(ls);
2197}
2198
2199static void
2216parse_class(Eo_Lexer *ls, Eolian_Class_Type type) 2200parse_class(Eo_Lexer *ls, Eolian_Class_Type type)
2217{ 2201{
2218 const char *bnm; 2202 const char *bnm;
@@ -2312,6 +2296,17 @@ tags_done:
2312 _inherit_dep(ls, ibuf, EINA_FALSE); 2296 _inherit_dep(ls, ibuf, EINA_FALSE);
2313 while (test_next(ls, ',')); 2297 while (test_next(ls, ','));
2314 } 2298 }
2299
2300 if (ls->t.kw == KW_composite)
2301 {
2302 if (type == EOLIAN_CLASS_INTERFACE)
2303 eo_lexer_syntax_error(ls, "composite not allowed in interfaces");
2304 eo_lexer_get(ls);
2305 do
2306 _composite_add(ls, ibuf);
2307 while (test_next(ls, ','));
2308 }
2309
2315 eo_lexer_dtor_pop(ls); 2310 eo_lexer_dtor_pop(ls);
2316 } 2311 }
2317inherit_done: 2312inherit_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 @@
1class Unimpl implements Iface { 1class Unimpl implements Iface composite Iface {
2 composite {
3 Iface;
4 }
5 implements { 2 implements {
6 Iface.foo; 3 Iface.foo;
7 } 4 }