eolian: add support for inlist structs
authorDaniel Kolesa <d.kolesa@samsung.com>
Tue, 29 Jan 2019 14:46:05 +0000 (15:46 +0100)
committerWonki Kim <wonki_.kim@samsung.com>
Fri, 8 Mar 2019 11:49:36 +0000 (20:49 +0900)
commit1bbbc2062d9077ed871547df7fd85caec170d344
tree90090d0af4d242bd998a7720e51e3e2487c8a94f
parentbfc48d85cf6b93d0a510262b26c77ebd70698f0f
eolian: add support for inlist structs

This adds support for inlist structs, a special type of struct
that can only be used with inlists. This differs from regular
structs in a couple ways:

1) They are stored separately. Just like structs, enums, aliases
   have their own storage, so do inlist structs.
2) They can't be @extern, nor they can be opaque.
3) They are their own type of typedecl.
4) When they contain only one field, this field must be a value
   type always, cannot be a pointer.

Like regular structs, they can have arbitrary fields, and they
can have a pre-set free function via @free().

In C, the inlist structs will be generated exactly like ordinary
ones, except they will have EINA_INLIST before the first field.
Other binding generators can deal with them as they wish, for
example to provide high level interfaces to them.

This does not yet do the plumbing necessary to hook these into
the type system, nor it adds generator support.

@feature
src/lib/eolian/Eolian.h
src/lib/eolian/database_check.c
src/lib/eolian/database_type.c
src/lib/eolian/database_type_api.c
src/lib/eolian/database_validate.c
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h