eolian: mark pure virtual funcs outside of implements

This is a better syntax and should've been like this in the first place.
This commit is contained in:
Daniel Kolesa 2016-05-12 15:41:56 +01:00
parent 6cacef2503
commit 7e94eb22b4
27 changed files with 154 additions and 276 deletions

View File

@ -58,7 +58,7 @@ class Ecore.Audio (Eo.Base)
volume: double; [[The volume]] volume: double; [[The volume]]
} }
} }
@property source { @property source @virtual_pure {
[[Source of the object [[Source of the object
What sources are supported depends on the actual 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)]] source: const(char)*; [[the source to set to (i.e. file, URL, device)]]
} }
} }
@property format { @property format @virtual_pure {
[[Format of the object.]] [[Format of the object.]]
set { set {
[[Set the format of the object [[Set the format of the object
@ -103,7 +103,7 @@ class Ecore.Audio (Eo.Base)
format: Ecore.Audio.Format; [[the format of the object]] format: Ecore.Audio.Format; [[the format of the object]]
} }
} }
vio_set { vio_set @virtual_pure {
[[Set the virtual IO functions [[Set the virtual IO functions
@since 1.8 @since 1.8
@ -123,10 +123,5 @@ class Ecore.Audio (Eo.Base)
} }
implements { implements {
Eo.Base.constructor; Eo.Base.constructor;
@virtual .source.get;
@virtual .source.set;
@virtual .format.get;
@virtual .format.set;
@virtual .vio_set;
} }
} }

View File

@ -44,7 +44,7 @@ class Ecore.Audio.In (Ecore.Audio)
channels: int; [[The number of channels]] channels: int; [[The number of channels]]
} }
} }
@property preloaded { @property preloaded @virtual_pure {
[[Preloaded state of the input [[Preloaded state of the input
@since 1.8 @since 1.8
@ -82,7 +82,7 @@ class Ecore.Audio.In (Ecore.Audio)
@since 1.8 @since 1.8
]] ]]
set { set @virtual_pure {
} }
get { get {
} }
@ -134,7 +134,7 @@ class Ecore.Audio.In (Ecore.Audio)
@in len: size; [[The amount of samples to read]] @in len: size; [[The amount of samples to read]]
} }
} }
seek { seek @virtual_pure {
[[Seek within the input [[Seek within the input
@since 1.8 @since 1.8
@ -153,10 +153,6 @@ class Ecore.Audio.In (Ecore.Audio)
Eo.Base.constructor; Eo.Base.constructor;
Eo.Base.destructor; Eo.Base.destructor;
Ecore.Audio.vio_set; Ecore.Audio.vio_set;
@virtual .preloaded.get;
@virtual .preloaded.set;
@virtual .seek;
@virtual .length.set;
} }
events { events {
in,looped; [[Called when an input has looped.]] in,looped; [[Called when an input has looped.]]

View File

@ -45,7 +45,7 @@ abstract Efl.Network (Eo.Base) {
valid after deletion for the svr object. If no IP is known valid after deletion for the svr object. If no IP is known
null is returned. null is returned.
]] ]]
get { get @virtual_pure {
legacy: null; legacy: null;
} }
values { values {
@ -58,14 +58,14 @@ abstract Efl.Network (Eo.Base) {
This function is used to find out how long a client has been This function is used to find out how long a client has been
connected. connected.
]] ]]
get { get @virtual_pure {
legacy: null; legacy: null;
} }
values { values {
uptime: double; [[The total time, in seconds, that the object has been connected.]] 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]] [[The port that the obj is connected to]]
set { set {
legacy: null; legacy: null;
@ -91,7 +91,7 @@ abstract Efl.Network (Eo.Base) {
@since 1.1 @since 1.1
]] ]]
get { get @virtual_pure {
legacy: null; legacy: null;
} }
values { values {
@ -100,14 +100,14 @@ abstract Efl.Network (Eo.Base) {
} }
@property connected { @property connected {
[[Returns whether the client is still connected]] [[Returns whether the client is still connected]]
get { get @virtual_pure {
legacy: null; legacy: null;
} }
values { values {
connected: bool; [[Returns true if connected, false otherwise.]] 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 [[Control the default time after which an inactive client will be
disconnected. disconnected.
@ -131,14 +131,14 @@ abstract Efl.Network (Eo.Base) {
timeout: double; [[The timeout, in seconds, to disconnect after.]] timeout: double; [[The timeout, in seconds, to disconnect after.]]
} }
} }
flush { flush @virtual_pure {
[[Flushes all pending data to the given server. [[Flushes all pending data to the given server.
This function will block until all data is sent to the server. This function will block until all data is sent to the server.
]] ]]
legacy: null; legacy: null;
} }
send { send @virtual_pure {
[[Sends the given data to the given server. [[Sends the given data to the given server.
This function will send the given data to the server as soon as the 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.]] 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 { events {
data,received: Ecore.Con.Event_Data.Received; [[Data received on connection]] data,received: Ecore.Con.Event_Data.Received; [[Data received on connection]]
connection,upgraded; connection,upgraded;

View File

@ -2,7 +2,7 @@ abstract Ector.Renderer.Cairo (Ector.Renderer)
{ {
legacy_prefix: null; legacy_prefix: null;
methods { methods {
fill { fill @virtual_pure {
return: bool; return: bool;
params { params {
@in mul_col: uint; @in mul_col: uint;
@ -10,7 +10,6 @@ abstract Ector.Renderer.Cairo (Ector.Renderer)
} }
} }
implements { implements {
@virtual .fill;
Ector.Renderer.prepare; Ector.Renderer.prepare;
Ector.Renderer.draw; Ector.Renderer.draw;
Ector.Renderer.color.set; Ector.Renderer.color.set;

View File

@ -44,7 +44,7 @@ mixin Ector.Buffer
cspace: Efl.Gfx.Colorspace; [[Colorspace]] cspace: Efl.Gfx.Colorspace; [[Colorspace]]
} }
} }
map { map @virtual_pure {
[[Map a region of this buffer for read or write access by the CPU, [[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 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 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]] 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).]] [[Unmap a region of this buffer, and upload data to the GPU (if needed).]]
params { params {
@in data: void*; [[Data pointer returned by a previous call to map]] @in data: void*; [[Data pointer returned by a previous call to map]]
@in length: uint; [[Must be the same as returned by 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]] [[Set the source pixels for this buffer, or allocate a new memory region]]
params { params {
@in pixels: void*; [[If $null, allocates an empty buffer]] @in pixels: void*; [[If $null, allocates an empty buffer]]
@ -87,7 +87,7 @@ mixin Ector.Buffer
} }
return: bool; [[True if pixels_set was successful]] 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) [[Get a single horizontal span of length w starting from (x,y)
Call span_free() to release it. This function will try not to 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.]] 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]] [[Must be called as soon as possible after span_get]]
params { params {
data: uint8*; [[Data to be freed]] data: uint8*; [[Data to be freed]]
@ -130,11 +130,4 @@ mixin Ector.Buffer
events { events {
detached; [[Emitted whenever the previously attached pixels are detached during pixels_set]] 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;
}
} }

View File

@ -105,13 +105,13 @@ abstract Ector.Renderer (Eo.Base)
return: uint; [[CRC value]] return: uint; [[CRC value]]
} }
} }
bounds_get { bounds_get @virtual_pure {
[[Retrieve the bounds of the renderer]] [[Retrieve the bounds of the renderer]]
params { params {
@out r: Eina.Rectangle; [[Bounds as @Eina.Rectangle]] @out r: Eina.Rectangle; [[Bounds as @Eina.Rectangle]]
} }
} }
draw { draw @virtual_pure {
return: bool @warn_unused; return: bool @warn_unused;
params { params {
@in op: Efl.Gfx.Render_Op; @in op: Efl.Gfx.Render_Op;
@ -124,15 +124,12 @@ abstract Ector.Renderer (Eo.Base)
params { params {
} }
} }
done { done @virtual_pure {
return: bool @warn_unused; return: bool @warn_unused;
} }
} }
implements { implements {
Eo.Base.destructor; Eo.Base.destructor;
Eo.Base.finalize; Eo.Base.finalize;
@virtual .draw;
@virtual .bounds_get;
@virtual .done;
} }
} }

View File

@ -8,14 +8,14 @@ mixin Ector.Surface (Ector.Buffer)
methods { methods {
@property reference_point { @property reference_point {
[[This define where is (0,0) in pixels coordinate inside the surface]] [[This define where is (0,0) in pixels coordinate inside the surface]]
set { set @virtual_pure {
} }
values { values {
x: int; [[X coordinate for reference point]] x: int; [[X coordinate for reference point]]
y: int; [[Y 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]] [[Create a new renderer factory for the given type]]
return: Eo.Base *; /* FIXME: Should be a more restricted type, only here for cyclic. */ return: Eo.Base *; /* FIXME: Should be a more restricted type, only here for cyclic. */
params { params {
@ -23,8 +23,4 @@ mixin Ector.Surface (Ector.Buffer)
} }
} }
} }
implements {
@virtual .renderer_factory_new;
@virtual .reference_point.set;
}
} }

View File

@ -4,7 +4,7 @@ abstract Ector.Renderer.GL (Ector.Renderer)
{ {
legacy_prefix: null; legacy_prefix: null;
methods { methods {
fill { fill @virtual_pure {
return: bool; return: bool;
params { params {
@in flags: uint64; @in flags: uint64;
@ -15,7 +15,6 @@ abstract Ector.Renderer.GL (Ector.Renderer)
} }
} }
implements { implements {
@virtual .fill;
Ector.Renderer.prepare; Ector.Renderer.prepare;
Ector.Renderer.draw; Ector.Renderer.draw;
Eo.Base.constructor; Eo.Base.constructor;

View File

@ -3,11 +3,8 @@ class Ector.Renderer.Software (Ector.Renderer)
legacy_prefix: null; legacy_prefix: null;
data: null; data: null;
methods { methods {
fill { fill @virtual_pure {
return: bool; return: bool;
} }
} }
implements {
@virtual .fill;
}
} }

View File

@ -4,7 +4,7 @@ mixin Elm.Interface.Atspi_Action ()
eo_prefix: elm_interface_atspi_action; eo_prefix: elm_interface_atspi_action;
data: null; data: null;
methods { methods {
@property name @protected { @property name @protected @virtual_pure {
get { get {
[[Gets action name for given id]] [[Gets action name for given id]]
} }
@ -26,7 +26,7 @@ mixin Elm.Interface.Atspi_Action ()
id: int; id: int;
} }
} }
@property description @protected { @property description @protected @virtual_pure {
get { get {
[[Gets action description for given id]] [[Gets action description for given id]]
} }
@ -42,21 +42,21 @@ mixin Elm.Interface.Atspi_Action ()
} }
} }
@property actions @protected { @property actions @protected {
get { get @virtual_pure {
[[Get list of available widget actions]] [[Get list of available widget actions]]
} }
values { values {
actions: list<Elm_Atspi_Action> *; [[contains statically allocated strings]] actions: list<Elm_Atspi_Action> *; [[contains statically allocated strings]]
} }
} }
action_do @protected { action_do @protected @virtual_pure {
[[Performs action on given widget.]] [[Performs action on given widget.]]
params { params {
@in id: int; @in id: int;
} }
return: bool; return: bool;
} }
keybinding_get @protected { keybinding_get @protected @virtual_pure {
[[Gets configured keybinding for specific action and widget.]] [[Gets configured keybinding for specific action and widget.]]
params { params {
@in id: int; @in id: int;
@ -64,13 +64,4 @@ mixin Elm.Interface.Atspi_Action ()
return: own(char *) @warn_unused; [[Should be freed by the user.]] 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;
}
} }

View File

@ -5,7 +5,7 @@ mixin Elm.Interface.Atspi_Image ()
data: null; data: null;
methods { methods {
@property extents @protected { @property extents @protected {
get { get @virtual_pure {
[[Gets an image extents.]] [[Gets an image extents.]]
} }
keys { keys {
@ -37,7 +37,4 @@ mixin Elm.Interface.Atspi_Image ()
} }
} }
} }
implements {
@virtual .extents.get;
}
} }

View File

@ -7,7 +7,7 @@ mixin Elm.Interface.Atspi_Widget_Action (Elm.Interface.Atspi_Action)
data: null; data: null;
methods { methods {
@property elm_actions @protected { @property elm_actions @protected {
get { get @virtual_pure {
} }
values { values {
actions: const(Elm_Atspi_Action)*; [[NULL-terminated array of Elm_Atspi_Action]] 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.set;
Elm.Interface.Atspi_Action.description.get; Elm.Interface.Atspi_Action.description.get;
Elm.Interface.Atspi_Action.actions.get; Elm.Interface.Atspi_Action.actions.get;
@virtual .elm_actions.get;
} }
} }

View File

@ -18,7 +18,7 @@ class Elm.Web (Elm.Widget)
{ {
eo_prefix: elm_obj_web; eo_prefix: elm_obj_web;
methods { methods {
@property text_matches_highlight { @property text_matches_highlight @virtual_pure {
set { set {
[[Sets whether to highlight the matched marks. [[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.]] highlight: bool; [[Whether to highlight the marks or not.]]
} }
} }
@property useragent { @property useragent @virtual_pure {
set { set {
[[Change useragent of a elm_web object.]] [[Change useragent of a elm_web object.]]
} }
@ -45,7 +45,7 @@ class Elm.Web (Elm.Widget)
user_agent: const(char)*; [[String for useragent.]] user_agent: const(char)*; [[String for useragent.]]
} }
} }
@property url { @property url @virtual_pure {
set { set {
[[Sets the URL for the web object. [[Sets the URL for the web object.
@ -65,7 +65,7 @@ class Elm.Web (Elm.Widget)
url: const(char)*; [[The URL to set.]] url: const(char)*; [[The URL to set.]]
} }
} }
@property bg_color { @property bg_color @virtual_pure {
set { set {
[[Sets the background color to be used by the web object. [[Sets the background color to be used by the web object.
@ -89,7 +89,7 @@ class Elm.Web (Elm.Widget)
a: int; [[Alpha component.]] a: int; [[Alpha component.]]
} }
} }
@property inwin_mode { @property inwin_mode @virtual_pure {
set { set {
[[Sets the default dialogs to use an Inwin instead of a [[Sets the default dialogs to use an Inwin instead of a
normal window. normal window.
@ -106,7 +106,7 @@ class Elm.Web (Elm.Widget)
value: bool; value: bool;
} }
} }
@property tab_propagate { @property tab_propagate @virtual_pure {
set { set {
[[Sets whether to use tab propagation. [[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.]] propagate: bool; [[Whether to propagate Tab keys to Elementary or not.]]
} }
} }
@property history_enabled { @property history_enabled @virtual_pure {
set { set {
[[Enables or disables the browsing history.]] [[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.]] enable: bool; [[Whether to enable or disable the browsing history.]]
} }
} }
@property zoom_mode { @property zoom_mode @virtual_pure {
set { set {
[[Sets the zoom mode to use. [[Sets the zoom mode to use.
@ -162,7 +162,7 @@ class Elm.Web (Elm.Widget)
mode: Elm.Web.Zoom_Mode; [[The mode to set.]] mode: Elm.Web.Zoom_Mode; [[The mode to set.]]
} }
} }
@property zoom { @property zoom @virtual_pure {
set { set {
[[Sets the zoom level of the web object. [[Sets the zoom level of the web object.
@ -188,7 +188,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property console_message_hook { @property console_message_hook {
set { set @virtual_pure {
[[Sets the function to call when a console message is emitted [[Sets the function to call when a console message is emitted
from JS. from JS.
@ -203,7 +203,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property window_create_hook { @property window_create_hook {
set { set @virtual_pure {
[[Sets the function to call when a new window is requested. [[Sets the function to call when a new window is requested.
This hook will be called when a request to create a new 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 { @property dialog_file_selector_hook {
set { set @virtual_pure {
[[Sets the function to call when an file selector dialog. [[Sets the function to call when an file selector dialog.
This hook will be called when a JavaScript file selector This hook will be called when a JavaScript file selector
@ -234,7 +234,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property dialog_confirm_hook { @property dialog_confirm_hook {
set { set @virtual_pure {
[[Sets the function to call when an confirm dialog. [[Sets the function to call when an confirm dialog.
This hook will be called when a JavaScript confirm dialog is This hook will be called when a JavaScript confirm dialog is
@ -248,7 +248,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property popup_selected { @property popup_selected {
set { set @virtual_pure {
[[Tells the web object which index in the currently open popup [[Tells the web object which index in the currently open popup
was selected. was selected.
@ -263,7 +263,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property dialog_prompt_hook { @property dialog_prompt_hook {
set { set @virtual_pure {
[[Sets the function to call when an prompt dialog. [[Sets the function to call when an prompt dialog.
This hook will be called when a JavaScript prompt dialog is This hook will be called when a JavaScript prompt dialog is
@ -277,7 +277,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property dialog_alert_hook { @property dialog_alert_hook {
set { set @virtual_pure {
[[Sets the function to call when an alert dialog. [[Sets the function to call when an alert dialog.
This hook will be called when a JavaScript alert dialog is This hook will be called when a JavaScript alert dialog is
@ -291,13 +291,13 @@ class Elm.Web (Elm.Widget)
} }
} }
@property forward_possible { @property forward_possible {
get { get @virtual_pure {
[[Queries whether it's possible to go forward in history.]] [[Queries whether it's possible to go forward in history.]]
return: bool; return: bool;
} }
} }
@property webkit_view { @property webkit_view {
get { get @virtual_pure {
[[Get internal ewk_view object from web object. [[Get internal ewk_view object from web object.
Elementary may not provide some low level features of EWebKit, Elementary may not provide some low level features of EWebKit,
@ -312,13 +312,13 @@ class Elm.Web (Elm.Widget)
} }
} }
@property back_possible { @property back_possible {
get { get @virtual_pure {
[[Queries whether it's possible to go back in history.]] [[Queries whether it's possible to go back in history.]]
return: bool; return: bool;
} }
} }
@property load_progress { @property load_progress {
get { get @virtual_pure {
[[Get the overall loading progress of the page. [[Get the overall loading progress of the page.
Returns the estimated loading progress of the page, with a Returns the estimated loading progress of the page, with a
@ -330,7 +330,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property selection { @property selection {
get { get @virtual_pure {
[[Get a copy of the currently selected text. [[Get a copy of the currently selected text.
The string returned must be freed by the user when it's done The string returned must be freed by the user when it's done
@ -342,7 +342,7 @@ class Elm.Web (Elm.Widget)
} }
} }
@property title { @property title {
get { get @virtual_pure {
[[Get the current title. [[Get the current title.
The returned string must not be freed and is guaranteed to be 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. [[Jumps the given number of steps in the browsing history.
The $steps value can be a negative integer to back in 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.]] @in steps: int; [[The number of steps to jump.]]
} }
} }
back { back @virtual_pure {
[[Goes back one step in the browsing history. [[Goes back one step in the browsing history.
This is equivalent to calling elm_web_object_navigate(obj, -1); This is equivalent to calling elm_web_object_navigate(obj, -1);
]] ]]
return: bool; return: bool;
} }
html_string_load { html_string_load @virtual_pure {
[[Loads the specified $html string as the content of the web [[Loads the specified $html string as the content of the web
object. object.
@ -393,7 +393,7 @@ class Elm.Web (Elm.Widget)
@in unreachable_url: const(char)* @optional; [[URL that could not be reached (optional).]] @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.]] [[Searches the given string in a document.]]
return: bool; [[$true if the given string was found, $false if not return: bool; [[$true if the given string was found, $false if not
or failure.]] or failure.]]
@ -404,7 +404,7 @@ class Elm.Web (Elm.Widget)
@in wrap: bool; [[If search should wrap at the end.]] @in wrap: bool; [[If search should wrap at the end.]]
} }
} }
popup_destroy { popup_destroy @virtual_pure {
[[Dismisses an open dropdown popup [[Dismisses an open dropdown popup
When the popup from a dropdown widget is to be dismissed, either 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 return: bool; [[$true if the menu was successfully destroyed, or
$false if there was no menu to destroy.]] $false if there was no menu to destroy.]]
} }
region_show { region_show @virtual_pure {
[[Shows the given region in the web object.]] [[Shows the given region in the web object.]]
params { params {
@in x: int; [[The x coordinate of the region to show.]] @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.]] @in h: int; [[The height of the region to show.]]
} }
} }
forward { forward @virtual_pure {
[[Goes forward one step in the browsing history. [[Goes forward one step in the browsing history.
This is equivalent to calling elm_web_object_navigate(obj, 1); 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.]] return: bool; [[$true on success, $false otherwise.]]
} }
text_matches_mark { text_matches_mark @virtual_pure {
[[Marks matches of the given string in a document.]] [[Marks matches of the given string in a document.]]
return: uint; [[Number of matched $string.]] return: uint; [[Number of matched $string.]]
params { params {
@ -445,7 +445,7 @@ class Elm.Web (Elm.Widget)
@in limit: uint; [[Maximum amount of matches, or zero to unlimited.]] @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. [[Brings in the region to the visible area.
Like @.region_show, but it animates the scrolling of the object 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.]] @in h: int; [[The height of the region to show.]]
} }
} }
stop { stop @virtual_pure {
[[Stops loading the current page. [[Stops loading the current page.
Cancels the loading of the current page in the web object. This 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.]] 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. [[Queries whether it's possible to jump the given number of steps.
The $steps value can be a negative integer to back in history, 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.]] @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 [[Requests a reload of the current document, avoiding any
existing caches. existing caches.
]] ]]
return: bool; [[$true on success, $false otherwise.]] return: bool; [[$true on success, $false otherwise.]]
} }
text_matches_unmark_all { text_matches_unmark_all @virtual_pure {
[[Clears all marked matches in the document.]] [[Clears all marked matches in the document.]]
return: bool; [[$true on success, $false otherwise.]] return: bool; [[$true on success, $false otherwise.]]
} }
reload { reload @virtual_pure {
[[Requests a reload of the current document in the object.]] [[Requests a reload of the current document in the object.]]
return: bool; [[$true on success, $false otherwise.]] return: bool; [[$true on success, $false otherwise.]]
} }
@ -497,51 +497,6 @@ class Elm.Web (Elm.Widget)
implements { implements {
class.constructor; class.constructor;
Eo.Base.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 { events {
uri,changed; uri,changed;

View File

@ -417,7 +417,7 @@ abstract Elm.Widget (Evas.Object.Smart, Elm.Interface.Atspi_Accessible, Elm.Inte
} }
} }
@property parent_widget { @property parent_widget {
get { get @virtual_pure {
return: Evas.Object *; return: Evas.Object *;
legacy: null; 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.]] @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.]] [['Virtual' function handling passing focus to sub-objects given a direction, in degrees.]]
params { params {
@in base: const(Evas.Object)*; @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_hide_handle {
} }
focus_next { focus_next @virtual_pure {
[['Virtual' function handling passing focus to sub-objects.]] [['Virtual' function handling passing focus to sub-objects.]]
params { params {
@in dir: Elm.Focus_Direction; @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.member_add;
Evas.Object.Smart.resize; Evas.Object.Smart.resize;
Evas.Object.Smart.smart_no_render.set; 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.name.get;
Elm.Interface.Atspi_Accessible.state_set.get; Elm.Interface.Atspi_Accessible.state_set.get;
Elm.Interface.Atspi_Accessible.children.get; Elm.Interface.Atspi_Accessible.children.get;

View File

@ -62,25 +62,7 @@ _db_fill_implement(Eolian_Class *cl, Eolian_Implement *impl)
else if (impl->is_prop_set) else if (impl->is_prop_set)
ftype = EOLIAN_PROP_SET; ftype = EOLIAN_PROP_SET;
if (impl->is_virtual) if (impl->is_auto)
{
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 (!_get_impl_func(cl, impl, ftype, &foo_id)) if (!_get_impl_func(cl, impl, ftype, &foo_id))
return _func_error(cl, impl); 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)) else if (!_get_impl_func(cl, impl, ftype, &foo_id))
return _func_error(cl, impl); 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: pasttags:
if (impl_name[0] == '.') if (impl_name[0] == '.')
{ {
@ -148,9 +138,31 @@ _db_build_implement(Eolian_Class *cl, Eolian_Function *foo_id)
if (foo_id->type == EOLIAN_PROPERTY) 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) if (foo_id->get_impl)
{ {
impl->is_prop_set = EINA_TRUE; impl->is_prop_set = EINA_TRUE;
impl->is_virtual = foo_id->set_virtual_pure;
foo_id->set_impl = impl; foo_id->set_impl = impl;
} }
else if (foo_id->set_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) else if (foo_id->type == EOLIAN_PROP_SET)
{ {
impl->is_prop_set = EINA_TRUE; impl->is_prop_set = EINA_TRUE;
impl->is_virtual = foo_id->get_virtual_pure;
foo_id->set_impl = impl; foo_id->set_impl = impl;
} }
else if (foo_id->type == EOLIAN_PROP_GET) else if (foo_id->type == EOLIAN_PROP_GET)
{ {
impl->is_prop_get = EINA_TRUE; impl->is_prop_get = EINA_TRUE;
impl->is_virtual = foo_id->set_virtual_pure;
foo_id->get_impl = impl; foo_id->get_impl = impl;
} }
else 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); cl->implements = eina_list_append(cl->implements, impl);
} }

View File

@ -32,7 +32,7 @@ enum Tokens
KWAT(c_only), KWAT(class), KWAT(const), KWAT(empty), KWAT(extern), \ 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(free), KWAT(hot), KWAT(restart), KWAT(in), KWAT(inout), KWAT(nonull), KWAT(nullable), \
KWAT(optional), KWAT(out), KWAT(private), KWAT(property), \ 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(byte), KW(ubyte), KW(char), KW(short), KW(ushort), KW(int), KW(uint), \
KW(long), KW(ulong), KW(llong), KW(ullong), \ KW(long), KW(ulong), KW(llong), KW(ullong), \

View File

@ -1105,6 +1105,12 @@ parse_accessor(Eo_Lexer *ls, Eolian_Function *prop)
prop->type = EOLIAN_PROP_SET; prop->type = EOLIAN_PROP_SET;
} }
eo_lexer_get(ls); 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; line = ls->line_number;
col = ls->column; col = ls->column;
check_next(ls, '{'); check_next(ls, '{');
@ -1181,9 +1187,9 @@ end:
} }
static void 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; return;
if (foo_id->type == EOLIAN_PROP_GET || foo_id->type == EOLIAN_METHOD) 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, Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE,
has_keys = EINA_FALSE, has_values = EINA_FALSE, has_keys = EINA_FALSE, has_values = EINA_FALSE,
has_protected = EINA_FALSE, has_class = 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 = calloc(1, sizeof(Eolian_Function));
prop->klass = ls->tmp.kls; prop->klass = ls->tmp.kls;
prop->type = EOLIAN_UNRESOLVED; prop->type = EOLIAN_UNRESOLVED;
@ -1233,6 +1240,10 @@ parse_property(Eo_Lexer *ls)
prop->is_beta = EINA_TRUE; prop->is_beta = EINA_TRUE;
eo_lexer_get(ls); eo_lexer_get(ls);
break; break;
case KW_at_virtual_pure:
CASE_LOCK(ls, virtp, "virtual_pure qualifier");
eo_lexer_get(ls);
break;
default: default:
goto body; goto body;
} }
@ -1266,7 +1277,7 @@ end:
check_match(ls, '}', '{', line, col); check_match(ls, '}', '{', line, col);
if (!has_get && !has_set) if (!has_get && !has_set)
prop->type = EOLIAN_PROPERTY; prop->type = EOLIAN_PROPERTY;
_interface_virtual_set(ls, prop); _func_virtual_set(ls, prop, has_virtp);
} }
static void static void
@ -1278,7 +1289,7 @@ parse_method(Eo_Lexer *ls)
has_return = EINA_FALSE, has_legacy = EINA_FALSE, has_return = EINA_FALSE, has_legacy = EINA_FALSE,
has_protected = EINA_FALSE, has_class = EINA_FALSE, has_protected = EINA_FALSE, has_class = EINA_FALSE,
has_eo = EINA_FALSE, has_c_only = 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 = calloc(1, sizeof(Eolian_Function));
meth->klass = ls->tmp.kls; meth->klass = ls->tmp.kls;
meth->type = EOLIAN_METHOD; meth->type = EOLIAN_METHOD;
@ -1314,6 +1325,10 @@ parse_method(Eo_Lexer *ls)
meth->is_beta = EINA_TRUE; meth->is_beta = EINA_TRUE;
eo_lexer_get(ls); eo_lexer_get(ls);
break; break;
case KW_at_virtual_pure:
CASE_LOCK(ls, virtp, "virtual_pure qualifier");
eo_lexer_get(ls);
break;
default: default:
goto body; goto body;
} }
@ -1356,7 +1371,7 @@ body:
} }
end: end:
check_match(ls, '}', '{', line, col); check_match(ls, '}', '{', line, col);
_interface_virtual_set(ls, meth); _func_virtual_set(ls, meth, has_virtp);
} }
static void 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); ls->tmp.kls->implements = eina_list_append(ls->tmp.kls->implements, impl);
switch (ls->t.kw) switch (ls->t.kw)
{ {
case KW_at_virtual:
impl->is_virtual = EINA_TRUE;
eo_lexer_get(ls);
break;
case KW_at_auto: case KW_at_auto:
impl->is_auto = EINA_TRUE; impl->is_auto = EINA_TRUE;
eo_lexer_get(ls); eo_lexer_get(ls);
@ -1406,15 +1417,12 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface)
} }
if (ls->t.token == '.') if (ls->t.token == '.')
{ {
if (!impl->is_virtual && !impl->is_auto && !impl->is_empty) if (!impl->is_auto && !impl->is_empty)
goto fullclass; goto fullclass;
check_next(ls, '.'); check_next(ls, '.');
if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set)) if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set))
eo_lexer_syntax_error(ls, "name expected"); eo_lexer_syntax_error(ls, "name expected");
if (impl->is_virtual) impl->full_name = eina_stringshare_printf(".%s", ls->t.value.s);
impl->full_name = eina_stringshare_ref(ls->t.value.s);
else
impl->full_name = eina_stringshare_printf(".%s", ls->t.value.s);
eo_lexer_get(ls); eo_lexer_get(ls);
if (ls->t.token == '.') if (ls->t.token == '.')
{ {

View File

@ -16,7 +16,7 @@ mixin Efl.Canvas.Surface (Evas.Image)
Set to $null to detach this surface from the external buffer. Set to $null to detach this surface from the external buffer.
]] ]]
get {} get {}
set { set @virtual_pure {
[[Set the buffer. If this fails, this function returns $false, [[Set the buffer. If this fails, this function returns $false,
and the surface is left without any attached buffer. and the surface is left without any attached buffer.
]] ]]
@ -29,6 +29,5 @@ mixin Efl.Canvas.Surface (Evas.Image)
} }
implements { implements {
Eo.Base.constructor; Eo.Base.constructor;
@virtual .native_buffer.set;
} }
} }

View File

@ -80,7 +80,7 @@ abstract Efl.VG (Eo.Base, Efl.Gfx, Efl.Gfx.Stack)
Evas_VG_Quality q; Evas_VG_Quality q;
} }
} */ } */
bounds_get { bounds_get @virtual_pure {
[[Give the bounding box in screen coordinate as being drawn. [[Give the bounding box in screen coordinate as being drawn.
It will start as the control box until it is refined once the shape 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.stack_above;
Efl.Gfx.Stack.raise; Efl.Gfx.Stack.raise;
Efl.Gfx.Stack.lower; Efl.Gfx.Stack.lower;
@virtual .bounds_get;
} }
} }

View File

@ -35,13 +35,13 @@ class Evas.Canvas3D.Object (Eo.Base, Evas.Common_Interface)
update { update {
[[Update request for the object.]] [[Update request for the object.]]
} }
update_notify { update_notify @virtual_pure {
[[Pure virtual update_notify function. [[Pure virtual update_notify function.
Update request for the object.]] Update request for the object.]]
} }
change_notify { change_notify @virtual_pure {
[[Pure virtual change_notify function. [[Pure virtual change_notify function.
Update request for the object.]] 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.]] @in ref: Evas.Canvas3D.Object *; [[The Object that caused the change.]]
} }
} }
callback_register { callback_register @virtual_pure {
[[Pure virtual register samrt callback function.]] [[Pure virtual register samrt callback function.]]
params { params {
@in event: const(char)*; [[Event type.]] @in event: const(char)*; [[Event type.]]
@in data: const(void)*; [[User data.]] @in data: const(void)*; [[User data.]]
} }
} }
callback_unregister { callback_unregister @virtual_pure {
[[Pure virtual unregister smart callback function.]] [[Pure virtual unregister smart callback function.]]
params { params {
@in event: const(char)*; [[Event type.]] @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_priority_add;
Eo.Base.event_callback_del; Eo.Base.event_callback_del;
Evas.Common_Interface.evas.get; Evas.Common_Interface.evas.get;
@virtual .update_notify;
@virtual .change_notify;
@virtual .callback_register;
@virtual .callback_unregister;
} }
events { events {
clicked; [[Clicked Event.]] clicked; [[Clicked Event.]]

View File

@ -22,11 +22,11 @@ mixin Evas.Filter (Efl.Gfx.Filter, Eo.Base)
val: bool; 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.]] [[Called by Evas.Filter to determine whether the input is alpha or rgba.]]
return: bool; return: bool;
} }
filter_input_render @protected { filter_input_render @protected @virtual_pure {
[[Called by Evas.Filter when the parent class must render the input. [[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; do_async: bool;
} }
} }
filter_dirty @protected { filter_dirty @protected @virtual_pure {
[[Called when the filter changes must trigger a redraw of the object. [[Called when the filter changes must trigger a redraw of the object.
Virtual, to be implemented in the parent class. 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_source.get;
Efl.Gfx.Filter.filter_data.get; Efl.Gfx.Filter.filter_data.get;
Efl.Gfx.Filter.filter_data.set; Efl.Gfx.Filter.filter_data.set;
@virtual .filter_input_alpha;
@virtual .filter_input_render;
@virtual .filter_dirty;
} }
} }

View File

@ -7,14 +7,11 @@ class Base {
c: float; c: float;
} }
} }
constructor { constructor @virtual_pure {
} }
destructor { destructor {
} }
} }
implements {
@virtual .constructor;
}
constructors { constructors {
.constructor; .constructor;
} }

View File

@ -2,11 +2,8 @@ class nmsp1.nmsp11.class2
{ {
methods { methods {
@property a { @property a {
set { set @virtual_pure {
} }
} }
} }
implements {
@virtual .a.set;
}
} }

View File

@ -19,7 +19,7 @@ class Object_Impl (Base) {
@property b { @property b {
set { set {
} }
get { get @virtual_pure {
/* set as virtual pure - no implementation expected */ /* set as virtual pure - no implementation expected */
} }
values { values {
@ -50,7 +50,7 @@ class Object_Impl (Base) {
@in b: const(char)*; @in b: const(char)*;
} }
} }
pure_foo3 { pure_foo3 @virtual_pure {
/* set as virtual pure - no implementation expected */ /* set as virtual pure - no implementation expected */
} }
} }
@ -59,8 +59,6 @@ class Object_Impl (Base) {
class.destructor; class.destructor;
Base.constructor; Base.constructor;
Base.destructor; Base.destructor;
@virtual .pure_foo3;
@virtual .b.get;
} }
constructors { constructors {
.constructor_1; .constructor_1;

View File

@ -1,7 +1,7 @@
class Override (Base) { class Override (Base) {
methods { methods {
@property a { @property a {
set { set @virtual_pure {
} }
get { get {
} }
@ -32,7 +32,7 @@ class Override (Base) {
c: int(50); c: int(50);
} }
} }
foo { foo @virtual_pure {
} }
bar { bar {
params { params {
@ -44,8 +44,6 @@ class Override (Base) {
} }
implements { implements {
Base.constructor; Base.constructor;
@virtual .a.set;
@virtual .foo;
@auto .b.set; @auto .b.set;
@empty .bar; @empty .bar;
@auto .c.get; @auto .c.get;

View File

@ -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) 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_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); 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); 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_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); 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_constructor, _override_base_constructor),
EO_OP_FUNC_OVERRIDE(base_z_get, __eolian_override_base_z_get), 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(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_b_set, __eolian_override_b_set),
EO_OP_FUNC(override_bar, __eolian_override_bar), EO_OP_FUNC(override_bar, __eolian_override_bar),
EO_OP_FUNC(override_c_get, __eolian_override_c_get), 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_a_get, _override_a_get),
EO_OP_FUNC(override_b_get, _override_b_get), EO_OP_FUNC(override_b_get, _override_b_get),
EO_OP_FUNC(override_c_set, _override_c_set), EO_OP_FUNC(override_c_set, _override_c_set),
EO_OP_FUNC(override_foo, NULL),
}; };
static const Eo_Class_Description _override_class_desc = { static const Eo_Class_Description _override_class_desc = {
@ -78,4 +78,4 @@ static const Eo_Class_Description _override_class_desc = {
NULL 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);

View File

@ -221,33 +221,6 @@ START_TEST(eolian_override)
fail_if(impl_class != base); fail_if(impl_class != base);
fail_if(strcmp(eolian_function_name_get(impl_func), "constructor")); 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(!(eina_iterator_next(iter, (void**)&impl)));
fail_if(!eolian_implement_is_auto(impl)); fail_if(!eolian_implement_is_auto(impl));
fail_if(eolian_implement_is_empty(impl)); fail_if(eolian_implement_is_empty(impl));