2014-02-11 05:42:59 -08:00
|
|
|
#ifndef __EOLIAN_DATABASE_H
|
|
|
|
#define __EOLIAN_DATABASE_H
|
|
|
|
|
2018-03-16 07:41:24 -07:00
|
|
|
#include <setjmp.h>
|
|
|
|
|
2014-02-11 05:42:59 -08:00
|
|
|
#include <Eolian.h>
|
|
|
|
|
2014-02-19 04:09:36 -08:00
|
|
|
extern int _eolian_log_dom;
|
2014-07-07 08:46:12 -07:00
|
|
|
extern Eina_Prefix *_eolian_prefix;
|
2014-02-19 04:09:36 -08:00
|
|
|
|
|
|
|
#ifdef CRI
|
|
|
|
#undef CRI
|
|
|
|
#endif
|
|
|
|
#define CRI(...) EINA_LOG_DOM_CRIT(_eolian_log_dom, __VA_ARGS__)
|
|
|
|
|
|
|
|
#ifdef ERR
|
|
|
|
#undef ERR
|
|
|
|
#endif
|
|
|
|
#define ERR(...) EINA_LOG_DOM_ERR(_eolian_log_dom, __VA_ARGS__)
|
|
|
|
|
|
|
|
#ifdef WRN
|
|
|
|
#undef WRN
|
|
|
|
#endif
|
|
|
|
#define WRN(...) EINA_LOG_DOM_WARN(_eolian_log_dom, __VA_ARGS__)
|
|
|
|
|
|
|
|
#ifdef INF
|
|
|
|
#undef INF
|
|
|
|
#endif
|
|
|
|
#define INF(...) EINA_LOG_DOM_INFO(_eolian_log_dom, __VA_ARGS__)
|
|
|
|
|
|
|
|
#ifdef DBG
|
|
|
|
#undef DBG
|
|
|
|
#endif
|
|
|
|
#define DBG(...) EINA_LOG_DOM_DBG(_eolian_log_dom, __VA_ARGS__)
|
|
|
|
|
2017-12-03 12:18:20 -08:00
|
|
|
struct _Eolian_Unit
|
|
|
|
{
|
2018-02-27 06:53:35 -08:00
|
|
|
const char *file;
|
2018-02-27 04:00:36 -08:00
|
|
|
Eolian_State *state;
|
2017-12-03 12:18:20 -08:00
|
|
|
Eina_Hash *children;
|
|
|
|
Eina_Hash *classes;
|
|
|
|
Eina_Hash *globals;
|
|
|
|
Eina_Hash *constants;
|
|
|
|
Eina_Hash *aliases;
|
|
|
|
Eina_Hash *structs;
|
|
|
|
Eina_Hash *enums;
|
2018-03-08 09:59:37 -08:00
|
|
|
Eina_Hash *objects;
|
2017-12-03 12:18:20 -08:00
|
|
|
};
|
|
|
|
|
2018-03-22 09:05:26 -07:00
|
|
|
typedef struct _Eolian_State_Area
|
2017-12-03 12:18:20 -08:00
|
|
|
{
|
|
|
|
Eolian_Unit unit;
|
2018-03-22 09:05:26 -07:00
|
|
|
|
|
|
|
Eina_Hash *units;
|
|
|
|
|
|
|
|
Eina_Hash *classes_f;
|
|
|
|
Eina_Hash *aliases_f;
|
|
|
|
Eina_Hash *structs_f;
|
|
|
|
Eina_Hash *enums_f;
|
|
|
|
Eina_Hash *globals_f;
|
|
|
|
Eina_Hash *constants_f;
|
|
|
|
Eina_Hash *objects_f;
|
|
|
|
} Eolian_State_Area;
|
|
|
|
|
|
|
|
struct _Eolian_State
|
|
|
|
{
|
|
|
|
Eolian_State_Area main;
|
|
|
|
Eolian_State_Area staging;
|
2017-12-06 04:59:17 -08:00
|
|
|
|
2018-03-16 07:41:24 -07:00
|
|
|
Eolian_Panic_Cb panic;
|
|
|
|
Eina_Stringshare *panic_msg;
|
|
|
|
jmp_buf jmp_env;
|
|
|
|
|
2018-03-16 08:07:12 -07:00
|
|
|
Eolian_Error_Cb error;
|
|
|
|
void *error_data;
|
|
|
|
|
2017-12-06 05:24:16 -08:00
|
|
|
Eina_Hash *filenames_eo; /* filename to full path mapping */
|
|
|
|
Eina_Hash *filenames_eot;
|
|
|
|
|
2017-12-07 09:58:21 -08:00
|
|
|
Eina_Hash *defer;
|
2017-12-03 12:18:20 -08:00
|
|
|
};
|
|
|
|
|
2018-03-08 08:30:30 -08:00
|
|
|
struct _Eolian_Object
|
2014-08-04 06:29:13 -07:00
|
|
|
{
|
2018-03-16 08:16:16 -07:00
|
|
|
Eolian_Unit *unit;
|
2018-03-08 10:30:40 -08:00
|
|
|
Eina_Stringshare *file;
|
|
|
|
Eina_Stringshare *name;
|
2014-08-04 06:29:13 -07:00
|
|
|
int line;
|
|
|
|
int column;
|
2017-12-04 05:44:29 -08:00
|
|
|
int refcount;
|
2018-03-08 08:30:30 -08:00
|
|
|
Eolian_Object_Type type;
|
2017-10-24 08:48:57 -07:00
|
|
|
Eina_Bool validated;
|
2018-03-08 08:30:30 -08:00
|
|
|
};
|
2014-08-04 06:29:13 -07:00
|
|
|
|
2017-12-04 05:44:29 -08:00
|
|
|
static inline void
|
|
|
|
eolian_object_ref(Eolian_Object *obj)
|
|
|
|
{
|
|
|
|
++obj->refcount;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline Eina_Bool
|
|
|
|
eolian_object_unref(Eolian_Object *obj)
|
|
|
|
{
|
|
|
|
return (--obj->refcount > 0);
|
|
|
|
}
|
|
|
|
|
2018-02-21 08:50:18 -08:00
|
|
|
static inline void
|
|
|
|
eolian_object_add(Eolian_Object *obj, Eina_Stringshare *name, Eina_Hash *hash)
|
|
|
|
{
|
|
|
|
eina_hash_add(hash, name, obj);
|
|
|
|
eolian_object_ref(obj);
|
|
|
|
}
|
|
|
|
|
2018-02-23 06:25:32 -08:00
|
|
|
#define EOLIAN_OBJECT_ADD(tunit, name, obj, memb) \
|
|
|
|
{ \
|
2018-03-22 09:05:26 -07:00
|
|
|
eolian_object_add(&obj->base, name, tunit->state->staging.unit.memb); \
|
2018-02-23 06:25:32 -08:00
|
|
|
eolian_object_add(&obj->base, name, tunit->memb); \
|
|
|
|
}
|
|
|
|
|
2018-03-20 09:05:22 -07:00
|
|
|
static inline void eolian_state_vlog(const Eolian_State *state, const Eolian_Object *obj, const char *fmt, va_list args) EINA_ARG_NONNULL(1, 3);
|
|
|
|
static inline void eolian_state_log(const Eolian_State *state, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3);
|
|
|
|
static inline void eolian_state_log_obj(const Eolian_State *state, const Eolian_Object *obj, const char *fmt, ...) EINA_ARG_NONNULL(1, 2, 3) EINA_PRINTF(3, 4);
|
|
|
|
|
2018-03-20 09:34:38 -07:00
|
|
|
static inline void eolian_state_panic(Eolian_State *state, const char *fmt, ...) EINA_ARG_NONNULL(1, 2) EINA_PRINTF(2, 3);
|
2018-03-20 09:05:22 -07:00
|
|
|
|
|
|
|
static inline void
|
|
|
|
eolian_state_vlog(const Eolian_State *state, const Eolian_Object *obj,
|
|
|
|
const char *fmt, va_list args)
|
|
|
|
{
|
|
|
|
Eina_Strbuf *sb = eina_strbuf_new();
|
|
|
|
eina_strbuf_append_vprintf(sb, fmt, args);
|
|
|
|
state->error(obj, eina_strbuf_string_get(sb), state->error_data);
|
|
|
|
eina_strbuf_free(sb);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
eolian_state_log(const Eolian_State *state, const char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
va_start(args, fmt);
|
|
|
|
eolian_state_vlog(state, NULL, fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline void
|
|
|
|
eolian_state_log_obj(const Eolian_State *state, const Eolian_Object *obj,
|
|
|
|
const char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
va_start(args, fmt);
|
|
|
|
eolian_state_vlog(state, obj, fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
}
|
|
|
|
|
2018-03-20 09:34:38 -07:00
|
|
|
static inline void
|
|
|
|
eolian_state_panic(Eolian_State *state, const char *fmt, ...)
|
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
va_start(args, fmt);
|
|
|
|
state->panic_msg = eina_stringshare_vprintf(fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
longjmp(state->jmp_env, 1);
|
|
|
|
}
|
2018-03-20 09:05:22 -07:00
|
|
|
|
2015-06-03 07:06:26 -07:00
|
|
|
struct _Eolian_Documentation
|
2015-06-02 10:27:46 -07:00
|
|
|
{
|
|
|
|
Eolian_Object base;
|
|
|
|
Eina_Stringshare *summary;
|
|
|
|
Eina_Stringshare *description;
|
2015-06-08 07:55:02 -07:00
|
|
|
Eina_Stringshare *since;
|
2018-04-12 06:22:33 -07:00
|
|
|
Eina_List *ref_dbg;
|
2015-06-03 07:06:26 -07:00
|
|
|
};
|
2015-06-02 10:27:46 -07:00
|
|
|
|
2014-07-10 04:15:29 -07:00
|
|
|
struct _Eolian_Class
|
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eolian_Class_Type type;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *doc;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eina_Stringshare *legacy_prefix;
|
|
|
|
Eina_Stringshare *eo_prefix;
|
2016-05-17 09:14:47 -07:00
|
|
|
Eina_Stringshare *ev_prefix;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eina_Stringshare *data_type;
|
2018-11-22 07:21:52 -08:00
|
|
|
union {
|
|
|
|
Eolian_Class *parent;
|
|
|
|
Eina_Stringshare *parent_name;
|
|
|
|
};
|
|
|
|
Eina_List *extends; /* Eolian_Class */
|
2017-10-31 04:10:59 -07:00
|
|
|
Eina_List *properties; /* Eolian_Function */
|
|
|
|
Eina_List *methods; /* Eolian_Function */
|
|
|
|
Eina_List *implements; /* Eolian_Implement */
|
|
|
|
Eina_List *constructors; /* Eolian_Constructor */
|
|
|
|
Eina_List *events; /* Eolian_Event */
|
|
|
|
Eina_List *parts; /* Eolian_Part */
|
2019-01-18 08:24:12 -08:00
|
|
|
Eina_List *composite; /* Eolian_Class */
|
2019-01-10 03:10:47 -08:00
|
|
|
Eina_List *requires; /* a list of required other classes only used internally */
|
2019-01-16 10:39:39 -08:00
|
|
|
Eina_List *callables; /* internal for now */
|
2014-07-10 04:15:29 -07:00
|
|
|
Eina_Bool class_ctor_enable:1;
|
|
|
|
Eina_Bool class_dtor_enable:1;
|
2019-02-13 09:12:59 -08:00
|
|
|
Eina_Bool is_beta :1;
|
2014-07-10 04:15:29 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
struct _Eolian_Function
|
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
|
|
|
Eolian_Object set_base;
|
2015-05-20 09:42:00 -07:00
|
|
|
union { /* lists of Eolian_Function_Parameter */
|
|
|
|
Eina_List *params;
|
|
|
|
struct {
|
|
|
|
Eina_List *prop_values;
|
|
|
|
Eina_List *prop_values_get;
|
|
|
|
Eina_List *prop_values_set;
|
|
|
|
Eina_List *prop_keys;
|
|
|
|
Eina_List *prop_keys_get;
|
|
|
|
Eina_List *prop_keys_set;
|
|
|
|
};
|
|
|
|
};
|
2014-07-10 04:15:29 -07:00
|
|
|
Eolian_Function_Type type;
|
2016-06-09 08:54:43 -07:00
|
|
|
Eolian_Object_Scope get_scope;
|
|
|
|
Eolian_Object_Scope set_scope;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eolian_Type *get_ret_type;
|
|
|
|
Eolian_Type *set_ret_type;
|
2014-08-07 07:15:07 -07:00
|
|
|
Eolian_Expression *get_ret_val;
|
|
|
|
Eolian_Expression *set_ret_val;
|
2017-01-16 06:51:11 -08:00
|
|
|
Eolian_Implement *impl;
|
2014-08-15 03:52:11 -07:00
|
|
|
Eina_Stringshare *get_legacy;
|
|
|
|
Eina_Stringshare *set_legacy;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *get_return_doc;
|
|
|
|
Eolian_Documentation *set_return_doc;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eina_Bool obj_is_const :1; /* True if the object has to be const. Useful for a few methods. */
|
|
|
|
Eina_Bool get_return_warn_unused :1; /* also used for methods */
|
|
|
|
Eina_Bool set_return_warn_unused :1;
|
2014-08-18 06:51:03 -07:00
|
|
|
Eina_Bool get_only_legacy: 1;
|
|
|
|
Eina_Bool set_only_legacy: 1;
|
2014-07-24 04:05:12 -07:00
|
|
|
Eina_Bool is_class :1;
|
2015-05-08 06:00:07 -07:00
|
|
|
Eina_Bool is_beta :1;
|
2014-09-12 12:51:37 -07:00
|
|
|
Eina_List *ctor_of;
|
2014-09-25 07:37:18 -07:00
|
|
|
Eolian_Class *klass;
|
2014-07-10 04:15:29 -07:00
|
|
|
};
|
|
|
|
|
2017-10-25 07:08:28 -07:00
|
|
|
struct _Eolian_Part
|
|
|
|
{
|
|
|
|
Eolian_Object base;
|
2018-01-31 09:06:17 -08:00
|
|
|
/* when not validated, class name is stored */
|
|
|
|
union
|
|
|
|
{
|
|
|
|
Eina_Stringshare *klass_name;
|
|
|
|
Eolian_Class *klass;
|
|
|
|
};
|
2017-10-31 04:10:59 -07:00
|
|
|
Eolian_Documentation *doc;
|
2017-10-25 07:08:28 -07:00
|
|
|
};
|
|
|
|
|
2014-07-10 04:15:29 -07:00
|
|
|
struct _Eolian_Function_Parameter
|
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eolian_Type *type;
|
2014-09-02 02:47:38 -07:00
|
|
|
Eolian_Expression *value;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *doc;
|
2014-07-10 04:15:29 -07:00
|
|
|
Eolian_Parameter_Dir param_dir;
|
2015-02-12 03:32:34 -08:00
|
|
|
Eina_Bool nonull :1; /* True if this argument cannot be NULL - deprecated */
|
|
|
|
Eina_Bool nullable :1; /* True if this argument is nullable */
|
|
|
|
Eina_Bool optional :1; /* True if this argument is optional */
|
2014-07-10 04:15:29 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
struct _Eolian_Type
|
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
2014-07-21 05:56:20 -07:00
|
|
|
Eolian_Type_Type type;
|
2017-09-22 11:38:17 -07:00
|
|
|
Eolian_Type_Builtin_Type btype;
|
2014-11-27 09:20:21 -08:00
|
|
|
Eolian_Type *base_type;
|
2016-06-10 06:28:19 -07:00
|
|
|
Eolian_Type *next_type;
|
2014-11-27 09:20:21 -08:00
|
|
|
Eina_Stringshare *freefunc;
|
2018-01-12 08:25:23 -08:00
|
|
|
union
|
|
|
|
{
|
|
|
|
Eolian_Class *klass;
|
|
|
|
Eolian_Typedecl *tdecl;
|
|
|
|
};
|
2014-07-10 04:15:29 -07:00
|
|
|
Eina_Bool is_const :1;
|
2016-11-03 06:21:57 -07:00
|
|
|
Eina_Bool is_ptr :1;
|
2017-09-15 07:24:46 -07:00
|
|
|
Eina_Bool owned :1;
|
2017-11-03 07:30:10 -07:00
|
|
|
Eina_Bool legacy :1;
|
2014-07-10 04:15:29 -07:00
|
|
|
};
|
|
|
|
|
2015-12-14 07:52:30 -08:00
|
|
|
struct _Eolian_Typedecl
|
2015-12-14 07:48:29 -08:00
|
|
|
{
|
|
|
|
Eolian_Object base;
|
2015-12-14 07:52:30 -08:00
|
|
|
Eolian_Typedecl_Type type;
|
2015-12-15 08:01:02 -08:00
|
|
|
Eolian_Type *base_type;
|
2015-12-14 07:48:29 -08:00
|
|
|
Eina_Hash *fields;
|
|
|
|
Eina_List *field_list;
|
2017-04-07 09:54:55 -07:00
|
|
|
Eolian_Function *function_pointer;
|
2015-12-14 07:48:29 -08:00
|
|
|
Eolian_Documentation *doc;
|
|
|
|
Eina_Stringshare *legacy;
|
2016-02-11 07:34:26 -08:00
|
|
|
Eina_Stringshare *freefunc;
|
2015-12-14 07:48:29 -08:00
|
|
|
Eina_Bool is_extern :1;
|
|
|
|
};
|
|
|
|
|
2014-07-10 04:15:29 -07:00
|
|
|
struct _Eolian_Implement
|
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
2014-08-13 05:09:03 -07:00
|
|
|
const Eolian_Class *klass;
|
2018-11-04 07:08:48 -08:00
|
|
|
const Eolian_Class *implklass;
|
2014-09-04 07:15:38 -07:00
|
|
|
const Eolian_Function *foo_id;
|
2017-01-18 06:33:44 -08:00
|
|
|
Eolian_Documentation *common_doc;
|
|
|
|
Eolian_Documentation *get_doc;
|
|
|
|
Eolian_Documentation *set_doc;
|
2014-08-29 03:40:29 -07:00
|
|
|
Eina_Bool is_prop_get :1;
|
|
|
|
Eina_Bool is_prop_set :1;
|
2017-01-13 06:40:29 -08:00
|
|
|
Eina_Bool get_pure_virtual :1;
|
|
|
|
Eina_Bool set_pure_virtual :1;
|
2017-01-11 10:25:54 -08:00
|
|
|
Eina_Bool get_auto: 1;
|
|
|
|
Eina_Bool set_auto: 1;
|
|
|
|
Eina_Bool get_empty: 1;
|
|
|
|
Eina_Bool set_empty: 1;
|
2014-07-10 04:15:29 -07:00
|
|
|
};
|
|
|
|
|
2014-09-01 07:35:50 -07:00
|
|
|
struct _Eolian_Constructor
|
|
|
|
{
|
|
|
|
Eolian_Object base;
|
|
|
|
const Eolian_Class *klass;
|
2014-11-20 07:21:44 -08:00
|
|
|
Eina_Bool is_optional: 1;
|
2018-10-30 18:47:58 -07:00
|
|
|
Eina_Bool is_ctor_param : 1;
|
2014-09-01 07:35:50 -07:00
|
|
|
};
|
|
|
|
|
2014-07-10 04:15:29 -07:00
|
|
|
struct _Eolian_Event
|
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *doc;
|
2014-07-11 03:47:37 -07:00
|
|
|
Eolian_Type *type;
|
2014-09-25 06:58:53 -07:00
|
|
|
Eolian_Class *klass;
|
2017-01-13 06:15:10 -08:00
|
|
|
Eolian_Object_Scope scope;
|
2015-05-08 06:22:32 -07:00
|
|
|
Eina_Bool is_beta :1;
|
2016-02-02 09:55:01 -08:00
|
|
|
Eina_Bool is_hot :1;
|
2016-04-20 15:53:16 -07:00
|
|
|
Eina_Bool is_restart :1;
|
2014-07-10 04:15:29 -07:00
|
|
|
};
|
|
|
|
|
2014-08-22 08:56:41 -07:00
|
|
|
struct _Eolian_Struct_Type_Field
|
2014-07-10 06:19:06 -07:00
|
|
|
{
|
2014-08-04 06:29:13 -07:00
|
|
|
Eolian_Object base;
|
2014-07-10 06:19:06 -07:00
|
|
|
Eolian_Type *type;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *doc;
|
2014-08-22 08:56:41 -07:00
|
|
|
};
|
2014-07-10 06:19:06 -07:00
|
|
|
|
2014-08-22 08:56:41 -07:00
|
|
|
struct _Eolian_Enum_Type_Field
|
2014-08-11 06:56:50 -07:00
|
|
|
{
|
2017-12-04 05:44:29 -08:00
|
|
|
Eolian_Object base;
|
2016-03-01 07:37:57 -08:00
|
|
|
Eolian_Typedecl *base_enum;
|
2014-08-11 06:56:50 -07:00
|
|
|
Eolian_Expression *value;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *doc;
|
2015-05-13 09:56:18 -07:00
|
|
|
Eina_Bool is_public_value :1;
|
2014-08-22 08:56:41 -07:00
|
|
|
};
|
2014-08-11 06:56:50 -07:00
|
|
|
|
2014-07-17 09:16:31 -07:00
|
|
|
struct _Eolian_Expression
|
|
|
|
{
|
2014-08-06 08:30:42 -07:00
|
|
|
Eolian_Object base;
|
2014-07-17 09:16:31 -07:00
|
|
|
Eolian_Expression_Type type;
|
|
|
|
union
|
|
|
|
{
|
|
|
|
struct
|
|
|
|
{
|
|
|
|
Eolian_Binary_Operator binop;
|
|
|
|
Eolian_Expression *lhs;
|
|
|
|
Eolian_Expression *rhs;
|
|
|
|
};
|
|
|
|
struct
|
|
|
|
{
|
2018-01-16 06:50:58 -08:00
|
|
|
union
|
|
|
|
{
|
|
|
|
Eolian_Unary_Operator unop;
|
|
|
|
Eolian_Value_Union value;
|
|
|
|
};
|
2014-07-17 09:16:31 -07:00
|
|
|
Eolian_Expression *expr;
|
|
|
|
};
|
|
|
|
};
|
2015-05-13 09:56:18 -07:00
|
|
|
Eina_Bool weak_lhs :1;
|
|
|
|
Eina_Bool weak_rhs :1;
|
2014-07-17 09:16:31 -07:00
|
|
|
};
|
|
|
|
|
2014-08-08 07:19:52 -07:00
|
|
|
struct _Eolian_Variable
|
|
|
|
{
|
|
|
|
Eolian_Object base;
|
|
|
|
Eolian_Variable_Type type;
|
|
|
|
Eolian_Type *base_type;
|
|
|
|
Eolian_Expression *value;
|
2015-06-03 07:06:26 -07:00
|
|
|
Eolian_Documentation *doc;
|
2014-08-08 07:57:39 -07:00
|
|
|
Eina_Bool is_extern :1;
|
2014-08-08 07:19:52 -07:00
|
|
|
};
|
|
|
|
|
2014-08-15 06:14:43 -07:00
|
|
|
char *database_class_to_filename(const char *cname);
|
2018-03-15 16:14:13 -07:00
|
|
|
Eina_Bool database_validate(const Eolian_Unit *src);
|
2018-05-02 03:55:03 -07:00
|
|
|
Eina_Bool database_check(const Eolian_State *state);
|
2018-04-18 06:23:07 -07:00
|
|
|
/* if isdep is EINA_TRUE, parse as a dependency of current unit */
|
|
|
|
void database_defer(Eolian_State *state, const char *fname, Eina_Bool isdep);
|
2014-08-15 06:14:43 -07:00
|
|
|
|
2018-03-08 14:59:40 -08:00
|
|
|
void database_object_add(Eolian_Unit *unit, const Eolian_Object *obj);
|
2015-05-15 07:10:58 -07:00
|
|
|
|
2015-06-03 07:35:13 -07:00
|
|
|
void database_doc_del(Eolian_Documentation *doc);
|
|
|
|
|
2018-02-27 06:53:35 -08:00
|
|
|
void database_unit_init(Eolian_State *state, Eolian_Unit *unit, const char *file);
|
2017-05-11 07:35:19 -07:00
|
|
|
void database_unit_del(Eolian_Unit *unit);
|
|
|
|
|
2018-04-18 07:34:49 -07:00
|
|
|
Eolian_Object_Type database_doc_token_ref_resolve(const Eolian_Doc_Token *tok,
|
|
|
|
const Eolian_Unit *unit1,
|
|
|
|
const Eolian_Unit *unit2,
|
|
|
|
const Eolian_Object **data1,
|
|
|
|
const Eolian_Object **data2);
|
|
|
|
|
2014-07-10 06:30:34 -07:00
|
|
|
/* types */
|
2014-04-30 02:03:09 -07:00
|
|
|
|
2018-02-21 08:59:39 -08:00
|
|
|
void database_type_add(Eolian_Unit *unit, Eolian_Typedecl *tp);
|
|
|
|
void database_struct_add(Eolian_Unit *unit, Eolian_Typedecl *tp);
|
|
|
|
void database_enum_add(Eolian_Unit *unit, Eolian_Typedecl *tp);
|
2014-07-22 02:39:34 -07:00
|
|
|
void database_type_del(Eolian_Type *tp);
|
2015-12-15 08:01:02 -08:00
|
|
|
void database_typedecl_del(Eolian_Typedecl *tp);
|
|
|
|
|
2018-01-16 07:36:45 -08:00
|
|
|
void database_type_to_str(const Eolian_Type *tp, Eina_Strbuf *buf, const char *name, Eolian_C_Type_Type ctype);
|
|
|
|
void database_typedecl_to_str(const Eolian_Typedecl *tp, Eina_Strbuf *buf);
|
2014-02-11 05:42:59 -08:00
|
|
|
|
2018-01-12 08:52:44 -08:00
|
|
|
Eolian_Typedecl *database_type_decl_find(const Eolian_Unit *src, const Eolian_Type *tp);
|
|
|
|
|
2018-05-03 08:10:31 -07:00
|
|
|
Eina_Bool database_type_is_ownable(const Eolian_Unit *unit, const Eolian_Type *tp, Eina_Bool allow_void);
|
2017-08-10 03:41:03 -07:00
|
|
|
|
2014-08-07 03:13:40 -07:00
|
|
|
/* expressions */
|
|
|
|
|
2018-04-20 06:58:06 -07:00
|
|
|
typedef void (*Expr_Obj_Cb)(const Eolian_Object *obj, void *data);
|
|
|
|
|
|
|
|
Eolian_Value database_expr_eval(const Eolian_Unit *unit, Eolian_Expression *expr, Eolian_Expression_Mask mask, Expr_Obj_Cb cb, void *data);
|
|
|
|
Eolian_Value database_expr_eval_type(const Eolian_Unit *unit, Eolian_Expression *expr, const Eolian_Type *type, Expr_Obj_Cb cb, void *data);
|
2014-08-07 07:15:07 -07:00
|
|
|
void database_expr_del(Eolian_Expression *expr);
|
2014-08-12 07:26:48 -07:00
|
|
|
void database_expr_print(Eolian_Expression *expr);
|
2014-08-07 03:13:40 -07:00
|
|
|
|
2014-08-08 07:19:52 -07:00
|
|
|
/* variables */
|
|
|
|
|
|
|
|
void database_var_del(Eolian_Variable *var);
|
2018-02-23 06:14:13 -08:00
|
|
|
void database_var_add(Eolian_Unit *unit, Eolian_Variable *var);
|
2014-08-08 07:19:52 -07:00
|
|
|
|
2014-07-10 06:30:34 -07:00
|
|
|
/* classes */
|
|
|
|
void database_class_del(Eolian_Class *cl);
|
2014-02-11 05:42:59 -08:00
|
|
|
|
2014-07-10 06:30:34 -07:00
|
|
|
/* functions */
|
2014-07-10 04:15:29 -07:00
|
|
|
void database_function_del(Eolian_Function *fid);
|
2014-09-12 12:51:37 -07:00
|
|
|
void database_function_constructor_add(Eolian_Function *func, const Eolian_Class *klass);
|
2017-01-12 07:56:49 -08:00
|
|
|
Eina_Bool database_function_is_type(Eolian_Function *fid, Eolian_Function_Type ftype);
|
2014-07-10 04:15:29 -07:00
|
|
|
|
2014-07-10 06:30:34 -07:00
|
|
|
/* func parameters */
|
|
|
|
void database_parameter_del(Eolian_Function_Parameter *pdesc);
|
2014-02-18 05:16:51 -08:00
|
|
|
|
2014-07-10 06:30:34 -07:00
|
|
|
/* implements */
|
2014-07-10 07:23:06 -07:00
|
|
|
void database_implement_del(Eolian_Implement *impl);
|
2014-02-11 05:42:59 -08:00
|
|
|
|
2014-09-01 07:35:50 -07:00
|
|
|
/* constructors */
|
|
|
|
void database_constructor_del(Eolian_Constructor *ctor);
|
|
|
|
|
2014-07-10 06:30:34 -07:00
|
|
|
/* events */
|
|
|
|
void database_event_del(Eolian_Event *event);
|
2014-07-09 05:26:00 -07:00
|
|
|
|
2017-10-31 04:14:51 -07:00
|
|
|
/* parts */
|
|
|
|
void database_part_del(Eolian_Part *part);
|
2014-07-10 05:13:46 -07:00
|
|
|
|
2014-02-11 05:42:59 -08:00
|
|
|
#endif
|