Commit Graph

176 Commits

Author SHA1 Message Date
Jean-Philippe Andre c1d21cef89 eolian: Add some color to those warning messages
Note: This is not using eina_log, not entirely sure why, but this
doesn't prevent us from adding some color.
2017-10-31 14:52:34 +09:00
Daniel Kolesa 9009d3dae4 eolian: add any_value_ptr
Because pointer Eina_Values and value Eina_Values have slightly
different semantics (when it comes to resource management) it's
better to split them.
2017-09-22 20:25:31 +02:00
Daniel Kolesa 1577c576e6 eolian: remove static_array and terminated_array
These types are of questionable value and the API was not entirely
thought out - remove for now, and if a legitimate use is found
later, they may be readded (with a better API), but typically it
seems best to redesign the bad APIs around safe containers...
2017-09-22 18:01:15 +02:00
Daniel Kolesa 4bae2a7385 eolian: merge REGULAR and COMPLEX types 2017-09-22 17:46:02 +02:00
Daniel Kolesa f36e5bd543 eolian: add mstring
This is a new type representing a mutable string (no const).
Regular strings cannot be made mutable with @owned because
they might be hidden behind typedefs.
2017-09-22 17:10:42 +02:00
Daniel Kolesa 1afd3c215f eolian: correctness fixes in tests and eo files 2017-09-15 17:48:28 +02:00
Daniel Kolesa 0af3254020 eolian: fix float parsing with locales with ',' decpoint 2017-09-01 16:08:10 +02:00
Carsten Haitzler ead5d9cefd eo lexer - handle malloc failure with longjmp
handles possible error case nicely
2017-07-16 15:56:02 +09:00
Lauro Moura 1634c14169 eolian: function pointers
First steps toward explicit function pointer support in eolian.

To declare a function pointer type, use the following syntax, similar to
a regular eolian method declaration.

function FunctionName {
  params {
    ...
  }
  return: Return type
}
2017-06-18 12:09:22 -03:00
Daniel Kolesa da43c63ce1 eo: move event related structures and callback to C
We don't need to keep this in eo files anymore because the APIs
using them are now fully in C. This also allows removal of the
event callback builtin from Eolian.
2017-04-21 15:48:31 +02:00
Daniel Kolesa 6e8b628864 eolian: rmeove dependency on basename/libgen.h/evil 2017-01-21 18:06:00 +01:00
Cedric BAIL 8a57cb44b2 eolian: silence clobbered variable warning. 2016-12-15 10:44:22 -08:00
Cedric BAIL 144ef9dad3 eolian: remove Eina_Promise. 2016-11-07 13:43:11 -08:00
Cedric BAIL 36bc9aa187 eolian: add a builtin to handle a free callback. 2016-09-08 14:58:05 -07:00
Cedric BAIL ed9dff8fbd eolian: add support for future.
Future is the read only side of a Promise. For now, I am not removing
Eina_Promise until everything is in place, but eventually the promise
type of eolian will be gone.
2016-09-08 14:58:05 -07:00
Tom Hacohen c662934be8 Change the EFL to follow the new Eo rename. 2016-08-11 17:04:43 +01:00
Daniel Kolesa ab2e608239 eolian: add support for static and terminated arrays
Adds two new type types, STATIC_ARRAY and TERMINATED_ARRAY. Static arrays are
only allowed as struct members right now - they translate to regular C static
arrays (allowing them elsewhere wouldn't be good, as C isn't very good at
working with the size information). Terminated arrays are basically sequences
of data terminated at the end. The base type of static arrays can be any type
that is not marked ref (explicit ref may get allowed later). The base type of
terminated arrays has the same restriction plus that it has to be either
implicitly reference type (i.e. translating to pointer in C), integer type
or a character. In case of ref types, the terminator is NULL. In case of
integer types, the terminator is a zero. In case of character types, the
terminator is also a zero (null terminator like C strings).

@feature
2016-06-30 16:59:21 +01:00
Daniel Kolesa 7584960377 eolian: implement a stringshare builtin
This implements a new builtin, stringshare, which is replaced with the right
pointer to Eina_Strinshare as necessary. This allows simplifying binding code
(it can call the proper eina APIs, deal with lifetime etc).

It also removes the extern Eina.Stringshare typedef from eina_types.eot, which
was actually incorrect and would generate invalid code in binding generators.

@feature @fix
2016-06-21 14:41:18 +01:00
Daniel Kolesa 922e4e9181 eolian: fix error cursor positioning
Previously, multi-char tokens (such as strings, docs etc) always put the error
cursor to the end of the token. That was confusing, so now the cursor always
appears at the beginning of the token instead (for multiline tokens, currently
only docs, the line number is also adjusted to point to the first line of the
doc token).

@fix
2016-06-13 14:55:15 +01:00
Daniel Kolesa 4844034a1a eolian: add core infra to support builtin strings and void pointers 2016-05-26 14:36:41 +01:00
Daniel Kolesa 4bdb1f73b8 eolian: handle invalid keywords correctly
Before this Eolian segfaulted when an invalid keyword was used.

Fixes T3672.
2016-05-23 10:49:42 +01:00
Felipe Magno de Almeida dc954d8dba eolian: add Eolian support for Eina Promises
Add a promise object to allows Eolian interface to include promises
as a way to have asynchronous value return and composibility.

The usage is like this in a .eo file:

class Foo {
   methods {
      bar {
         params {
            @inout promise: Promise<int>;
         }
      }
   }
}

Which will create the following API interface:

void foo_bar(Eo* obj, Eina_Promise** promise);

and a Eina_Promise_Owner for the implementation, like this:

void _foo_bar(Eo* obj, Private_Data* pdata, Eina_Promise_Owner* promise);

Signed-off-by: Cedric Bail <cedric@osg.samsung.com>
2016-04-06 14:34:15 -07:00
Tom Hacohen 7d8cd6c40f Revert "ecore: Create Promises"
Reverting this at Felipe's request following my email. There are many
things I strongly object to in this commit. I've touched the surface of
those on the ML (which doesn't work at the moment), though we need to
better discuss it.

The gist:
1. dlsym is a really bad hack that is not even needed.
2. I don't see why eo should even be aware of promises. It's not aware
of list, hash and etc.
3. The eolian changes were done wrong.

This should have been discussed and consulted before done, even if only
because of the amount of hacks it includes and the cross-domain (ecore,
eo and eolian) nature of it.

This reverts commit f9ba80ab33.
2016-03-08 14:23:57 +00:00
Felipe Magno de Almeida f9ba80ab33 ecore: Create Promises
Add a promise object that allows Eolian interface to include promises
as a way to have asynchronous value return and composibility.

The usage is like this in a .eo file:

class Foo {
   methods {
      bar {
         params {
            promise: Promise<int>;
         }
      }
   }
}

Which will create the following API interface:

void foo_bar(Ecore_Promise** promise);

and the equivalent declaration for implementation.

However, the API function will instantiate the Promise for the
user and the implementer of the class.
2016-03-06 17:55:33 -03:00
Daniel Kolesa e061d49aac eolian: completely clean up the type system 2016-03-03 18:58:11 +00:00
Daniel Kolesa cc0476041f eolian: fix out-of-bounds indexing on tokens
Fixes CID 1324818 @fix
2015-10-04 14:54:21 +01:00
Daniel Kolesa 17b4622f1b eolian: enable doc dependency parsing code 2015-09-24 14:12:07 +01:00
Daniel Kolesa c0d82ba900 eolian: preliminary doc dependency detection for external files
This doesn't quite work yet as path sanitization needs to be done for it to
work correctly. For now this code path is disabled and will be enabled once
all paths are correctly sanitized.
2015-09-23 17:17:50 +01:00
Daniel Kolesa 2bf46034b2 eolian: split tokens/keywords for cleaner indexing 2015-09-21 15:26:41 +01:00
Daniel Kolesa 7ae6781451 eolian: disable parsing of old style docs 2015-09-03 15:08:08 +01:00
Daniel Kolesa 1701ba6a06 eolian: class members now inherit their class's since tag 2015-08-11 10:31:42 +01:00
Daniel Kolesa aa65c7ef5b eolian: @since no longer needs to be its own paragraph in docs
However, it still terminates the doc.
2015-08-06 16:53:41 +01:00
Daniel Kolesa 099bdd7819 eolian: do not use an invalid pointer after updating buffer
Replacing decimal point in buffer resulted in invalidation of the original
string pointer. On Linux, this issue was for some reason not caught, but
it was wrong anyway. Use the updated string correctly now.

@fix
2015-07-15 15:32:53 +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 9a01ab5dd7 eolian: try replacing '.' with locale specific decimal point
This fixes parsing of floating point number with locales that use
a comma as decimal separator, as strtof/strtod follows locale
specific conventions.

@fix
2015-06-25 10:44:01 +01:00
Daniel Kolesa 71a8b9d119 eolian: relax doc parsing a little (no need to check if @since is allowed) 2015-06-23 16:44:17 +01:00
Daniel Kolesa 0fe4d4aa37 eolian: simplify doc parsing logic a bit 2015-06-23 16:37:37 +01:00
Daniel Kolesa c26134df7a eolian: new doc token lexer/parser
This should allow us to more easily extend the format if desired
and overall makes the doc syntax parsing more readable and simpler.
2015-06-23 15:28:46 +01:00
Daniel Kolesa 7ea7f0b68a eolian: fix wrong type keyword check 2015-06-10 16:42:18 +01:00
Daniel Kolesa 6692319c78 eolian: pass rbuf to doc_error
This allows us to correctly free the buffer in error scenarios.

Fixes CID 1304728.

@fix
2015-06-09 13:43:36 +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 5813dbffe8 eolian: silence static analysis
Add some unreachable returns to fix CID 1304557.
2015-06-08 10:43:20 +01:00
Daniel Kolesa e94fdac885 eolian: remove support for short doc comments (//@) 2015-06-05 16:10:12 +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 b2c47737b1 eolian: properly fill and free all doc fields 2015-06-03 15:35:20 +01:00
Daniel Kolesa a4485484f1 eolian: Eolian_Object for docs 2015-06-02 18:27:46 +01:00
Daniel Kolesa 0703cc0f5e eolian: initial lexing of documentation 2015-06-02 18:12:09 +01:00
Daniel Kolesa 5cdf202ee4 eolian: more advanced comment parsing (properly skip asterisks etc) 2015-05-29 16:10:40 +01:00
Daniel Kolesa 1a48c31f81 eolian: "generic_value" builtin type 2015-05-29 12:03:57 +01:00
Daniel Kolesa 3efca75615 eolian: reserve __builtin_event_cb 2015-05-29 11:19:27 +01:00