From 341ef8fc05b88ae8ee1c46de1baaf548cb5e4725 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Thu, 15 Sep 2016 15:30:07 +0200 Subject: [PATCH] eolian gen2: initial type generation bits --- src/Makefile_Eolian.am | 4 +++- src/bin/eolian2/main.c | 23 +++++++++++++++++++++++ src/bin/eolian2/main.h | 2 ++ src/bin/eolian2/types.c | 15 +++++++++++++++ src/bin/eolian2/types.h | 6 ++++++ 5 files changed, 49 insertions(+), 1 deletion(-) create mode 100644 src/bin/eolian2/types.c create mode 100644 src/bin/eolian2/types.h diff --git a/src/Makefile_Eolian.am b/src/Makefile_Eolian.am index 06f4f924b1..654194a3a3 100644 --- a/src/Makefile_Eolian.am +++ b/src/Makefile_Eolian.am @@ -73,7 +73,9 @@ bin_PROGRAMS += \ bin_eolian2_eolian_gen2_SOURCES = \ bin/eolian2/main.c \ - bin/eolian2/main.h + bin/eolian2/main.h \ + bin/eolian2/types.c \ + bin/eolian2/types.h bin_eolian2_eolian_gen2_CPPFLAGS = -I$(top_builddir)/src/lib/efl @EOLIAN_CFLAGS@ bin_eolian2_eolian_gen2_LDADD = @USE_EOLIAN_LIBS@ diff --git a/src/bin/eolian2/main.c b/src/bin/eolian2/main.c index d8d945cc85..0e6b019e60 100644 --- a/src/bin/eolian2/main.c +++ b/src/bin/eolian2/main.c @@ -6,6 +6,7 @@ #include #include "main.h" +#include "types.h" int _eolian_gen_log_dom = -1; @@ -201,12 +202,34 @@ _read_file(const char *fname) return eina_strbuf_manage_new_length(cont, fs); } +char *eo_gen_class_full_name_get(const Eolian_Class *cl) +{ + Eina_Stringshare *cln = eolian_class_full_name_get(cl); + if (!cln) + return NULL; + char *buf = strdup(cln); + if (!buf) + return NULL; + for (char *p = strchr(buf, '.'); p; p = strchr(p, '.')) + *p = '_'; + return buf; +} + static Eina_Bool _write_header(const char *ofname, const char *ifname, Eina_Bool legacy) { INF("generating header: %s (legacy: %d)", ofname, legacy); Eina_Strbuf *buf = eina_strbuf_new(); + Eina_Strbuf *cltd = eo_gen_class_typedef_gen(ifname); + if (cltd) + { + cltd = _include_guard(ifname, "CLASS_TYPE", cltd); + eina_strbuf_append(buf, eina_strbuf_string_get(cltd)); + eina_strbuf_append_char(buf, '\n'); + eina_strbuf_free(cltd); + } + Eina_Bool ret = _write_file(ofname, buf, EINA_FALSE); eina_strbuf_free(buf); return ret; diff --git a/src/bin/eolian2/main.h b/src/bin/eolian2/main.h index e80e5dc7bb..985e806ef0 100644 --- a/src/bin/eolian2/main.h +++ b/src/bin/eolian2/main.h @@ -31,4 +31,6 @@ extern int _eolian_gen_log_dom; #endif #define CRIT(...) EINA_LOG_DOM_CRIT(_eolian_gen_log_dom, __VA_ARGS__) +char *eo_gen_class_full_name_get(const Eolian_Class *cl); + #endif diff --git a/src/bin/eolian2/types.c b/src/bin/eolian2/types.c new file mode 100644 index 0000000000..4669e281c1 --- /dev/null +++ b/src/bin/eolian2/types.c @@ -0,0 +1,15 @@ +#include "main.h" + +Eina_Strbuf *eo_gen_class_typedef_gen(const char *eof) +{ + const Eolian_Class *cl = eolian_class_get_by_file(eof); + if (!cl) + return NULL; + char *clfn = eo_gen_class_full_name_get(cl); + if (!clfn) + return NULL; + Eina_Strbuf *ret = eina_strbuf_new(); + eina_strbuf_append_printf(ret, "typedef Eo %s;\n", clfn); + free(clfn); + return ret; +} diff --git a/src/bin/eolian2/types.h b/src/bin/eolian2/types.h new file mode 100644 index 0000000000..2f4434ecaa --- /dev/null +++ b/src/bin/eolian2/types.h @@ -0,0 +1,6 @@ +#ifndef EOLIAN_GEN_TYPES_H +#define EOLIAN_GEN_TYPES_H + +Eina_Strbuf *eo_gen_class_typedef_gen(const char *eof); + +#endif