summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Kolesa <d.kolesa@osg.samsung.com>2016-05-12 15:41:56 +0100
committerDaniel Kolesa <d.kolesa@osg.samsung.com>2016-05-12 16:15:24 +0100
commit7e94eb22b43c5b61fbdb40f109e8177cdc4eb1fc (patch)
tree56616a664b07620699e129d76ab3e175365c990b
parent6cacef250391aea0a62cb888df90679ebb64cd53 (diff)
eolian: mark pure virtual funcs outside of implements
This is a better syntax and should've been like this in the first place.
-rw-r--r--src/lib/ecore_audio/ecore_audio.eo11
-rw-r--r--src/lib/ecore_audio/ecore_audio_in.eo10
-rw-r--r--src/lib/ecore_con/efl_network.eo28
-rw-r--r--src/lib/ector/cairo/ector_renderer_cairo.eo3
-rw-r--r--src/lib/ector/ector_buffer.eo17
-rw-r--r--src/lib/ector/ector_renderer.eo9
-rw-r--r--src/lib/ector/ector_surface.eo8
-rw-r--r--src/lib/ector/gl/ector_renderer_gl.eo3
-rw-r--r--src/lib/ector/software/ector_renderer_software.eo5
-rw-r--r--src/lib/elementary/elm_interface_atspi_action.eo19
-rw-r--r--src/lib/elementary/elm_interface_atspi_image.eo5
-rw-r--r--src/lib/elementary/elm_interface_atspi_widget_action.eo3
-rw-r--r--src/lib/elementary/elm_web.eo117
-rw-r--r--src/lib/elementary/elm_widget.eo9
-rw-r--r--src/lib/eolian/database_fill.c57
-rw-r--r--src/lib/eolian/eo_lexer.h2
-rw-r--r--src/lib/eolian/eo_parser.c38
-rw-r--r--src/lib/evas/canvas/efl_canvas_surface.eo3
-rw-r--r--src/lib/evas/canvas/efl_vg.eo3
-rw-r--r--src/lib/evas/canvas/evas_canvas3d_object.eo12
-rw-r--r--src/lib/evas/canvas/evas_filter.eo9
-rw-r--r--src/tests/eolian/data/base.eo5
-rw-r--r--src/tests/eolian/data/nmsp1_nmsp11_class2.eo5
-rw-r--r--src/tests/eolian/data/object_impl.eo6
-rw-r--r--src/tests/eolian/data/override.eo6
-rw-r--r--src/tests/eolian/data/override_ref.c10
-rw-r--r--src/tests/eolian/eolian_parsing.c27
27 files changed, 154 insertions, 276 deletions
diff --git a/src/lib/ecore_audio/ecore_audio.eo b/src/lib/ecore_audio/ecore_audio.eo
index 0c8fdfa7f3..bafea5c4ca 100644
--- a/src/lib/ecore_audio/ecore_audio.eo
+++ b/src/lib/ecore_audio/ecore_audio.eo
@@ -58,7 +58,7 @@ class Ecore.Audio (Eo.Base)
58 volume: double; [[The volume]] 58 volume: double; [[The volume]]
59 } 59 }
60 } 60 }
61 @property source { 61 @property source @virtual_pure {
62 [[Source of the object 62 [[Source of the object
63 63
64 What sources are supported depends on the actual object. 64 What sources are supported depends on the actual object.
@@ -78,7 +78,7 @@ class Ecore.Audio (Eo.Base)
78 source: const(char)*; [[the source to set to (i.e. file, URL, device)]] 78 source: const(char)*; [[the source to set to (i.e. file, URL, device)]]
79 } 79 }
80 } 80 }
81 @property format { 81 @property format @virtual_pure {
82 [[Format of the object.]] 82 [[Format of the object.]]
83 set { 83 set {
84 [[Set the format of the object 84 [[Set the format of the object
@@ -103,7 +103,7 @@ class Ecore.Audio (Eo.Base)
103 format: Ecore.Audio.Format; [[the format of the object]] 103 format: Ecore.Audio.Format; [[the format of the object]]
104 } 104 }
105 } 105 }
106 vio_set { 106 vio_set @virtual_pure {
107 [[Set the virtual IO functions 107 [[Set the virtual IO functions
108 108
109 @since 1.8 109 @since 1.8
@@ -123,10 +123,5 @@ class Ecore.Audio (Eo.Base)
123 } 123 }
124 implements { 124 implements {
125 Eo.Base.constructor; 125 Eo.Base.constructor;
126 @virtual .source.get;
127 @virtual .source.set;
128 @virtual .format.get;
129 @virtual .format.set;
130 @virtual .vio_set;
131 } 126 }
132} 127}
diff --git a/src/lib/ecore_audio/ecore_audio_in.eo b/src/lib/ecore_audio/ecore_audio_in.eo
index fd4da49041..6ab3c8fec7 100644
--- a/src/lib/ecore_audio/ecore_audio_in.eo
+++ b/src/lib/ecore_audio/ecore_audio_in.eo
@@ -44,7 +44,7 @@ class Ecore.Audio.In (Ecore.Audio)
44 channels: int; [[The number of channels]] 44 channels: int; [[The number of channels]]
45 } 45 }
46 } 46 }
47 @property preloaded { 47 @property preloaded @virtual_pure {
48 [[Preloaded state of the input 48 [[Preloaded state of the input
49 49
50 @since 1.8 50 @since 1.8
@@ -82,7 +82,7 @@ class Ecore.Audio.In (Ecore.Audio)
82 82
83 @since 1.8 83 @since 1.8
84 ]] 84 ]]
85 set { 85 set @virtual_pure {
86 } 86 }
87 get { 87 get {
88 } 88 }
@@ -134,7 +134,7 @@ class Ecore.Audio.In (Ecore.Audio)
134 @in len: size; [[The amount of samples to read]] 134 @in len: size; [[The amount of samples to read]]
135 } 135 }
136 } 136 }
137 seek { 137 seek @virtual_pure {
138 [[Seek within the input 138 [[Seek within the input
139 139
140 @since 1.8 140 @since 1.8
@@ -153,10 +153,6 @@ class Ecore.Audio.In (Ecore.Audio)
153 Eo.Base.constructor; 153 Eo.Base.constructor;
154 Eo.Base.destructor; 154 Eo.Base.destructor;
155 Ecore.Audio.vio_set; 155 Ecore.Audio.vio_set;
156 @virtual .preloaded.get;
157 @virtual .preloaded.set;
158 @virtual .seek;
159 @virtual .length.set;
160 } 156 }
161 events { 157 events {
162 in,looped; [[Called when an input has looped.]] 158 in,looped; [[Called when an input has looped.]]
diff --git a/src/lib/ecore_con/efl_network.eo b/src/lib/ecore_con/efl_network.eo
index f99bc3c137..de62158c08 100644
--- a/src/lib/ecore_con/efl_network.eo
+++ b/src/lib/ecore_con/efl_network.eo
@@ -45,7 +45,7 @@ abstract Efl.Network (Eo.Base) {
45 valid after deletion for the svr object. If no IP is known 45 valid after deletion for the svr object. If no IP is known
46 null is returned. 46 null is returned.
47 ]] 47 ]]
48 get { 48 get @virtual_pure {
49 legacy: null; 49 legacy: null;
50 } 50 }
51 values { 51 values {
@@ -58,14 +58,14 @@ abstract Efl.Network (Eo.Base) {
58 This function is used to find out how long a client has been 58 This function is used to find out how long a client has been
59 connected. 59 connected.
60 ]] 60 ]]
61 get { 61 get @virtual_pure {
62 legacy: null; 62 legacy: null;
63 } 63 }
64 values { 64 values {
65 uptime: double; [[The total time, in seconds, that the object has been connected.]] 65 uptime: double; [[The total time, in seconds, that the object has been connected.]]
66 } 66 }
67 } 67 }
68 @property port { 68 @property port @virtual_pure {
69 [[The port that the obj is connected to]] 69 [[The port that the obj is connected to]]
70 set { 70 set {
71 legacy: null; 71 legacy: null;
@@ -91,7 +91,7 @@ abstract Efl.Network (Eo.Base) {
91 91
92 @since 1.1 92 @since 1.1
93 ]] 93 ]]
94 get { 94 get @virtual_pure {
95 legacy: null; 95 legacy: null;
96 } 96 }
97 values { 97 values {
@@ -100,14 +100,14 @@ abstract Efl.Network (Eo.Base) {
100 } 100 }
101 @property connected { 101 @property connected {
102 [[Returns whether the client is still connected]] 102 [[Returns whether the client is still connected]]
103 get { 103 get @virtual_pure {
104 legacy: null; 104 legacy: null;
105 } 105 }
106 values { 106 values {
107 connected: bool; [[Returns true if connected, false otherwise.]] 107 connected: bool; [[Returns true if connected, false otherwise.]]
108 } 108 }
109 } 109 }
110 @property timeout { 110 @property timeout @virtual_pure {
111 [[Control the default time after which an inactive client will be 111 [[Control the default time after which an inactive client will be
112 disconnected. 112 disconnected.
113 113
@@ -131,14 +131,14 @@ abstract Efl.Network (Eo.Base) {
131 timeout: double; [[The timeout, in seconds, to disconnect after.]] 131 timeout: double; [[The timeout, in seconds, to disconnect after.]]
132 } 132 }
133 } 133 }
134 flush { 134 flush @virtual_pure {
135 [[Flushes all pending data to the given server. 135 [[Flushes all pending data to the given server.
136 136
137 This function will block until all data is sent to the server. 137 This function will block until all data is sent to the server.
138 ]] 138 ]]
139 legacy: null; 139 legacy: null;
140 } 140 }
141 send { 141 send @virtual_pure {
142 [[Sends the given data to the given server. 142 [[Sends the given data to the given server.
143 143
144 This function will send the given data to the server as soon as the 144 This function will send the given data to the server as soon as the
@@ -175,18 +175,6 @@ abstract Efl.Network (Eo.Base) {
175 return: bool; [[true if the request did not fail to be set up, false otherwise.]] 175 return: bool; [[true if the request did not fail to be set up, false otherwise.]]
176 } 176 }
177 } 177 }
178 implements {
179 @virtual .ip.get;
180 @virtual .uptime.get;
181 @virtual .port.set;
182 @virtual .port.get;
183 @virtual .fd.get;
184 @virtual .connected.get;
185 @virtual .timeout.set;
186 @virtual .timeout.get;
187 @virtual .flush;
188 @virtual .send;
189 }
190 events { 178 events {
191 data,received: Ecore.Con.Event_Data.Received; [[Data received on connection]] 179 data,received: Ecore.Con.Event_Data.Received; [[Data received on connection]]
192 connection,upgraded; 180 connection,upgraded;
diff --git a/src/lib/ector/cairo/ector_renderer_cairo.eo b/src/lib/ector/cairo/ector_renderer_cairo.eo
index 56e3632c8e..fe90d47056 100644
--- a/src/lib/ector/cairo/ector_renderer_cairo.eo
+++ b/src/lib/ector/cairo/ector_renderer_cairo.eo
@@ -2,7 +2,7 @@ abstract Ector.Renderer.Cairo (Ector.Renderer)
2{ 2{
3 legacy_prefix: null; 3 legacy_prefix: null;
4 methods { 4 methods {
5 fill { 5 fill @virtual_pure {
6 return: bool; 6 return: bool;
7 params { 7 params {
8 @in mul_col: uint; 8 @in mul_col: uint;
@@ -10,7 +10,6 @@ abstract Ector.Renderer.Cairo (Ector.Renderer)
10 } 10 }
11 } 11 }
12 implements { 12 implements {
13 @virtual .fill;
14 Ector.Renderer.prepare; 13 Ector.Renderer.prepare;
15 Ector.Renderer.draw; 14 Ector.Renderer.draw;
16 Ector.Renderer.color.set; 15 Ector.Renderer.color.set;
diff --git a/src/lib/ector/ector_buffer.eo b/src/lib/ector/ector_buffer.eo
index 13b14bde3a..1537bd2697 100644
--- a/src/lib/ector/ector_buffer.eo
+++ b/src/lib/ector/ector_buffer.eo
@@ -44,7 +44,7 @@ mixin Ector.Buffer
44 cspace: Efl.Gfx.Colorspace; [[Colorspace]] 44 cspace: Efl.Gfx.Colorspace; [[Colorspace]]
45 } 45 }
46 } 46 }
47 map { 47 map @virtual_pure {
48 [[Map a region of this buffer for read or write access by the CPU, 48 [[Map a region of this buffer for read or write access by the CPU,
49 fetch data from the GPU if needed. This operation may be slow if 49 fetch data from the GPU if needed. This operation may be slow if
50 cpu_readable_fast or cpu_writeable_fast are not true, or if the 50 cpu_readable_fast or cpu_writeable_fast are not true, or if the
@@ -64,14 +64,14 @@ mixin Ector.Buffer
64 } 64 }
65 return: void* @warn_unused; [[Pointer to the top-left pixel data. Returns $null in case of failure]] 65 return: void* @warn_unused; [[Pointer to the top-left pixel data. Returns $null in case of failure]]
66 } 66 }
67 unmap { 67 unmap @virtual_pure {
68 [[Unmap a region of this buffer, and upload data to the GPU (if needed).]] 68 [[Unmap a region of this buffer, and upload data to the GPU (if needed).]]
69 params { 69 params {
70 @in data: void*; [[Data pointer returned by a previous call to map]] 70 @in data: void*; [[Data pointer returned by a previous call to map]]
71 @in length: uint; [[Must be the same as returned by map.]] 71 @in length: uint; [[Must be the same as returned by map.]]
72 } 72 }
73 } 73 }
74 pixels_set { 74 pixels_set @virtual_pure {
75 [[Set the source pixels for this buffer, or allocate a new memory region]] 75 [[Set the source pixels for this buffer, or allocate a new memory region]]
76 params { 76 params {
77 @in pixels: void*; [[If $null, allocates an empty buffer]] 77 @in pixels: void*; [[If $null, allocates an empty buffer]]
@@ -87,7 +87,7 @@ mixin Ector.Buffer
87 } 87 }
88 return: bool; [[True if pixels_set was successful]] 88 return: bool; [[True if pixels_set was successful]]
89 } 89 }
90 span_get { 90 span_get @virtual_pure {
91 [[Get a single horizontal span of length w starting from (x,y) 91 [[Get a single horizontal span of length w starting from (x,y)
92 92
93 Call span_free() to release it. This function will try not to 93 Call span_free() to release it. This function will try not to
@@ -103,7 +103,7 @@ mixin Ector.Buffer
103 } 103 }
104 return: uint8*; [[A temporary memory buffer containing the pixels requested.]] 104 return: uint8*; [[A temporary memory buffer containing the pixels requested.]]
105 } 105 }
106 span_free { 106 span_free @virtual_pure {
107 [[Must be called as soon as possible after span_get]] 107 [[Must be called as soon as possible after span_get]]
108 params { 108 params {
109 data: uint8*; [[Data to be freed]] 109 data: uint8*; [[Data to be freed]]
@@ -130,11 +130,4 @@ mixin Ector.Buffer
130 events { 130 events {
131 detached; [[Emitted whenever the previously attached pixels are detached during pixels_set]] 131 detached; [[Emitted whenever the previously attached pixels are detached during pixels_set]]
132 } 132 }
133 implements {
134 @virtual .pixels_set;
135 @virtual .span_get;
136 @virtual .span_free;
137 @virtual .map;
138 @virtual .unmap;
139 }
140} 133}
diff --git a/src/lib/ector/ector_renderer.eo b/src/lib/ector/ector_renderer.eo
index 9287e43e78..ff0c84c10b 100644
--- a/src/lib/ector/ector_renderer.eo
+++ b/src/lib/ector/ector_renderer.eo
@@ -105,13 +105,13 @@ abstract Ector.Renderer (Eo.Base)
105 return: uint; [[CRC value]] 105 return: uint; [[CRC value]]
106 } 106 }
107 } 107 }
108 bounds_get { 108 bounds_get @virtual_pure {
109 [[Retrieve the bounds of the renderer]] 109 [[Retrieve the bounds of the renderer]]
110 params { 110 params {
111 @out r: Eina.Rectangle; [[Bounds as @Eina.Rectangle]] 111 @out r: Eina.Rectangle; [[Bounds as @Eina.Rectangle]]
112 } 112 }
113 } 113 }
114 draw { 114 draw @virtual_pure {
115 return: bool @warn_unused; 115 return: bool @warn_unused;
116 params { 116 params {
117 @in op: Efl.Gfx.Render_Op; 117 @in op: Efl.Gfx.Render_Op;
@@ -124,15 +124,12 @@ abstract Ector.Renderer (Eo.Base)
124 params { 124 params {
125 } 125 }
126 } 126 }
127 done { 127 done @virtual_pure {
128 return: bool @warn_unused; 128 return: bool @warn_unused;
129 } 129 }
130 } 130 }
131 implements { 131 implements {
132 Eo.Base.destructor; 132 Eo.Base.destructor;
133 Eo.Base.finalize; 133 Eo.Base.finalize;
134 @virtual .draw;
135 @virtual .bounds_get;
136 @virtual .done;
137 } 134 }
138} 135}
diff --git a/src/lib/ector/ector_surface.eo b/src/lib/ector/ector_surface.eo
index aea73575a3..9243b170c7 100644
--- a/src/lib/ector/ector_surface.eo
+++ b/src/lib/ector/ector_surface.eo
@@ -8,14 +8,14 @@ mixin Ector.Surface (Ector.Buffer)
8 methods { 8 methods {
9 @property reference_point { 9 @property reference_point {
10 [[This define where is (0,0) in pixels coordinate inside the surface]] 10 [[This define where is (0,0) in pixels coordinate inside the surface]]
11 set { 11 set @virtual_pure {
12 } 12 }
13 values { 13 values {
14 x: int; [[X coordinate for reference point]] 14 x: int; [[X coordinate for reference point]]
15 y: int; [[Y coordinate for reference point]] 15 y: int; [[Y coordinate for reference point]]
16 } 16 }
17 } 17 }
18 renderer_factory_new { 18 renderer_factory_new @virtual_pure {
19 [[Create a new renderer factory for the given type]] 19 [[Create a new renderer factory for the given type]]
20 return: Eo.Base *; /* FIXME: Should be a more restricted type, only here for cyclic. */ 20 return: Eo.Base *; /* FIXME: Should be a more restricted type, only here for cyclic. */
21 params { 21 params {
@@ -23,8 +23,4 @@ mixin Ector.Surface (Ector.Buffer)
23 } 23 }
24 } 24 }
25 } 25 }
26 implements {
27 @virtual .renderer_factory_new;
28 @virtual .reference_point.set;
29 }
30} 26}
diff --git a/src/lib/ector/gl/ector_renderer_gl.eo b/src/lib/ector/gl/ector_renderer_gl.eo
index f3ba2329b2..5ee47d8997 100644
--- a/src/lib/ector/gl/ector_renderer_gl.eo
+++ b/src/lib/ector/gl/ector_renderer_gl.eo
@@ -4,7 +4,7 @@ abstract Ector.Renderer.GL (Ector.Renderer)
4{ 4{
5 legacy_prefix: null; 5 legacy_prefix: null;
6 methods { 6 methods {
7 fill { 7 fill @virtual_pure {
8 return: bool; 8 return: bool;
9 params { 9 params {
10 @in flags: uint64; 10 @in flags: uint64;
@@ -15,7 +15,6 @@ abstract Ector.Renderer.GL (Ector.Renderer)
15 } 15 }
16 } 16 }
17 implements { 17 implements {
18 @virtual .fill;
19 Ector.Renderer.prepare; 18 Ector.Renderer.prepare;
20 Ector.Renderer.draw; 19 Ector.Renderer.draw;
21 Eo.Base.constructor; 20 Eo.Base.constructor;
diff --git a/src/lib/ector/software/ector_renderer_software.eo b/src/lib/ector/software/ector_renderer_software.eo
index aa9e46e993..a875e3df21 100644
--- a/src/lib/ector/software/ector_renderer_software.eo
+++ b/src/lib/ector/software/ector_renderer_software.eo
@@ -3,11 +3,8 @@ class Ector.Renderer.Software (Ector.Renderer)
3 legacy_prefix: null; 3 legacy_prefix: null;
4 data: null; 4 data: null;
5 methods { 5 methods {
6 fill { 6 fill @virtual_pure {
7 return: bool; 7 return: bool;
8 } 8 }
9 } 9 }
10 implements {
11 @virtual .fill;
12 }
13} 10}
diff --git a/src/lib/elementary/elm_interface_atspi_action.eo b/src/lib/elementary/elm_interface_atspi_action.eo
index 558b4a131a..1fea7bff69 100644
--- a/src/lib/elementary/elm_interface_atspi_action.eo
+++ b/src/lib/elementary/elm_interface_atspi_action.eo
@@ -4,7 +4,7 @@ mixin Elm.Interface.Atspi_Action ()
4 eo_prefix: elm_interface_atspi_action; 4 eo_prefix: elm_interface_atspi_action;
5 data: null; 5 data: null;
6 methods { 6 methods {
7 @property name @protected { 7 @property name @protected @virtual_pure {
8 get { 8 get {
9 [[Gets action name for given id]] 9 [[Gets action name for given id]]
10 } 10 }
@@ -26,7 +26,7 @@ mixin Elm.Interface.Atspi_Action ()
26 id: int; 26 id: int;
27 } 27 }
28 } 28 }
29 @property description @protected { 29 @property description @protected @virtual_pure {
30 get { 30 get {
31 [[Gets action description for given id]] 31 [[Gets action description for given id]]
32 } 32 }
@@ -42,21 +42,21 @@ mixin Elm.Interface.Atspi_Action ()
42 } 42 }
43 } 43 }
44 @property actions @protected { 44 @property actions @protected {
45 get { 45 get @virtual_pure {
46 [[Get list of available widget actions]] 46 [[Get list of available widget actions]]
47 } 47 }
48 values { 48 values {
49 actions: list<Elm_Atspi_Action> *; [[contains statically allocated strings]] 49 actions: list<Elm_Atspi_Action> *; [[contains statically allocated strings]]
50 } 50 }
51 } 51 }
52 action_do @protected { 52 action_do @protected @virtual_pure {
53 [[Performs action on given widget.]] 53 [[Performs action on given widget.]]
54 params { 54 params {
55 @in id: int; 55 @in id: int;
56 } 56 }
57 return: bool; 57 return: bool;
58 } 58 }
59 keybinding_get @protected { 59 keybinding_get @protected @virtual_pure {
60 [[Gets configured keybinding for specific action and widget.]] 60 [[Gets configured keybinding for specific action and widget.]]
61 params { 61 params {
62 @in id: int; 62 @in id: int;
@@ -64,13 +64,4 @@ mixin Elm.Interface.Atspi_Action ()
64 return: own(char *) @warn_unused; [[Should be freed by the user.]] 64 return: own(char *) @warn_unused; [[Should be freed by the user.]]
65 } 65 }
66 } 66 }
67 implements {
68 @virtual .action_do;
69 @virtual .keybinding_get;
70 @virtual .name.get;
71 @virtual .name.set;
72 @virtual .description.get;
73 @virtual .description.set;
74 @virtual .actions.get;
75 }
76} 67}
diff --git a/src/lib/elementary/elm_interface_atspi_image.eo b/src/lib/elementary/elm_interface_atspi_image.eo
index ed7ce9b612..0ab631dc07 100644
--- a/src/lib/elementary/elm_interface_atspi_image.eo
+++ b/src/lib/elementary/elm_interface_atspi_image.eo
@@ -5,7 +5,7 @@ mixin Elm.Interface.Atspi_Image ()
5 data: null; 5 data: null;
6 methods { 6 methods {
7 @property extents @protected { 7 @property extents @protected {
8 get { 8 get @virtual_pure {
9 [[Gets an image extents.]] 9 [[Gets an image extents.]]
10 } 10 }
11 keys { 11 keys {
@@ -37,7 +37,4 @@ mixin Elm.Interface.Atspi_Image ()
37 } 37 }
38 } 38 }
39 } 39 }
40 implements {
41 @virtual .extents.get;
42 }
43} 40}
diff --git a/src/lib/elementary/elm_interface_atspi_widget_action.eo b/src/lib/elementary/elm_interface_atspi_widget_action.eo
index e93a422aa9..e374b06b4a 100644
--- a/src/lib/elementary/elm_interface_atspi_widget_action.eo
+++ b/src/lib/elementary/elm_interface_atspi_widget_action.eo
@@ -7,7 +7,7 @@ mixin Elm.Interface.Atspi_Widget_Action (Elm.Interface.Atspi_Action)
7 data: null; 7 data: null;
8 methods { 8 methods {
9 @property elm_actions @protected { 9 @property elm_actions @protected {
10 get { 10 get @virtual_pure {
11 } 11 }
12 values { 12 values {
13 actions: const(Elm_Atspi_Action)*; [[NULL-terminated array of Elm_Atspi_Action]] 13 actions: const(Elm_Atspi_Action)*; [[NULL-terminated array of Elm_Atspi_Action]]
@@ -21,6 +21,5 @@ mixin Elm.Interface.Atspi_Widget_Action (Elm.Interface.Atspi_Action)
21 Elm.Interface.Atspi_Action.description.set; 21 Elm.Interface.Atspi_Action.description.set;
22 Elm.Interface.Atspi_Action.description.get; 22 Elm.Interface.Atspi_Action.description.get;
23 Elm.Interface.Atspi_Action.actions.get; 23 Elm.Interface.Atspi_Action.actions.get;
24 @virtual .elm_actions.get;
25 } 24 }
26} 25}
diff --git a/src/lib/elementary/elm_web.eo b/src/lib/elementary/elm_web.eo
index 5c7205e059..b52ed0644f 100644
--- a/src/lib/elementary/elm_web.eo
+++ b/src/lib/elementary/elm_web.eo
@@ -18,7 +18,7 @@ class Elm.Web (Elm.Widget)
18{ 18{
19 eo_prefix: elm_obj_web; 19 eo_prefix: elm_obj_web;
20 methods { 20 methods {
21 @property text_matches_highlight { 21 @property text_matches_highlight @virtual_pure {
22 set { 22 set {
23 [[Sets whether to highlight the matched marks. 23 [[Sets whether to highlight the matched marks.
24 24
@@ -34,7 +34,7 @@ class Elm.Web (Elm.Widget)
34 highlight: bool; [[Whether to highlight the marks or not.]] 34 highlight: bool; [[Whether to highlight the marks or not.]]
35 } 35 }
36 } 36 }
37 @property useragent { 37 @property useragent @virtual_pure {
38 set { 38 set {
39 [[Change useragent of a elm_web object.]] 39 [[Change useragent of a elm_web object.]]
40 } 40 }
@@ -45,7 +45,7 @@ class Elm.Web (Elm.Widget)
45 user_agent: const(char)*; [[String for useragent.]] 45 user_agent: const(char)*; [[String for useragent.]]
46 } 46 }
47 } 47 }
48 @property url { 48 @property url @virtual_pure {
49 set { 49 set {
50 [[Sets the URL for the web object. 50 [[Sets the URL for the web object.
51 51
@@ -65,7 +65,7 @@ class Elm.Web (Elm.Widget)
65 url: const(char)*; [[The URL to set.]] 65 url: const(char)*; [[The URL to set.]]
66 } 66 }
67 } 67 }
68 @property bg_color { 68 @property bg_color @virtual_pure {
69 set { 69 set {
70 [[Sets the background color to be used by the web object. 70 [[Sets the background color to be used by the web object.
71 71
@@ -89,7 +89,7 @@ class Elm.Web (Elm.Widget)
89 a: int; [[Alpha component.]] 89 a: int; [[Alpha component.]]
90 } 90 }
91 } 91 }
92 @property inwin_mode { 92 @property inwin_mode @virtual_pure {
93 set { 93 set {
94 [[Sets the default dialogs to use an Inwin instead of a 94 [[Sets the default dialogs to use an Inwin instead of a
95 normal window. 95 normal window.
@@ -106,7 +106,7 @@ class Elm.Web (Elm.Widget)
106 value: bool; 106 value: bool;
107 } 107 }
108 } 108 }
109 @property tab_propagate { 109 @property tab_propagate @virtual_pure {
110 set { 110 set {
111 [[Sets whether to use tab propagation. 111 [[Sets whether to use tab propagation.
112 112
@@ -124,7 +124,7 @@ class Elm.Web (Elm.Widget)
124 propagate: bool; [[Whether to propagate Tab keys to Elementary or not.]] 124 propagate: bool; [[Whether to propagate Tab keys to Elementary or not.]]
125 } 125 }
126 } 126 }
127 @property history_enabled { 127 @property history_enabled @virtual_pure {
128 set { 128 set {
129 [[Enables or disables the browsing history.]] 129 [[Enables or disables the browsing history.]]
130 } 130 }
@@ -135,7 +135,7 @@ class Elm.Web (Elm.Widget)
135 enable: bool; [[Whether to enable or disable the browsing history.]] 135 enable: bool; [[Whether to enable or disable the browsing history.]]
136 } 136 }
137 } 137 }
138 @property zoom_mode { 138 @property zoom_mode @virtual_pure {
139 set { 139 set {
140 [[Sets the zoom mode to use. 140 [[Sets the zoom mode to use.
141 141
@@ -162,7 +162,7 @@ class Elm.Web (Elm.Widget)
162 mode: Elm.Web.Zoom_Mode; [[The mode to set.]] 162 mode: Elm.Web.Zoom_Mode; [[The mode to set.]]
163 } 163 }
164 } 164 }
165 @property zoom { 165 @property zoom @virtual_pure {
166 set { 166 set {
167 [[Sets the zoom level of the web object. 167 [[Sets the zoom level of the web object.
168 168
@@ -188,7 +188,7 @@ class Elm.Web (Elm.Widget)
188 } 188 }
189 } 189 }
190 @property console_message_hook { 190 @property console_message_hook {
191 set { 191 set @virtual_pure {
192 [[Sets the function to call when a console message is emitted 192 [[Sets the function to call when a console message is emitted
193 from JS. 193 from JS.
194 194
@@ -203,7 +203,7 @@ class Elm.Web (Elm.Widget)
203 } 203 }
204 } 204 }
205 @property window_create_hook { 205 @property window_create_hook {
206 set { 206 set @virtual_pure {
207 [[Sets the function to call when a new window is requested. 207 [[Sets the function to call when a new window is requested.
208 208
209 This hook will be called when a request to create a new 209 This hook will be called when a request to create a new
@@ -219,7 +219,7 @@ class Elm.Web (Elm.Widget)
219 } 219 }
220 } 220 }
221 @property dialog_file_selector_hook { 221 @property dialog_file_selector_hook {
222 set { 222 set @virtual_pure {
223 [[Sets the function to call when an file selector dialog. 223 [[Sets the function to call when an file selector dialog.
224 224
225 This hook will be called when a JavaScript file selector 225 This hook will be called when a JavaScript file selector
@@ -234,7 +234,7 @@ class Elm.Web (Elm.Widget)
234 } 234 }
235 } 235 }
236 @property dialog_confirm_hook { 236 @property dialog_confirm_hook {
237 set { 237 set @virtual_pure {
238 [[Sets the function to call when an confirm dialog. 238 [[Sets the function to call when an confirm dialog.
239 239
240 This hook will be called when a JavaScript confirm dialog is 240 This hook will be called when a JavaScript confirm dialog is
@@ -248,7 +248,7 @@ class Elm.Web (Elm.Widget)
248 } 248 }
249 } 249 }
250 @property popup_selected { 250 @property popup_selected {
251 set { 251 set @virtual_pure {
252 [[Tells the web object which index in the currently open popup 252 [[Tells the web object which index in the currently open popup
253 was selected. 253 was selected.
254 254
@@ -263,7 +263,7 @@ class Elm.Web (Elm.Widget)
263 } 263 }
264 } 264 }
265 @property dialog_prompt_hook { 265 @property dialog_prompt_hook {
266 set { 266 set @virtual_pure {
267 [[Sets the function to call when an prompt dialog. 267 [[Sets the function to call when an prompt dialog.
268 268
269 This hook will be called when a JavaScript prompt dialog is 269 This hook will be called when a JavaScript prompt dialog is
@@ -277,7 +277,7 @@ class Elm.Web (Elm.Widget)
277 } 277 }
278 } 278 }
279 @property dialog_alert_hook { 279 @property dialog_alert_hook {
280 set { 280 set @virtual_pure {
281 [[Sets the function to call when an alert dialog. 281 [[Sets the function to call when an alert dialog.
282 282
283 This hook will be called when a JavaScript alert dialog is 283 This hook will be called when a JavaScript alert dialog is
@@ -291,13 +291,13 @@ class Elm.Web (Elm.Widget)
291 } 291 }
292 } 292 }
293 @property forward_possible { 293 @property forward_possible {
294 get { 294 get @virtual_pure {
295 [[Queries whether it's possible to go forward in history.]] 295 [[Queries whether it's possible to go forward in history.]]
296 return: bool; 296 return: bool;
297 } 297 }
298 } 298 }
299 @property webkit_view { 299 @property webkit_view {
300 get { 300 get @virtual_pure {
301 [[Get internal ewk_view object from web object. 301 [[Get internal ewk_view object from web object.
302 302
303 Elementary may not provide some low level features of EWebKit, 303 Elementary may not provide some low level features of EWebKit,
@@ -312,13 +312,13 @@ class Elm.Web (Elm.Widget)
312 } 312 }
313 } 313 }
314 @property back_possible { 314 @property back_possible {
315 get { 315 get @virtual_pure {
316 [[Queries whether it's possible to go back in history.]] 316 [[Queries whether it's possible to go back in history.]]
317 return: bool; 317 return: bool;
318 } 318 }
319 } 319 }
320 @property load_progress { 320 @property load_progress {
321 get { 321 get @virtual_pure {
322 [[Get the overall loading progress of the page. 322 [[Get the overall loading progress of the page.
323 323
324 Returns the estimated loading progress of the page, with a 324 Returns the estimated loading progress of the page, with a
@@ -330,7 +330,7 @@ class Elm.Web (Elm.Widget)
330 } 330 }
331 } 331 }
332 @property selection { 332 @property selection {
333 get { 333 get @virtual_pure {
334 [[Get a copy of the currently selected text. 334 [[Get a copy of the currently selected text.
335 335
336 The string returned must be freed by the user when it's done 336 The string returned must be freed by the user when it's done
@@ -342,7 +342,7 @@ class Elm.Web (Elm.Widget)
342 } 342 }
343 } 343 }
344 @property title { 344 @property title {
345 get { 345 get @virtual_pure {
346 [[Get the current title. 346 [[Get the current title.
347 347
348 The returned string must not be freed and is guaranteed to be 348 The returned string must not be freed and is guaranteed to be
@@ -354,7 +354,7 @@ class Elm.Web (Elm.Widget)
354 ]] 354 ]]
355 } 355 }
356 } 356 }
357 navigate { 357 navigate @virtual_pure {
358 [[Jumps the given number of steps in the browsing history. 358 [[Jumps the given number of steps in the browsing history.
359 359
360 The $steps value can be a negative integer to back in history, 360 The $steps value can be a negative integer to back in history,
@@ -366,14 +366,14 @@ class Elm.Web (Elm.Widget)
366 @in steps: int; [[The number of steps to jump.]] 366 @in steps: int; [[The number of steps to jump.]]
367 } 367 }
368 } 368 }
369 back { 369 back @virtual_pure {
370 [[Goes back one step in the browsing history. 370 [[Goes back one step in the browsing history.
371 371
372 This is equivalent to calling elm_web_object_navigate(obj, -1); 372 This is equivalent to calling elm_web_object_navigate(obj, -1);
373 ]] 373 ]]
374 return: bool; 374 return: bool;
375 } 375 }
376 html_string_load { 376 html_string_load @virtual_pure {
377 [[Loads the specified $html string as the content of the web 377 [[Loads the specified $html string as the content of the web
378 object. 378 object.
379 379
@@ -393,7 +393,7 @@ class Elm.Web (Elm.Widget)
393 @in unreachable_url: const(char)* @optional; [[URL that could not be reached (optional).]] 393 @in unreachable_url: const(char)* @optional; [[URL that could not be reached (optional).]]
394 } 394 }
395 } 395 }
396 text_search @const { 396 text_search @const @virtual_pure {
397 [[Searches the given string in a document.]] 397 [[Searches the given string in a document.]]
398 return: bool; [[$true if the given string was found, $false if not 398 return: bool; [[$true if the given string was found, $false if not
399 or failure.]] 399 or failure.]]
@@ -404,7 +404,7 @@ class Elm.Web (Elm.Widget)
404 @in wrap: bool; [[If search should wrap at the end.]] 404 @in wrap: bool; [[If search should wrap at the end.]]
405 } 405 }
406 } 406 }
407 popup_destroy { 407 popup_destroy @virtual_pure {
408 [[Dismisses an open dropdown popup 408 [[Dismisses an open dropdown popup
409 409
410 When the popup from a dropdown widget is to be dismissed, either 410 When the popup from a dropdown widget is to be dismissed, either
@@ -416,7 +416,7 @@ class Elm.Web (Elm.Widget)
416 return: bool; [[$true if the menu was successfully destroyed, or 416 return: bool; [[$true if the menu was successfully destroyed, or
417 $false if there was no menu to destroy.]] 417 $false if there was no menu to destroy.]]
418 } 418 }
419 region_show { 419 region_show @virtual_pure {
420 [[Shows the given region in the web object.]] 420 [[Shows the given region in the web object.]]
421 params { 421 params {
422 @in x: int; [[The x coordinate of the region to show.]] 422 @in x: int; [[The x coordinate of the region to show.]]
@@ -425,7 +425,7 @@ class Elm.Web (Elm.Widget)
425 @in h: int; [[The height of the region to show.]] 425 @in h: int; [[The height of the region to show.]]
426 } 426 }
427 } 427 }
428 forward { 428 forward @virtual_pure {
429 [[Goes forward one step in the browsing history. 429 [[Goes forward one step in the browsing history.
430 430
431 This is equivalent to calling elm_web_object_navigate(obj, 1); 431 This is equivalent to calling elm_web_object_navigate(obj, 1);
@@ -435,7 +435,7 @@ class Elm.Web (Elm.Widget)
435 ]] 435 ]]
436 return: bool; [[$true on success, $false otherwise.]] 436 return: bool; [[$true on success, $false otherwise.]]
437 } 437 }
438 text_matches_mark { 438 text_matches_mark @virtual_pure {
439 [[Marks matches of the given string in a document.]] 439 [[Marks matches of the given string in a document.]]
440 return: uint; [[Number of matched $string.]] 440 return: uint; [[Number of matched $string.]]
441 params { 441 params {
@@ -445,7 +445,7 @@ class Elm.Web (Elm.Widget)
445 @in limit: uint; [[Maximum amount of matches, or zero to unlimited.]] 445 @in limit: uint; [[Maximum amount of matches, or zero to unlimited.]]
446 } 446 }
447 } 447 }
448 region_bring_in { 448 region_bring_in @virtual_pure {
449 [[Brings in the region to the visible area. 449 [[Brings in the region to the visible area.
450 450
451 Like @.region_show, but it animates the scrolling of the object 451 Like @.region_show, but it animates the scrolling of the object
@@ -458,7 +458,7 @@ class Elm.Web (Elm.Widget)
458 @in h: int; [[The height of the region to show.]] 458 @in h: int; [[The height of the region to show.]]
459 } 459 }
460 } 460 }
461 stop { 461 stop @virtual_pure {
462 [[Stops loading the current page. 462 [[Stops loading the current page.
463 463
464 Cancels the loading of the current page in the web object. This 464 Cancels the loading of the current page in the web object. This
@@ -467,7 +467,7 @@ class Elm.Web (Elm.Widget)
467 ]] 467 ]]
468 return: bool; [[$true if the cancel was successful, $false otherwise.]] 468 return: bool; [[$true if the cancel was successful, $false otherwise.]]
469 } 469 }
470 navigate_possible_get { 470 navigate_possible_get @virtual_pure {
471 [[Queries whether it's possible to jump the given number of steps. 471 [[Queries whether it's possible to jump the given number of steps.
472 472
473 The $steps value can be a negative integer to back in history, 473 The $steps value can be a negative integer to back in history,
@@ -479,17 +479,17 @@ class Elm.Web (Elm.Widget)
479 @in steps: int; [[The number of steps to check for.]] 479 @in steps: int; [[The number of steps to check for.]]
480 } 480 }
481 } 481 }
482 reload_full { 482 reload_full @virtual_pure {
483 [[Requests a reload of the current document, avoiding any 483 [[Requests a reload of the current document, avoiding any
484 existing caches. 484 existing caches.
485 ]] 485 ]]
486 return: bool; [[$true on success, $false otherwise.]] 486 return: bool; [[$true on success, $false otherwise.]]
487 } 487 }
488 text_matches_unmark_all { 488 text_matches_unmark_all @virtual_pure {
489 [[Clears all marked matches in the document.]] 489 [[Clears all marked matches in the document.]]
490 return: bool; [[$true on success, $false otherwise.]] 490 return: bool; [[$true on success, $false otherwise.]]
491 } 491 }
492 reload { 492 reload @virtual_pure {
493 [[Requests a reload of the current document in the object.]] 493 [[Requests a reload of the current document in the object.]]
494 return: bool; [[$true on success, $false otherwise.]] 494 return: bool; [[$true on success, $false otherwise.]]
495 } 495 }
@@ -497,51 +497,6 @@ class Elm.Web (Elm.Widget)
497 implements { 497 implements {
498 class.constructor; 498 class.constructor;
499 Eo.Base.constructor; 499 Eo.Base.constructor;
500 @virtual .tab_propagate.get;
501 @virtual .tab_propagate.set;
502 @virtual .webkit_view.get;
503 @virtual .window_create_hook.set;
504 @virtual .dialog_alert_hook.set;
505 @virtual .dialog_confirm_hook.set;
506 @virtual .dialog_prompt_hook.set;
507 @virtual .dialog_file_selector_hook.set;
508 @virtual .console_message_hook.set;
509 @virtual .useragent.set;
510 @virtual .useragent.get;
511 @virtual .url.set;
512 @virtual .url.get;
513 @virtual .html_string_load;
514 @virtual .title.get;
515 @virtual .bg_color.set;
516 @virtual .bg_color.get;
517 @virtual .selection.get;
518 @virtual .popup_selected.set;
519 @virtual .popup_destroy;
520 @virtual .text_search;
521 @virtual .text_matches_mark;
522 @virtual .text_matches_unmark_all;
523 @virtual .text_matches_highlight.set;
524 @virtual .text_matches_highlight.get;
525 @virtual .load_progress.get;
526 @virtual .stop;
527 @virtual .reload;
528 @virtual .reload_full;
529 @virtual .back;
530 @virtual .forward;
531 @virtual .navigate;
532 @virtual .back_possible.get;
533 @virtual .forward_possible.get;
534 @virtual .navigate_possible_get;
535 @virtual .history_enabled.get;
536 @virtual .history_enabled.set;
537 @virtual .zoom.set;
538 @virtual .zoom.get;
539 @virtual .zoom_mode.set;
540 @virtual .zoom_mode.get;
541 @virtual .region_show;
542 @virtual .region_bring_in;
543 @virtual .inwin_mode.set;
544 @virtual .inwin_mode.get;
545 } 500 }
546 events { 501 events {
547 uri,changed; 502 uri,changed;
diff --git a/src/lib/elementary/elm_widget.eo b/src/lib/elementary/elm_widget.eo
index 2b8e727e3b..9406fafdda 100644
--- a/src/lib/elementary/elm_widget.eo
+++ b/src/lib/elementary/elm_widget.eo
@@ -417,7 +417,7 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte
417 } 417 }
418 } 418 }
419 @property parent_widget { 419 @property parent_widget {
420 get { 420 get @virtual_pure {
421 return: Evas.Object *; 421 return: Evas.Object *;
422 legacy: null; 422 legacy: null;
423 } 423 }
@@ -612,7 +612,7 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte
612 @in dir: Elm.Focus_Direction; [[Direction to move the focus.]] 612 @in dir: Elm.Focus_Direction; [[Direction to move the focus.]]
613 } 613 }
614 } 614 }
615 focus_direction { 615 focus_direction @virtual_pure {
616 [['Virtual' function handling passing focus to sub-objects given a direction, in degrees.]] 616 [['Virtual' function handling passing focus to sub-objects given a direction, in degrees.]]
617 params { 617 params {
618 @in base: const(Evas.Object)*; 618 @in base: const(Evas.Object)*;
@@ -736,7 +736,7 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte
736 } 736 }
737 focus_hide_handle { 737 focus_hide_handle {
738 } 738 }
739 focus_next { 739 focus_next @virtual_pure {
740 [['Virtual' function handling passing focus to sub-objects.]] 740 [['Virtual' function handling passing focus to sub-objects.]]
741 params { 741 params {
742 @in dir: Elm.Focus_Direction; 742 @in dir: Elm.Focus_Direction;
@@ -860,9 +860,6 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte
860 Evas.Object.Smart.member_add; 860 Evas.Object.Smart.member_add;
861 Evas.Object.Smart.resize; 861 Evas.Object.Smart.resize;
862 Evas.Object.Smart.smart_no_render.set; 862 Evas.Object.Smart.smart_no_render.set;
863 @virtual .focus_direction;
864 @virtual .focus_next;
865 @virtual .parent_widget.get;
866 Elm.Interface.Atspi_Accessible.name.get; 863 Elm.Interface.Atspi_Accessible.name.get;
867 Elm.Interface.Atspi_Accessible.state_set.get; 864 Elm.Interface.Atspi_Accessible.state_set.get;
868 Elm.Interface.Atspi_Accessible.children.get; 865 Elm.Interface.Atspi_Accessible.children.get;
diff --git a/src/lib/eolian/database_fill.c b/src/lib/eolian/database_fill.c
index 037199113a..c75f517789 100644
--- a/src/lib/eolian/database_fill.c
+++ b/src/lib/eolian/database_fill.c
@@ -62,25 +62,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
62 else if (impl->is_prop_set) 62 else if (impl->is_prop_set)
63 ftype = EOLIAN_PROP_SET; 63 ftype = EOLIAN_PROP_SET;
64 64
65 if (impl->is_virtual) 65 if (impl->is_auto)
66 {
67 foo_id = (Eolian_Function*)eolian_class_function_get_by_name(cl,
68 impl_name, ftype);
69 if (!foo_id)
70 return _func_error(cl, impl);
71 if (impl->is_prop_set)
72 foo_id->set_virtual_pure = EINA_TRUE;
73 else
74 foo_id->get_virtual_pure = EINA_TRUE;
75
76 impl->full_name = eina_stringshare_printf("%s.%s", cl->full_name,
77 impl_name);
78 eina_stringshare_del(impl_name);
79 impl_name = impl->full_name;
80
81 _write_impl(foo_id, impl);
82 }
83 else if (impl->is_auto)
84 { 66 {
85 if (!_get_impl_func(cl, impl, ftype, &foo_id)) 67 if (!_get_impl_func(cl, impl, ftype, &foo_id))
86 return _func_error(cl, impl); 68 return _func_error(cl, impl);
@@ -109,6 +91,14 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
109 else if (!_get_impl_func(cl, impl, ftype, &foo_id)) 91 else if (!_get_impl_func(cl, impl, ftype, &foo_id))
110 return _func_error(cl, impl); 92 return _func_error(cl, impl);
111 93
94 if (foo_id && foo_id->klass == cl && eolian_function_is_virtual_pure(foo_id, ftype))
95 {
96 fprintf(stderr, "eolian:%s:%d:%d: impl of pure virtual '%s%s'\n",
97 impl->base.file, impl->base.line, impl->base.column, impl->full_name,
98 (impl->is_prop_get ? ".get" : (impl->is_prop_set ? ".set" : "")));
99 return EINA_FALSE;
100 }
101
112pasttags: 102pasttags:
113 if (impl_name[0] == '.') 103 if (impl_name[0] == '.')
114 { 104 {
@@ -148,9 +138,31 @@ _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id)
148 138
149 if (foo_id->type == EOLIAN_PROPERTY) 139 if (foo_id->type == EOLIAN_PROPERTY)
150 { 140 {
141 /* FIXME fugly hack, ideally rework the whole implements api altogether */
142 if (foo_id->get_virtual_pure && !foo_id->get_impl)
143 {
144 impl->is_virtual = EINA_TRUE;
145 impl->is_prop_get = EINA_TRUE;
146 foo_id->get_impl = impl;
147 cl->implements = eina_list_append(cl->implements, impl);
148 /* repeat for set */
149 _db_build_implement(cl, foo_id);
150 return;
151 }
152 else if (foo_id->set_virtual_pure && !foo_id->set_impl)
153 {
154 impl->is_virtual = EINA_TRUE;
155 impl->is_prop_set = EINA_TRUE;
156 foo_id->set_impl = impl;
157 cl->implements = eina_list_append(cl->implements, impl);
158 /* repeat for get */
159 _db_build_implement(cl, foo_id);
160 return;
161 }
151 if (foo_id->get_impl) 162 if (foo_id->get_impl)
152 { 163 {
153 impl->is_prop_set = EINA_TRUE; 164 impl->is_prop_set = EINA_TRUE;
165 impl->is_virtual = foo_id->set_virtual_pure;
154 foo_id->set_impl = impl; 166 foo_id->set_impl = impl;
155 } 167 }
156 else if (foo_id->set_impl) 168 else if (foo_id->set_impl)
@@ -164,15 +176,20 @@ _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id)
164 else if (foo_id->type == EOLIAN_PROP_SET) 176 else if (foo_id->type == EOLIAN_PROP_SET)
165 { 177 {
166 impl->is_prop_set = EINA_TRUE; 178 impl->is_prop_set = EINA_TRUE;
179 impl->is_virtual = foo_id->get_virtual_pure;
167 foo_id->set_impl = impl; 180 foo_id->set_impl = impl;
168 } 181 }
169 else if (foo_id->type == EOLIAN_PROP_GET) 182 else if (foo_id->type == EOLIAN_PROP_GET)
170 { 183 {
171 impl->is_prop_get = EINA_TRUE; 184 impl->is_prop_get = EINA_TRUE;
185 impl->is_virtual = foo_id->set_virtual_pure;
172 foo_id->get_impl = impl; 186 foo_id->get_impl = impl;
173 } 187 }
174 else 188 else
175 foo_id->get_impl = foo_id->set_impl = impl; 189 {
190 impl->is_virtual = foo_id->get_virtual_pure;
191 foo_id->get_impl = foo_id->set_impl = impl;
192 }
176 193
177 cl->implements = eina_list_append(cl->implements, impl); 194 cl->implements = eina_list_append(cl->implements, impl);
178} 195}
diff --git a/src/lib/eolian/eo_lexer.h b/src/lib/eolian/eo_lexer.h
index c00f7f3b91..e84b3c1005 100644
--- a/src/lib/eolian/eo_lexer.h
+++ b/src/lib/eolian/eo_lexer.h
@@ -32,7 +32,7 @@ enum Tokens
32 KWAT(c_only), KWAT(class), KWAT(const), KWAT(empty), KWAT(extern), \ 32 KWAT(c_only), KWAT(class), KWAT(const), KWAT(empty), KWAT(extern), \
33 KWAT(free), KWAT(hot), KWAT(restart), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(nullable), \ 33 KWAT(free), KWAT(hot), KWAT(restart), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(nullable), \
34 KWAT(optional), KWAT(out), KWAT(private), KWAT(property), \ 34 KWAT(optional), KWAT(out), KWAT(private), KWAT(property), \
35 KWAT(protected), KWAT(virtual), KWAT(warn_unused), \ 35 KWAT(protected), KWAT(virtual_pure), KWAT(warn_unused), \
36 \ 36 \
37 KW(byte), KW(ubyte), KW(char), KW(short), KW(ushort), KW(int), KW(uint), \ 37 KW(byte), KW(ubyte), KW(char), KW(short), KW(ushort), KW(int), KW(uint), \
38 KW(long), KW(ulong), KW(llong), KW(ullong), \ 38 KW(long), KW(ulong), KW(llong), KW(ullong), \
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 07b0864661..aac1ce4770 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1105,6 +1105,12 @@ parse_accessor(Eo_Lexer *ls, Eolian_Function *prop)
1105 prop->type = EOLIAN_PROP_SET; 1105 prop->type = EOLIAN_PROP_SET;
1106 } 1106 }
1107 eo_lexer_get(ls); 1107 eo_lexer_get(ls);
1108 if (ls->t.kw == KW_at_virtual_pure)
1109 {
1110 if (is_get) prop->get_virtual_pure = EINA_TRUE;
1111 else prop->set_virtual_pure = EINA_TRUE;
1112 eo_lexer_get(ls);
1113 }
1108 line = ls->line_number; 1114 line = ls->line_number;
1109 col = ls->column; 1115 col = ls->column;
1110 check_next(ls, '{'); 1116 check_next(ls, '{');
@@ -1181,9 +1187,9 @@ end:
1181} 1187}
1182 1188
1183static void 1189static void
1184_interface_virtual_set(Eo_Lexer *ls, Eolian_Function *foo_id) 1190_func_virtual_set(Eo_Lexer *ls, Eolian_Function *foo_id, Eina_Bool virt)
1185{ 1191{
1186 if (ls->tmp.kls->type != EOLIAN_CLASS_INTERFACE) 1192 if (ls->tmp.kls->type != EOLIAN_CLASS_INTERFACE && !virt)
1187 return; 1193 return;
1188 1194
1189 if (foo_id->type == EOLIAN_PROP_GET || foo_id->type == EOLIAN_METHOD) 1195 if (foo_id->type == EOLIAN_PROP_GET || foo_id->type == EOLIAN_METHOD)
@@ -1202,7 +1208,8 @@ parse_property(Eo_Lexer *ls)
1202 Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE, 1208 Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE,
1203 has_keys = EINA_FALSE, has_values = EINA_FALSE, 1209 has_keys = EINA_FALSE, has_values = EINA_FALSE,
1204 has_protected = EINA_FALSE, has_class = EINA_FALSE, 1210 has_protected = EINA_FALSE, has_class = EINA_FALSE,
1205 has_c_only = EINA_FALSE, has_beta = EINA_FALSE; 1211 has_c_only = EINA_FALSE, has_beta = EINA_FALSE,
1212 has_virtp = EINA_FALSE;
1206 prop = calloc(1, sizeof(Eolian_Function)); 1213 prop = calloc(1, sizeof(Eolian_Function));
1207 prop->klass = ls->tmp.kls; 1214 prop->klass = ls->tmp.kls;
1208 prop->type = EOLIAN_UNRESOLVED; 1215 prop->type = EOLIAN_UNRESOLVED;
@@ -1233,6 +1240,10 @@ parse_property(Eo_Lexer *ls)
1233 prop->is_beta = EINA_TRUE; 1240 prop->is_beta = EINA_TRUE;
1234 eo_lexer_get(ls); 1241 eo_lexer_get(ls);
1235 break; 1242 break;
1243 case KW_at_virtual_pure:
1244 CASE_LOCK(ls, virtp, "virtual_pure qualifier");
1245 eo_lexer_get(ls);
1246 break;
1236 default: 1247 default:
1237 goto body; 1248 goto body;
1238 } 1249 }
@@ -1266,7 +1277,7 @@ end:
1266 check_match(ls, '}', '{', line, col); 1277 check_match(ls, '}', '{', line, col);
1267 if (!has_get && !has_set) 1278 if (!has_get && !has_set)
1268 prop->type = EOLIAN_PROPERTY; 1279 prop->type = EOLIAN_PROPERTY;
1269 _interface_virtual_set(ls, prop); 1280 _func_virtual_set(ls, prop, has_virtp);
1270} 1281}
1271 1282
1272static void 1283static void
@@ -1278,7 +1289,7 @@ parse_method(Eo_Lexer *ls)
1278 has_return = EINA_FALSE, has_legacy = EINA_FALSE, 1289 has_return = EINA_FALSE, has_legacy = EINA_FALSE,
1279 has_protected = EINA_FALSE, has_class = EINA_FALSE, 1290 has_protected = EINA_FALSE, has_class = EINA_FALSE,
1280 has_eo = EINA_FALSE, has_c_only = EINA_FALSE, 1291 has_eo = EINA_FALSE, has_c_only = EINA_FALSE,
1281 has_beta = EINA_FALSE; 1292 has_beta = EINA_FALSE, has_virtp = EINA_FALSE;
1282 meth = calloc(1, sizeof(Eolian_Function)); 1293 meth = calloc(1, sizeof(Eolian_Function));
1283 meth->klass = ls->tmp.kls; 1294 meth->klass = ls->tmp.kls;
1284 meth->type = EOLIAN_METHOD; 1295 meth->type = EOLIAN_METHOD;
@@ -1314,6 +1325,10 @@ parse_method(Eo_Lexer *ls)
1314 meth->is_beta = EINA_TRUE; 1325 meth->is_beta = EINA_TRUE;
1315 eo_lexer_get(ls); 1326 eo_lexer_get(ls);
1316 break; 1327 break;
1328 case KW_at_virtual_pure:
1329 CASE_LOCK(ls, virtp, "virtual_pure qualifier");
1330 eo_lexer_get(ls);
1331 break;
1317 default: 1332 default:
1318 goto body; 1333 goto body;
1319 } 1334 }
@@ -1356,7 +1371,7 @@ body:
1356 } 1371 }
1357end: 1372end:
1358 check_match(ls, '}', '{', line, col); 1373 check_match(ls, '}', '{', line, col);
1359 _interface_virtual_set(ls, meth); 1374 _func_virtual_set(ls, meth, has_virtp);
1360} 1375}
1361 1376
1362static void 1377static void
@@ -1389,10 +1404,6 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
1389 ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl); 1404 ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl);
1390 switch (ls->t.kw) 1405 switch (ls->t.kw)
1391 { 1406 {
1392 case KW_at_virtual:
1393 impl->is_virtual = EINA_TRUE;
1394 eo_lexer_get(ls);
1395 break;
1396 case KW_at_auto: 1407 case KW_at_auto:
1397 impl->is_auto = EINA_TRUE; 1408 impl->is_auto = EINA_TRUE;
1398 eo_lexer_get(ls); 1409 eo_lexer_get(ls);
@@ -1406,15 +1417,12 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
1406 } 1417 }
1407 if (ls->t.token == '.') 1418 if (ls->t.token == '.')
1408 { 1419 {
1409 if (!impl->is_virtual && !impl->is_auto && !impl->is_empty) 1420 if (!impl->is_auto && !impl->is_empty)
1410 goto fullclass; 1421 goto fullclass;
1411 check_next(ls, '.'); 1422 check_next(ls, '.');
1412 if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set)) 1423 if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set))
1413 eo_lexer_syntax_error(ls, "name expected"); 1424 eo_lexer_syntax_error(ls, "name expected");
1414 if (impl->is_virtual) 1425 impl->full_name = eina_stringshare_printf(".%s", ls->t.value.s);
1415 impl->full_name = eina_stringshare_ref(ls->t.value.s);
1416 else
1417 impl->full_name = eina_stringshare_printf(".%s", ls->t.value.s);
1418 eo_lexer_get(ls); 1426 eo_lexer_get(ls);
1419 if (ls->t.token == '.') 1427 if (ls->t.token == '.')
1420 { 1428 {
diff --git a/src/lib/evas/canvas/efl_canvas_surface.eo b/src/lib/evas/canvas/efl_canvas_surface.eo
index 3a78d2bc8a..e83c4ed001 100644
--- a/src/lib/evas/canvas/efl_canvas_surface.eo
+++ b/src/lib/evas/canvas/efl_canvas_surface.eo
@@ -16,7 +16,7 @@ mixin Efl.Canvas.Surface (Evas.Image)
16 Set to $null to detach this surface from the external buffer. 16 Set to $null to detach this surface from the external buffer.
17 ]] 17 ]]
18 get {} 18 get {}
19 set { 19 set @virtual_pure {
20 [[Set the buffer. If this fails, this function returns $false, 20 [[Set the buffer. If this fails, this function returns $false,
21 and the surface is left without any attached buffer. 21 and the surface is left without any attached buffer.
22 ]] 22 ]]
@@ -29,6 +29,5 @@ mixin Efl.Canvas.Surface (Evas.Image)
29 } 29 }
30 implements { 30 implements {
31 Eo.Base.constructor; 31 Eo.Base.constructor;
32 @virtual .native_buffer.set;
33 } 32 }
34} 33}
diff --git a/src/lib/evas/canvas/efl_vg.eo b/src/lib/evas/canvas/efl_vg.eo
index 48d0e663f9..b34f0bc1a8 100644
--- a/src/lib/evas/canvas/efl_vg.eo
+++ b/src/lib/evas/canvas/efl_vg.eo
@@ -80,7 +80,7 @@ abstract Efl.VG (Eo.Base, Efl.Gfx, Efl.Gfx.Stack)
80 Evas_VG_Quality q; 80 Evas_VG_Quality q;
81 } 81 }
82 } */ 82 } */
83 bounds_get { 83 bounds_get @virtual_pure {
84 [[Give the bounding box in screen coordinate as being drawn. 84 [[Give the bounding box in screen coordinate as being drawn.
85 85
86 It will start as the control box until it is refined once the shape 86 It will start as the control box until it is refined once the shape
@@ -124,6 +124,5 @@ abstract Efl.VG (Eo.Base, Efl.Gfx, Efl.Gfx.Stack)
124 Efl.Gfx.Stack.stack_above; 124 Efl.Gfx.Stack.stack_above;
125 Efl.Gfx.Stack.raise; 125 Efl.Gfx.Stack.raise;
126 Efl.Gfx.Stack.lower; 126 Efl.Gfx.Stack.lower;
127 @virtual .bounds_get;
128 } 127 }
129} 128}
diff --git a/src/lib/evas/canvas/evas_canvas3d_object.eo b/src/lib/evas/canvas/evas_canvas3d_object.eo
index 5d2b2d5fc5..75dadeed3b 100644
--- a/src/lib/evas/canvas/evas_canvas3d_object.eo
+++ b/src/lib/evas/canvas/evas_canvas3d_object.eo
@@ -35,13 +35,13 @@ class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface)
35 update { 35 update {
36 [[Update request for the object.]] 36 [[Update request for the object.]]
37 } 37 }
38 update_notify { 38 update_notify @virtual_pure {
39 [[Pure virtual update_notify function. 39 [[Pure virtual update_notify function.
40 40
41 Update request for the object.]] 41 Update request for the object.]]
42 } 42 }
43 43
44 change_notify { 44 change_notify @virtual_pure {
45 [[Pure virtual change_notify function. 45 [[Pure virtual change_notify function.
46 46
47 Update request for the object.]] 47 Update request for the object.]]
@@ -50,14 +50,14 @@ class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface)
50 @in ref: Evas.Canvas3D.Object *; [[The Object that caused the change.]] 50 @in ref: Evas.Canvas3D.Object *; [[The Object that caused the change.]]
51 } 51 }
52 } 52 }
53 callback_register { 53 callback_register @virtual_pure {
54 [[Pure virtual register samrt callback function.]] 54 [[Pure virtual register samrt callback function.]]
55 params { 55 params {
56 @in event: const(char)*; [[Event type.]] 56 @in event: const(char)*; [[Event type.]]
57 @in data: const(void)*; [[User data.]] 57 @in data: const(void)*; [[User data.]]
58 } 58 }
59 } 59 }
60 callback_unregister { 60 callback_unregister @virtual_pure {
61 [[Pure virtual unregister smart callback function.]] 61 [[Pure virtual unregister smart callback function.]]
62 params { 62 params {
63 @in event: const(char)*; [[Event type.]] 63 @in event: const(char)*; [[Event type.]]
@@ -70,10 +70,6 @@ class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface)
70 Eo.Base.event_callback_priority_add; 70 Eo.Base.event_callback_priority_add;
71 Eo.Base.event_callback_del; 71 Eo.Base.event_callback_del;
72 Evas.Common_Interface.evas.get; 72 Evas.Common_Interface.evas.get;
73 @virtual .update_notify;
74 @virtual .change_notify;
75 @virtual .callback_register;
76 @virtual .callback_unregister;
77 } 73 }
78 events { 74 events {
79 clicked; [[Clicked Event.]] 75 clicked; [[Clicked Event.]]
diff --git a/src/lib/evas/canvas/evas_filter.eo b/src/lib/evas/canvas/evas_filter.eo
index 8383567987..d9e4d7ac56 100644
--- a/src/lib/evas/canvas/evas_filter.eo
+++ b/src/lib/evas/canvas/evas_filter.eo
@@ -22,11 +22,11 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
22 val: bool; 22 val: bool;
23 } 23 }
24 } 24 }
25 filter_input_alpha @protected { 25 filter_input_alpha @protected @virtual_pure {
26 [[Called by Evas.Filter to determine whether the input is alpha or rgba.]] 26 [[Called by Evas.Filter to determine whether the input is alpha or rgba.]]
27 return: bool; 27 return: bool;
28 } 28 }
29 filter_input_render @protected { 29 filter_input_render @protected @virtual_pure {
30 [[Called by Evas.Filter when the parent class must render the input. 30 [[Called by Evas.Filter when the parent class must render the input.
31 ; 31 ;
32 ]] 32 ]]
@@ -41,7 +41,7 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
41 do_async: bool; 41 do_async: bool;
42 } 42 }
43 } 43 }
44 filter_dirty @protected { 44 filter_dirty @protected @virtual_pure {
45 [[Called when the filter changes must trigger a redraw of the object. 45 [[Called when the filter changes must trigger a redraw of the object.
46 46
47 Virtual, to be implemented in the parent class. 47 Virtual, to be implemented in the parent class.
@@ -71,8 +71,5 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
71 Efl.Gfx.Filter.filter_source.get; 71 Efl.Gfx.Filter.filter_source.get;
72 Efl.Gfx.Filter.filter_data.get; 72 Efl.Gfx.Filter.filter_data.get;
73 Efl.Gfx.Filter.filter_data.set; 73 Efl.Gfx.Filter.filter_data.set;
74 @virtual .filter_input_alpha;
75 @virtual .filter_input_render;
76 @virtual .filter_dirty;
77 } 74 }
78} 75}
diff --git a/src/tests/eolian/data/base.eo b/src/tests/eolian/data/base.eo
index 1b4ee4fc95..7fcd73e860 100644
--- a/src/tests/eolian/data/base.eo
+++ b/src/tests/eolian/data/base.eo
@@ -7,14 +7,11 @@ class Base {
7 c: float; 7 c: float;
8 } 8 }
9 } 9 }
10 constructor { 10 constructor @virtual_pure {
11 } 11 }
12 destructor { 12 destructor {
13 } 13 }
14 } 14 }
15 implements {
16 @virtual .constructor;
17 }
18 constructors { 15 constructors {
19 .constructor; 16 .constructor;
20 } 17 }
diff --git a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo
index 78c3414976..27dd47cb06 100644
--- a/src/tests/eolian/data/nmsp1_nmsp11_class2.eo
+++ b/src/tests/eolian/data/nmsp1_nmsp11_class2.eo
@@ -2,11 +2,8 @@ class nmsp1.nmsp11.class2
2{ 2{
3 methods { 3 methods {
4 @property a { 4 @property a {
5 set { 5 set @virtual_pure {
6 } 6 }
7 } 7 }
8 } 8 }
9 implements {
10 @virtual .a.set;
11 }
12} 9}
diff --git a/src/tests/eolian/data/object_impl.eo b/src/tests/eolian/data/object_impl.eo
index 17643a6719..96352615b7 100644
--- a/src/tests/eolian/data/object_impl.eo
+++ b/src/tests/eolian/data/object_impl.eo
@@ -19,7 +19,7 @@ class Object_Impl (Base) {
19 @property b { 19 @property b {
20 set { 20 set {
21 } 21 }
22 get { 22 get @virtual_pure {
23 /* set as virtual pure - no implementation expected */ 23 /* set as virtual pure - no implementation expected */
24 } 24 }
25 values { 25 values {
@@ -50,7 +50,7 @@ class Object_Impl (Base) {
50 @in b: const(char)*; 50 @in b: const(char)*;
51 } 51 }
52 } 52 }
53 pure_foo3 { 53 pure_foo3 @virtual_pure {
54 /* set as virtual pure - no implementation expected */ 54 /* set as virtual pure - no implementation expected */
55 } 55 }
56 } 56 }
@@ -59,8 +59,6 @@ class Object_Impl (Base) {
59 class.destructor; 59 class.destructor;
60 Base.constructor; 60 Base.constructor;
61 Base.destructor; 61 Base.destructor;
62 @virtual .pure_foo3;
63 @virtual .b.get;
64 } 62 }
65 constructors { 63 constructors {
66 .constructor_1; 64 .constructor_1;
diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo
index 121efe91bd..7ab1f7124c 100644
--- a/src/tests/eolian/data/override.eo
+++ b/src/tests/eolian/data/override.eo
@@ -1,7 +1,7 @@
1class Override (Base) { 1class Override (Base) {
2 methods { 2 methods {
3 @property a { 3 @property a {
4 set { 4 set @virtual_pure {
5 } 5 }
6 get { 6 get {
7 } 7 }
@@ -32,7 +32,7 @@ class Override (Base) {
32 c: int(50); 32 c: int(50);
33 } 33 }
34 } 34 }
35 foo { 35 foo @virtual_pure {
36 } 36 }
37 bar { 37 bar {
38 params { 38 params {
@@ -44,8 +44,6 @@ class Override (Base) {
44 } 44 }
45 implements { 45 implements {
46 Base.constructor; 46 Base.constructor;
47 @virtual .a.set;
48 @virtual .foo;
49 @auto .b.set; 47 @auto .b.set;
50 @empty .bar; 48 @empty .bar;
51 @auto .c.get; 49 @auto .c.get;
diff --git a/src/tests/eolian/data/override_ref.c b/src/tests/eolian/data/override_ref.c
index b910f71c85..bd8ff133e2 100644
--- a/src/tests/eolian/data/override_ref.c
+++ b/src/tests/eolian/data/override_ref.c
@@ -1,5 +1,3 @@
1EOAPI EO_VOID_FUNC_BODY(override_a_set);
2EOAPI EO_VOID_FUNC_BODY(override_foo);
3 1
4static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float a, char b, int c) 2static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float a, char b, int c)
5{ 3{
@@ -24,6 +22,7 @@ static int __eolian_override_c_get(Eo *obj EINA_UNUSED, Override_Data *pd EINA_U
24} 22}
25 23
26EOAPI EO_FUNC_BODYV_CONST(override_c_get, int, 50, EO_FUNC_CALL(idx), int idx); 24EOAPI EO_FUNC_BODYV_CONST(override_c_get, int, 50, EO_FUNC_CALL(idx), int idx);
25EOAPI EO_VOID_FUNC_BODY(override_a_set);
27 26
28void _override_a_get(Eo *obj, Override_Data *pd); 27void _override_a_get(Eo *obj, Override_Data *pd);
29 28
@@ -36,6 +35,7 @@ EOAPI EO_VOID_FUNC_BODYV_CONST(override_b_get, EO_FUNC_CALL(idx, a, b, c), int i
36void _override_c_set(Eo *obj, Override_Data *pd, int idx, int c); 35void _override_c_set(Eo *obj, Override_Data *pd, int idx, int c);
37 36
38EOAPI EO_VOID_FUNC_BODYV(override_c_set, EO_FUNC_CALL(idx, c), int idx, int c); 37EOAPI EO_VOID_FUNC_BODYV(override_c_set, EO_FUNC_CALL(idx, c), int idx, int c);
38EOAPI EO_VOID_FUNC_BODY(override_foo);
39 39
40void _override_base_constructor(Eo *obj, Override_Data *pd); 40void _override_base_constructor(Eo *obj, Override_Data *pd);
41 41
@@ -57,14 +57,14 @@ static const Eo_Op_Description _override_op_desc[] = {
57 EO_OP_FUNC_OVERRIDE(base_constructor, _override_base_constructor), 57 EO_OP_FUNC_OVERRIDE(base_constructor, _override_base_constructor),
58 EO_OP_FUNC_OVERRIDE(base_z_get, __eolian_override_base_z_get), 58 EO_OP_FUNC_OVERRIDE(base_z_get, __eolian_override_base_z_get),
59 EO_OP_FUNC_OVERRIDE(base_z_set, __eolian_override_base_z_set), 59 EO_OP_FUNC_OVERRIDE(base_z_set, __eolian_override_base_z_set),
60 EO_OP_FUNC(override_a_set, NULL),
61 EO_OP_FUNC(override_foo, NULL),
62 EO_OP_FUNC(override_b_set, __eolian_override_b_set), 60 EO_OP_FUNC(override_b_set, __eolian_override_b_set),
63 EO_OP_FUNC(override_bar, __eolian_override_bar), 61 EO_OP_FUNC(override_bar, __eolian_override_bar),
64 EO_OP_FUNC(override_c_get, __eolian_override_c_get), 62 EO_OP_FUNC(override_c_get, __eolian_override_c_get),
63 EO_OP_FUNC(override_a_set, NULL),
65 EO_OP_FUNC(override_a_get, _override_a_get), 64 EO_OP_FUNC(override_a_get, _override_a_get),
66 EO_OP_FUNC(override_b_get, _override_b_get), 65 EO_OP_FUNC(override_b_get, _override_b_get),
67 EO_OP_FUNC(override_c_set, _override_c_set), 66 EO_OP_FUNC(override_c_set, _override_c_set),
67 EO_OP_FUNC(override_foo, NULL),
68}; 68};
69 69
70static const Eo_Class_Description _override_class_desc = { 70static const Eo_Class_Description _override_class_desc = {
@@ -78,4 +78,4 @@ static const Eo_Class_Description _override_class_desc = {
78 NULL 78 NULL
79}; 79};
80 80
81EO_DEFINE_CLASS(override_class_get, &_override_class_desc, BASE_CLASS, NULL); 81EO_DEFINE_CLASS(override_class_get, &_override_class_desc, BASE_CLASS, NULL); \ No newline at end of file
diff --git a/src/tests/eolian/eolian_parsing.c b/src/tests/eolian/eolian_parsing.c
index 874045d03c..f50af42d86 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -222,33 +222,6 @@ START_TEST(eolian_override)
222 fail_if(strcmp(eolian_function_name_get(impl_func), "constructor")); 222 fail_if(strcmp(eolian_function_name_get(impl_func), "constructor"));
223 223
224 fail_if(!(eina_iterator_next(iter, (void**)&impl))); 224 fail_if(!(eina_iterator_next(iter, (void**)&impl)));
225 fail_if(eolian_implement_is_auto(impl));
226 fail_if(eolian_implement_is_empty(impl));
227 fail_if(!eolian_implement_is_virtual(impl));
228 fail_if(!(impl_class = eolian_implement_class_get(impl)));
229 fail_if(!(impl_func = eolian_implement_function_get(impl, NULL)));
230 fail_if(impl_class != class);
231 fail_if(strcmp(eolian_function_name_get(impl_func), "a"));
232 fail_if(eolian_function_is_auto(impl_func, EOLIAN_PROP_SET));
233 fail_if(eolian_function_is_auto(impl_func, EOLIAN_PROP_GET));
234 fail_if(eolian_function_is_empty(impl_func, EOLIAN_PROP_SET));
235 fail_if(eolian_function_is_empty(impl_func, EOLIAN_PROP_GET));
236 fail_if(!eolian_function_is_virtual_pure(impl_func, EOLIAN_PROP_SET));
237 fail_if(eolian_function_is_virtual_pure(impl_func, EOLIAN_PROP_GET));
238
239 fail_if(!(eina_iterator_next(iter, (void**)&impl)));
240 fail_if(eolian_implement_is_auto(impl));
241 fail_if(eolian_implement_is_empty(impl));
242 fail_if(!eolian_implement_is_virtual(impl));
243 fail_if(!(impl_class = eolian_implement_class_get(impl)));
244 fail_if(!(impl_func = eolian_implement_function_get(impl, NULL)));
245 fail_if(impl_class != class);
246 fail_if(strcmp(eolian_function_name_get(impl_func), "foo"));
247 fail_if(eolian_function_is_auto(impl_func, EOLIAN_METHOD));
248 fail_if(eolian_function_is_empty(impl_func, EOLIAN_METHOD));
249 fail_if(!eolian_function_is_virtual_pure(impl_func, EOLIAN_METHOD));
250
251 fail_if(!(eina_iterator_next(iter, (void**)&impl)));
252 fail_if(!eolian_implement_is_auto(impl)); 225 fail_if(!eolian_implement_is_auto(impl));
253 fail_if(eolian_implement_is_empty(impl)); 226 fail_if(eolian_implement_is_empty(impl));
254 fail_if(eolian_implement_is_virtual(impl)); 227 fail_if(eolian_implement_is_virtual(impl));