From 5f8172a58950b0f789822a0820f1e62c05cce572 Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 18 Jan 2017 15:33:44 +0100 Subject: [PATCH] eolian: add syntax for overridding docs in implements --- src/lib/eolian/database_implement.c | 3 +++ src/lib/eolian/eo_parser.c | 13 +++++++++---- src/lib/eolian/eolian_database.h | 3 +++ src/tests/eolian/data/override.eo | 8 ++++++-- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/lib/eolian/database_implement.c b/src/lib/eolian/database_implement.c index 0e7e767..df055ac 100644 --- a/src/lib/eolian/database_implement.c +++ b/src/lib/eolian/database_implement.c @@ -11,5 +11,8 @@ database_implement_del(Eolian_Implement *impl) if (!impl) return; if (impl->base.file) eina_stringshare_del(impl->base.file); if (impl->full_name) eina_stringshare_del(impl->full_name); + database_doc_del(impl->common_doc); + database_doc_del(impl->get_doc); + database_doc_del(impl->set_doc); free(impl); } diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c index 5dd8376..0b59fa5 100644 --- a/src/lib/eolian/eo_parser.c +++ b/src/lib/eolian/eo_parser.c @@ -1593,8 +1593,8 @@ parse_implement(Eo_Lexer *ls, Eina_Bool iface) eina_strbuf_append_char(buf, '.'); eina_strbuf_append(buf, eo_lexer_keyword_str_get(ls->t.kw)); eo_lexer_get(ls); - check_next(ls, ';'); - goto end; + check(ls, ';'); + goto propbeg; } eina_strbuf_append_char(buf, '.'); check(ls, TOK_VALUE); @@ -1608,6 +1608,7 @@ propbeg: { Eina_Bool has_get = EINA_FALSE, has_set = EINA_FALSE; eo_lexer_get(ls); + FILL_DOC(ls, impl, common_doc); for (;;) switch (ls->t.kw) { case KW_get: @@ -1627,6 +1628,7 @@ propbeg: eo_lexer_get(ls); } check_next(ls, ';'); + FILL_DOC(ls, impl, get_doc); break; case KW_set: CASE_LOCK(ls, set, "set specifier"); @@ -1645,6 +1647,7 @@ propbeg: eo_lexer_get(ls); } check_next(ls, ';'); + FILL_DOC(ls, impl, set_doc); break; default: goto propend; @@ -1655,12 +1658,14 @@ propend: check_next(ls, '}'); } else - check_next(ls, ';'); + { + check_next(ls, ';'); + FILL_DOC(ls, impl, common_doc); + } if (glob_auto) impl->get_auto = impl->set_auto = EINA_TRUE; if (glob_empty) impl->get_empty = impl->set_empty = EINA_TRUE; -end: if (buf) { impl->full_name = eina_stringshare_add(eina_strbuf_string_get(buf)); diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h index 9040262..bf0c257 100644 --- a/src/lib/eolian/eolian_database.h +++ b/src/lib/eolian/eolian_database.h @@ -194,6 +194,9 @@ struct _Eolian_Implement const Eolian_Class *klass; const Eolian_Function *foo_id; Eina_Stringshare *full_name; + Eolian_Documentation *common_doc; + Eolian_Documentation *get_doc; + Eolian_Documentation *set_doc; Eina_Bool is_prop_get :1; Eina_Bool is_prop_set :1; Eina_Bool get_pure_virtual :1; diff --git a/src/tests/eolian/data/override.eo b/src/tests/eolian/data/override.eo index d6e2d56..16ed529 100644 --- a/src/tests/eolian/data/override.eo +++ b/src/tests/eolian/data/override.eo @@ -43,10 +43,14 @@ class Override (Base) { } } implements { - Base.constructor; + Base.constructor; [[overridden docs for constructor]] @auto .b { set; } @empty .bar; @auto .c { get; } - @auto Base.z { get; set; } + @auto Base.z { + [[overridden general property docs]] + get; [[overridden get docs]] + set; [[overridden set docs]] + } } } -- 2.7.4