q66 pushed a commit to branch master.

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

commit a70645e154950140c8d3883a5bc99d3d259ff32a
Author: Daniel Kolesa <d.kol...@osg.samsung.com>
Date:   Fri Jan 13 15:15:10 2017 +0100

    eolian: consistent and cleaner error values from APIs
    
    Now all error/unknown/etc values returned from APIs are zero,
    previously it was a mix of zeroes and minus ones. Also, some
    enums that had no error/invalid value before have one now, which
    allows for better distinction between what is an error and what
    is an intended result.
---
 src/bin/eolian/docs.c                            |   8 +-
 src/bindings/luajit/eolian.lua                   | 114 ++++++++++++-----------
 src/lib/eolian/Eolian.h                          |  14 +--
 src/lib/eolian/database_event_api.c              |   2 +-
 src/lib/eolian/database_function_api.c           |  14 +--
 src/lib/eolian/database_function_parameter_api.c |   2 +-
 src/lib/eolian/eo_parser.c                       |  23 +++--
 src/lib/eolian/eolian_database.h                 |   2 +-
 src/scripts/elua/apps/docgen/doctree.lua         |   5 +-
 9 files changed, 96 insertions(+), 88 deletions(-)

diff --git a/src/bin/eolian/docs.c b/src/bin/eolian/docs.c
index b8bffa9..0bfbe7f 100644
--- a/src/bin/eolian/docs.c
+++ b/src/bin/eolian/docs.c
@@ -573,10 +573,6 @@ eo_gen_docs_func_gen(const Eolian_Function *fid, 
Eolian_Function_Type ftype,
 
         switch (dir)
           {
-           case EOLIAN_IN_PARAM:
-             eina_strbuf_append(buf, " * @param[in] ");
-             curl += sizeof(" * @param[in] ") - 1;
-             break;
            case EOLIAN_OUT_PARAM:
              eina_strbuf_append(buf, " * @param[out] ");
              curl += sizeof(" * @param[out] ") - 1;
@@ -585,6 +581,10 @@ eo_gen_docs_func_gen(const Eolian_Function *fid, 
Eolian_Function_Type ftype,
              eina_strbuf_append(buf, " * @param[in,out] ");
              curl += sizeof(" * @param[in,out] ") - 1;
              break;
+           default:
+             eina_strbuf_append(buf, " * @param[in] ");
+             curl += sizeof(" * @param[in] ") - 1;
+             break;
           }
 
         const char *nm = eolian_parameter_name_get(par);
diff --git a/src/bindings/luajit/eolian.lua b/src/bindings/luajit/eolian.lua
index 409c94e..e9dc676 100644
--- a/src/bindings/luajit/eolian.lua
+++ b/src/bindings/luajit/eolian.lua
@@ -40,14 +40,15 @@ ffi.cdef [[
 
     typedef enum
     {
-        EOLIAN_IN_PARAM = 0,
+        EOLIAN_UNKNOWN_PARAM = 0,
+        EOLIAN_IN_PARAM,
         EOLIAN_OUT_PARAM,
         EOLIAN_INOUT_PARAM
     } Eolian_Parameter_Dir;
 
     typedef enum
     {
-       EOLIAN_CLASS_UNKNOWN_TYPE = 0,
+        EOLIAN_CLASS_UNKNOWN_TYPE = 0,
         EOLIAN_CLASS_REGULAR,
         EOLIAN_CLASS_ABSTRACT,
         EOLIAN_CLASS_MIXIN,
@@ -56,7 +57,8 @@ ffi.cdef [[
 
     typedef enum
     {
-        EOLIAN_SCOPE_PUBLIC = 0,
+        EOLIAN_SCOPE_UNKNOWN = 0,
+        EOLIAN_SCOPE_PUBLIC,
         EOLIAN_SCOPE_PRIVATE,
         EOLIAN_SCOPE_PROTECTED
     } Eolian_Object_Scope;
@@ -142,7 +144,7 @@ ffi.cdef [[
     } Eolian_Value_t;
 
     typedef enum {
-        EOLIAN_BINOP_INVALID = -1,
+        EOLIAN_BINOP_INVALID = 0,
 
         EOLIAN_BINOP_ADD, /* + int, float */
         EOLIAN_BINOP_SUB, /* - int, float */
@@ -168,7 +170,7 @@ ffi.cdef [[
     } Eolian_Binary_Operator;
 
     typedef enum {
-        EOLIAN_UNOP_INVALID = -1,
+        EOLIAN_UNOP_INVALID = 0,
 
         EOLIAN_UNOP_UNM, /* - sint */
         EOLIAN_UNOP_UNP, /* + sint */
@@ -178,7 +180,7 @@ ffi.cdef [[
     } Eolian_Unary_Operator;
 
     typedef enum {
-        EOLIAN_DECL_UNKNOWN = -1,
+        EOLIAN_DECL_UNKNOWN = 0,
         EOLIAN_DECL_CLASS,
         EOLIAN_DECL_ALIAS,
         EOLIAN_DECL_STRUCT,
@@ -187,7 +189,7 @@ ffi.cdef [[
     } Eolian_Declaration_Type;
 
     typedef enum {
-        EOLIAN_DOC_TOKEN_UNKNOWN = -1,
+        EOLIAN_DOC_TOKEN_UNKNOWN = 0,
         EOLIAN_DOC_TOKEN_TEXT,
         EOLIAN_DOC_TOKEN_REF,
         EOLIAN_DOC_TOKEN_MARK_NOTE,
@@ -433,9 +435,10 @@ end
 cutil.init_module(init, shutdown)
 
 M.object_scope = {
-    PUBLIC    = 0,
-    PRIVATE   = 1,
-    PROTECTED = 2
+    UNKNOWN   = 0,
+    PUBLIC    = 1,
+    PRIVATE   = 2,
+    PROTECTED = 3
 }
 
 M.directory_scan = function(dir)
@@ -479,12 +482,12 @@ M.database_validate = function()
 end
 
 M.declaration_type = {
-    UNKNOWN = -1,
-    CLASS   =  0,
-    ALIAS   =  1,
-    STRUCT  =  2,
-    ENUM    =  3,
-    VAR     =  4
+    UNKNOWN = 0,
+    CLASS   = 0,
+    ALIAS   = 1,
+    STRUCT  = 2,
+    ENUM    = 3,
+    VAR     = 4
 }
 
 M.type_type = {
@@ -849,9 +852,10 @@ M.Function = ffi.metatype("Eolian_Function", {
 })
 
 M.parameter_dir = {
-    IN    = 0,
-    OUT   = 1,
-    INOUT = 2
+    UNKNOWN = 0,
+    IN      = 1,
+    OUT     = 2,
+    INOUT   = 3
 }
 
 ffi.metatype("Eolian_Function_Parameter", {
@@ -1271,39 +1275,39 @@ M.Value = ffi.metatype("Eolian_Value", {
 })
 
 M.binary_operator = {
-    INVALID = -1,
-
-    ADD = 0,
-    SUB = 1,
-    MUL = 2,
-    DIV = 3,
-    MOD = 4,
-
-    EQ = 5,
-    NQ = 6,
-    GT = 7,
-    LT = 8,
-    GE = 9,
-    LE = 10,
-
-    AND = 11,
-    OR  = 12,
-
-    BAND = 13,
-    BOR  = 14,
-    BXOR = 15,
-    LSH  = 16,
-    RSH  = 17
+    INVALID = 0,
+
+    ADD = 1,
+    SUB = 2,
+    MUL = 3,
+    DIV = 4,
+    MOD = 5,
+
+    EQ = 6,
+    NQ = 7,
+    GT = 8,
+    LT = 9,
+    GE = 10,
+    LE = 11,
+
+    AND = 12,
+    OR  = 13,
+
+    BAND = 14,
+    BOR  = 15,
+    BXOR = 16,
+    LSH  = 17,
+    RSH  = 18
 }
 
 M.unary_operator = {
-    INVALID = -1,
+    INVALID = 0,
 
-    UNM = 0,
-    UNP = 1,
+    UNM = 1,
+    UNP = 2,
 
-    NOT  = 2,
-    BNOT = 3
+    NOT  = 3,
+    BNOT = 4
 }
 
 M.Expression = ffi.metatype("Eolian_Expression", {
@@ -1523,14 +1527,14 @@ M.Documentation = ffi.metatype("Eolian_Documentation", {
 })
 
 M.doc_token_type = {
-    UNKNOWN          = -1,
-    TEXT             =  0,
-    REF              =  1,
-    MARK_NOTE        =  2,
-    MARK_WARNING     =  3,
-    MARK_REMARK      =  4,
-    MARK_TODO        =  5,
-    MARKUP_MONOSPACE =  6
+    UNKNOWN          = 0,
+    TEXT             = 1,
+    REF              = 2,
+    MARK_NOTE        = 3,
+    MARK_WARNING     = 4,
+    MARK_REMARK      = 5,
+    MARK_TODO        = 6,
+    MARKUP_MONOSPACE = 7
 }
 
 M.doc_ref_type = {
diff --git a/src/lib/eolian/Eolian.h b/src/lib/eolian/Eolian.h
index 7368921..7e687ee 100644
--- a/src/lib/eolian/Eolian.h
+++ b/src/lib/eolian/Eolian.h
@@ -182,7 +182,8 @@ typedef enum
 
 typedef enum
 {
-   EOLIAN_IN_PARAM = 0,
+   EOLIAN_UNKNOWN_PARAM = 0,
+   EOLIAN_IN_PARAM,
    EOLIAN_OUT_PARAM,
    EOLIAN_INOUT_PARAM
 } Eolian_Parameter_Dir;
@@ -198,7 +199,8 @@ typedef enum
 
 typedef enum
 {
-   EOLIAN_SCOPE_PUBLIC = 0,
+   EOLIAN_SCOPE_UNKNOWN = 0,
+   EOLIAN_SCOPE_PUBLIC,
    EOLIAN_SCOPE_PRIVATE,
    EOLIAN_SCOPE_PROTECTED
 } Eolian_Object_Scope;
@@ -291,7 +293,7 @@ typedef struct _Eolian_Value
 
 typedef enum
 {
-   EOLIAN_BINOP_INVALID = -1,
+   EOLIAN_BINOP_INVALID = 0,
 
    EOLIAN_BINOP_ADD, /* + int, float */
    EOLIAN_BINOP_SUB, /* - int, float */
@@ -318,7 +320,7 @@ typedef enum
 
 typedef enum
 {
-   EOLIAN_UNOP_INVALID = -1,
+   EOLIAN_UNOP_INVALID = 0,
 
    EOLIAN_UNOP_UNM, /* - sint */
    EOLIAN_UNOP_UNP, /* + sint */
@@ -329,7 +331,7 @@ typedef enum
 
 typedef enum
 {
-   EOLIAN_DECL_UNKNOWN = -1,
+   EOLIAN_DECL_UNKNOWN = 0,
    EOLIAN_DECL_CLASS,
    EOLIAN_DECL_ALIAS,
    EOLIAN_DECL_STRUCT,
@@ -339,7 +341,7 @@ typedef enum
 
 typedef enum
 {
-   EOLIAN_DOC_TOKEN_UNKNOWN = -1,
+   EOLIAN_DOC_TOKEN_UNKNOWN = 0,
    EOLIAN_DOC_TOKEN_TEXT,
    EOLIAN_DOC_TOKEN_REF,
    EOLIAN_DOC_TOKEN_MARK_NOTE,
diff --git a/src/lib/eolian/database_event_api.c 
b/src/lib/eolian/database_event_api.c
index 5d69041..0bd4acc 100644
--- a/src/lib/eolian/database_event_api.c
+++ b/src/lib/eolian/database_event_api.c
@@ -29,7 +29,7 @@ eolian_event_documentation_get(const Eolian_Event *event)
 EAPI Eolian_Object_Scope
 eolian_event_scope_get(const Eolian_Event *event)
 {
-   EINA_SAFETY_ON_NULL_RETURN_VAL(event, EOLIAN_SCOPE_PUBLIC);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(event, EOLIAN_SCOPE_UNKNOWN);
    return event->scope;
 }
 
diff --git a/src/lib/eolian/database_function_api.c 
b/src/lib/eolian/database_function_api.c
index 6266ca4..6d7d347 100644
--- a/src/lib/eolian/database_function_api.c
+++ b/src/lib/eolian/database_function_api.c
@@ -8,25 +8,25 @@
 EAPI Eolian_Object_Scope
 eolian_function_scope_get(const Eolian_Function *fid, Eolian_Function_Type 
ftype)
 {
-   EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EOLIAN_SCOPE_PUBLIC);
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_UNRESOLVED, 
EOLIAN_SCOPE_PUBLIC);
-   EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_PROPERTY, 
EOLIAN_SCOPE_PUBLIC);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EOLIAN_SCOPE_UNKNOWN);
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_UNRESOLVED, 
EOLIAN_SCOPE_UNKNOWN);
+   EINA_SAFETY_ON_FALSE_RETURN_VAL(ftype != EOLIAN_PROPERTY, 
EOLIAN_SCOPE_UNKNOWN);
    switch (ftype)
      {
       case EOLIAN_METHOD:
         if (fid->type != EOLIAN_METHOD)
-          return EOLIAN_SCOPE_PUBLIC;
+          return EOLIAN_SCOPE_UNKNOWN;
         return fid->get_scope;
       case EOLIAN_PROP_GET:
         if ((fid->type != EOLIAN_PROP_GET) && (fid->type != EOLIAN_PROPERTY))
-          return EOLIAN_SCOPE_PUBLIC;
+          return EOLIAN_SCOPE_UNKNOWN;
         return fid->get_scope;
       case EOLIAN_PROP_SET:
         if ((fid->type != EOLIAN_PROP_SET) && (fid->type != EOLIAN_PROPERTY))
-          return EOLIAN_SCOPE_PUBLIC;
+          return EOLIAN_SCOPE_UNKNOWN;
         return fid->set_scope;
       default:
-        return EOLIAN_SCOPE_PUBLIC;
+        return EOLIAN_SCOPE_UNKNOWN;
      }
 }
 
diff --git a/src/lib/eolian/database_function_parameter_api.c 
b/src/lib/eolian/database_function_parameter_api.c
index 4835d09..34100ef 100644
--- a/src/lib/eolian/database_function_parameter_api.c
+++ b/src/lib/eolian/database_function_parameter_api.c
@@ -8,7 +8,7 @@
 EAPI Eolian_Parameter_Dir
 eolian_parameter_direction_get(const Eolian_Function_Parameter *param)
 {
-   EINA_SAFETY_ON_NULL_RETURN_VAL(param, EOLIAN_IN_PARAM);
+   EINA_SAFETY_ON_NULL_RETURN_VAL(param, EOLIAN_UNKNOWN_PARAM);
    return param->param_dir;
 }
 
diff --git a/src/lib/eolian/eo_parser.c b/src/lib/eolian/eo_parser.c
index e3d72c4..4173877 100644
--- a/src/lib/eolian/eo_parser.c
+++ b/src/lib/eolian/eo_parser.c
@@ -270,7 +270,7 @@ get_binop_id(int tok)
       case TOK_LSH: return EOLIAN_BINOP_LSH;
       case TOK_RSH: return EOLIAN_BINOP_RSH;
 
-      default: return -1;
+      default: return EOLIAN_BINOP_INVALID;
      }
 }
 
@@ -284,11 +284,13 @@ get_unop_id(int tok)
       case '!': return EOLIAN_UNOP_NOT;
       case '~': return EOLIAN_UNOP_BNOT;
 
-      default: return -1;
+      default: return EOLIAN_UNOP_INVALID;
      }
 }
 
 static const int binprec[] = {
+   -1, /* invalid */
+
    8, /* + */
    8, /* - */
    9, /* * */
@@ -314,13 +316,6 @@ static const int binprec[] = {
 
 #define UNARY_PRECEDENCE 10
 
-static int
-get_binop_prec(Eolian_Binary_Operator id)
-{
-   if (id < 0) return -1;
-   return binprec[id];
-}
-
 static Eolian_Expression *parse_expr_bin(Eo_Lexer *ls, int min_prec);
 static Eolian_Expression *parse_expr(Eo_Lexer *ls);
 
@@ -329,7 +324,7 @@ parse_expr_simple(Eo_Lexer *ls)
 {
    Eolian_Expression *expr;
    Eolian_Unary_Operator unop = get_unop_id(ls->t.token);
-   if (unop >= 0)
+   if (unop != EOLIAN_UNOP_INVALID)
      {
         int line = ls->line_number, col = ls->column;
         eo_lexer_get(ls);
@@ -436,8 +431,8 @@ parse_expr_bin(Eo_Lexer *ls, int min_prec)
      {
         Eolian_Expression *rhs, *bin;
         Eolian_Binary_Operator op = get_binop_id(ls->t.token);
-        int prec = get_binop_prec(op);
-        if ((op < 0) || (prec < 0) || (prec < min_prec))
+        int prec = binprec[op];
+        if ((op == EOLIAN_BINOP_INVALID) || (prec < 0) || (prec < min_prec))
           break;
         eo_lexer_get(ls);
         rhs = parse_expr_bin(ls, prec + 1);
@@ -1073,6 +1068,7 @@ parse_param(Eo_Lexer *ls, Eina_List **params, Eina_Bool 
allow_inout,
    Eina_Bool has_nonull   = EINA_FALSE, has_optional = EINA_FALSE,
              has_nullable = EINA_FALSE;
    Eolian_Function_Parameter *par = calloc(1, 
sizeof(Eolian_Function_Parameter));
+   par->param_dir = EOLIAN_IN_PARAM;
    FILL_BASE(par->base, ls, ls->line_number, ls->column);
    *params = eina_list_append(*params, par);
    if (allow_inout && ls->t.kw == KW_at_in)
@@ -1321,6 +1317,7 @@ parse_property(Eo_Lexer *ls)
    prop = calloc(1, sizeof(Eolian_Function));
    prop->klass = ls->tmp.kls;
    prop->type = EOLIAN_UNRESOLVED;
+   prop->get_scope = prop->set_scope = EOLIAN_SCOPE_PUBLIC;
    FILL_BASE(prop->base, ls, ls->line_number, ls->column);
    ls->tmp.kls->properties = eina_list_append(ls->tmp.kls->properties, prop);
    check(ls, TOK_VALUE);
@@ -1406,6 +1403,7 @@ parse_method(Eo_Lexer *ls)
    meth = calloc(1, sizeof(Eolian_Function));
    meth->klass = ls->tmp.kls;
    meth->type = EOLIAN_METHOD;
+   meth->get_scope = meth->set_scope = EOLIAN_SCOPE_PUBLIC;
    FILL_BASE(meth->base, ls, ls->line_number, ls->column);
    ls->tmp.kls->methods = eina_list_append(ls->tmp.kls->methods, meth);
    check(ls, TOK_VALUE);
@@ -1692,6 +1690,7 @@ parse_event(Eo_Lexer *ls)
 {
    Eolian_Event *ev = calloc(1, sizeof(Eolian_Event));
    FILL_BASE(ev->base, ls, ls->line_number, ls->column);
+   ev->scope = EOLIAN_SCOPE_PUBLIC;
    Eina_Strbuf *buf = push_strbuf(ls);
    ls->tmp.kls->events = eina_list_append(ls->tmp.kls->events, ev);
    check(ls, TOK_VALUE);
diff --git a/src/lib/eolian/eolian_database.h b/src/lib/eolian/eolian_database.h
index 2bb2122..1d471a0 100644
--- a/src/lib/eolian/eolian_database.h
+++ b/src/lib/eolian/eolian_database.h
@@ -226,7 +226,7 @@ struct _Eolian_Event
    Eolian_Documentation *doc;
    Eolian_Type *type;
    Eolian_Class *klass;
-   int scope;
+   Eolian_Object_Scope scope;
    Eina_Bool is_beta :1;
    Eina_Bool is_hot  :1;
    Eina_Bool is_restart :1;
diff --git a/src/scripts/elua/apps/docgen/doctree.lua 
b/src/scripts/elua/apps/docgen/doctree.lua
index 7c86d34..ed309bd 100644
--- a/src/scripts/elua/apps/docgen/doctree.lua
+++ b/src/scripts/elua/apps/docgen/doctree.lua
@@ -12,6 +12,7 @@ local M = {}
 
 M.Node = util.Object:clone {
     scope = {
+        UNKNOWN = eolian.object_scope.UNKNOWN,
         PUBLIC = eolian.object_scope.PUBLIC,
         PRIVATE = eolian.object_scope.PRIVATE,
         PROTECTED = eolian.object_scope.PROTECTED
@@ -408,6 +409,7 @@ M.Function = Node:clone {
 }
 
 M.Parameter = Node:clone {
+    UNKNOWN = eolian.param_dir.UNKNOWN,
     IN = eolian.parameter_dir.IN,
     OUT = eolian.parameter_dir.OUT,
     INOUT = eolian.parameter_dir.INOUT,
@@ -427,7 +429,8 @@ M.Parameter = Node:clone {
             [self.OUT] = "out",
             [self.INOUT] = "inout"
         }
-        return dir_to_str[self:direction_get()]
+        return assert(dir_to_str[self:direction_get()],
+                      "unknown parameter direction")
     end,
 
     type_get = function(self)

-- 


Reply via email to