eolian: allow to set @internal to setter/getter independently 19/90419/2
authorJee-Yong Um <conr2d@gmail.com>
Fri, 30 Sep 2016 02:51:19 +0000 (11:51 +0900)
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>
Fri, 30 Sep 2016 04:53:58 +0000 (21:53 -0700)
Signed-Off-By: Jee-Yong Um <jc9.um@samsung.com>
Change-Id: I87202ba21f0975f3b1b5a205847ad65442d92699

src/bin/eolian/eo_generator.c
src/bin/eolian/legacy_generator.c
src/lib/eolian/Eolian.h
src/lib/eolian/database_function_api.c
src/lib/eolian/eo_parser.c
src/lib/eolian/eolian_database.h

index aa16879..ed7cfde 100644 (file)
@@ -93,7 +93,7 @@ eo_fundef_generate(const Eolian_Class *class, const Eolian_Function *func, Eolia
                           eolian_function_documentation_get(func, ftype);
    if (hasnewdocs)
      {
-        Eina_Bool is_internal = eolian_function_is_internal(func);
+        Eina_Bool is_internal = eolian_function_is_internal(func, ftype);
         Eina_Strbuf *dbuf = docs_generate_function(func, ftype, 0, EINA_FALSE, is_internal);
         eina_strbuf_append(str_func, eina_strbuf_string_get(dbuf));
         eina_strbuf_append_char(str_func, '\n');
index 35a6505..a8cb60c 100644 (file)
@@ -80,7 +80,7 @@ _eapi_decl_func_generate(const Eolian_Class *class, const Eolian_Function *funci
                           eolian_function_documentation_get(funcid, ftype);
    if (hasnewdocs)
      {
-        Eina_Bool is_internal = eolian_function_is_internal(funcid);
+        Eina_Bool is_internal = eolian_function_is_internal(funcid, ftype);
         Eina_Strbuf *dbuf = docs_generate_function(funcid, ftype, 0, EINA_TRUE, is_internal);
 
         eina_strbuf_append_char(fbody, '\n');
index e05d5ca..6907862 100644 (file)
@@ -772,7 +772,7 @@ EAPI Eina_Bool eolian_function_is_beta(const Eolian_Function *function_id);
  *
  * @ingroup Eolian
  */
-EAPI Eina_Bool eolian_function_is_internal(const Eolian_Function *function_id);
+EAPI Eina_Bool eolian_function_is_internal(const Eolian_Function *function_id, Eolian_Function_Type ftype);
 
 /*
  * @brief Indicates if a function is a constructing function of a given class.
index c115084..e55da1f 100644 (file)
@@ -335,10 +335,15 @@ eolian_function_is_beta(const Eolian_Function *fid)
 }
 
 EAPI Eina_Bool
-eolian_function_is_internal(const Eolian_Function *fid)
+eolian_function_is_internal(const Eolian_Function *fid, Eolian_Function_Type ftype)
 {
    EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
-   return fid->is_internal;
+   switch (ftype)
+     {
+      case EOLIAN_UNRESOLVED: case EOLIAN_METHOD: case EOLIAN_PROPERTY: case EOLIAN_PROP_GET: return fid->get_internal; break;
+      case EOLIAN_PROP_SET: return fid->set_internal; break;
+      default: return EINA_FALSE;
+     }
 }
 
 EAPI Eina_Bool eolian_function_is_implemented(
index f5bc93d..d8cbcb4 100644 (file)
@@ -1065,7 +1065,7 @@ parse_accessor(Eo_Lexer *ls, Eolian_Function *prop)
    int line, col;
    Eina_Bool has_return = EINA_FALSE, has_legacy = EINA_FALSE,
              has_eo     = EINA_FALSE, has_keys   = EINA_FALSE,
-             has_values = EINA_FALSE;
+             has_values = EINA_FALSE, has_internal = EINA_FALSE;
    Eina_Bool is_get = (ls->t.kw == KW_get);
    if (is_get)
      {
@@ -1086,6 +1086,20 @@ parse_accessor(Eo_Lexer *ls, Eolian_Function *prop)
           prop->type = EOLIAN_PROP_SET;
      }
    eo_lexer_get(ls);
+   for (;;) switch (ls->t.kw)
+     {
+      case KW_at_internal:
+         CASE_LOCK(ls, internal, "internal qualifier");
+         if (is_get)
+           prop->get_internal = EINA_TRUE;
+         else
+           prop->set_internal = EINA_TRUE;
+         eo_lexer_get(ls);
+         break;
+      default:
+         goto body;
+     }
+body:
    line = ls->line_number;
    col = ls->column;
    check_next(ls, '{');
@@ -1217,7 +1231,8 @@ parse_property(Eo_Lexer *ls)
         break;
       case KW_at_internal:
         CASE_LOCK(ls, internal, "internal qualifier");
-        prop->is_internal = EINA_TRUE;
+        prop->get_internal = EINA_TRUE;
+        prop->set_internal = EINA_TRUE;
         eo_lexer_get(ls);
         break;
       default:
@@ -1303,7 +1318,7 @@ parse_method(Eo_Lexer *ls)
         break;
       case KW_at_internal:
         CASE_LOCK(ls, internal, "internal qualifier");
-        meth->is_internal = EINA_TRUE;
+        meth->get_internal = EINA_TRUE;
         eo_lexer_get(ls);
         break;
       default:
index 1ccec24..6ec98f3 100644 (file)
@@ -144,7 +144,8 @@ struct _Eolian_Function
    Eina_Bool is_class :1;
    Eina_Bool is_c_only :1;
    Eina_Bool is_beta :1;
-   Eina_Bool is_internal :1;
+   Eina_Bool get_internal :1;
+   Eina_Bool set_internal :1;
    Eina_List *ctor_of;
    Eolian_Class *klass;
 };