q66 pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=0a92c0c61fd8ed6dc853f4ba4ec7d9271c1a4caa
commit 0a92c0c61fd8ed6dc853f4ba4ec7d9271c1a4caa Author: Daniel Kolesa <[email protected]> Date: Tue Oct 31 12:10:59 2017 +0100 eolian: fill parts into db --- src/lib/eolian/eo_parser.c | 36 ++++++++++++++++++++++++++++++++---- src/lib/eolian/eolian_database.h | 14 ++++++++------ 2 files changed, 40 insertions(+), 10 deletions(-) diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index aa46dd95f1..2250ddaa01 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -1482,14 +1482,42 @@ end: static void parse_part(Eo_Lexer *ls) { - check_next(ls, TOK_VALUE); + Eolian_Part *part = calloc(1, sizeof(Eolian_Part)); + ls->tmp.kls->parts = eina_list_append(ls->tmp.kls->parts, part); + check(ls, TOK_VALUE); + part->name = eina_stringshare_ref(ls->t.value.s); + eo_lexer_get(ls); check_next(ls, ':'); Eina_Strbuf *buf = push_strbuf(ls); + eo_lexer_context_push(ls); parse_name(ls, buf); - check_next(ls, ';'); - if (ls->t.token == TOK_DOC) - eo_lexer_get(ls); + const char *nm = eina_strbuf_string_get(buf); + const char *bnm = eina_stringshare_ref(ls->filename); + char *fnm = database_class_to_filename(nm); + if (!compare_class_file(bnm, fnm)) + { + const char *fname = eina_hash_find(_filenames, fnm); + eina_stringshare_del(bnm); + free(fnm); + if (fname) + _parse_dep(ls, fname, nm); + /* FIXME: pass unit properly */ + Eolian_Class *dep = (Eolian_Class *)eolian_class_get_by_name(NULL, nm); + if (!dep) + { + char ebuf[PATH_MAX]; + eo_lexer_context_restore(ls); + snprintf(ebuf, sizeof(ebuf), "unknown class '%s'", nm); + eo_lexer_syntax_error(ls, ebuf); + return; + } + part->klass = dep; + } + else + part->klass = ls->tmp.kls; pop_strbuf(ls); + check_next(ls, ';'); + FILL_DOC(ls, part, doc); } static void diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index ae53ff94cb..7d134d4282 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -91,12 +91,13 @@ struct _Eolian_Class Eina_Stringshare *eo_prefix; Eina_Stringshare *ev_prefix; Eina_Stringshare *data_type; - Eina_List *inherits; /* List Eolian_Class * */ - Eina_List *properties; /* List prop_name -> Eolian_Function */ - Eina_List *methods; /* List meth_name -> Eolian_Function */ - Eina_List *implements; /* List implements name -> Eolian_Implement */ - Eina_List *constructors; /* List constructors name -> Eolian_Constructor */ - Eina_List *events; /* List event_name -> Eolian_Event */ + Eina_List *inherits; /* Eolian_Class */ + 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 */ Eina_Bool class_ctor_enable:1; Eina_Bool class_dtor_enable:1; Eina_Bool toplevel:1; @@ -146,6 +147,7 @@ struct _Eolian_Part Eolian_Object base; Eina_Stringshare *name; Eolian_Class *klass; + Eolian_Documentation *doc; }; struct _Eolian_Function_Parameter --
