2014-09-23 12:48:16 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "config.h"
|
|
|
|
#endif
|
|
|
|
|
2014-07-10 05:13:46 -07:00
|
|
|
#include <Eina.h>
|
|
|
|
#include "eolian_database.h"
|
2015-05-12 09:23:42 -07:00
|
|
|
#include "eo_lexer.h"
|
2014-07-10 05:13:46 -07:00
|
|
|
|
|
|
|
EAPI Eolian_Type_Type
|
|
|
|
eolian_type_type_get(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPE_UNKNOWN_TYPE);
|
|
|
|
return tp->type;
|
|
|
|
}
|
|
|
|
|
2017-09-22 11:38:17 -07:00
|
|
|
EAPI Eolian_Type_Builtin_Type
|
|
|
|
eolian_type_builtin_type_get(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPE_BUILTIN_INVALID);
|
|
|
|
return tp->btype;
|
|
|
|
}
|
|
|
|
|
2016-01-26 07:28:41 -08:00
|
|
|
EAPI Eolian_Typedecl_Type
|
|
|
|
eolian_typedecl_type_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EOLIAN_TYPEDECL_UNKNOWN);
|
|
|
|
return tp->type;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Iterator *
|
|
|
|
eolian_typedecl_struct_fields_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
2019-02-28 11:25:51 -08:00
|
|
|
if (tp->type != EOLIAN_TYPEDECL_STRUCT)
|
2016-01-26 07:28:41 -08:00
|
|
|
return NULL;
|
|
|
|
return eina_list_iterator_new(tp->field_list);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI const Eolian_Struct_Type_Field *
|
|
|
|
eolian_typedecl_struct_field_get(const Eolian_Typedecl *tp, const char *field)
|
|
|
|
{
|
|
|
|
Eolian_Struct_Type_Field *sf = NULL;
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(field, NULL);
|
2019-02-28 11:25:51 -08:00
|
|
|
if (tp->type != EOLIAN_TYPEDECL_STRUCT)
|
2016-01-26 07:28:41 -08:00
|
|
|
return NULL;
|
|
|
|
sf = eina_hash_find(tp->fields, field);
|
|
|
|
if (!sf) return NULL;
|
|
|
|
return sf;
|
|
|
|
}
|
|
|
|
|
2015-06-03 08:16:53 -07:00
|
|
|
EAPI const Eolian_Documentation *
|
2016-02-19 09:26:27 -08:00
|
|
|
eolian_typedecl_struct_field_documentation_get(const Eolian_Struct_Type_Field *fl)
|
2015-06-03 08:16:53 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
|
|
|
|
return fl->doc;
|
|
|
|
}
|
|
|
|
|
2014-08-22 08:56:41 -07:00
|
|
|
EAPI const Eolian_Type *
|
2016-02-19 09:26:27 -08:00
|
|
|
eolian_typedecl_struct_field_type_get(const Eolian_Struct_Type_Field *fl)
|
2014-08-22 08:56:41 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
|
|
|
|
return fl->type;
|
2014-07-10 05:13:46 -07:00
|
|
|
}
|
|
|
|
|
2019-08-30 08:04:44 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
eolian_typedecl_struct_field_is_by_ref(const Eolian_Struct_Type_Field *fl)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, EINA_FALSE);
|
|
|
|
return fl->by_ref;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI Eina_Bool
|
|
|
|
eolian_typedecl_struct_field_is_move(const Eolian_Struct_Type_Field *fl)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, EINA_FALSE);
|
|
|
|
return fl->move;
|
|
|
|
}
|
|
|
|
|
2019-09-04 06:56:32 -07:00
|
|
|
EAPI Eina_Stringshare *
|
|
|
|
eolian_typedecl_struct_field_c_type_get(const Eolian_Struct_Type_Field *fl)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
|
|
|
|
Eina_Strbuf *buf = eina_strbuf_new();
|
|
|
|
database_type_to_str(fl->type, buf, NULL, EOLIAN_C_TYPE_DEFAULT, fl->by_ref);
|
|
|
|
Eina_Stringshare *ret = eina_stringshare_add(eina_strbuf_string_get(buf));
|
|
|
|
eina_strbuf_free(buf);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2016-01-26 07:28:41 -08:00
|
|
|
EAPI Eina_Iterator *
|
|
|
|
eolian_typedecl_enum_fields_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
if (tp->type != EOLIAN_TYPEDECL_ENUM)
|
|
|
|
return NULL;
|
|
|
|
return eina_list_iterator_new(tp->field_list);
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI const Eolian_Enum_Type_Field *
|
|
|
|
eolian_typedecl_enum_field_get(const Eolian_Typedecl *tp, const char *field)
|
|
|
|
{
|
|
|
|
Eolian_Enum_Type_Field *ef = NULL;
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(field, NULL);
|
|
|
|
if (tp->type != EOLIAN_TYPEDECL_ENUM)
|
|
|
|
return NULL;
|
|
|
|
ef = eina_hash_find(tp->fields, field);
|
|
|
|
if (!ef) return NULL;
|
|
|
|
return ef;
|
|
|
|
}
|
|
|
|
|
2015-05-12 09:04:54 -07:00
|
|
|
EAPI Eina_Stringshare *
|
2019-05-16 06:52:46 -07:00
|
|
|
eolian_typedecl_enum_field_c_constant_get(const Eolian_Enum_Type_Field *fl)
|
2015-05-12 09:04:54 -07:00
|
|
|
{
|
|
|
|
Eina_Stringshare *ret;
|
|
|
|
Eina_Strbuf *buf;
|
2015-05-18 08:37:42 -07:00
|
|
|
char *bufp, *p;
|
2015-05-12 09:04:54 -07:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
|
|
|
|
buf = eina_strbuf_new();
|
|
|
|
if (fl->base_enum->legacy)
|
|
|
|
eina_strbuf_append(buf, fl->base_enum->legacy);
|
|
|
|
else
|
2020-01-10 11:07:42 -08:00
|
|
|
eina_strbuf_append(buf, fl->base_enum->base.c_name);
|
2015-05-12 09:04:54 -07:00
|
|
|
eina_strbuf_append_char(buf, '_');
|
2018-03-08 10:30:40 -08:00
|
|
|
eina_strbuf_append(buf, fl->base.name);
|
2015-05-12 09:04:54 -07:00
|
|
|
bufp = eina_strbuf_string_steal(buf);
|
|
|
|
eina_strbuf_free(buf);
|
|
|
|
eina_str_toupper(&bufp);
|
2015-05-18 08:37:42 -07:00
|
|
|
while ((p = strchr(bufp, '.'))) *p = '_';
|
2015-05-12 09:04:54 -07:00
|
|
|
ret = eina_stringshare_add(bufp);
|
|
|
|
free(bufp);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2015-06-03 08:16:53 -07:00
|
|
|
EAPI const Eolian_Documentation *
|
2016-02-19 09:26:27 -08:00
|
|
|
eolian_typedecl_enum_field_documentation_get(const Eolian_Enum_Type_Field *fl)
|
2015-06-03 08:16:53 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
|
|
|
|
return fl->doc;
|
|
|
|
}
|
|
|
|
|
2014-08-22 08:56:41 -07:00
|
|
|
EAPI const Eolian_Expression *
|
2016-02-19 09:26:27 -08:00
|
|
|
eolian_typedecl_enum_field_value_get(const Eolian_Enum_Type_Field *fl, Eina_Bool force)
|
2014-08-22 08:56:41 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
|
2015-05-13 09:56:18 -07:00
|
|
|
if (!force && !fl->is_public_value) return NULL;
|
2014-08-22 08:56:41 -07:00
|
|
|
return fl->value;
|
2014-08-12 06:25:53 -07:00
|
|
|
}
|
|
|
|
|
2019-09-26 07:41:31 -07:00
|
|
|
EAPI const char *
|
2016-01-26 07:28:41 -08:00
|
|
|
eolian_typedecl_enum_legacy_prefix_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
if (tp->type != EOLIAN_TYPEDECL_ENUM)
|
|
|
|
return NULL;
|
|
|
|
return tp->legacy;
|
|
|
|
}
|
|
|
|
|
|
|
|
EAPI const Eolian_Documentation *
|
|
|
|
eolian_typedecl_documentation_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
return tp->doc;
|
|
|
|
}
|
|
|
|
|
2014-07-10 05:13:46 -07:00
|
|
|
EAPI const Eolian_Type *
|
|
|
|
eolian_type_base_type_get(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
return tp->base_type;
|
|
|
|
}
|
|
|
|
|
2016-06-10 06:28:19 -07:00
|
|
|
EAPI const Eolian_Type *
|
|
|
|
eolian_type_next_type_get(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
return tp->next_type;
|
|
|
|
}
|
|
|
|
|
2016-02-19 05:18:36 -08:00
|
|
|
EAPI const Eolian_Typedecl *
|
2018-01-12 08:52:44 -08:00
|
|
|
eolian_type_typedecl_get(const Eolian_Type *tp)
|
2016-02-19 05:18:36 -08:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
if (eolian_type_type_get(tp) != EOLIAN_TYPE_REGULAR)
|
|
|
|
return NULL;
|
2018-01-12 08:52:44 -08:00
|
|
|
return tp->tdecl;
|
2016-02-19 05:18:36 -08:00
|
|
|
}
|
|
|
|
|
2016-01-26 07:28:41 -08:00
|
|
|
EAPI const Eolian_Type *
|
|
|
|
eolian_typedecl_base_type_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
return tp->base_type;
|
|
|
|
}
|
|
|
|
|
2015-11-18 08:02:15 -08:00
|
|
|
EAPI const Eolian_Type *
|
2018-01-12 09:02:32 -08:00
|
|
|
eolian_type_aliased_base_get(const Eolian_Type *tp)
|
2015-11-18 08:02:15 -08:00
|
|
|
{
|
2016-12-14 08:31:24 -08:00
|
|
|
if (!tp || tp->type != EOLIAN_TYPE_REGULAR || tp->is_ptr)
|
2015-11-18 08:02:15 -08:00
|
|
|
return tp;
|
2018-01-12 09:02:32 -08:00
|
|
|
const Eolian_Typedecl *btp = eolian_type_typedecl_get(tp);
|
2016-03-01 05:40:24 -08:00
|
|
|
if (btp && (btp->type == EOLIAN_TYPEDECL_ALIAS))
|
2018-01-12 09:02:32 -08:00
|
|
|
return eolian_typedecl_aliased_base_get(btp);
|
2016-03-01 05:40:24 -08:00
|
|
|
return tp;
|
2015-11-18 08:02:15 -08:00
|
|
|
}
|
|
|
|
|
2016-01-26 07:28:41 -08:00
|
|
|
EAPI const Eolian_Type *
|
2018-01-12 09:02:32 -08:00
|
|
|
eolian_typedecl_aliased_base_get(const Eolian_Typedecl *tp)
|
2016-01-26 07:28:41 -08:00
|
|
|
{
|
|
|
|
if (!tp || tp->type != EOLIAN_TYPEDECL_ALIAS)
|
|
|
|
return NULL;
|
2018-01-12 09:02:32 -08:00
|
|
|
return eolian_type_aliased_base_get(tp->base_type);
|
2016-01-26 07:28:41 -08:00
|
|
|
}
|
|
|
|
|
2014-07-30 03:57:11 -07:00
|
|
|
EAPI const Eolian_Class *
|
2018-01-12 08:33:28 -08:00
|
|
|
eolian_type_class_get(const Eolian_Type *tp)
|
2014-07-30 03:57:11 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
2015-11-19 07:28:48 -08:00
|
|
|
if (eolian_type_type_get(tp) != EOLIAN_TYPE_CLASS)
|
|
|
|
return NULL;
|
2018-01-12 08:33:28 -08:00
|
|
|
return tp->klass;
|
2014-07-30 03:57:11 -07:00
|
|
|
}
|
|
|
|
|
2019-06-21 06:05:50 -07:00
|
|
|
EAPI const Eolian_Error *
|
|
|
|
eolian_type_error_get(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
if (eolian_type_type_get(tp) != EOLIAN_TYPE_ERROR)
|
|
|
|
return NULL;
|
|
|
|
return tp->error;
|
|
|
|
}
|
|
|
|
|
2019-08-30 17:04:13 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
eolian_type_is_move(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
|
|
|
|
return tp->move;
|
|
|
|
}
|
|
|
|
|
2014-07-10 05:13:46 -07:00
|
|
|
EAPI Eina_Bool
|
|
|
|
eolian_type_is_const(const Eolian_Type *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
|
|
|
|
return tp->is_const;
|
|
|
|
}
|
|
|
|
|
2016-06-08 07:49:09 -07:00
|
|
|
EAPI Eina_Bool
|
2016-11-03 06:21:57 -07:00
|
|
|
eolian_type_is_ptr(const Eolian_Type *tp)
|
2016-06-08 07:49:09 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
|
2016-11-03 06:21:57 -07:00
|
|
|
return tp->is_ptr;
|
2016-06-08 07:49:09 -07:00
|
|
|
}
|
|
|
|
|
2016-01-26 07:28:41 -08:00
|
|
|
EAPI Eina_Bool
|
|
|
|
eolian_typedecl_is_extern(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, EINA_FALSE);
|
|
|
|
return tp->is_extern;
|
|
|
|
}
|
|
|
|
|
2014-07-10 05:13:46 -07:00
|
|
|
EAPI Eina_Stringshare *
|
2019-09-09 09:26:49 -07:00
|
|
|
eolian_type_c_type_get(const Eolian_Type *tp)
|
2014-07-10 05:13:46 -07:00
|
|
|
{
|
|
|
|
Eina_Stringshare *ret;
|
|
|
|
Eina_Strbuf *buf;
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
buf = eina_strbuf_new();
|
2019-09-09 09:26:49 -07:00
|
|
|
database_type_to_str(tp, buf, NULL, EOLIAN_C_TYPE_DEFAULT, EINA_FALSE);
|
2014-07-10 05:13:46 -07:00
|
|
|
ret = eina_stringshare_add(eina_strbuf_string_get(buf));
|
|
|
|
eina_strbuf_free(buf);
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2016-02-11 07:32:02 -08:00
|
|
|
EAPI Eina_Stringshare *
|
2018-01-16 07:36:45 -08:00
|
|
|
eolian_typedecl_c_type_get(const Eolian_Typedecl *tp)
|
2016-02-11 07:32:02 -08:00
|
|
|
{
|
2016-03-01 06:55:10 -08:00
|
|
|
Eina_Stringshare *ret;
|
|
|
|
Eina_Strbuf *buf;
|
2016-02-11 07:32:02 -08:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
2016-03-01 06:55:10 -08:00
|
|
|
buf = eina_strbuf_new();
|
2018-01-16 07:36:45 -08:00
|
|
|
database_typedecl_to_str(tp, buf);
|
2016-03-01 06:55:10 -08:00
|
|
|
ret = eina_stringshare_add(eina_strbuf_string_get(buf));
|
|
|
|
eina_strbuf_free(buf);
|
|
|
|
return ret;
|
2016-02-11 07:32:02 -08:00
|
|
|
}
|
|
|
|
|
2019-09-26 07:41:31 -07:00
|
|
|
EAPI const char *
|
2016-02-11 07:34:26 -08:00
|
|
|
eolian_typedecl_free_func_get(const Eolian_Typedecl *tp)
|
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
return tp->freefunc;
|
|
|
|
}
|
2017-04-07 09:54:55 -07:00
|
|
|
|
|
|
|
EAPI const Eolian_Function *
|
2017-11-13 05:39:02 -08:00
|
|
|
eolian_typedecl_function_pointer_get(const Eolian_Typedecl *tp)
|
2017-04-07 09:54:55 -07:00
|
|
|
{
|
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(tp, NULL);
|
|
|
|
if (eolian_typedecl_type_get(tp) != EOLIAN_TYPEDECL_FUNCTION_POINTER)
|
|
|
|
return NULL;
|
|
|
|
return tp->function_pointer;
|
|
|
|
}
|