q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=653fddfc1e17e1290ddd5881150ada3738782d4e

commit 653fddfc1e17e1290ddd5881150ada3738782d4e
Author: Daniel Kolesa <[email protected]>
Date:   Sun May 5 17:06:21 2019 +0200

    eolian: add support for marking and checking parts as beta
    
    Fixes T7837.
---
 src/lib/elementary/efl_ui_widget.eo |  4 ++--
 src/lib/eolian/Eolian.h             | 13 +++++++++++++
 src/lib/eolian/database_validate.c  | 13 +++++++++++--
 src/lib/eolian/eo_parser.c          |  5 +++++
 src/tests/eolian/data/parts.eo      |  2 +-
 src/tests/eolian/eolian_parsing.c   |  3 +++
 6 files changed, 35 insertions(+), 5 deletions(-)

diff --git a/src/lib/elementary/efl_ui_widget.eo 
b/src/lib/elementary/efl_ui_widget.eo
index 05ef4b3b7f..40e51aed92 100644
--- a/src/lib/elementary/efl_ui_widget.eo
+++ b/src/lib/elementary/efl_ui_widget.eo
@@ -400,8 +400,8 @@ abstract Efl.Ui.Widget extends Efl.Canvas.Group implements 
Efl.Access.Object,
       }
    }
    parts {
-      shadow: Efl.Ui.Widget_Part_Shadow;
-      background: Efl.Ui.Widget_Part_Bg;
+      shadow @beta: Efl.Ui.Widget_Part_Shadow;
+      background @beta: Efl.Ui.Widget_Part_Bg;
    }
    implements {
       class.constructor;
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index 72018e7f83..748edb9be6 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -2217,6 +2217,19 @@ EAPI const Eolian_Class *eolian_part_class_get(const 
Eolian_Part *part);
  */
 EAPI const Eolian_Documentation *eolian_part_documentation_get(const 
Eolian_Part *part);
 
+/*
+ * @brief Get whether a part is beta.
+ *
+ * @see eolian_object_is_beta
+ *
+ * @ingroup Eolian
+ */
+static inline Eina_Bool
+eolian_part_is_beta(const Eolian_Part *part)
+{
+   return eolian_object_is_beta(EOLIAN_OBJECT(part));
+}
+
 /*
  * @brief Get an event in a class by its name
  *
diff --git a/src/lib/eolian/database_validate.c 
b/src/lib/eolian/database_validate.c
index 285d19a692..cc1ad5ad7c 100644
--- a/src/lib/eolian/database_validate.c
+++ b/src/lib/eolian/database_validate.c
@@ -480,8 +480,10 @@ _validate_part(Validate_State *vals, Eolian_Part *part, 
Eina_Hash *nhash)
         return EINA_TRUE;
      }
 
+   Eina_Bool was_stable = _set_stable(vals, !part->base.is_beta && 
vals->stable);
+
    if (!_validate_doc(part->doc))
-     return EINA_FALSE;
+     return _reset_stable(vals, was_stable, EINA_FALSE);
 
    /* switch the class name for class */
    Eolian_Class *pcl = eina_hash_find(part->base.unit->classes, 
part->klass_name);
@@ -489,7 +491,13 @@ _validate_part(Validate_State *vals, Eolian_Part *part, 
Eina_Hash *nhash)
      {
         _eo_parser_log(&part->base, "unknown part class '%s' (incorrect 
case?)",
                  part->klass_name);
-        return EINA_FALSE;
+        return _reset_stable(vals, was_stable, EINA_FALSE);
+     }
+   else if (vals->stable && pcl->base.is_beta)
+     {
+        _eo_parser_log(&part->base, "beta part class '%s' used in stable 
context",
+                       pcl->base.name);
+        return _reset_stable(vals, was_stable, EINA_FALSE);
      }
    eina_stringshare_del(part->klass_name);
    part->klass = pcl;
@@ -497,6 +505,7 @@ _validate_part(Validate_State *vals, Eolian_Part *part, 
Eina_Hash *nhash)
    if (!oobj)
      eina_hash_add(nhash, &part->base.name, &part->base);
 
+   _reset_stable(vals, was_stable, EINA_TRUE);
    return _validate(&part->base);
 }
 
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index f0b631ca4a..ebf3b1c038 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -1406,6 +1406,11 @@ parse_part(Eo_Lexer *ls)
    check(ls, TOK_VALUE);
    part->base.name = eina_stringshare_ref(ls->t.value.s);
    eo_lexer_get(ls);
+   if (ls->t.kw == KW_at_beta)
+     {
+        part->base.is_beta = EINA_TRUE;
+        eo_lexer_get(ls);
+     }
    check_next(ls, ':');
    Eina_Strbuf *buf = eina_strbuf_new();
    eo_lexer_dtor_push(ls, EINA_FREE_CB(eina_strbuf_free), buf);
diff --git a/src/tests/eolian/data/parts.eo b/src/tests/eolian/data/parts.eo
index e7062f543b..7f925afbac 100644
--- a/src/tests/eolian/data/parts.eo
+++ b/src/tests/eolian/data/parts.eo
@@ -1,6 +1,6 @@
 class Parts extends Override {
    parts {
       part1: Override; [[Part 1]]
-      part2: Parts; [[Part 2]]
+      part2 @beta: Parts; [[Part 2]]
    }
 }
diff --git a/src/tests/eolian/eolian_parsing.c 
b/src/tests/eolian/eolian_parsing.c
index cf8fcf4d63..a581f9409f 100644
--- a/src/tests/eolian/eolian_parsing.c
+++ b/src/tests/eolian/eolian_parsing.c
@@ -1529,6 +1529,9 @@ EFL_START_TEST(eolian_parts)
 
         fail_if(!(klass = eolian_part_class_get(part)));
         ck_assert_str_eq(part_classes[i], eolian_class_short_name_get(klass));
+
+        fail_if(eolian_part_is_beta(part) && (i == 0));
+
         i++;
      }
    eina_iterator_free(iter);

-- 


Reply via email to