Daniel Kolesa
2c59abc878
eolian: fix minor memory leaks
2018-03-15 16:45:23 +01:00
Daniel Kolesa
edc73c4c4c
eolian: make sure dtors are always run correctly
2018-03-15 16:34:39 +01:00
Daniel Kolesa
df83efcef9
eolian: remove the temps system
2018-03-15 16:34:39 +01:00
Daniel Kolesa
5178b15ac5
eolian: manage exprs through node system
2018-03-15 16:34:39 +01:00
Daniel Kolesa
da47159dbd
eolian: manage typedecls through node system
2018-03-15 16:34:39 +01:00
Daniel Kolesa
80445f5160
eolian: manage class/vars through new node system
2018-03-15 16:34:39 +01:00
Daniel Kolesa
aa313ccfb6
eolian: store types in node hash
2018-03-15 16:34:39 +01:00
Daniel Kolesa
cd49130df7
eolian: generic dtor management for lexer
2018-03-15 16:34:39 +01:00
Daniel Kolesa
916c8cb046
eolian: unified node allocation api
2018-03-15 16:34:39 +01:00
Daniel Kolesa
938acf22c0
eolian: in-lexer-state current class storage
2018-03-15 16:34:39 +01:00
Daniel Kolesa
ab43e61ef6
eolian: turn some state APIs into inlines over unit APIs
2018-03-14 17:20:49 +01:00
Daniel Kolesa
2d0a25c995
eolian: refactor doc ref resolution API
2018-03-14 16:51:11 +01:00
Daniel Kolesa
1f4d919cf9
eolian: update type/var name APIs
2018-03-12 16:28:28 +01:00
Daniel Kolesa
35d9ef2dd2
eolian: make more name APIs into inline helpers
2018-03-12 16:16:43 +01:00
Daniel Kolesa
edcd81ee49
eolian: update class name APIs
2018-03-12 16:03:37 +01:00
Daniel Kolesa
0f0009cb4f
eolian: expose short_name/namespaces via object
2018-03-12 13:55:21 +01:00
Daniel Kolesa
94e1487ed8
eolian: use short name for function pointer name
2018-03-12 12:26:17 +01:00
Daniel Kolesa
5cc3abb425
eolian: only merge units on success when parsing all files
2018-03-12 11:37:02 +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
342974977f
eolian: resolve to Eolian_Objects instead of voids
2018-03-09 15:25:36 +01:00
Daniel Kolesa
c7fd43ad4e
eolian: return Eolian_Object_Type from ref resolver
...
This needs only one enum and allows for better interop.
2018-03-09 15:25:36 +01:00
Daniel Kolesa
7a4669b1b7
eolian: remove old declaration APIs
2018-03-08 23:59:40 +01:00
Daniel Kolesa
1e8de641d8
eolian: tests for new object apis
2018-03-08 23:16:40 +01:00
Daniel Kolesa
c6e0b7f44e
eolian: remove obsolete file_get APIs
2018-03-08 22:54:12 +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
482c5d1ba2
eolian: get rid of old APIs for typedecl retrieval
2018-03-07 13:53:08 +01:00
Daniel Kolesa
f596a97da6
eolian: remove old variable retrieval APIs
2018-03-07 13:25:28 +01:00
Daniel Kolesa
434b0a399d
eolian: remove old class retrieval APIs
2018-03-07 13:08:49 +01:00
Daniel Kolesa
b799fb1959
eolian: remove old APIs for path retrieval
2018-03-02 13:53:34 +01:00
Daniel Kolesa
b45dc505cd
eolian: remove old directory_scan/file_parse APIs
2018-03-02 13:46:57 +01:00
Daniel Kolesa
f8505eddbd
eolian: new APIs for typedecl lookups
2018-03-01 12:42:40 +01:00
Daniel Kolesa
e28e481cca
eolian: new variable lookup APIs
2018-03-01 12:16:28 +01:00
Daniel Kolesa
d6382f3f2b
eolian: new APIs for class retrieval
2018-03-01 12:16:28 +01:00
Daniel Kolesa
7a68ea5edb
eolian: rename path/filename retrieval APIs
2018-02-27 16:12:35 +01:00
Daniel Kolesa
b3596252eb
eolian: rename all_files_parse functions
2018-02-27 16:12:35 +01:00
Daniel Kolesa
9f79d4ff22
eolian: eolian_file_parse -> eolian_state_file_parse
2018-02-27 16:12:35 +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
7d001fd93f
eolian: add API to get children of a unit
2018-02-27 16:12:35 +01:00
Daniel Kolesa
e91ae3984a
eolian: add APIs to retrieve units from a state
2018-02-27 16:12:35 +01:00
Daniel Kolesa
f5e3734cdd
eolian: new APIs for directory scanning
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
a11e70ab3c
eolian: perform correct unit lookups in public API
...
This finally enables looking up things from the current unit
rather than from a backing storage in the Eolian state. This
also means that the benefits of having a unit system will
finally be visible.
2018-02-23 15:34:52 +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
26f0c56faf
eolian: fix eina hash usage so it doesn't consume all your memory
...
This makes sure items are checked before being added, so that eina
hash doesn't get confused, add each item thousands of times and
run out of memory.
2018-02-22 11:19:23 +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
76b9f4c224
eolian: prepare for proper unit API by merging unit hashes
...
Eolian now properly merges all unit hashes (e.g. unit A has
children B and C, hashes of B and C are merged into A's hashes
in order to be able to look up B and C's contents via A) and
maintains a (potentially cyclic) children graph.
Not everything is yet added into all hashes, but at least the
building blocks are there.
2018-02-21 17:09:08 +01:00
Mike Blumenkrantz
1f32a4fcd2
eolian: always print error and fail when name conflicts are detected
2018-02-15 13:50:56 -05:00
Daniel Kolesa
0745ec922b
eolian: properly initialize warned (to avoid random parse failures)
2018-02-13 21:48:46 +01:00
Daniel Kolesa
c82b30cc3c
eolian: print all duplicate warnings before aborting build
...
Instead of aborting at the first warning, accumulate the warnings
and stop at the end of validation.
2018-02-13 10:17:41 +01:00
Daniel Kolesa
09bcf9e5fd
eolian: stop build with EOLIAN_WARN_FUNC_DUPLICATES > 1
2018-02-12 18:56:38 +01:00
Daniel Kolesa
a6d0e787e4
eolian: no need to store 'parsed' table anymore either
2018-01-31 19:14:15 +01:00
Daniel Kolesa
8b1f2f34b4
eolian: simplify parsed checking
2018-01-31 19:06:37 +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
5651b2e586
eolian: deferred parsing of inherits + better static checks
...
This change finally introduces deferred parsing of inherits to
Eolian, after a long time and many iterations. That means instead
of parsing inherits directly as part of the main file's parse pass,
they're pushed into a queue and parsed later. The validation engine
was modified to properly fill in the remaining info afterwards.
This may introduce breakages but I haven't noticed any. It also
properly unlocks cyclic dependency support in Eolian.
Additionally, this also introduces checks for duplicates in class
inherits (class Foo(Bar, Bar) is no longer possible) and it adds
stricter name checks, so you can no longer have a class Foo.Bar
and refer to it as Foo_Bar in implements. This was actually never
meant to be supported, but the check was previously broken.
@feature
2018-01-30 17:08:44 +01:00
Daniel Kolesa
7b643f6919
eolian: move impl/ctor fill to validation stage
2018-01-30 17:08:44 +01:00
Daniel Kolesa
1017f37de7
eolian: fix redefined function checks
...
For one, the hash has to be populated once per inheritance tree
and the skipping on already-validated funcs was interfering with
that as the function might have been validated in another
inheritance tree already.
Also, if a class appeared multiple times in an inheritance tree,
as is common with e.g. Efl.Object, it would get added into the
hash the first time and then checked against the second time,
which would result in a strange error message about the
function being redefined in its own class.
So now we prevent both cases from happening.
2018-01-18 12:49:05 +01:00
Vincent Torri
f5b01ac5ce
all: Simplify definition of EAPI
...
This will help in the transition from Autotools to Meson. This has been
tested on Windows for which EFL_XXX_BUILD were first introduced.
2018-01-18 18:04:03 +09: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
dd2e579fec
eolian: do not require unit for expr eval APIs
...
The necessary information is now stored directly in the expr
during database validation.
Also enable expr validation for params.
2018-01-16 16:37:52 +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
54eac123c2
eolian: correctly validate function pointers
2018-01-12 19:14:13 +01:00
Daniel Kolesa
c6436337a4
eolian: aliased_base_get funcs don't need unit
2018-01-12 18:05:13 +01:00
Daniel Kolesa
19c16b671e
eolian: type_typedecl_get doesn't need a unit
2018-01-12 18:05:13 +01:00
Daniel Kolesa
707ed05d58
eolian: do not require unit for type_class_get
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
efb419fd74
eolian: prevent unnecessary hash table allocs
2017-12-22 15:36:31 +01:00
Daniel Kolesa
65ea735fd7
eolian: remove the toplevel information
2017-12-22 15:36:31 +01:00
Daniel Kolesa
7da6675c34
eolian: perform partial class validation every time
...
This makes sure that duplicate method/part/etc checks are done on
every database update, removing the need for clunky toplevel
checks and improving reliability. It also sacrifices some
performance but it shouldn't be too bad (if a class is already
validated, some checks are avoided to speed things up).
2017-12-22 15:36:31 +01:00
Daniel Kolesa
30c5753172
eolian: deferred parsing of type deps
2017-12-22 15:36:31 +01:00
Daniel Kolesa
e1bcd61bdf
eolian: move inherit type checking to validation
2017-12-22 15:36:31 +01:00
Daniel Kolesa
03e77ea361
eolian: fix use-after-free in eo_parser
...
Thanks @netstar for finding this.
Fixes T6523.
2017-12-19 00:20:40 +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
d624464ab4
eolian: filename retrieval APIs are read only
2017-12-15 17:11:11 +01:00
Daniel Kolesa
c8aa30e698
eolian: make declaration APIs use units
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
f9868b541e
eolian: store unit inside lexer
2017-12-14 16:38:35 +01:00
Daniel Kolesa
535fa0e8f1
eolian: no need to init eina in db
2017-12-07 19:11:58 +01:00
Daniel Kolesa
3ebd1f1506
eolian: store units in state
2017-12-07 19:11:58 +01:00
Daniel Kolesa
8653d8cd73
eolian: properly free all hashes in state free
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
Daniel Kolesa
a25327c62e
eolian: move constants to temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
21db23f702
eolian: move global vars to temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
7491f9353f
eolian: move enums to temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
51ec796497
eolian: move structs to temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
8428eaa663
eolian: store aliases in temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
9fb3abc662
eolian: store classes in temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
14cd25a8d3
eolian: create an internal temporary state
2017-12-06 15:07:31 +01:00
Daniel Kolesa
8a1f93f698
eolian: pass state where necessary
...
This modifies the API so that global state removal is made
possible. It's still used internally for now but externally
the state is contained.
2017-12-05 16:41:42 +01:00
Daniel Kolesa
67e1c2ab88
eolian: add initial refcounting for database objects
...
This will be necessary once the unit system is in (it will be used
to keep track of multiple references to objects across units).
2017-12-05 16:41:42 +01:00
Daniel Kolesa
2a0f873c84
eolian: pass unit within validation engine
2017-12-05 16:41:42 +01:00
Daniel Kolesa
e83e089765
eolian: contain master state in a larger structure
2017-12-05 16:41:42 +01:00
Daniel Kolesa
53aa99550d
eolian: add API for master unit creation
2017-12-05 16:41:42 +01:00
Daniel Kolesa
6abb24b717
eolian: create an actual unit structure for files
...
Units now form an actual tree stored in their own hash. This will
later replace all global state of Eolian, by introducing a master
unit that you will pass around.
2017-12-05 16:41:42 +01:00
Jean-Philippe Andre
43a6fddf1f
eolian: Add builtin type "strbuf"
...
Refers to Eina_Strbuf*
2017-12-05 10:09:58 +09:00
Lauro Moura
0931696a4f
eolian: Add inarray and inlist
2017-12-04 15:47:48 -03:00
Jean-Philippe Andre
aef05c26d6
eolian: Warn less on duplicate beta APIs
...
The check was only done on one of the two functions, resulting in some
unwanted warnings.
EOLIAN_WARN_FUNC_DUPLICATES=1 will show non-beta warnings.
EOLIAN_WARN_FUNC_DUPLICATES=2 will still show all warnings.
2017-11-30 10:48:24 +09:00
Jean-Philippe Andre
d49c544e81
eolian: Add API's for part enumeration
...
@feature
2017-11-23 15:14:41 +09:00
Pawel Aksiutowicz
319f497a72
eolian: Removed warning of unused var from eo_parser
...
Reviewers: stanluk, lukasz.stanislawski
Subscribers: cedric, jpeg
Differential Revision: https://phab.enlightenment.org/D5502
2017-11-21 11:12:27 +09:00
Jean-Philippe Andre
8f2e491573
eolian: Fix odd syntax (remove EINA_UNUSED)
2017-11-14 13:40:19 +09:00
Daniel Kolesa
70ee11af84
eolian: enable cyclic imports of eo files
2017-11-08 16:46:14 +01:00
Daniel Kolesa
5c2611d93a
eolian: simplify dependency parsing and cut down on hash lookups
2017-11-08 16:12:40 +01:00
Daniel Kolesa
0dbbb18171
eolian: disallow ptr() on things that are already pointer-like
...
This disallows deeply nested pointers, you can only explicitly
ptr() on types that are strictly value types.
For a few cases where it was necessary to override this behavior,
you can use legacy(ptr(x)) as a temporary measure.
2017-11-03 15:30:10 +01:00
Daniel Kolesa
cf63573e73
eolian: only allow reference (ownable) types in containers
2017-11-02 13:51:02 +01:00
Daniel Kolesa
f851fa511e
eolian: add part validation (including dup check with funcs)
2017-11-01 13:19:33 +01:00
Daniel Kolesa
eab6f009e2
eolian: add @cref as alternative to @in
...
This is a "pass by reference to const" equivalent. There is no explicit pointer
and currently it's the same as ptr(const(x)) on the type. However, it is also
usable on properties.
2017-11-01 12:40:39 +01:00
Daniel Kolesa
c8e7ad530e
eolian: properly free parts
2017-10-31 12:15:23 +01:00
Daniel Kolesa
0a92c0c61f
eolian: fill parts into db
2017-10-31 12:15:23 +01:00
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
Jean-Philippe Andre
1adb93b3e5
eolian: Skip @beta APIs for duplicate warnings
...
No warnings:
export EOLIAN_WARN_FUNC_DUPLICATES=0
No beta warnings:
export EOLIAN_WARN_FUNC_DUPLICATES=1
All warnings including beta:
export EOLIAN_WARN_FUNC_DUPLICATES=2
EOLIAN_WARN_FUNC_DUPLICATES is not an API and may change in the future
as we improve the tool :)
2017-10-31 14:52:34 +09:00
Daniel Kolesa
4f8a9b50f4
eolian: make inherits_get return a list of classes, not strings
...
Most of the time you need to retrieve the class from the string
anyway, so remove this relic of old Eolian and gain some small
performance benefits and extra convenience.
Subtly breaks API but everything should be updated.
2017-10-25 16:25:41 +02:00
Daniel Kolesa
a4c96ceb73
eolian: add part definition
2017-10-25 16:25:41 +02:00
Daniel Kolesa
c46f9bec2d
eolian: enable duplicate validation but only warn for now
...
Use the EOLIAN_WARN_FUNC_DUPLICATES environment variable to enable
those warnings.
2017-10-25 13:03:20 +02:00
Daniel Kolesa
bd90fff392
eolian: only check for validation where really necessary
2017-10-24 23:41:59 +02:00
Daniel Kolesa
88083b0f14
eolian: check for inheritance tree function conflicts
...
Now a class cannot define a method/property of some name if there
already is something of the same name within the inheritance tree.
2017-10-24 23:39:14 +02:00
Daniel Kolesa
05b395be47
eolian: validate classes in a recursive manner
...
This allows for proper order of validation which will improve our
performance when also validating for name duplicates.
2017-10-24 23:21:24 +02:00
Daniel Kolesa
903fd9065c
eolian: keep track of which objects are validated
2017-10-24 17:49:21 +02:00
Daniel Kolesa
62e46e70ef
eolian: initial parsing for parts in eo files
2017-10-24 17:33:07 +02:00
Cedric BAIL
c0b2ae2cc8
eolian: there should be nothing depending on efl config in our public header.
2017-10-19 15:29:35 -07:00
Daniel Kolesa
7c7e5ec423
eolian: validate inner types of complex types
...
This makes sure the inner types are all correctly defined and
that freefuncs are actually correctly filled.
2017-09-28 23:22:05 +02:00
Daniel Kolesa
5e788e3a5c
elua: bind new eolian type builtin API
2017-09-22 21:03:23 +02:00
Daniel Kolesa
c146d6f877
eolian: add a way to query the builtin type of a type
2017-09-22 21:01:12 +02: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
3d8081d085
eolian: rename generic_value to any_value
2017-09-22 20:16:06 +02:00
Daniel Kolesa
a6e5caba10
eolian: remove leftover code
2017-09-22 18:08:36 +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
fdd27cadf8
eo: make more freefuncs implicit
2017-09-22 16:17:19 +02:00
Daniel Kolesa
9da5cf20aa
eolian: remove old ownership system
2017-09-15 17:52:55 +02:00
Daniel Kolesa
1afd3c215f
eolian: correctness fixes in tests and eo files
2017-09-15 17:48:28 +02:00
Daniel Kolesa
21213802e4
eolian: switch validation to new ownership system
2017-09-15 16:37:26 +02:00
Daniel Kolesa
4b27fe6571
eolian: add API to check for @owned
2017-09-15 16:33:57 +02:00
Daniel Kolesa
010650663b
eolian: store ownership info in types
...
Even though ownership info belongs to params/returns/etc at syntax
level, we can still store it in the type and turn several API funcs
into one this way.
2017-09-15 16:30:52 +02:00
Daniel Kolesa
792855a1fa
eolian: parsing of new @owned syntax for complex types
2017-09-15 16:24:46 +02:00
Daniel Kolesa
4c4c641c4b
eolian: disallow parsing of warn_unused/owned for funcptrs
2017-09-15 15:54:48 +02:00
Daniel Kolesa
11ad2b94ff
eolian: initial parsing for @owned
...
This is the new ownership system for Eolian, working on params,
returns, struct fields or events directly rather than specifying
ownership at type level. As the new system will evolve it will
gain missing features and necessary checks.
2017-09-15 15:51:25 +02:00
Daniel Kolesa
518ca72d06
eolian: default free funcs for builtin types
2017-09-14 15:53:30 +02:00
Daniel Kolesa
a9aed90fde
eolian: more relaxed rules on what is actually ownable
...
For example, aliases to ownable types are now also ownable,
which wasn't possible in the previous version, where you could
only own actual expanded ownable types.
2017-09-14 00:34:06 +02:00
Daniel Kolesa
59347d4c4b
eolian: include terminatable checks in ownable check
2017-09-14 00:28:32 +02:00