Commit Graph

202 Commits

Author SHA1 Message Date
Daniel Kolesa 9752c44a48 eolian: add a new references system to help replace pointers
It's now possible to mark struct fields and function params as "references",
which causes them to become pointers in C (in bindings, they become whatever
is necessary). They're not a part of the type and are much more restricted
than pointers, allowing bindings to be easier. This system will be gradually
utilized and expanded as required.

@feature
2016-06-06 15:28:10 +01:00
Daniel Kolesa e984e5a11a eolian: remove pointers from complex and class types
Complex types (i.e. list, array, hash, accessor etc.) now do not require
pointers with them anymore (the pointer is implied) and the same goes for
class handles. Eolian now explicitly disallows creating pointers to these
as well. This is the first part of the work to remove pointers from Eolian
completely, with the goal of simplifying the DSL (higher level) and therefore
making it easier for bindings (as well as easier API usage).

@feature
2016-05-23 15:58:33 +01:00
Daniel Kolesa 7782c0bcb9 eolian: add event_prefix and have classes follow that or eo_prefix by default
Previously events used to use class name as a prefix and ignored eo_prefix
when specified. This is no longer the case. Events follow eo_prefix by default
now. In order to get around this for classes where this is undesirable, a new
field event_prefix was added which takes priority over eo_prefix. If neither
is specified, class name is used like previously.

@feature
2016-05-17 17:50:43 +01:00
Daniel Kolesa 7e94eb22b4 eolian: mark pure virtual funcs outside of implements
This is a better syntax and should've been like this in the first place.
2016-05-12 16:15:24 +01:00
Cedric BAIL c0bce3e23e eolian: add tests for restartable event. 2016-04-20 15:53:33 -07:00
Daniel Kolesa 22875f066c eolian: builtin support for event callback signature 2016-03-14 17:16:41 +00:00
Daniel Kolesa cb42da514b eolian: initial conversion of C gen and tests to new type APIs 2016-03-03 18:58:11 +00:00
Vincent Torri 6e6a0b59ed Test rework #18: Eolian 2016-02-16 12:41:06 +00:00
Daniel Kolesa c95350016d eolian: add parsing and generation of hot events
Unfreezable events can now be marked @hot.

@feature
2016-02-02 17:55:01 +00:00
Daniel Kolesa e089908545 eolian: add eolian_type_aliased_base_get
This adds a new API function that is there mainly for convenience (see doc).
Also added/updated tests as necessary.

@feature
2015-11-18 16:02:15 +00:00
Vitor Sousa d6055e9527 eolian: Test recognition of struct types used in methods
Summary:
Add code to unit test to check if Eolian correctly recognize a struct
name as a struct type when it is used in a method.

Add new method to struct.eo to create this test.
Update struct_ref.c accordingly.

Reviewers: tasn, q66

Differential Revision: https://phab.enlightenment.org/D3213
2015-10-21 18:15:55 +01:00
Daniel Kolesa a9968b975f eolian/generator: generation of doxygen @note and @warning tags
@feature
2015-09-14 14:10:32 +01:00
Daniel Kolesa e9688e63a5 eolian/generator: add proper generation of references
Adds proper generation of automatic references in docs.
For now events are missing.

@feature
2015-07-07 17:19:13 +01:00
Daniel Kolesa 70b7043731 eolian: initial work on doc syntax validation (disabled for now) 2015-07-07 15:21:45 +01:00
Daniel Kolesa cd7a78f2a5 eolian: add API: eolian_declaration_get_by_name
Sorry for last minute new API, but this one is necessary to implement
proper verification of references in docs, which I would like to have
in 1.15. It allows you to retrieve any kind of declaration by full
namespace, so that you can check for an existence of an Eolian decl,
rather than checking every type individually.

@feature
2015-07-07 10:57:24 +01:00
Daniel Kolesa 660e23fd75 eolian: add new __undefined_type builtin to silence warnings 2015-06-10 16:56:37 +01:00
Daniel Kolesa 7a38f8ec21 eolian: support for @since tag in new doc comments
This is kind of ugly, but I didn't see a better way to do it without turning
this into a much more complicated parser. So this will have to do unless we
find something else to add, in which case a new doc parser will be required.

@feature
2015-06-08 15:57:15 +01:00
Daniel Kolesa ac0113ba2b eolian/generator: generation for new documentation system
This commit adds the necessary generator logic to emit doc
comments from the new doc syntax. Old doc comments are kept
in for the time being as they're used within the EFL but they
will be removed eventually. This new generator focuses all the
important code in one place, making usage easy.

@feature
2015-06-05 12:15:51 +01:00
Daniel Kolesa af2bcfa9d1 eolian: double newline ends summary, not single
This allows you to split the summary on multiple lines
if necessary (for example to satisfy line limit)

@fix
2015-06-04 15:41:52 +01:00
Daniel Kolesa ba033a4cfc eolian: add documentation handling API
This adds new APIs that deal with the new documentation syntax
provided by Eolian. The old doc comment APIs are considered
deprecated from now on and will be removed.

@feature
2015-06-03 16:46:47 +01:00
Daniel Kolesa 0c729faf68 eolian: initial test file for docs (no APIs to test yet) 2015-06-03 12:06:36 +01:00
Daniel Kolesa 944e44b17d eolian: tests for declaration api 2015-06-01 15:24:00 +01:00
Daniel Kolesa 83bbcc33ef eolian: tests for extern struct/typedef not-generation 2015-05-29 11:24:55 +01:00
Daniel Kolesa a7dea04b26 eolian: merge eo_file_parse and eot_file_parse 2015-05-22 17:32:21 +01:00
Daniel Kolesa 6b91b1bd12 eolian: allow keys/values in property get/set
Sometimes it is necessary to specify a different set of values for a
getter or a setter. This commit allows such specializations. This also
renders @const_get and @const_set useless (soon to be removed).

To function correctly, this required adjustment of several public APIs
as well as deprecation of eolian_function_parameter_get_by_name.

This function was not used in any generator and was pretty much
useless in the first place, so it was removed.

@fix
2015-05-20 17:42:44 +01:00
Daniel Kolesa 5c199857c9 eolian: distinguish between get/set for property keys/values retrieval 2015-05-20 17:03:37 +01:00
Daniel Kolesa b647448f84 eolian: tests for import 2015-05-19 15:38:31 +01:00
Daniel Kolesa 12fa5f5349 eolian: fix eolian_type_enum_field_c_name_get for namespaced enums 2015-05-18 16:37:42 +01:00
Daniel Kolesa d2365e6267 eolian: allow forced retrieval of enum field values 2015-05-13 17:57:03 +01:00
Daniel Kolesa 333e876629 eolian: use the actual enum type in tests 2015-05-13 17:22:37 +01:00
Daniel Kolesa e90e3af8b5 eolian: fix evaluation of "undefined" enum fields 2015-05-13 17:15:45 +01:00
Daniel Kolesa 96d16eabb4 eolian: remove unused variables 2015-05-12 17:07:26 +01:00
Daniel Kolesa 211b650c4b eolian: new API eolian_type_enum_field_c_name_get
This API allows you to retrieve the C name of an arbitrary enum field,
respecting the legacy prefix and properly uppercasing the name.
2015-05-12 17:04:54 +01:00
Daniel Kolesa ed58165b50 eolian: butts 2015-05-12 16:25:52 +01:00
Daniel Kolesa 6e7ab244f7 eolian: fix wrong enum tests 2015-05-12 14:37:16 +01:00
Daniel Kolesa a5ce9e5d75 eolian: API and tests for beta events 2015-05-08 14:37:02 +01:00
Daniel Kolesa 0c07b9bea4 eolian: is_beta API plus tests 2015-05-08 14:12:27 +01:00
Daniel Zaoui 2c5ec0b132 Eolian: Add API to retrieve an event of a class by its name
@feature
2015-05-07 09:57:15 +03:00
Daniel Zaoui b191379d1d Eolian: add API to determine if a function is implemented.
This is needed in Erigo to determine if a virtual pure function can be
invoked via eo_do, as we don't want error messages to be displayed in
case of a non implementation in the Eo object.
This function works with non virtual functions too.

Tests have been provided.

@feature
2015-03-19 12:37:38 +02:00
Daniel Zaoui 57a4cae33b Eolian: add API to return the class from a function.
@feature
2015-03-16 17:32:30 +02:00
Daniel Kolesa 687e5130d8 eolian: add testcase for nullable/optional 2015-02-12 13:42:57 +00:00
Daniel Kolesa d24220221a eolian: eolian_function_is_c_only tests 2014-12-03 15:04:40 +00:00
Daniel Kolesa d26152391f eolian: add support for @optional ctor tag
This implements task T1804.
@feature
2014-11-20 15:21:55 +00:00
Daniel Zaoui af513b6af3 Eolian: add support for property descriptions.
For properties, set and get descriptions were supported but common
comment was not.
2014-10-19 13:25:06 +03:00
Daniel Kolesa 8c5f79ad1f eolian: add test for the new C class get function API 2014-10-02 11:30:36 +01:00
Savio Sena cbc6385026 tests/eolian: Added unit tests for eolian_function_is_constructor(). 2014-09-12 17:20:07 -03:00
Daniel Kolesa 7786b96359 eolian: builtin complex types
From now on, there are 5 builtin complex types, particularly accessor, array,
iterator, hash and list. All other types are simple - they can't have a complex
part. Also, the <> now binds to the type itself, not the pointer. More builtin
complex types will be added as needed.
2014-09-08 14:53:13 +01:00
Daniel Kolesa d6453e8a09 eolian: further improve implement tests so they make more sense 2014-09-05 16:27:29 +01:00
Daniel Kolesa 575b08d752 eolian: improve tests (add more checks on virtual implements) 2014-09-05 16:25:20 +01:00
Daniel Kolesa 977d4fe1a6 eolian: better handling of @virtual implements
Now they're registered correctly. Also, add new API, eolian_implement_is_virtual.
Also, deal with get/set properly (when filling in additional implements)
2014-09-05 16:05:04 +01:00
Daniel Kolesa 8d9bae1172 eolian: generate implements for every method/property 2014-09-04 15:03:00 +01:00
Daniel Kolesa e67b52c514 eolian: fix auto/empty parsing/fill and add tests 2014-09-04 11:07:00 +01:00
Daniel Kolesa 5e063b37a2 eolian: tests for default param values 2014-09-02 11:00:19 +01:00
Daniel Kolesa 46715c3574 eolian: move efl eo files over to the new ctor syntax 2014-09-01 15:53:35 +01:00
Daniel Kolesa 7e95079f0f eolian: fix tests 2014-08-27 15:43:47 +01:00
Daniel Kolesa b75014a024 eolian: refactor the struct/enum field APIs 2014-08-22 16:56:41 +01:00
Daniel Kolesa ef380c56b6 eolian: support for setting a free function to values in eo files 2014-08-21 09:26:05 +01:00
Daniel Kolesa 452497eac5 eolian: remove a bunch of pointless stringshare refs + fix in lua 2014-08-21 09:26:05 +01:00
Daniel Kolesa 1888448dd4 eolian: legacy only test 2014-08-21 09:26:05 +01:00
Daniel Kolesa e6954d143d eolian: drop Eina_Value
Because of Eina_Value being less than optimal in our usage, we're dropping it in Eolian.
This simplifies the code and makes it easier to bind to other languages, which
will aid new generators. Also, we're dropping long double support from eo files
and expressions as it causes an ABI breakage in gcc 4.4.
2014-08-21 09:26:05 +01:00
Daniel Kolesa 913e0f09fa eolian: get rid of the data hash in Eolian_Function 2014-08-21 09:26:05 +01:00
Daniel Kolesa 1688749ce9 eolian: add support for opaque struct types (+ tests) 2014-08-21 09:26:05 +01:00
Daniel Kolesa 93726c86a3 eolian: get rid of eolian_parameter_information_get 2014-08-21 09:26:04 +01:00
Daniel Kolesa ad3dbe834b eolian: API refactoring
Remove eolian_implement_information_get. Also, fix some nasty lookup problems.
2014-08-21 09:26:04 +01:00
Daniel Kolesa 18c2b5082e eolian: allow usage of stack Eina_Value in expr API 2014-08-21 09:26:04 +01:00
Daniel Kolesa c81356e2ec eolian: working more in-depth enum test 2014-08-21 09:26:04 +01:00
Daniel Kolesa 2e3887b994 eolian: struct/enum fixes and initial test for enums 2014-08-21 09:26:04 +01:00
Daniel Kolesa d4031a21bf eolian: test for constants/globals
Also added API to retrieve value of a variable (forgot about that one)
and made it impossible to create extern constants (doesn't make sense)
as well as made it impossible to give extern globals values.
2014-08-21 09:26:04 +01:00
Daniel Kolesa ed28ee6aff eolian: fix tests 2014-08-21 09:26:03 +01:00
Daniel Kolesa c88c0d9347 eolian: fix tests and fix class name comparison in parser
This fixes the Eolian testsuite as well as adds a better way to compare where a class
comes from, allowing us to guess EOLIAN_TYPE_CLASS correctly.
2014-08-21 09:26:02 +01:00
Daniel Kolesa 64c2b292ba eolian: preliminary eo file support for builtin true/false/null
Real API will use the new expression system, but that won't get into 1.11.
2014-07-28 10:16:15 +01:00
Daniel Kolesa e2c51100c7 eolian: add test for class methods/properties
This also fixes a bug in the Eolian parser that handles class properties.
2014-07-24 14:02:46 +01:00
Daniel Kolesa 5a67cc997d eolian: fix tests 2014-07-23 17:19:34 +01:00
Daniel Kolesa 572b7aa92f eolian: eolian_function_parameter_get -> eolian_function_parameter_get_by_name 2014-07-23 14:22:25 +01:00
Daniel Kolesa 88cc1167e9 eolian: eolian_parameters_get -> eolian_function_parameters_get 2014-07-23 14:17:19 +01:00
Daniel Kolesa fd0210f30e eolian: list_get -> get, find_by -> get_by 2014-07-23 14:13:21 +01:00
Daniel Kolesa e26be1aca6 eolian: fix NULL checks in APIs that return iterators + fix tests 2014-07-23 13:45:25 +01:00
Daniel Kolesa 89ca97aceb eolian: new API: eolian_type_structs/aliases_get_by_file 2014-07-22 13:14:44 +01:00
Daniel Kolesa b0788a546b eolian: support for typedefs in c_type_get 2014-07-22 12:11:45 +01:00
Daniel Kolesa b81e05def5 eolian: new API: eolian_type_alias_find_by_name, remove the old APIs that take an alias name, update tests 2014-07-21 17:12:35 +01:00
Daniel Kolesa 460cfd9e34 eolian: type_struct_description, type_struct_file -> type_description, type_file 2014-07-21 14:39:14 +01:00
Daniel Kolesa 197034bfd7 eolian: type_struct_is_extern -> type_is_extern 2014-07-21 14:14:22 +01:00
Daniel Kolesa c4fd68f08a eolian: add API to retrieve filename for each typedef and struct 2014-07-21 12:26:44 +01:00
Daniel Kolesa 00f99a874d eolian: add test for extern 2014-07-15 15:50:58 +01:00
Daniel Kolesa 17a6bb122b eolian: add tests for struct types plus fix a double free and name storage on the way 2014-07-14 12:11:48 +01:00
Daniel Kolesa 5d4cc031f9 eolian: s/dflt/default/g 2014-07-11 14:30:22 +01:00
Daniel Kolesa e3cb885f10 eolian: fix testsuite 2014-07-11 11:52:45 +01:00
Daniel Kolesa 580aea04cd eolian: refactoring step six
Move Eolian_Function as well, plus fix const correctness of several API funcs.
2014-07-09 20:59:31 +01:00
Daniel Kolesa accdd50f50 eolian: refactoring step five
Move from all instances of Eolian_Type to Eolian_Type*.
2014-07-09 17:18:02 +01:00
Daniel Kolesa 52e68f986e eolian: fix tests (update according to API changes) 2014-07-09 17:04:00 +01:00
Daniel Kolesa 53fb9515e9 eolian/generator: add asterisk on inout too 2014-07-08 14:15:36 +01:00
Daniel Kolesa d967b6df32 eolian/tests: warning fixes 2014-06-30 17:20:39 +01:00
Daniel Kolesa e84275cc37 eolian: make tests pass 2014-06-30 17:20:39 +01:00
Daniel Kolesa a83e28ca3d tests/eolian: fix for the new namespace syntax 2014-06-20 10:52:00 +01:00
Daniel Zaoui dc3178404f Eolian: modify 'implement' API parameters.
The function eolian_implement_information_get was returning strings for
the class and the function. It was written in this way at the beginning
because it was not needed to verify the correctness of the class and
the function.
Now that we have the namespace feature, this function must check it,
meaning that the class and the function are now known.
So we can return them instead of returning the strings.

The generators had to find the class from the classname. It is no more
needed.

The C++ generator has been adapted to this new API.
2014-05-29 14:48:05 +03:00
Daniel Zaoui d949e9b41b Eolian: fix test.
Constructor has to be defined in the constructors section and not as a
method.
2014-05-29 09:58:27 +03:00
Daniel Zaoui 8e4700ce65 Eolian: add support of namespaces.
It is now possible to define a class in a .eo file as e.g:
Elm::Widgets::Button.
Elm and Widgets will be the namespaces of the class Button.

@feature
2014-05-26 13:56:06 +03:00
Daniel Zaoui 5b2ce095a3 Eolian/Tests: add test for events. 2014-05-26 13:56:06 +03:00
Daniel Zaoui 62082548bc Eolian: modify API to allow future scalability
Until now, the functions giving access to class information were taking
the class name as parameter.
Except the fact that we needed to search into a hash table for the internal
class structure, no flexibility is possible.

This change consists in modifying most of the APIs using the class name
with a new Eolian_Class type and adapt the code of the C and C++
generators accordingly.
2014-05-26 13:56:06 +03:00
Daniel Zaoui 1401ce36b6 Eolian/Tests: add test for overriding functions 2014-05-26 13:56:06 +03:00
Daniel Zaoui 946f845a2b Eolian/Tests: add test for consts
This tests checks the different 'const' possibilities in the .eo file
and their good parsing.
2014-05-26 13:56:06 +03:00
Daniel Zaoui 8d18e2db3c Eolian/Tests: move parsing tests to a specific file 2014-05-26 13:56:06 +03:00