eolian: remove the silly appending of .get/.set in implements
authorDaniel Kolesa <d.kolesa@samsung.com>
Fri, 29 Aug 2014 14:06:48 +0000 (15:06 +0100)
committerDaniel Kolesa <d.kolesa@samsung.com>
Fri, 29 Aug 2014 14:06:48 +0000 (15:06 +0100)
src/lib/eolian/database_implement_api.c
src/lib/eolian/eo_parser.c

index 052df7e..c366f2e 100644 (file)
@@ -76,16 +76,14 @@ eolian_implement_function_get(const Eolian_Implement *impl,
    if (!klass)
      return NULL;
 
-   char *func_name = strdup(impl->full_name + strlen(klass->full_name) + 1);
-   char *dot = strchr(func_name, '.');
+   const char *func_name = impl->full_name + strlen(klass->full_name) + 1;
 
    Eolian_Function_Type tp = EOLIAN_UNRESOLVED;
-   if (dot)
-     {
-        *dot = '\0';
-        if      (!strcmp(dot + 1, "set")) tp = EOLIAN_PROP_SET;
-        else if (!strcmp(dot + 1, "get")) tp = EOLIAN_PROP_GET;
-     }
+
+   if (impl->is_prop_get)
+     tp = EOLIAN_PROP_GET;
+   else if (impl->is_prop_set)
+     tp = EOLIAN_PROP_SET;
 
    const Eolian_Function *fid = eolian_class_function_get_by_name(klass,
                                                                   func_name,
@@ -97,12 +95,9 @@ eolian_implement_function_get(const Eolian_Implement *impl,
         eina_log_print(_eolian_log_dom, EINA_LOG_LEVEL_ERR,
             impl->base.file, "", impl->base.line, "both get and set required "
               "for property '%s' at column %d", func_name, impl->base.column);
-        free(func_name);
         return NULL;
      }
 
-   free(func_name);
-
    if (func_type)
      {
         if (tp == EOLIAN_UNRESOLVED)
index 6f0c2cc..350c360 100644 (file)
@@ -1562,7 +1562,6 @@ fullclass:
    eina_strbuf_append(buf, ls->t.value.s);
    eo_lexer_get(ls);
    check_next(ls, '.');
-   eina_strbuf_append_char(buf, '.');
    if ((ls->t.token != TOK_VALUE) || (ls->t.kw == KW_get || ls->t.kw == KW_set))
      eo_lexer_syntax_error(ls, "name or constructor/destructor expected");
    for (;;)
@@ -1571,19 +1570,26 @@ fullclass:
           {
            case KW_constructor:
            case KW_destructor:
+             eina_strbuf_append_char(buf, '.');
+             eina_strbuf_append(buf, eo_lexer_keyword_str_get(ls->t.kw));
+             eo_lexer_get(ls);
+             goto end;
            case KW_get:
+             impl->is_prop_get = EINA_TRUE;
+             eo_lexer_get(ls);
+             goto end;
            case KW_set:
-             eina_strbuf_append(buf, eo_lexer_keyword_str_get(ls->t.kw));
+             impl->is_prop_set = EINA_TRUE;
              eo_lexer_get(ls);
              goto end;
            default:
              break;
           }
+        eina_strbuf_append_char(buf, '.');
         check(ls, TOK_VALUE);
         eina_strbuf_append(buf, ls->t.value.s);
         eo_lexer_get(ls);
         if (ls->t.token != '.') break;
-        eina_strbuf_append(buf, ".");
         eo_lexer_get(ls);
      }
 end: