diff --git a/src/bin/eolian/headers.c b/src/bin/eolian/headers.c index 472043b649..7fbd576082 100644 --- a/src/bin/eolian/headers.c +++ b/src/bin/eolian/headers.c @@ -192,6 +192,10 @@ eo_gen_header_gen(const Eolian_State *state, const Eolian_Class *cl, /* class definition */ + if (!legacy && eolian_class_is_beta(cl)) + { + eina_strbuf_append(buf, "#ifdef EFL_BETA_API_SUPPORT\n"); + } if (!legacy) { const Eolian_Documentation *doc = eolian_class_documentation_get(cl); @@ -298,6 +302,10 @@ events: } eina_iterator_free(itr); } + if (!legacy && eolian_class_is_beta(cl)) + { + eina_strbuf_append(buf, "#endif /* EFL_BETA_API_SUPPORT */\n"); + } free(cname); free(cnameu); diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h index fc28058c6b..0320da2010 100644 --- a/src/lib/eolian/Eolian.h +++ b/src/lib/eolian/Eolian.h @@ -2298,6 +2298,16 @@ EAPI Eina_Stringshare *eolian_class_c_name_get(const Eolian_Class *klass); */ EAPI Eina_Stringshare *eolian_class_c_data_type_get(const Eolian_Class *klass); +/* + * @brief Get whether a class is beta. + * + * @param[in] klass the class + * @return EINA_TRUE if the class has been marked as BETA + * + * @ingroup Eolian + */ +EAPI Eina_Bool eolian_class_is_beta(const Eolian_Class *klass); + /* * @brief Get the type of a type declaration. * diff --git a/src/lib/eolian/database_class_api.c b/src/lib/eolian/database_class_api.c index f79cdb800b..73d013672b 100644 --- a/src/lib/eolian/database_class_api.c +++ b/src/lib/eolian/database_class_api.c @@ -228,3 +228,10 @@ eolian_class_c_data_type_get(const Eolian_Class *cl) *p = '_'; return eina_stringshare_add(buf); } + +EAPI Eina_Bool +eolian_class_is_beta(const Eolian_Class *cl) +{ + EINA_SAFETY_ON_NULL_RETURN_VAL(cl, EINA_FALSE); + return cl->is_beta; +} diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index fe5d153962..4346b3432d 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -2093,6 +2093,11 @@ parse_class(Eo_Lexer *ls, Eolian_Class_Type type) eo_lexer_get(ls); ls->klass->type = type; eo_lexer_context_push(ls); + if (ls->t.kw == KW_at_beta) + { + ls->klass->is_beta = EINA_TRUE; + eo_lexer_get(ls); + } parse_name(ls, buf); bnm = eina_stringshare_ref(ls->filename); fnm = database_class_to_filename(eina_strbuf_string_get(buf)); diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index d0d7873fdd..b70f2b4f1e 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -196,6 +196,7 @@ struct _Eolian_Class Eina_List *callables; /* internal for now */ Eina_Bool class_ctor_enable:1; Eina_Bool class_dtor_enable:1; + Eina_Bool is_beta :1; }; struct _Eolian_Function