diff options
author | Daniel Kolesa <d.kolesa@samsung.com> | 2019-09-06 15:08:27 +0200 |
---|---|---|
committer | Daniel Kolesa <d.kolesa@samsung.com> | 2019-09-06 15:14:20 +0200 |
commit | eb25e92770f9524e2921a512a326aea202e4b032 (patch) | |
tree | 9ebce4a88bc51f271b35a33436fede609bf09cca | |
parent | 690dd5d33a39aec8537dbab3321a75e506b306de (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
-rw-r--r-- | src/lib/elementary/efl_ui_collection.eo | 9 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_image_zoomable.eo | 5 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_list_view.eo | 6 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_panel.eo | 4 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_radio_box.eo | 4 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_scroller.eo | 7 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_tab_bar.eo | 9 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_tags.eo | 7 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_text.eo | 6 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_video.eo | 7 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_widget_focus_manager.eo | 8 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_win.eo | 4 | ||||
-rw-r--r-- | src/lib/eolian/eo_parser.c | 79 | ||||
-rw-r--r-- | 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 | |||
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.]] | |||
5 | class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom, | 5 | class @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 | |||
10 | class @beta Efl.Ui.List_View extends Efl.Ui.Layout_Base implements Efl.Ui.Scrollable_Interactive, Efl.Ui.Scrollbar, | 10 | class @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 | |||
18 | class @beta Efl.Ui.Panel extends Efl.Ui.Layout_Base | 18 | class @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 @@ | |||
1 | class @beta Efl.Ui.Radio_Box extends Efl.Ui.Box implements Efl.Ui.Radio_Group | 1 | class @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 @@ | |||
1 | class @beta Efl.Ui.Tab_Bar extends Efl.Ui.Layout_Base implements Efl.Ui.Single_Selectable, Efl.Pack_Linear | 1 | class @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 @@ | |||
1 | class @beta Efl.Ui.Tags extends Efl.Ui.Layout_Base implements Efl.Text, Efl.Ui.Format | 1 | class @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; | |||
4 | class @beta Efl.Ui.Text extends Efl.Ui.Layout_Base implements Efl.Input.Clickable, | 4 | class @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 @@ | |||
1 | class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base implements Efl.File, Efl.Player, Efl.Access.Widget.Action | 1 | class @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 @@ | |||
1 | mixin Efl.Ui.Widget_Focus_Manager requires Efl.Ui.Widget extends Efl.Ui.Focus.Manager | 1 | mixin 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 | ||
1961 | static void | 1961 | static void |
1962 | parse_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 | |||
1998 | static void | ||
1999 | parse_implements(Eo_Lexer *ls, Eina_Bool iface) | 1962 | parse_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 | ||
2215 | static void | 2174 | static 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 | |||
2199 | static void | ||
2216 | parse_class(Eo_Lexer *ls, Eolian_Class_Type type) | 2200 | parse_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 | } |
2317 | inherit_done: | 2312 | 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 @@ | |||
1 | class Unimpl implements Iface { | 1 | class Unimpl implements Iface composite Iface { |
2 | composite { | ||
3 | Iface; | ||
4 | } | ||
5 | implements { | 2 | implements { |
6 | Iface.foo; | 3 | Iface.foo; |
7 | } | 4 | } |