q66 pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=0e2dee5b2efcb192d6ff34d5bcf8f470f4cfe691

commit 0e2dee5b2efcb192d6ff34d5bcf8f470f4cfe691
Author: Daniel Kolesa <d.kol...@osg.samsung.com>
Date:   Wed May 27 11:00:08 2015 +0100

    eolian: make sure CLASS/COMPLEX type is always pointer backed
---
 src/lib/eolian/eo_parser.c | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index 5ab85e2..48a102f 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -686,7 +686,7 @@ _parse_dep(Eo_Lexer *ls, const char *fname, const char 
*name)
 }
 
 static Eolian_Type *
-parse_type_void(Eo_Lexer *ls)
+parse_type_void_base(Eo_Lexer *ls, Eina_Bool noptr)
 {
    Eolian_Type *def;
    const char *ctype;
@@ -701,7 +701,7 @@ parse_type_void(Eo_Lexer *ls)
            pline = ls->line_number;
            pcol = ls->column;
            check_next(ls, '(');
-           def = parse_type_void(ls);
+           def = parse_type_void_base(ls, EINA_TRUE);
            FILL_BASE(def->base, ls, line, col);
            def->is_const = EINA_TRUE;
            check_match(ls, ')', '(', pline, pcol);
@@ -715,7 +715,7 @@ parse_type_void(Eo_Lexer *ls)
            pcolumn = ls->column;
            check_next(ls, '(');
            eo_lexer_context_push(ls);
-           def = parse_type_void(ls);
+           def = parse_type_void_base(ls, EINA_TRUE);
            if (def->type != EOLIAN_TYPE_POINTER)
              {
                 eo_lexer_context_restore(ls);
@@ -735,7 +735,7 @@ parse_type_void(Eo_Lexer *ls)
            pcolumn = ls->column;
            check_next(ls, '(');
            eo_lexer_context_push(ls);
-           def = parse_type_void(ls);
+           def = parse_type_void_base(ls, EINA_TRUE);
            if (def->type != EOLIAN_TYPE_POINTER)
              {
                 eo_lexer_context_restore(ls);
@@ -823,6 +823,9 @@ parse_type_void(Eo_Lexer *ls)
           }
      }
 parse_ptr:
+   /* check: complex/class type must always be behind a pointer */
+   if (!noptr && ((def->type == EOLIAN_TYPE_CLASS) || (def->type == 
EOLIAN_TYPE_COMPLEX)))
+     check(ls, '*');
    while (ls->t.token == '*')
      {
         Eolian_Type *pdef;
@@ -838,6 +841,12 @@ parse_ptr:
 }
 
 static Eolian_Type *
+parse_type_void(Eo_Lexer *ls)
+{
+   return parse_type_void_base(ls, EINA_FALSE);
+}
+
+static Eolian_Type *
 parse_typedef(Eo_Lexer *ls)
 {
    Eolian_Declaration *decl;

-- 


Reply via email to