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) volume: double; [[The volume]] } } - @property source { + @property source @virtual_pure { [[Source of the object What sources are supported depends on the actual object. @@ -78,7 +78,7 @@ class Ecore.Audio (Eo.Base) source: const(char)*; [[the source to set to (i.e. file, URL, device)]] } } - @property format { + @property format @virtual_pure { [[Format of the object.]] set { [[Set the format of the object @@ -103,7 +103,7 @@ class Ecore.Audio (Eo.Base) format: Ecore.Audio.Format; [[the format of the object]] } } - vio_set { + vio_set @virtual_pure { [[Set the virtual IO functions @since 1.8 @@ -123,10 +123,5 @@ class Ecore.Audio (Eo.Base) } implements { Eo.Base.constructor; - @virtual .source.get; - @virtual .source.set; - @virtual .format.get; - @virtual .format.set; - @virtual .vio_set; } } 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) channels: int; [[The number of channels]] } } - @property preloaded { + @property preloaded @virtual_pure { [[Preloaded state of the input @since 1.8 @@ -82,7 +82,7 @@ class Ecore.Audio.In (Ecore.Audio) @since 1.8 ]] - set { + set @virtual_pure { } get { } @@ -134,7 +134,7 @@ class Ecore.Audio.In (Ecore.Audio) @in len: size; [[The amount of samples to read]] } } - seek { + seek @virtual_pure { [[Seek within the input @since 1.8 @@ -153,10 +153,6 @@ class Ecore.Audio.In (Ecore.Audio) Eo.Base.constructor; Eo.Base.destructor; Ecore.Audio.vio_set; - @virtual .preloaded.get; - @virtual .preloaded.set; - @virtual .seek; - @virtual .length.set; } events { 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) { valid after deletion for the svr object. If no IP is known null is returned. ]] - get { + get @virtual_pure { legacy: null; } values { @@ -58,14 +58,14 @@ abstract Efl.Network (Eo.Base) { This function is used to find out how long a client has been connected. ]] - get { + get @virtual_pure { legacy: null; } values { uptime: double; [[The total time, in seconds, that the object has been connected.]] } } - @property port { + @property port @virtual_pure { [[The port that the obj is connected to]] set { legacy: null; @@ -91,7 +91,7 @@ abstract Efl.Network (Eo.Base) { @since 1.1 ]] - get { + get @virtual_pure { legacy: null; } values { @@ -100,14 +100,14 @@ abstract Efl.Network (Eo.Base) { } @property connected { [[Returns whether the client is still connected]] - get { + get @virtual_pure { legacy: null; } values { connected: bool; [[Returns true if connected, false otherwise.]] } } - @property timeout { + @property timeout @virtual_pure { [[Control the default time after which an inactive client will be disconnected. @@ -131,14 +131,14 @@ abstract Efl.Network (Eo.Base) { timeout: double; [[The timeout, in seconds, to disconnect after.]] } } - flush { + flush @virtual_pure { [[Flushes all pending data to the given server. This function will block until all data is sent to the server. ]] legacy: null; } - send { + send @virtual_pure { [[Sends the given data to the given server. This function will send the given data to the server as soon as the @@ -175,18 +175,6 @@ abstract Efl.Network (Eo.Base) { return: bool; [[true if the request did not fail to be set up, false otherwise.]] } } - implements { - @virtual .ip.get; - @virtual .uptime.get; - @virtual .port.set; - @virtual .port.get; - @virtual .fd.get; - @virtual .connected.get; - @virtual .timeout.set; - @virtual .timeout.get; - @virtual .flush; - @virtual .send; - } events { data,received: Ecore.Con.Event_Data.Received; [[Data received on connection]] 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) { legacy_prefix: null; methods { - fill { + fill @virtual_pure { return: bool; params { @in mul_col: uint; @@ -10,7 +10,6 @@ abstract Ector.Renderer.Cairo (Ector.Renderer) } } implements { - @virtual .fill; Ector.Renderer.prepare; Ector.Renderer.draw; 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 cspace: Efl.Gfx.Colorspace; [[Colorspace]] } } - map { + map @virtual_pure { [[Map a region of this buffer for read or write access by the CPU, fetch data from the GPU if needed. This operation may be slow if cpu_readable_fast or cpu_writeable_fast are not true, or if the @@ -64,14 +64,14 @@ mixin Ector.Buffer } return: void* @warn_unused; [[Pointer to the top-left pixel data. Returns $null in case of failure]] } - unmap { + unmap @virtual_pure { [[Unmap a region of this buffer, and upload data to the GPU (if needed).]] params { @in data: void*; [[Data pointer returned by a previous call to map]] @in length: uint; [[Must be the same as returned by map.]] } } - pixels_set { + pixels_set @virtual_pure { [[Set the source pixels for this buffer, or allocate a new memory region]] params { @in pixels: void*; [[If $null, allocates an empty buffer]] @@ -87,7 +87,7 @@ mixin Ector.Buffer } return: bool; [[True if pixels_set was successful]] } - span_get { + span_get @virtual_pure { [[Get a single horizontal span of length w starting from (x,y) Call span_free() to release it. This function will try not to @@ -103,7 +103,7 @@ mixin Ector.Buffer } return: uint8*; [[A temporary memory buffer containing the pixels requested.]] } - span_free { + span_free @virtual_pure { [[Must be called as soon as possible after span_get]] params { data: uint8*; [[Data to be freed]] @@ -130,11 +130,4 @@ mixin Ector.Buffer events { detached; [[Emitted whenever the previously attached pixels are detached during pixels_set]] } - implements { - @virtual .pixels_set; - @virtual .span_get; - @virtual .span_free; - @virtual .map; - @virtual .unmap; - } } 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) return: uint; [[CRC value]] } } - bounds_get { + bounds_get @virtual_pure { [[Retrieve the bounds of the renderer]] params { @out r: Eina.Rectangle; [[Bounds as @Eina.Rectangle]] } } - draw { + draw @virtual_pure { return: bool @warn_unused; params { @in op: Efl.Gfx.Render_Op; @@ -124,15 +124,12 @@ abstract Ector.Renderer (Eo.Base) params { } } - done { + done @virtual_pure { return: bool @warn_unused; } } implements { Eo.Base.destructor; Eo.Base.finalize; - @virtual .draw; - @virtual .bounds_get; - @virtual .done; } } 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) methods { @property reference_point { [[This define where is (0,0) in pixels coordinate inside the surface]] - set { + set @virtual_pure { } values { x: int; [[X coordinate for reference point]] y: int; [[Y coordinate for reference point]] } } - renderer_factory_new { + renderer_factory_new @virtual_pure { [[Create a new renderer factory for the given type]] return: Eo.Base *; /* FIXME: Should be a more restricted type, only here for cyclic. */ params { @@ -23,8 +23,4 @@ mixin Ector.Surface (Ector.Buffer) } } } - implements { - @virtual .renderer_factory_new; - @virtual .reference_point.set; - } } 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) { legacy_prefix: null; methods { - fill { + fill @virtual_pure { return: bool; params { @in flags: uint64; @@ -15,7 +15,6 @@ abstract Ector.Renderer.GL (Ector.Renderer) } } implements { - @virtual .fill; Ector.Renderer.prepare; Ector.Renderer.draw; 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) legacy_prefix: null; data: null; methods { - fill { + fill @virtual_pure { return: bool; } } - implements { - @virtual .fill; - } } 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 () eo_prefix: elm_interface_atspi_action; data: null; methods { - @property name @protected { + @property name @protected @virtual_pure { get { [[Gets action name for given id]] } @@ -26,7 +26,7 @@ mixin Elm.Interface.Atspi_Action () id: int; } } - @property description @protected { + @property description @protected @virtual_pure { get { [[Gets action description for given id]] } @@ -42,21 +42,21 @@ mixin Elm.Interface.Atspi_Action () } } @property actions @protected { - get { + get @virtual_pure { [[Get list of available widget actions]] } values { actions: list *; [[contains statically allocated strings]] } } - action_do @protected { + action_do @protected @virtual_pure { [[Performs action on given widget.]] params { @in id: int; } return: bool; } - keybinding_get @protected { + keybinding_get @protected @virtual_pure { [[Gets configured keybinding for specific action and widget.]] params { @in id: int; @@ -64,13 +64,4 @@ mixin Elm.Interface.Atspi_Action () return: own(char *) @warn_unused; [[Should be freed by the user.]] } } - implements { - @virtual .action_do; - @virtual .keybinding_get; - @virtual .name.get; - @virtual .name.set; - @virtual .description.get; - @virtual .description.set; - @virtual .actions.get; - } } 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 () data: null; methods { @property extents @protected { - get { + get @virtual_pure { [[Gets an image extents.]] } keys { @@ -37,7 +37,4 @@ mixin Elm.Interface.Atspi_Image () } } } - implements { - @virtual .extents.get; - } } 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) data: null; methods { @property elm_actions @protected { - get { + get @virtual_pure { } values { 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) Elm.Interface.Atspi_Action.description.set; Elm.Interface.Atspi_Action.description.get; Elm.Interface.Atspi_Action.actions.get; - @virtual .elm_actions.get; } } 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) { eo_prefix: elm_obj_web; methods { - @property text_matches_highlight { + @property text_matches_highlight @virtual_pure { set { [[Sets whether to highlight the matched marks. @@ -34,7 +34,7 @@ class Elm.Web (Elm.Widget) highlight: bool; [[Whether to highlight the marks or not.]] } } - @property useragent { + @property useragent @virtual_pure { set { [[Change useragent of a elm_web object.]] } @@ -45,7 +45,7 @@ class Elm.Web (Elm.Widget) user_agent: const(char)*; [[String for useragent.]] } } - @property url { + @property url @virtual_pure { set { [[Sets the URL for the web object. @@ -65,7 +65,7 @@ class Elm.Web (Elm.Widget) url: const(char)*; [[The URL to set.]] } } - @property bg_color { + @property bg_color @virtual_pure { set { [[Sets the background color to be used by the web object. @@ -89,7 +89,7 @@ class Elm.Web (Elm.Widget) a: int; [[Alpha component.]] } } - @property inwin_mode { + @property inwin_mode @virtual_pure { set { [[Sets the default dialogs to use an Inwin instead of a normal window. @@ -106,7 +106,7 @@ class Elm.Web (Elm.Widget) value: bool; } } - @property tab_propagate { + @property tab_propagate @virtual_pure { set { [[Sets whether to use tab propagation. @@ -124,7 +124,7 @@ class Elm.Web (Elm.Widget) propagate: bool; [[Whether to propagate Tab keys to Elementary or not.]] } } - @property history_enabled { + @property history_enabled @virtual_pure { set { [[Enables or disables the browsing history.]] } @@ -135,7 +135,7 @@ class Elm.Web (Elm.Widget) enable: bool; [[Whether to enable or disable the browsing history.]] } } - @property zoom_mode { + @property zoom_mode @virtual_pure { set { [[Sets the zoom mode to use. @@ -162,7 +162,7 @@ class Elm.Web (Elm.Widget) mode: Elm.Web.Zoom_Mode; [[The mode to set.]] } } - @property zoom { + @property zoom @virtual_pure { set { [[Sets the zoom level of the web object. @@ -188,7 +188,7 @@ class Elm.Web (Elm.Widget) } } @property console_message_hook { - set { + set @virtual_pure { [[Sets the function to call when a console message is emitted from JS. @@ -203,7 +203,7 @@ class Elm.Web (Elm.Widget) } } @property window_create_hook { - set { + set @virtual_pure { [[Sets the function to call when a new window is requested. This hook will be called when a request to create a new @@ -219,7 +219,7 @@ class Elm.Web (Elm.Widget) } } @property dialog_file_selector_hook { - set { + set @virtual_pure { [[Sets the function to call when an file selector dialog. This hook will be called when a JavaScript file selector @@ -234,7 +234,7 @@ class Elm.Web (Elm.Widget) } } @property dialog_confirm_hook { - set { + set @virtual_pure { [[Sets the function to call when an confirm dialog. This hook will be called when a JavaScript confirm dialog is @@ -248,7 +248,7 @@ class Elm.Web (Elm.Widget) } } @property popup_selected { - set { + set @virtual_pure { [[Tells the web object which index in the currently open popup was selected. @@ -263,7 +263,7 @@ class Elm.Web (Elm.Widget) } } @property dialog_prompt_hook { - set { + set @virtual_pure { [[Sets the function to call when an prompt dialog. This hook will be called when a JavaScript prompt dialog is @@ -277,7 +277,7 @@ class Elm.Web (Elm.Widget) } } @property dialog_alert_hook { - set { + set @virtual_pure { [[Sets the function to call when an alert dialog. This hook will be called when a JavaScript alert dialog is @@ -291,13 +291,13 @@ class Elm.Web (Elm.Widget) } } @property forward_possible { - get { + get @virtual_pure { [[Queries whether it's possible to go forward in history.]] return: bool; } } @property webkit_view { - get { + get @virtual_pure { [[Get internal ewk_view object from web object. Elementary may not provide some low level features of EWebKit, @@ -312,13 +312,13 @@ class Elm.Web (Elm.Widget) } } @property back_possible { - get { + get @virtual_pure { [[Queries whether it's possible to go back in history.]] return: bool; } } @property load_progress { - get { + get @virtual_pure { [[Get the overall loading progress of the page. Returns the estimated loading progress of the page, with a @@ -330,7 +330,7 @@ class Elm.Web (Elm.Widget) } } @property selection { - get { + get @virtual_pure { [[Get a copy of the currently selected text. The string returned must be freed by the user when it's done @@ -342,7 +342,7 @@ class Elm.Web (Elm.Widget) } } @property title { - get { + get @virtual_pure { [[Get the current title. The returned string must not be freed and is guaranteed to be @@ -354,7 +354,7 @@ class Elm.Web (Elm.Widget) ]] } } - navigate { + navigate @virtual_pure { [[Jumps the given number of steps in the browsing history. The $steps value can be a negative integer to back in history, @@ -366,14 +366,14 @@ class Elm.Web (Elm.Widget) @in steps: int; [[The number of steps to jump.]] } } - back { + back @virtual_pure { [[Goes back one step in the browsing history. This is equivalent to calling elm_web_object_navigate(obj, -1); ]] return: bool; } - html_string_load { + html_string_load @virtual_pure { [[Loads the specified $html string as the content of the web object. @@ -393,7 +393,7 @@ class Elm.Web (Elm.Widget) @in unreachable_url: const(char)* @optional; [[URL that could not be reached (optional).]] } } - text_search @const { + text_search @const @virtual_pure { [[Searches the given string in a document.]] return: bool; [[$true if the given string was found, $false if not or failure.]] @@ -404,7 +404,7 @@ class Elm.Web (Elm.Widget) @in wrap: bool; [[If search should wrap at the end.]] } } - popup_destroy { + popup_destroy @virtual_pure { [[Dismisses an open dropdown popup When the popup from a dropdown widget is to be dismissed, either @@ -416,7 +416,7 @@ class Elm.Web (Elm.Widget) return: bool; [[$true if the menu was successfully destroyed, or $false if there was no menu to destroy.]] } - region_show { + region_show @virtual_pure { [[Shows the given region in the web object.]] params { @in x: int; [[The x coordinate of the region to show.]] @@ -425,7 +425,7 @@ class Elm.Web (Elm.Widget) @in h: int; [[The height of the region to show.]] } } - forward { + forward @virtual_pure { [[Goes forward one step in the browsing history. This is equivalent to calling elm_web_object_navigate(obj, 1); @@ -435,7 +435,7 @@ class Elm.Web (Elm.Widget) ]] return: bool; [[$true on success, $false otherwise.]] } - text_matches_mark { + text_matches_mark @virtual_pure { [[Marks matches of the given string in a document.]] return: uint; [[Number of matched $string.]] params { @@ -445,7 +445,7 @@ class Elm.Web (Elm.Widget) @in limit: uint; [[Maximum amount of matches, or zero to unlimited.]] } } - region_bring_in { + region_bring_in @virtual_pure { [[Brings in the region to the visible area. Like @.region_show, but it animates the scrolling of the object @@ -458,7 +458,7 @@ class Elm.Web (Elm.Widget) @in h: int; [[The height of the region to show.]] } } - stop { + stop @virtual_pure { [[Stops loading the current page. Cancels the loading of the current page in the web object. This @@ -467,7 +467,7 @@ class Elm.Web (Elm.Widget) ]] return: bool; [[$true if the cancel was successful, $false otherwise.]] } - navigate_possible_get { + navigate_possible_get @virtual_pure { [[Queries whether it's possible to jump the given number of steps. The $steps value can be a negative integer to back in history, @@ -479,17 +479,17 @@ class Elm.Web (Elm.Widget) @in steps: int; [[The number of steps to check for.]] } } - reload_full { + reload_full @virtual_pure { [[Requests a reload of the current document, avoiding any existing caches. ]] return: bool; [[$true on success, $false otherwise.]] } - text_matches_unmark_all { + text_matches_unmark_all @virtual_pure { [[Clears all marked matches in the document.]] return: bool; [[$true on success, $false otherwise.]] } - reload { + reload @virtual_pure { [[Requests a reload of the current document in the object.]] return: bool; [[$true on success, $false otherwise.]] } @@ -497,51 +497,6 @@ class Elm.Web (Elm.Widget) implements { class.constructor; Eo.Base.constructor; - @virtual .tab_propagate.get; - @virtual .tab_propagate.set; - @virtual .webkit_view.get; - @virtual .window_create_hook.set; - @virtual .dialog_alert_hook.set; - @virtual .dialog_confirm_hook.set; - @virtual .dialog_prompt_hook.set; - @virtual .dialog_file_selector_hook.set; - @virtual .console_message_hook.set; - @virtual .useragent.set; - @virtual .useragent.get; - @virtual .url.set; - @virtual .url.get; - @virtual .html_string_load; - @virtual .title.get; - @virtual .bg_color.set; - @virtual .bg_color.get; - @virtual .selection.get; - @virtual .popup_selected.set; - @virtual .popup_destroy; - @virtual .text_search; - @virtual .text_matches_mark; - @virtual .text_matches_unmark_all; - @virtual .text_matches_highlight.set; - @virtual .text_matches_highlight.get; - @virtual .load_progress.get; - @virtual .stop; - @virtual .reload; - @virtual .reload_full; - @virtual .back; - @virtual .forward; - @virtual .navigate; - @virtual .back_possible.get; - @virtual .forward_possible.get; - @virtual .navigate_possible_get; - @virtual .history_enabled.get; - @virtual .history_enabled.set; - @virtual .zoom.set; - @virtual .zoom.get; - @virtual .zoom_mode.set; - @virtual .zoom_mode.get; - @virtual .region_show; - @virtual .region_bring_in; - @virtual .inwin_mode.set; - @virtual .inwin_mode.get; } events { 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 } } @property parent_widget { - get { + get @virtual_pure { return: Evas.Object *; legacy: null; } @@ -612,7 +612,7 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte @in dir: Elm.Focus_Direction; [[Direction to move the focus.]] } } - focus_direction { + focus_direction @virtual_pure { [['Virtual' function handling passing focus to sub-objects given a direction, in degrees.]] params { @in base: const(Evas.Object)*; @@ -736,7 +736,7 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte } focus_hide_handle { } - focus_next { + focus_next @virtual_pure { [['Virtual' function handling passing focus to sub-objects.]] params { @in dir: Elm.Focus_Direction; @@ -860,9 +860,6 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte Evas.Object.Smart.member_add; Evas.Object.Smart.resize; Evas.Object.Smart.smart_no_render.set; - @virtual .focus_direction; - @virtual .focus_next; - @virtual .parent_widget.get; Elm.Interface.Atspi_Accessible.name.get; Elm.Interface.Atspi_Accessible.state_set.get; 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) else if (impl->is_prop_set) ftype = EOLIAN_PROP_SET; - if (impl->is_virtual) - { - foo_id = (Eolian_Function*)eolian_class_function_get_by_name(cl, - impl_name, ftype); - if (!foo_id) - return _func_error(cl, impl); - if (impl->is_prop_set) - foo_id->set_virtual_pure = EINA_TRUE; - else - foo_id->get_virtual_pure = EINA_TRUE; - - impl->full_name = eina_stringshare_printf("%s.%s", cl->full_name, - impl_name); - eina_stringshare_del(impl_name); - impl_name = impl->full_name; - - _write_impl(foo_id, impl); - } - else if (impl->is_auto) + if (impl->is_auto) { if (!_get_impl_func(cl, impl, ftype, &foo_id)) return _func_error(cl, impl); @@ -109,6 +91,14 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl) else if (!_get_impl_func(cl, impl, ftype, &foo_id)) return _func_error(cl, impl); + if (foo_id && foo_id->klass == cl && eolian_function_is_virtual_pure(foo_id, ftype)) + { + fprintf(stderr, "eolian:%s:%d:%d: impl of pure virtual '%s%s'\n", + impl->base.file, impl->base.line, impl->base.column, impl->full_name, + (impl->is_prop_get ? ".get" : (impl->is_prop_set ? ".set" : ""))); + return EINA_FALSE; + } + pasttags: if (impl_name[0] == '.') { @@ -148,9 +138,31 @@ _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id) if (foo_id->type == EOLIAN_PROPERTY) { + /* FIXME fugly hack, ideally rework the whole implements api altogether */ + if (foo_id->get_virtual_pure && !foo_id->get_impl) + { + impl->is_virtual = EINA_TRUE; + impl->is_prop_get = EINA_TRUE; + foo_id->get_impl = impl; + cl->implements = eina_list_append(cl->implements, impl); + /* repeat for set */ + _db_build_implement(cl, foo_id); + return; + } + else if (foo_id->set_virtual_pure && !foo_id->set_impl) + { + impl->is_virtual = EINA_TRUE; + impl->is_prop_set = EINA_TRUE; + foo_id->set_impl = impl; + cl->implements = eina_list_append(cl->implements, impl); + /* repeat for get */ + _db_build_implement(cl, foo_id); + return; + } if (foo_id->get_impl) { impl->is_prop_set = EINA_TRUE; + impl->is_virtual = foo_id->set_virtual_pure; foo_id->set_impl = impl; } else if (foo_id->set_impl) @@ -164,15 +176,20 @@ _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id) else if (foo_id->type == EOLIAN_PROP_SET) { impl->is_prop_set = EINA_TRUE; + impl->is_virtual = foo_id->get_virtual_pure; foo_id->set_impl = impl; } else if (foo_id->type == EOLIAN_PROP_GET) { impl->is_prop_get = EINA_TRUE; + impl->is_virtual = foo_id->set_virtual_pure; foo_id->get_impl = impl; } else - foo_id->get_impl = foo_id->set_impl = impl; + { + impl->is_virtual = foo_id->get_virtual_pure; + foo_id->get_impl = foo_id->set_impl = impl; + } cl->implements = eina_list_append(cl->implements, impl); } 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 KWAT(c_only), KWAT(class), KWAT(const), KWAT(empty), KWAT(extern), \ KWAT(free), KWAT(hot), KWAT(restart), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(nullable), \ KWAT(optional), KWAT(out), KWAT(private), KWAT(property), \ - KWAT(protected), KWAT(virtual), KWAT(warn_unused), \ + KWAT(protected), KWAT(virtual_pure), KWAT(warn_unused), \ \ KW(byte), KW(ubyte), KW(char), KW(short), KW(ushort), KW(int), KW(uint), \ 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) prop->type = EOLIAN_PROP_SET; } eo_lexer_get(ls); + if (ls->t.kw == KW_at_virtual_pure) + { + if (is_get) prop->get_virtual_pure = EINA_TRUE; + else prop->set_virtual_pure = EINA_TRUE; + eo_lexer_get(ls); + } line = ls->line_number; col = ls->column; check_next(ls, '{'); @@ -1181,9 +1187,9 @@ end: } static void -_interface_virtual_set(Eo_Lexer *ls, Eolian_Function *foo_id) +_func_virtual_set(Eo_Lexer *ls, Eolian_Function *foo_id, Eina_Bool virt) { - if (ls->tmp.kls->type != EOLIAN_CLASS_INTERFACE) + if (ls->tmp.kls->type != EOLIAN_CLASS_INTERFACE && !virt) return; if (foo_id->type == EOLIAN_PROP_GET || foo_id->type == EOLIAN_METHOD) @@ -1202,7 +1208,8 @@ parse_property(Eo_Lexer *ls) Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE, has_keys = EINA_FALSE, has_values = EINA_FALSE, has_protected = EINA_FALSE, has_class = EINA_FALSE, - has_c_only = EINA_FALSE, has_beta = EINA_FALSE; + has_c_only = EINA_FALSE, has_beta = EINA_FALSE, + has_virtp = EINA_FALSE; prop = calloc(1, sizeof(Eolian_Function)); prop->klass = ls->tmp.kls; prop->type = EOLIAN_UNRESOLVED; @@ -1233,6 +1240,10 @@ parse_property(Eo_Lexer *ls) prop->is_beta = EINA_TRUE; eo_lexer_get(ls); break; + case KW_at_virtual_pure: + CASE_LOCK(ls, virtp, "virtual_pure qualifier"); + eo_lexer_get(ls); + break; default: goto body; } @@ -1266,7 +1277,7 @@ end: check_match(ls, '}', '{', line, col); if (!has_get && !has_set) prop->type = EOLIAN_PROPERTY; - _interface_virtual_set(ls, prop); + _func_virtual_set(ls, prop, has_virtp); } static void @@ -1278,7 +1289,7 @@ parse_method(Eo_Lexer *ls) has_return = EINA_FALSE, has_legacy = EINA_FALSE, has_protected = EINA_FALSE, has_class = EINA_FALSE, has_eo = EINA_FALSE, has_c_only = EINA_FALSE, - has_beta = EINA_FALSE; + has_beta = EINA_FALSE, has_virtp = EINA_FALSE; meth = calloc(1, sizeof(Eolian_Function)); meth->klass = ls->tmp.kls; meth->type = EOLIAN_METHOD; @@ -1314,6 +1325,10 @@ parse_method(Eo_Lexer *ls) meth->is_beta = EINA_TRUE; eo_lexer_get(ls); break; + case KW_at_virtual_pure: + CASE_LOCK(ls, virtp, "virtual_pure qualifier"); + eo_lexer_get(ls); + break; default: goto body; } @@ -1356,7 +1371,7 @@ body: } end: check_match(ls, '}', '{', line, col); - _interface_virtual_set(ls, meth); + _func_virtual_set(ls, meth, has_virtp); } static void @@ -1389,10 +1404,6 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface) ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl); switch (ls->t.kw) { - case KW_at_virtual: - impl->is_virtual = EINA_TRUE; - eo_lexer_get(ls); - break; case KW_at_auto: impl->is_auto = EINA_TRUE; eo_lexer_get(ls); @@ -1406,15 +1417,12 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface) } if (ls->t.token == '.') { - if (!impl->is_virtual && !impl->is_auto && !impl->is_empty) + if (!impl->is_auto && !impl->is_empty) goto fullclass; check_next(ls, '.'); if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set)) eo_lexer_syntax_error(ls, "name expected"); - if (impl->is_virtual) - impl->full_name = eina_stringshare_ref(ls->t.value.s); - else - impl->full_name = eina_stringshare_printf(".%s", ls->t.value.s); + impl->full_name = eina_stringshare_printf(".%s", ls->t.value.s); eo_lexer_get(ls); if (ls->t.token == '.') { 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) Set to $null to detach this surface from the external buffer. ]] get {} - set { + set @virtual_pure { [[Set the buffer. If this fails, this function returns $false, and the surface is left without any attached buffer. ]] @@ -29,6 +29,5 @@ mixin Efl.Canvas.Surface (Evas.Image) } implements { Eo.Base.constructor; - @virtual .native_buffer.set; } } 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) Evas_VG_Quality q; } } */ - bounds_get { + bounds_get @virtual_pure { [[Give the bounding box in screen coordinate as being drawn. 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) Efl.Gfx.Stack.stack_above; Efl.Gfx.Stack.raise; Efl.Gfx.Stack.lower; - @virtual .bounds_get; } } 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) update { [[Update request for the object.]] } - update_notify { + update_notify @virtual_pure { [[Pure virtual update_notify function. Update request for the object.]] } - change_notify { + change_notify @virtual_pure { [[Pure virtual change_notify function. Update request for the object.]] @@ -50,14 +50,14 @@ class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface) @in ref: Evas.Canvas3D.Object *; [[The Object that caused the change.]] } } - callback_register { + callback_register @virtual_pure { [[Pure virtual register samrt callback function.]] params { @in event: const(char)*; [[Event type.]] @in data: const(void)*; [[User data.]] } } - callback_unregister { + callback_unregister @virtual_pure { [[Pure virtual unregister smart callback function.]] params { @in event: const(char)*; [[Event type.]] @@ -70,10 +70,6 @@ class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface) Eo.Base.event_callback_priority_add; Eo.Base.event_callback_del; Evas.Common_Interface.evas.get; - @virtual .update_notify; - @virtual .change_notify; - @virtual .callback_register; - @virtual .callback_unregister; } events { 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) val: bool; } } - filter_input_alpha @protected { + filter_input_alpha @protected @virtual_pure { [[Called by Evas.Filter to determine whether the input is alpha or rgba.]] return: bool; } - filter_input_render @protected { + filter_input_render @protected @virtual_pure { [[Called by Evas.Filter when the parent class must render the input. ; ]] @@ -41,7 +41,7 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base) do_async: bool; } } - filter_dirty @protected { + filter_dirty @protected @virtual_pure { [[Called when the filter changes must trigger a redraw of the object. Virtual, to be implemented in the parent class. @@ -71,8 +71,5 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base) Efl.Gfx.Filter.filter_source.get; Efl.Gfx.Filter.filter_data.get; Efl.Gfx.Filter.filter_data.set; - @virtual .filter_input_alpha; - @virtual .filter_input_render; - @virtual .filter_dirty; } } 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 { c: float; } } - constructor { + constructor @virtual_pure { } destructor { } } - implements { - @virtual .constructor; - } constructors { .constructor; } 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 { methods { @property a { - set { + set @virtual_pure { } } } - implements { - @virtual .a.set; - } } 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) { @property b { set { } - get { + get @virtual_pure { /* set as virtual pure - no implementation expected */ } values { @@ -50,7 +50,7 @@ class Object_Impl (Base) { @in b: const(char)*; } } - pure_foo3 { + pure_foo3 @virtual_pure { /* set as virtual pure - no implementation expected */ } } @@ -59,8 +59,6 @@ class Object_Impl (Base) { class.destructor; Base.constructor; Base.destructor; - @virtual .pure_foo3; - @virtual .b.get; } constructors { .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 @@ class Override (Base) { methods { @property a { - set { + set @virtual_pure { } get { } @@ -32,7 +32,7 @@ class Override (Base) { c: int(50); } } - foo { + foo @virtual_pure { } bar { params { @@ -44,8 +44,6 @@ class Override (Base) { } implements { Base.constructor; - @virtual .a.set; - @virtual .foo; @auto .b.set; @empty .bar; @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 @@ -EOAPI EO_VOID_FUNC_BODY(override_a_set); -EOAPI EO_VOID_FUNC_BODY(override_foo); static void __eolian_override_b_set(Eo *obj EINA_UNUSED, Override_Data *pd, int idx EINA_UNUSED, float a, char b, int c) { @@ -24,6 +22,7 @@ static int __eolian_override_c_get(Eo *obj EINA_UNUSED, Override_Data *pd EINA_U } EOAPI EO_FUNC_BODYV_CONST(override_c_get, int, 50, EO_FUNC_CALL(idx), int idx); +EOAPI EO_VOID_FUNC_BODY(override_a_set); void _override_a_get(Eo *obj, Override_Data *pd); @@ -36,6 +35,7 @@ EOAPI EO_VOID_FUNC_BODYV_CONST(override_b_get, EO_FUNC_CALL(idx, a, b, c), int i void _override_c_set(Eo *obj, Override_Data *pd, int idx, int c); EOAPI EO_VOID_FUNC_BODYV(override_c_set, EO_FUNC_CALL(idx, c), int idx, int c); +EOAPI EO_VOID_FUNC_BODY(override_foo); void _override_base_constructor(Eo *obj, Override_Data *pd); @@ -57,14 +57,14 @@ static const Eo_Op_Description _override_op_desc[] = { EO_OP_FUNC_OVERRIDE(base_constructor, _override_base_constructor), EO_OP_FUNC_OVERRIDE(base_z_get, __eolian_override_base_z_get), EO_OP_FUNC_OVERRIDE(base_z_set, __eolian_override_base_z_set), - EO_OP_FUNC(override_a_set, NULL), - EO_OP_FUNC(override_foo, NULL), EO_OP_FUNC(override_b_set, __eolian_override_b_set), EO_OP_FUNC(override_bar, __eolian_override_bar), EO_OP_FUNC(override_c_get, __eolian_override_c_get), + EO_OP_FUNC(override_a_set, NULL), EO_OP_FUNC(override_a_get, _override_a_get), EO_OP_FUNC(override_b_get, _override_b_get), EO_OP_FUNC(override_c_set, _override_c_set), + EO_OP_FUNC(override_foo, NULL), }; static const Eo_Class_Description _override_class_desc = { @@ -78,4 +78,4 @@ static const Eo_Class_Description _override_class_desc = { NULL }; -EO_DEFINE_CLASS(override_class_get, &_override_class_desc, BASE_CLASS, NULL); +EO_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 @@ -221,33 +221,6 @@ START_TEST(eolian_override) fail_if(impl_class != base); fail_if(strcmp(eolian_function_name_get(impl_func), "constructor")); - fail_if(!(eina_iterator_next(iter, (void**)&impl))); - fail_if(eolian_implement_is_auto(impl)); - fail_if(eolian_implement_is_empty(impl)); - fail_if(!eolian_implement_is_virtual(impl)); - fail_if(!(impl_class = eolian_implement_class_get(impl))); - fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); - fail_if(impl_class != class); - fail_if(strcmp(eolian_function_name_get(impl_func), "a")); - fail_if(eolian_function_is_auto(impl_func, EOLIAN_PROP_SET)); - fail_if(eolian_function_is_auto(impl_func, EOLIAN_PROP_GET)); - fail_if(eolian_function_is_empty(impl_func, EOLIAN_PROP_SET)); - fail_if(eolian_function_is_empty(impl_func, EOLIAN_PROP_GET)); - fail_if(!eolian_function_is_virtual_pure(impl_func, EOLIAN_PROP_SET)); - fail_if(eolian_function_is_virtual_pure(impl_func, EOLIAN_PROP_GET)); - - fail_if(!(eina_iterator_next(iter, (void**)&impl))); - fail_if(eolian_implement_is_auto(impl)); - fail_if(eolian_implement_is_empty(impl)); - fail_if(!eolian_implement_is_virtual(impl)); - fail_if(!(impl_class = eolian_implement_class_get(impl))); - fail_if(!(impl_func = eolian_implement_function_get(impl, NULL))); - fail_if(impl_class != class); - fail_if(strcmp(eolian_function_name_get(impl_func), "foo")); - fail_if(eolian_function_is_auto(impl_func, EOLIAN_METHOD)); - fail_if(eolian_function_is_empty(impl_func, EOLIAN_METHOD)); - fail_if(!eolian_function_is_virtual_pure(impl_func, EOLIAN_METHOD)); - fail_if(!(eina_iterator_next(iter, (void**)&impl))); fail_if(!eolian_implement_is_auto(impl)); fail_if(eolian_implement_is_empty(impl));