eolian: fix eolian_type_enum_field_c_name_get for namespaced enums
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Mon, 18 May 2015 15:37:42 +0000 (16:37 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Mon, 18 May 2015 15:37:42 +0000 (16:37 +0100)
src/lib/eolian/database_type_api.c
src/tests/eolian/data/enum.eo
src/tests/eolian/eolian_parsing.c

index 0799fce..29f8233 100644 (file)
@@ -160,7 +160,7 @@ eolian_type_enum_field_c_name_get(const Eolian_Enum_Type_Field *fl)
 {
    Eina_Stringshare *ret;
    Eina_Strbuf *buf;
-   char *bufp;
+   char *bufp, *p;
    EINA_SAFETY_ON_NULL_RETURN_VAL(fl, NULL);
    buf = eina_strbuf_new();
    if (fl->base_enum->legacy)
@@ -172,6 +172,7 @@ eolian_type_enum_field_c_name_get(const Eolian_Enum_Type_Field *fl)
    bufp = eina_strbuf_string_steal(buf);
    eina_strbuf_free(buf);
    eina_str_toupper(&bufp);
+   while ((p = strchr(bufp, '.'))) *p = '_';
    ret = eina_stringshare_add(bufp);
    free(bufp);
    return ret;
index 4843356..3901943 100644 (file)
@@ -16,6 +16,10 @@ enum Baz {
     flag3 = 1 << 2
 }
 
+enum Name.Spaced {
+    pants
+}
+
 const Bah: Baz = Baz.flag1;
 
 enum Value {
index f7c827b..41c4152 100644 (file)
@@ -895,16 +895,19 @@ START_TEST(eolian_enum)
    fail_if(v.type != EOLIAN_EXPR_INT);
    fail_if(v.value.i != (1 << 1));
 
-   cname = eolian_type_enum_field_c_name_get(field);
-   fail_if(strcmp(cname, "BAZ_FLAG2"));
-   eina_stringshare_del(cname);
-
    fail_if(!(field = eolian_type_enum_field_get(type, "flag3")));
    fail_if(!(exp = eolian_type_enum_field_value_get(field, EINA_FALSE)));
    v = eolian_expression_eval(exp, EOLIAN_MASK_ALL);
    fail_if(v.type != EOLIAN_EXPR_INT);
    fail_if(v.value.i != (1 << 2));
 
+   fail_if(!(type = eolian_type_enum_get_by_name("Name.Spaced")));
+   fail_if(!(field = eolian_type_enum_field_get(type, "pants")));
+
+   cname = eolian_type_enum_field_c_name_get(field);
+   fail_if(strcmp(cname, "NAME_SPACED_PANTS"));
+   eina_stringshare_del(cname);
+
    fail_if(!(var = eolian_variable_constant_get_by_name("Bah")));
    fail_if(eolian_variable_type_get(var) != EOLIAN_VAR_CONSTANT);
    fail_if(eolian_variable_is_extern(var));