eolian: add syntax for overridding docs in implements
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Wed, 18 Jan 2017 14:33:44 +0000 (15:33 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Wed, 18 Jan 2017 14:33:44 +0000 (15:33 +0100)
src/lib/eolian/database_implement.c
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.h
src/tests/eolian/data/override.eo

index 0e7e767..df055ac 100644 (file)
@@ -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);
 }
index 5dd8376..0b59fa5 100644 (file)
@@ -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));
index 9040262..bf0c257 100644 (file)
@@ -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;
index d6e2d56..16ed529 100644 (file)
@@ -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]]
+      }
    }
 }