Commit Graph

244 Commits

Author SHA1 Message Date
Daniel Kolesa 14ce54c303 eolian: implement new inherit behavior
Eolian now separates 'parent' and 'extensions'. For regular
classes, parent is the first item in the inherits list and
extesions is the rest. For interfaces and mixins, parent is
NULL and extends is the inherits list.

The reason for this is the separation of them in syntax in near
future. It also slightly changes the behavior; since for interfaces
and mixins, parent is always NULL now, you can freely inherit from
all types of classes without needing to manually put an interface
type as the first item of the inherits list.
2018-11-23 13:57:07 +01:00
Daniel Kolesa d0c96539f2 eolian: add eolian_implement_implementing_class_get
This will make it easier for generators and utilities to retrieve
the class that implemented a method/property/etc rather than the
class the implement was originally defined for. Thanks to this
it will no longer be necessary to carry the class pointer around
the place.
2018-11-04 16:12:53 +01:00
Felipe Magno de Almeida 1933735635 eolian: Add @ctor_param parameter to constructors
Summary:
This tagging keyword explicitly asks, for bindings that support it,
that the constructor's parameters are added to the class constructor.

Allowing the user to instantiate the class and call the constructor in
a straightforward way.

Reviewers: q66, woohyun, bu5hm4n, Jaehyun_Cho, segfaultxavi

Reviewed By: q66

Subscribers: cedric, #reviewers, #committers, lauromoura

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D7221
2018-10-31 02:47:58 +01:00
Daniel Kolesa 3a55fe0bbf eolian: allow void and non-ownable types in future 2018-05-03 17:14:39 +02:00
Daniel Kolesa 0a399be7b0 eolian: add source file for the future static checker 2018-05-03 17:14:39 +02:00
Daniel Kolesa dd90488b69 eolian: add capturing of variables/typedecls in expr eval
This will be used from validation to properly count actual
dependencies of a unit.
2018-04-20 16:10:55 +02:00
Daniel Kolesa 543902f2ba eolian: make doc ref resolution global
Doc refs no longer introduce new dependencies into files. Instead,
they're parsed globally, and any doc ref lookup is also made
globally. This allows unit based dependencies to correspond more
to what files actually really need at compile time/runtime, with
docs being irrelevant to that; it also simplifies the API.

The doc resolution API now takes Eolian_State instead of
Eolian_Unit, too.
2018-04-18 16:38:14 +02:00
Daniel Kolesa 28b1dd25c7 eolian: add internal api for dep deferring + parsing without dep
This is cleaner than adding into a hash manually. Additionally, it
is now possible to request that the file be parsed not as a dep,
but rather standalone, which will be useful later.
2018-04-18 16:38:14 +02:00
Daniel Kolesa 2defb32214 eolian: correct line/column number during doc reference validation
Eolian doc objects now bundle debug information necessary to
provide correct line/column numbers. It is not possible to get
this information cirectly from the text, as it's reformatted and
contains no extra whitespace or newlines beyond paragraph
separators.

Fixes T6701.
2018-04-12 15:24:15 +02:00
Daniel Kolesa 710748c551 eolian: better/more robust class inheritance list replacement 2018-04-11 14:31:03 +02:00
Daniel Kolesa db04d3f670 eolian: introduce main and staging areas properly
The state is now correctly divided. No merging is performed yet,
which is to be done next.
2018-03-22 17:56:52 +01:00
Daniel Kolesa 93a64c5eab eolian: clean rollback support
Previously, when an error happened in Eolian, the state was left
in a presumably unusable and inconsistent condition. This work
aims to change that, as all changes are committed into a staging
area before being validated and merged back into main state.

This is not yet complete, as units and by-file lookups are not
currently involved in the rollback. This will change in the
subsequent commits.

@feature
2018-03-22 15:37:25 +01:00
Daniel Kolesa d9a8fe0fca eolian: add state staging area
This will be used for clean rollbacks on errors.
2018-03-22 15:37:25 +01:00
Daniel Kolesa 2db8e8e914 eolian: make use of panics for certain alloc errors 2018-03-20 17:34:51 +01:00
Daniel Kolesa a1ae5cd918 eolian: use new error logging for all recoverable errors 2018-03-20 17:34:51 +01:00
Daniel Kolesa 9610459502 eolian: add APIs to get unit from object and state from unit 2018-03-16 16:16:16 +01:00
Daniel Kolesa 60c733670d eolian: intial API for a new error mechanism
Unlike panic, this will be used to handle regular errors
such as parse errors. There will be no jumps and you
will be able to pass in a pointer to get the error
data into some local memory. That way you will be
able to override printing error messages.
2018-03-16 16:07:12 +01:00
Daniel Kolesa 927bcfd60a eolian: initial API for a new panic mechanism
This will be used to handle unrecoverable errors.
For robustness, you will be able to set a custom
panic callback, jump and try to recover manually.
2018-03-16 15:41:57 +01:00
Daniel Kolesa 6c0180d7f8 eolian: more stringent and fine-grained validation 2018-03-16 00:14:13 +01:00
Daniel Kolesa 978ba5052d eolian: reduce the number of database traversals during validation
This significantly improves performance by not iterating certain
paths multiple times.
2018-03-15 23:25:35 +01:00
Daniel Kolesa 0f0009cb4f eolian: expose short_name/namespaces via object 2018-03-12 13:55:21 +01:00
Daniel Kolesa 665fc62916 eolian: simplify namespace handling
This is mostly a preparation for rework of name(space) APIs.
2018-03-11 17:35:13 +01:00
Daniel Kolesa 7a4669b1b7 eolian: remove old declaration APIs 2018-03-08 23:59:40 +01:00
Daniel Kolesa 2248131295 eolian: give objects names, and reduce duplication 2018-03-08 19:47:28 +01:00
Daniel Kolesa 917a5216f8 eolian: add APIs to retrieve declarations as objects
This will replace the old declarations API.
2018-03-08 19:00:32 +01:00
Daniel Kolesa 9594f09156 eolian: add API to query information about Objects
As nearly every Eolian handle is backed by an Eolian_Object,
this information is now publicly exposed and has an API. This
opens up an array of new possibilities for tooling, as you
can now externally query file names, line numbers etc.,
as well as cast arbitrary handles to Eolian_Object pointers
and back.

This will be expanded later and it will replace the Declaration
system, as it's cleaner, better integrated and more versatile.

@feature
2018-03-08 17:32:38 +01:00
Daniel Kolesa 436f2d3363 eolian: add API to get file name of a unit 2018-02-27 16:12:35 +01:00
Daniel Kolesa 6a284e48c9 eolian: eolian_* -> eolian_state_*, Eolian -> Eolian_State 2018-02-27 16:12:35 +01:00
Daniel Kolesa 39820fb5f5 eolian: simplify adding/refcounting objects 2018-02-23 15:25:55 +01:00
Daniel Kolesa 1a7dabeb74 eolian: proper in-unit storage for all declarations
This makes sure variables are stored as well as types within their
respective units. Also, declarations are now refcounted just like
any other Eolian object.
2018-02-23 15:25:55 +01:00
Daniel Kolesa 665b88204c eolian: store types/typedecls in units 2018-02-22 11:19:22 +01:00
Daniel Kolesa 7b5a73b967 eolian: add eolian_object_add wrapper 2018-02-22 11:19:22 +01:00
Daniel Kolesa a6d0e787e4 eolian: no need to store 'parsed' table anymore either 2018-01-31 19:14:15 +01:00
Daniel Kolesa f0877c9329 eolian: no need to track currently parsing file anymore 2018-01-31 18:13:29 +01:00
Daniel Kolesa b5794afa58 eolian: all dependency parsing is now deferred 2018-01-31 18:13:29 +01:00
Daniel Kolesa d47610a732 eolian: do not require unit when stringifying types
As it is no longer necessary to pass unit when evaluating exprs,
it is not necessary to pass it here either. Convert all the APIs
to the new style and update all instances in our tree.
2018-01-16 16:39:05 +01:00
Daniel Kolesa b70604d018 eolian: cache enum expr in the database 2018-01-16 16:37:52 +01:00
Daniel Kolesa 29a9b9ad44 eolian: expose _eval_type to internals 2018-01-16 16:37:52 +01:00
Daniel Kolesa 19c16b671e eolian: type_typedecl_get doesn't need a unit 2018-01-12 18:05:13 +01:00
Daniel Kolesa db41734954 eolian: store typedecl/class in type 2018-01-12 18:05:13 +01:00
Daniel Kolesa 65ea735fd7 eolian: remove the toplevel information 2017-12-22 15:36:31 +01:00
Daniel Kolesa 373392d56e eolian: remove now unused database init/shutdown 2017-12-15 17:11:11 +01:00
Daniel Kolesa 18e18ca74c eolian: remove remaining global state (+ modify APIs accordingly) 2017-12-15 17:11:11 +01:00
Daniel Kolesa 9aaa5cf839 eolian: remove _cunit and prepare for returning actual units 2017-12-14 17:31:21 +01:00
Daniel Kolesa 2259b6f16f eolian: remove parent info from units (actually doesn't make sense) 2017-12-14 16:45:13 +01:00
Daniel Kolesa 3ebd1f1506 eolian: store units in state 2017-12-07 19:11:58 +01:00
Daniel Kolesa e7bf69fc04 eolian: make deferred parsing map non-global 2017-12-07 19:11:58 +01:00
Daniel Kolesa 2343e6cc54 eolian: make parsing/parsed files mapping non-global 2017-12-07 19:11:58 +01:00
Daniel Kolesa 9a5c3cfbe2 eolian: remove internal state struct (rely on external Eolian state) 2017-12-06 15:07:31 +01:00
Daniel Kolesa a39d2e8fe5 eolian: move filenames hashes to state 2017-12-06 15:07:31 +01:00