eolian: add warnings for class/complex types with pointers (with env var)
authorDaniel Kolesa <d.kolesa@osg.samsung.com>
Fri, 20 May 2016 16:14:38 +0000 (17:14 +0100)
committerDaniel Kolesa <d.kolesa@osg.samsung.com>
Fri, 20 May 2016 16:15:20 +0000 (17:15 +0100)
src/lib/eolian/eo_parser.c

index c945696..0d5d18d 100644 (file)
@@ -836,7 +836,24 @@ parse_type_void_base(Eo_Lexer *ls, Eina_Bool noptr)
 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, '*');
+     {
+        if (getenv("EOLIAN_CLASS_NO_PTR"))
+          {
+             fprintf(stderr, "eolian:%s:%d:%d: pointer around complex/class type '%s'\n",
+                     def->base.file, line, col, def->full_name);
+             if (ls->t.token != '*')
+               {
+                  Eolian_Type *pdef;
+                  pop_type(ls);
+                  pdef = push_type(ls);
+                  FILL_BASE(pdef->base, ls, ls->line_number, ls->column);
+                  pdef->base_type = def;
+                  pdef->type = EOLIAN_TYPE_POINTER;
+                  def = pdef;
+               }
+          }
+        else check(ls, '*');
+     }
    while (ls->t.token == '*')
      {
         Eolian_Type *pdef;