Eolian/Lexer: support of @own tag on parameter and return values.
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Fri, 14 Mar 2014 11:04:33 +0000 (13:04 +0200)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Fri, 14 Mar 2014 11:21:51 +0000 (13:21 +0200)
This tag indicates that the ownership of the parameter/return
value changes.
It is needed by generators (C++/LUA...) to determine if it has to be
freed or not, if it can be used as is or need to be copied...

src/lib/eolian/Eolian.h
src/lib/eolian/eo_definitions.c
src/lib/eolian/eo_definitions.h
src/lib/eolian/eo_lexer.c
src/lib/eolian/eo_lexer.rl
src/lib/eolian/eolian_database.c
src/lib/eolian/eolian_database.h

index b98c340..212002a 100644 (file)
@@ -441,6 +441,16 @@ EAPI Eina_Bool eolian_parameter_get_const_attribute_get(Eolian_Function_Paramete
 EAPI Eina_Bool eolian_parameter_is_nonull(Eolian_Function_Parameter param_desc);
 
 /*
+ * @brief Indicates if the ownership of tha parameter passes to the caller/callee..
+ *
+ * @param[in] param_desc parameter handle
+ * @return EINA_TRUE if cannot be NULL, EINA_FALSE otherwise
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Bool eolian_parameter_is_own(Eolian_Function_Parameter param_desc);
+
+/*
  * @brief Get the return type of a function.
  *
  * @param[in] function_id id of the function
@@ -484,6 +494,21 @@ eolian_function_return_comment_get(Eolian_Function foo_id, Eolian_Function_Type
 EAPI Eina_Bool eolian_function_return_is_warn_unused(Eolian_Function foo_id, Eolian_Function_Type ftype);
 
 /*
+ * @brief returns the own flag of a function
+ *
+ * @param[in] function_id id of the function
+ * @param[in] ftype type of the function
+ * @return the own flag.
+ *
+ * The type of the function is needed because a given function can represent a
+ * property, that can be set and get functions.
+ *
+ * @ingroup Eolian
+ */
+EAPI Eina_Bool
+eolian_function_return_own_get(Eolian_Function foo_id, Eolian_Function_Type ftype);
+
+/*
  * @brief Indicates if a function object is const.
  *
  * @param[in] function_id id of the function
index 6d1996a..aec0ab5 100644 (file)
@@ -8,7 +8,7 @@ eo_definitions_ret_free(Eo_Ret_Def *ret)
 {
    if (ret->type) eina_stringshare_del(ret->type);
    if (ret->comment) eina_stringshare_del(ret->comment);
-   /* do not free */
+   free(ret);
 }
 
 static void
@@ -41,7 +41,8 @@ eo_definitions_accessor_free(Eo_Accessor_Def *accessor)
    EINA_LIST_FREE(accessor->params, param)
       eo_definitions_accessor_param_free(param);
 
-   eo_definitions_ret_free(&accessor->ret);
+   if (accessor->ret)
+      eo_definitions_ret_free(accessor->ret);
 
    free(accessor);
 }
@@ -72,7 +73,8 @@ eo_definitions_method_def_free(Eo_Method_Def *meth)
 {
    Eo_Param_Def *param;
 
-   eo_definitions_ret_free(&meth->ret);
+   if (meth->ret)
+      eo_definitions_ret_free(meth->ret);
 
    if (meth->name)
      eina_stringshare_del(meth->name);
index f101679..1e8f2a3 100644 (file)
@@ -11,6 +11,7 @@ typedef struct _eo_ret_def
    const char *type;
    const char *comment;
    Eina_Bool warn_unused:1;
+   Eina_Bool own:1;
 } Eo_Ret_Def;
 
 /* PARAM */
@@ -30,6 +31,7 @@ typedef struct _eo_param_def
    const char *name;
    const char *comment;
    Eina_Bool nonull:1;
+   Eina_Bool own:1;
 } Eo_Param_Def;
 
 /* ACCESSOR */
@@ -50,7 +52,7 @@ typedef struct _eo_accessor_param
 typedef struct _eo_accessor_def
 {
    Eo_Accessor_Type type;
-   Eo_Ret_Def ret;
+   Eo_Ret_Def *ret;
    const char *comment;
    const char* legacy;
    Eina_List *params; /* List of Eo_Accessor_Param */
@@ -77,7 +79,7 @@ typedef enum _eo_method_type {
 
 typedef struct _eo_method_def
 {
-   Eo_Ret_Def ret;
+   Eo_Ret_Def *ret;
    Eo_Method_Type type;
    const char *name;
    const char *comment;
index 27a9893..af94f1b 100644 (file)
@@ -181,22 +181,30 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
    Eo_Param_Def *param = calloc(1, sizeof(Eo_Param_Def));
    if (param == NULL) ABORT(toknz, "calloc Eo_Param_Def failure");
 
-   /* If @nonull is found, we set s as the end of the string and
-      update the boolean. Otherwise we set the end as the character
-      before the ';'.
-      We need to modify temporarily p because we want strstr to stop
-      at the ';' maximum. p represents the end of the string to search
-      inside.
+   /* The next code part tries to identify the different tags of the
+      parameter.
+      First, we set the ';' to '\0', to search only inside this section.
+      We then strstr the different tags and if found, we update the internal
+      flag and clear the zone of the text. In this way, during the
+      determination of the type/variable, we will not be disturbed by the
+      flags.
+      We have to put back the ';' at the end.
     */
    *p = '\0';
    s = strstr(toknz->saved.tok, "@nonull");
-   *p = ';';
    if (s)
      {
         param->nonull = EINA_TRUE;
-        p = s;
+        memset(s, ' ', 7);
+     }
+   s = strstr(toknz->saved.tok, "@own");
+   if (s)
+     {
+        param->own = EINA_TRUE;
+        memset(s, ' ', 4);
      }
-   s = p - 1; /* Don't look at the current character (';' or '@') */
+   *p = ';';
+   s = p - 1; /* Don't look at the character ';' */
    /* Remove any space between the param name and ';'/@nonull
     * This loop fixes the case where "char *name ;" becomes the type of the param.
     */
@@ -236,6 +244,43 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
    return param;
 }
 
+static Eo_Ret_Def*
+_eo_tokenizer_return_get(Eo_Tokenizer *toknz, char *p)
+{
+   char *s;
+
+   Eo_Ret_Def *ret = calloc(1, sizeof(Eo_Ret_Def));
+   if (ret == NULL) ABORT(toknz, "calloc Eo_Ret_Def failure");
+
+   *p = '\0';
+   s = strstr(toknz->saved.tok, "@warn_unused");
+   if (s)
+     {
+        ret->warn_unused = EINA_TRUE;
+        memset(s, ' ', 12);
+     }
+   s = strstr(toknz->saved.tok, "@own");
+   if (s)
+     {
+        ret->own = EINA_TRUE;
+        memset(s, ' ', 4);
+     }
+   *p = ';';
+   s = p - 1; /* Don't look at the character ';' */
+   /* Remove any space between the param name and ';'
+    * This loop fixes the case where "char *name ;" becomes the type of the param.
+    */
+   while (*s == ' ') s--;
+
+   if (s == toknz->saved.tok)
+     ABORT(toknz, "wrong parameter: %s", _eo_tokenizer_token_get(toknz, p));
+   s++;
+
+   ret->type = _eo_tokenizer_token_get(toknz, s);
+
+   return ret;
+}
+
 static Eo_Accessor_Param*
 _eo_tokenizer_accessor_param_get(Eo_Tokenizer *toknz, char *p)
 {
@@ -284,21 +329,21 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 }
 
 
-#line 358 "lib/eolian/eo_lexer.rl"
+#line 403 "lib/eolian/eo_lexer.rl"
 
 
 
-#line 292 "lib/eolian/eo_lexer.c"
+#line 337 "lib/eolian/eo_lexer.c"
 static const char _eo_tokenizer_actions[] = {
-       0, 1, 0, 1, 2, 1, 3, 1, 
-       7, 1, 11, 1, 12, 1, 17, 1, 
+       0, 1, 0, 1, 2, 1, 6, 1, 
+       10, 1, 15, 1, 16, 1, 17, 1, 
        18, 1, 19, 1, 20, 1, 21, 1, 
        22, 1, 23, 1, 24, 1, 25, 1, 
        26, 1, 27, 1, 28, 1, 29, 1, 
        30, 1, 31, 1, 32, 1, 33, 1, 
        34, 1, 35, 1, 36, 1, 37, 1, 
-       38, 1, 39, 1, 40, 1, 41, 1, 
-       42, 1, 45, 1, 46, 1, 47, 1, 
+       38, 1, 39, 1, 40, 1, 43, 1, 
+       44, 1, 45, 1, 46, 1, 47, 1, 
        48, 1, 49, 1, 50, 1, 51, 1, 
        52, 1, 53, 1, 54, 1, 55, 1, 
        56, 1, 57, 1, 58, 1, 59, 1, 
@@ -307,7 +352,7 @@ static const char _eo_tokenizer_actions[] = {
        68, 1, 69, 1, 70, 1, 71, 1, 
        72, 1, 73, 1, 74, 1, 75, 1, 
        76, 1, 77, 1, 78, 1, 79, 1, 
-       80, 1, 81, 1, 82, 1, 83, 1, 
+       80, 1, 81, 1, 84, 1, 85, 1, 
        86, 1, 87, 1, 88, 1, 89, 1, 
        90, 1, 91, 1, 92, 1, 93, 1, 
        94, 1, 95, 1, 96, 1, 97, 1, 
@@ -317,23 +362,22 @@ static const char _eo_tokenizer_actions[] = {
        110, 1, 111, 1, 112, 1, 113, 1, 
        114, 1, 115, 1, 116, 1, 117, 1, 
        118, 1, 119, 1, 120, 1, 121, 1, 
-       122, 1, 123, 1, 124, 1, 125, 1, 
-       126, 2, 0, 42, 2, 0, 53, 2, 
-       0, 62, 2, 0, 73, 2, 0, 82, 
-       2, 0, 94, 2, 0, 103, 2, 0, 
-       121, 2, 4, 48, 2, 6, 43, 2, 
-       7, 2, 2, 8, 44, 2, 9, 57, 
-       2, 11, 0, 2, 11, 74, 2, 13, 
-       89, 2, 15, 84, 2, 16, 85, 2, 
-       17, 0, 2, 17, 95, 2, 18, 0, 
-       2, 19, 0, 2, 19, 122, 2, 20, 
-       0, 2, 21, 0, 2, 21, 2, 2, 
-       25, 0, 2, 26, 0, 2, 26, 2, 
-       2, 27, 0, 2, 29, 0, 2, 30, 
-       0, 2, 30, 2, 2, 37, 0, 2, 
-       37, 122, 2, 40, 1, 2, 40, 2, 
-       2, 40, 3, 2, 40, 5, 2, 40, 
-       10, 2, 40, 12, 2, 40, 14
+       122, 1, 123, 1, 124, 2, 0, 40, 
+       2, 0, 51, 2, 0, 60, 2, 0, 
+       71, 2, 0, 80, 2, 0, 92, 2, 
+       0, 101, 2, 0, 119, 2, 4, 46, 
+       2, 5, 41, 2, 6, 2, 2, 7, 
+       42, 2, 8, 55, 2, 10, 0, 2, 
+       10, 72, 2, 12, 87, 2, 13, 82, 
+       2, 14, 83, 2, 15, 0, 2, 15, 
+       93, 2, 16, 0, 2, 17, 0, 2, 
+       17, 120, 2, 18, 0, 2, 19, 0, 
+       2, 19, 2, 2, 23, 0, 2, 24, 
+       0, 2, 24, 2, 2, 25, 0, 2, 
+       27, 0, 2, 28, 0, 2, 28, 2, 
+       2, 35, 0, 2, 35, 120, 2, 38, 
+       1, 2, 38, 2, 2, 38, 3, 2, 
+       38, 9, 2, 38, 11
 };
 
 static const short _eo_tokenizer_key_offsets[] = {
@@ -345,48 +389,45 @@ static const short _eo_tokenizer_key_offsets[] = {
        126, 137, 139, 142, 143, 154, 158, 165, 
        172, 184, 196, 208, 220, 232, 243, 251, 
        258, 266, 278, 290, 302, 314, 325, 333, 
-       344, 357, 361, 362, 363, 373, 375, 378, 
-       379, 380, 381, 382, 383, 384, 385, 386, 
-       387, 388, 389, 390, 392, 395, 396, 408, 
-       412, 413, 414, 424, 426, 429, 431, 434, 
-       435, 436, 440, 441, 442, 446, 447, 451, 
-       452, 453, 454, 455, 459, 461, 464, 465, 
-       476, 480, 483, 485, 488, 499, 501, 504, 
-       505, 506, 507, 508, 509, 510, 511, 512, 
-       513, 516, 523, 530, 538, 539, 540, 541, 
-       542, 546, 547, 548, 549, 550, 553, 560, 
-       571, 584, 588, 589, 590, 600, 602, 605, 
-       606, 607, 608, 609, 610, 611, 612, 613, 
-       614, 615, 616, 617, 619, 622, 623, 634, 
-       638, 641, 643, 646, 657, 659, 662, 663, 
-       664, 665, 666, 667, 668, 669, 670, 671, 
-       672, 673, 677, 678, 679, 683, 690, 697, 
-       705, 706, 707, 708, 709, 710, 711, 712, 
-       713, 714, 718, 719, 720, 721, 722, 723, 
-       724, 725, 729, 736, 743, 751, 752, 753, 
-       754, 755, 759, 767, 775, 787, 791, 803, 
-       804, 805, 815, 817, 820, 828, 829, 830, 
-       831, 832, 833, 834, 835, 836, 840, 848, 
-       856, 869, 874, 878, 879, 880, 881, 882, 
-       883, 895, 900, 904, 913, 917, 918, 919, 
-       920, 921, 922, 926, 935, 942, 949, 960, 
-       964, 978, 988, 995, 1007, 1012, 1018, 1023, 
-       1024, 1025, 1026, 1027, 1028, 1031, 1038, 1045, 
-       1053, 1054, 1058, 1065, 1073, 1077, 1082, 1083, 
-       1084, 1094, 1096, 1099, 1109, 1121, 1128, 1140, 
-       1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 
-       1149, 1150, 1151, 1152, 1156, 1163, 1170, 1178, 
-       1179, 1180, 1181, 1182, 1183, 1187, 1188, 1189, 
-       1190, 1191, 1192, 1193, 1194, 1195, 1199, 1207, 
-       1210, 1212, 1213, 1214, 1215, 1216, 1227, 1230, 
-       1232, 1239, 1247, 1255, 1259, 1259, 1260, 1269, 
-       1272, 1274, 1285, 1289, 1289, 1290, 1299, 1302, 
-       1304, 1305, 1306, 1307, 1308, 1309, 1318, 1321, 
-       1323, 1330, 1331, 1340, 1343, 1345, 1346, 1347, 
-       1348, 1349, 1353, 1353, 1354, 1363, 1366, 1368, 
-       1375, 1376, 1388, 1391, 1393, 1394, 1396, 1399, 
-       1401, 1404, 1405, 1406, 1407, 1408, 1411, 1412, 
-       1413
+       344, 356, 360, 361, 362, 372, 374, 377, 
+       379, 382, 383, 395, 399, 400, 401, 411, 
+       413, 416, 418, 421, 422, 423, 427, 428, 
+       429, 433, 434, 438, 439, 440, 441, 442, 
+       446, 448, 451, 452, 463, 467, 470, 472, 
+       475, 486, 488, 491, 492, 493, 494, 495, 
+       496, 497, 498, 499, 500, 503, 510, 517, 
+       525, 526, 527, 528, 529, 533, 534, 535, 
+       536, 537, 540, 547, 558, 570, 574, 575, 
+       576, 586, 588, 591, 593, 596, 597, 608, 
+       612, 615, 617, 620, 631, 633, 636, 637, 
+       638, 639, 640, 641, 642, 643, 644, 645, 
+       646, 647, 651, 652, 653, 657, 664, 671, 
+       679, 680, 681, 682, 683, 684, 685, 686, 
+       687, 688, 692, 693, 694, 695, 696, 697, 
+       698, 699, 703, 710, 717, 725, 726, 727, 
+       728, 729, 733, 741, 749, 761, 765, 777, 
+       778, 779, 789, 791, 794, 802, 803, 804, 
+       805, 806, 807, 808, 809, 810, 814, 822, 
+       830, 843, 848, 852, 853, 854, 855, 856, 
+       857, 869, 874, 878, 887, 891, 892, 893, 
+       894, 895, 896, 900, 909, 916, 923, 934, 
+       938, 952, 962, 969, 981, 986, 992, 997, 
+       998, 999, 1000, 1001, 1002, 1005, 1012, 1019, 
+       1027, 1028, 1032, 1039, 1047, 1051, 1056, 1057, 
+       1058, 1068, 1070, 1073, 1083, 1095, 1102, 1114, 
+       1115, 1116, 1117, 1118, 1119, 1120, 1121, 1122, 
+       1123, 1124, 1125, 1126, 1130, 1137, 1144, 1152, 
+       1153, 1154, 1155, 1156, 1157, 1161, 1162, 1163, 
+       1164, 1165, 1166, 1167, 1168, 1169, 1173, 1181, 
+       1184, 1186, 1187, 1188, 1189, 1190, 1201, 1204, 
+       1206, 1213, 1221, 1229, 1233, 1233, 1234, 1243, 
+       1246, 1248, 1259, 1263, 1263, 1264, 1273, 1276, 
+       1278, 1279, 1280, 1281, 1282, 1283, 1292, 1295, 
+       1297, 1304, 1305, 1314, 1317, 1319, 1320, 1321, 
+       1322, 1323, 1327, 1327, 1328, 1337, 1340, 1342, 
+       1349, 1350, 1362, 1365, 1367, 1368, 1370, 1373, 
+       1375, 1378, 1379, 1380, 1381, 1382, 1385, 1386, 
+       1387
 };
 
 static const char _eo_tokenizer_trans_keys[] = {
@@ -432,141 +473,138 @@ static const char _eo_tokenizer_trans_keys[] = {
        97, 122, 9, 13, 32, 58, 95, 48, 
        57, 65, 90, 97, 122, 9, 13, 32, 
        58, 65, 90, 97, 122, 9, 13, 32, 
-       42, 95, 48, 57, 65, 90, 97, 122, 
-       9, 13, 32, 42, 59, 64, 95, 48, 
-       57, 65, 90, 97, 122, 9, 13, 32, 
-       47, 42, 64, 10, 95, 0, 32, 48, 
-       57, 64, 90, 97, 122, 10, 42, 10, 
-       42, 47, 119, 97, 114, 110, 95, 117, 
-       110, 117, 115, 101, 100, 59, 10, 42, 
-       10, 42, 47, 10, 9, 13, 32, 42, 
-       59, 95, 48, 57, 64, 90, 97, 122, 
-       9, 13, 32, 47, 42, 64, 10, 95, 
-       0, 32, 48, 57, 64, 90, 97, 122, 
-       10, 42, 10, 42, 47, 10, 42, 10, 
-       42, 47, 10, 116, 10, 123, 0, 32, 
-       121, 115, 10, 123, 0, 32, 116, 10, 
-       123, 0, 32, 108, 117, 101, 115, 10, 
-       123, 0, 32, 10, 42, 10, 42, 47, 
-       10, 10, 95, 123, 0, 32, 48, 57, 
-       65, 90, 97, 122, 10, 123, 0, 32, 
-       10, 42, 64, 10, 42, 10, 42, 47, 
-       10, 42, 95, 0, 32, 48, 57, 64, 
+       42, 95, 48, 57, 64, 90, 97, 122, 
+       9, 13, 32, 42, 59, 95, 48, 57, 
+       64, 90, 97, 122, 9, 13, 32, 47, 
+       42, 64, 10, 95, 0, 32, 48, 57, 
+       64, 90, 97, 122, 10, 42, 10, 42, 
+       47, 10, 42, 10, 42, 47, 10, 9, 
+       13, 32, 42, 59, 95, 48, 57, 64, 
+       90, 97, 122, 9, 13, 32, 47, 42, 
+       64, 10, 95, 0, 32, 48, 57, 64, 
        90, 97, 122, 10, 42, 10, 42, 47, 
-       10, 110, 115, 116, 59, 103, 97, 99, 
-       121, 9, 13, 32, 9, 13, 32, 65, 
-       90, 97, 122, 95, 48, 57, 65, 90, 
-       97, 122, 59, 95, 48, 57, 65, 90, 
-       97, 122, 114, 97, 109, 115, 10, 123, 
-       0, 32, 116, 117, 114, 110, 9, 13, 
-       32, 9, 13, 32, 65, 90, 97, 122, 
-       9, 13, 32, 42, 95, 48, 57, 65, 
-       90, 97, 122, 9, 13, 32, 42, 59, 
-       64, 95, 48, 57, 65, 90, 97, 122, 
-       9, 13, 32, 47, 42, 64, 10, 95, 
-       0, 32, 48, 57, 64, 90, 97, 122, 
-       10, 42, 10, 42, 47, 119, 97, 114, 
-       110, 95, 117, 110, 117, 115, 101, 100, 
-       59, 10, 42, 10, 42, 47, 10, 10, 
-       95, 123, 0, 32, 48, 57, 65, 90, 
-       97, 122, 10, 123, 0, 32, 10, 42, 
-       64, 10, 42, 10, 42, 47, 10, 42, 
-       95, 0, 32, 48, 57, 64, 90, 97, 
-       122, 10, 42, 10, 42, 47, 10, 110, 
-       115, 116, 114, 117, 99, 116, 111, 114, 
-       115, 10, 123, 0, 32, 116, 97, 10, 
-       58, 0, 32, 10, 0, 32, 65, 90, 
-       97, 122, 95, 48, 57, 65, 90, 97, 
-       122, 59, 95, 48, 57, 65, 90, 97, 
-       122, 115, 116, 114, 117, 99, 116, 111, 
-       114, 115, 10, 123, 0, 32, 95, 112, 
-       114, 101, 102, 105, 120, 10, 58, 0, 
-       32, 10, 0, 32, 65, 90, 97, 122, 
-       95, 48, 57, 65, 90, 97, 122, 59, 
-       95, 48, 57, 65, 90, 97, 122, 101, 
-       110, 116, 115, 10, 123, 0, 32, 10, 
-       125, 0, 32, 65, 90, 97, 122, 44, 
-       95, 48, 57, 65, 90, 97, 122, 10, 
-       44, 59, 95, 0, 32, 48, 57, 65, 
-       90, 97, 122, 10, 59, 0, 32, 9, 
-       10, 13, 32, 47, 125, 0, 31, 65, 
-       90, 97, 122, 42, 64, 10, 95, 0, 
-       32, 48, 57, 64, 90, 97, 122, 10, 
-       42, 10, 42, 47, 10, 125, 0, 32, 
-       65, 90, 97, 122, 112, 108, 101, 109, 
-       101, 110, 116, 115, 10, 123, 0, 32, 
-       10, 125, 0, 32, 65, 90, 97, 122, 
-       58, 95, 48, 57, 65, 90, 97, 122, 
-       10, 58, 59, 95, 123, 0, 32, 48, 
-       57, 65, 90, 97, 122, 10, 59, 123, 
-       0, 32, 10, 108, 0, 32, 101, 103, 
-       97, 99, 121, 9, 10, 13, 32, 59, 
-       123, 0, 31, 65, 90, 97, 122, 10, 
-       59, 123, 0, 32, 10, 125, 0, 32, 
-       10, 59, 125, 0, 32, 65, 90, 97, 
-       122, 10, 112, 0, 32, 97, 114, 97, 
-       109, 115, 10, 123, 0, 32, 10, 58, 
-       59, 0, 32, 65, 90, 97, 122, 9, 
+       10, 42, 10, 42, 47, 10, 116, 10, 
+       123, 0, 32, 121, 115, 10, 123, 0, 
+       32, 116, 10, 123, 0, 32, 108, 117, 
+       101, 115, 10, 123, 0, 32, 10, 42, 
+       10, 42, 47, 10, 10, 95, 123, 0, 
+       32, 48, 57, 65, 90, 97, 122, 10, 
+       123, 0, 32, 10, 42, 64, 10, 42, 
+       10, 42, 47, 10, 42, 95, 0, 32, 
+       48, 57, 64, 90, 97, 122, 10, 42, 
+       10, 42, 47, 10, 110, 115, 116, 59, 
+       103, 97, 99, 121, 9, 13, 32, 9, 
        13, 32, 65, 90, 97, 122, 95, 48, 
-       57, 65, 90, 97, 122, 10, 59, 95, 
+       57, 65, 90, 97, 122, 59, 95, 48, 
+       57, 65, 90, 97, 122, 114, 97, 109, 
+       115, 10, 123, 0, 32, 116, 117, 114, 
+       110, 9, 13, 32, 9, 13, 32, 65, 
+       90, 97, 122, 9, 13, 32, 42, 95, 
+       48, 57, 64, 90, 97, 122, 9, 13, 
+       32, 42, 59, 95, 48, 57, 64, 90, 
+       97, 122, 9, 13, 32, 47, 42, 64, 
+       10, 95, 0, 32, 48, 57, 64, 90, 
+       97, 122, 10, 42, 10, 42, 47, 10, 
+       42, 10, 42, 47, 10, 10, 95, 123, 
        0, 32, 48, 57, 65, 90, 97, 122, 
-       10, 59, 0, 32, 9, 10, 13, 32, 
-       47, 58, 59, 125, 0, 31, 65, 90, 
-       97, 122, 10, 58, 59, 125, 0, 32, 
+       10, 123, 0, 32, 10, 42, 64, 10, 
+       42, 10, 42, 47, 10, 42, 95, 0, 
+       32, 48, 57, 64, 90, 97, 122, 10, 
+       42, 10, 42, 47, 10, 110, 115, 116, 
+       114, 117, 99, 116, 111, 114, 115, 10, 
+       123, 0, 32, 116, 97, 10, 58, 0, 
+       32, 10, 0, 32, 65, 90, 97, 122, 
+       95, 48, 57, 65, 90, 97, 122, 59, 
+       95, 48, 57, 65, 90, 97, 122, 115, 
+       116, 114, 117, 99, 116, 111, 114, 115, 
+       10, 123, 0, 32, 95, 112, 114, 101, 
+       102, 105, 120, 10, 58, 0, 32, 10, 
+       0, 32, 65, 90, 97, 122, 95, 48, 
+       57, 65, 90, 97, 122, 59, 95, 48, 
+       57, 65, 90, 97, 122, 101, 110, 116, 
+       115, 10, 123, 0, 32, 10, 125, 0, 
+       32, 65, 90, 97, 122, 44, 95, 48, 
+       57, 65, 90, 97, 122, 10, 44, 59, 
+       95, 0, 32, 48, 57, 65, 90, 97, 
+       122, 10, 59, 0, 32, 9, 10, 13, 
+       32, 47, 125, 0, 31, 65, 90, 97, 
+       122, 42, 64, 10, 95, 0, 32, 48, 
+       57, 64, 90, 97, 122, 10, 42, 10, 
+       42, 47, 10, 125, 0, 32, 65, 90, 
+       97, 122, 112, 108, 101, 109, 101, 110, 
+       116, 115, 10, 123, 0, 32, 10, 125, 
+       0, 32, 65, 90, 97, 122, 58, 95, 
+       48, 57, 65, 90, 97, 122, 10, 58, 
+       59, 95, 123, 0, 32, 48, 57, 65, 
+       90, 97, 122, 10, 59, 123, 0, 32, 
+       10, 108, 0, 32, 101, 103, 97, 99, 
+       121, 9, 10, 13, 32, 59, 123, 0, 
+       31, 65, 90, 97, 122, 10, 59, 123, 
+       0, 32, 10, 125, 0, 32, 10, 59, 
+       125, 0, 32, 65, 90, 97, 122, 10, 
+       112, 0, 32, 97, 114, 97, 109, 115, 
+       10, 123, 0, 32, 10, 58, 59, 0, 
+       32, 65, 90, 97, 122, 9, 13, 32, 
        65, 90, 97, 122, 95, 48, 57, 65, 
-       90, 97, 122, 9, 13, 32, 58, 59, 
-       95, 48, 57, 65, 90, 97, 122, 9, 
-       13, 32, 58, 59, 10, 59, 114, 125, 
-       0, 32, 10, 114, 125, 0, 32, 101, 
-       116, 117, 114, 110, 9, 13, 32, 9, 
-       13, 32, 65, 90, 97, 122, 95, 48, 
-       57, 65, 90, 97, 122, 58, 95, 48, 
-       57, 65, 90, 97, 122, 58, 65, 90, 
+       90, 97, 122, 10, 59, 95, 0, 32, 
+       48, 57, 65, 90, 97, 122, 10, 59, 
+       0, 32, 9, 10, 13, 32, 47, 58, 
+       59, 125, 0, 31, 65, 90, 97, 122, 
+       10, 58, 59, 125, 0, 32, 65, 90, 
        97, 122, 95, 48, 57, 65, 90, 97, 
-       122, 59, 95, 48, 57, 65, 90, 97, 
-       122, 10, 125, 0, 32, 10, 59, 125, 
-       0, 32, 42, 64, 10, 95, 0, 32, 
-       48, 57, 64, 90, 97, 122, 10, 42, 
-       10, 42, 47, 10, 58, 59, 125, 0, 
-       32, 65, 90, 97, 122, 9, 10, 13, 
-       32, 59, 123, 0, 31, 65, 90, 97, 
+       122, 9, 13, 32, 58, 59, 95, 48, 
+       57, 65, 90, 97, 122, 9, 13, 32, 
+       58, 59, 10, 59, 114, 125, 0, 32, 
+       10, 114, 125, 0, 32, 101, 116, 117, 
+       114, 110, 9, 13, 32, 9, 13, 32, 
+       65, 90, 97, 122, 95, 48, 57, 65, 
+       90, 97, 122, 58, 95, 48, 57, 65, 
+       90, 97, 122, 58, 65, 90, 97, 122, 
+       95, 48, 57, 65, 90, 97, 122, 59, 
+       95, 48, 57, 65, 90, 97, 122, 10, 
+       125, 0, 32, 10, 59, 125, 0, 32, 
+       42, 64, 10, 95, 0, 32, 48, 57, 
+       64, 90, 97, 122, 10, 42, 10, 42, 
+       47, 10, 58, 59, 125, 0, 32, 65, 
+       90, 97, 122, 9, 10, 13, 32, 59, 
+       123, 0, 31, 65, 90, 97, 122, 95, 
+       48, 57, 65, 90, 97, 122, 10, 59, 
+       95, 123, 0, 32, 48, 57, 65, 90, 
+       97, 122, 58, 103, 97, 99, 121, 95, 
+       112, 114, 101, 102, 105, 120, 10, 58, 
+       0, 32, 10, 0, 32, 65, 90, 97, 
        122, 95, 48, 57, 65, 90, 97, 122, 
-       10, 59, 95, 123, 0, 32, 48, 57, 
-       65, 90, 97, 122, 58, 103, 97, 99, 
-       121, 95, 112, 114, 101, 102, 105, 120, 
-       10, 58, 0, 32, 10, 0, 32, 65, 
-       90, 97, 122, 95, 48, 57, 65, 90, 
-       97, 122, 59, 95, 48, 57, 65, 90, 
-       97, 122, 116, 104, 111, 100, 115, 10, 
-       123, 0, 32, 111, 112, 101, 114, 116, 
-       105, 101, 115, 10, 123, 0, 32, 10, 
-       47, 97, 99, 105, 109, 0, 32, 10, 
-       0, 32, 42, 47, 98, 108, 110, 105, 
-       10, 47, 108, 114, 125, 0, 32, 65, 
-       90, 97, 122, 10, 0, 32, 42, 47, 
-       95, 48, 57, 65, 90, 97, 122, 95, 
-       101, 48, 57, 65, 90, 97, 122, 95, 
-       101, 48, 57, 65, 90, 97, 122, 9, 
-       13, 32, 47, 59, 10, 47, 125, 0, 
-       32, 64, 90, 97, 122, 10, 0, 32, 
-       42, 47, 9, 13, 32, 42, 95, 48, 
-       57, 64, 90, 97, 122, 9, 13, 32, 
-       47, 59, 10, 47, 103, 107, 115, 118, 
-       125, 0, 32, 10, 0, 32, 42, 47, 
-       101, 101, 101, 97, 59, 10, 47, 125, 
-       0, 32, 65, 90, 97, 122, 10, 0, 
-       32, 42, 47, 95, 48, 57, 65, 90, 
-       97, 122, 59, 10, 47, 99, 108, 112, 
-       114, 125, 0, 32, 10, 0, 32, 42, 
-       47, 111, 101, 97, 101, 9, 13, 32, 
-       47, 59, 10, 47, 125, 0, 32, 65, 
+       59, 95, 48, 57, 65, 90, 97, 122, 
+       116, 104, 111, 100, 115, 10, 123, 0, 
+       32, 111, 112, 101, 114, 116, 105, 101, 
+       115, 10, 123, 0, 32, 10, 47, 97, 
+       99, 105, 109, 0, 32, 10, 0, 32, 
+       42, 47, 98, 108, 110, 105, 10, 47, 
+       108, 114, 125, 0, 32, 65, 90, 97, 
+       122, 10, 0, 32, 42, 47, 95, 48, 
+       57, 65, 90, 97, 122, 95, 101, 48, 
+       57, 65, 90, 97, 122, 95, 101, 48, 
+       57, 65, 90, 97, 122, 9, 13, 32, 
+       47, 59, 10, 47, 125, 0, 32, 64, 
        90, 97, 122, 10, 0, 32, 42, 47, 
-       95, 48, 57, 65, 90, 97, 122, 59, 
-       10, 47, 99, 100, 101, 105, 108, 109, 
-       112, 125, 0, 32, 10, 0, 32, 42, 
-       47, 111, 97, 101, 10, 0, 32, 111, 
-       118, 10, 0, 32, 59, 109, 59, 101, 
-       10, 0, 32, 101, 114, 59, 0
+       9, 13, 32, 42, 95, 48, 57, 64, 
+       90, 97, 122, 9, 13, 32, 47, 59, 
+       10, 47, 103, 107, 115, 118, 125, 0, 
+       32, 10, 0, 32, 42, 47, 101, 101, 
+       101, 97, 59, 10, 47, 125, 0, 32, 
+       65, 90, 97, 122, 10, 0, 32, 42, 
+       47, 95, 48, 57, 65, 90, 97, 122, 
+       59, 10, 47, 99, 108, 112, 114, 125, 
+       0, 32, 10, 0, 32, 42, 47, 111, 
+       101, 97, 101, 9, 13, 32, 47, 59, 
+       10, 47, 125, 0, 32, 65, 90, 97, 
+       122, 10, 0, 32, 42, 47, 95, 48, 
+       57, 65, 90, 97, 122, 59, 10, 47, 
+       99, 100, 101, 105, 108, 109, 112, 125, 
+       0, 32, 10, 0, 32, 42, 47, 111, 
+       97, 101, 10, 0, 32, 111, 118, 10, 
+       0, 32, 59, 109, 59, 101, 10, 0, 
+       32, 101, 114, 59, 0
 };
 
 static const char _eo_tokenizer_single_lengths[] = {
@@ -578,19 +616,16 @@ static const char _eo_tokenizer_single_lengths[] = {
        3, 2, 3, 1, 5, 4, 3, 3, 
        6, 6, 6, 6, 6, 5, 4, 1, 
        2, 6, 6, 6, 6, 5, 4, 5, 
-       7, 4, 1, 1, 2, 2, 3, 1, 
-       1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 2, 3, 1, 6, 4, 
-       1, 1, 2, 2, 3, 2, 3, 1, 
-       1, 2, 1, 1, 2, 1, 2, 1, 
-       1, 1, 1, 2, 2, 3, 1, 3, 
-       2, 3, 2, 3, 3, 2, 3, 1, 
-       1, 1, 1, 1, 1, 1, 1, 1, 
-       3, 3, 1, 2, 1, 1, 1, 1, 
-       2, 1, 1, 1, 1, 3, 3, 5, 
-       7, 4, 1, 1, 2, 2, 3, 1, 
-       1, 1, 1, 1, 1, 1, 1, 1, 
-       1, 1, 1, 2, 3, 1, 3, 2, 
+       6, 4, 1, 1, 2, 2, 3, 2, 
+       3, 1, 6, 4, 1, 1, 2, 2, 
+       3, 2, 3, 1, 1, 2, 1, 1, 
+       2, 1, 2, 1, 1, 1, 1, 2, 
+       2, 3, 1, 3, 2, 3, 2, 3, 
+       3, 2, 3, 1, 1, 1, 1, 1, 
+       1, 1, 1, 1, 3, 3, 1, 2, 
+       1, 1, 1, 1, 2, 1, 1, 1, 
+       1, 3, 3, 5, 6, 4, 1, 1, 
+       2, 2, 3, 2, 3, 1, 3, 2, 
        3, 2, 3, 3, 2, 3, 1, 1, 
        1, 1, 1, 1, 1, 1, 1, 1, 
        1, 2, 1, 1, 2, 1, 1, 2, 
@@ -632,18 +667,15 @@ static const char _eo_tokenizer_range_lengths[] = {
        3, 3, 3, 3, 3, 3, 2, 3, 
        3, 3, 3, 3, 3, 3, 2, 3, 
        3, 0, 0, 0, 4, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 3, 0, 
-       0, 0, 4, 0, 0, 0, 0, 0, 
-       0, 1, 0, 0, 1, 0, 1, 0, 
-       0, 0, 0, 1, 0, 0, 0, 4, 
-       1, 0, 0, 0, 4, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 2, 3, 3, 0, 0, 0, 0, 
-       1, 0, 0, 0, 0, 0, 2, 3, 
-       3, 0, 0, 0, 4, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 4, 1, 
+       0, 0, 3, 0, 0, 0, 4, 0, 
+       0, 0, 0, 0, 0, 1, 0, 0, 
+       1, 0, 1, 0, 0, 0, 0, 1, 
+       0, 0, 0, 4, 1, 0, 0, 0, 
+       4, 0, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 2, 3, 3, 
+       0, 0, 0, 0, 1, 0, 0, 0, 
+       0, 0, 2, 3, 3, 0, 0, 0, 
+       4, 0, 0, 0, 0, 0, 4, 1, 
        0, 0, 0, 4, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 1, 0, 0, 1, 3, 3, 3, 
@@ -684,48 +716,45 @@ static const short _eo_tokenizer_index_offsets[] = {
        141, 149, 152, 156, 158, 167, 172, 178, 
        184, 194, 204, 214, 224, 234, 243, 250, 
        255, 261, 271, 281, 291, 301, 310, 317, 
-       326, 337, 342, 344, 346, 353, 356, 360, 
-       362, 364, 366, 368, 370, 372, 374, 376, 
-       378, 380, 382, 384, 387, 391, 393, 403, 
-       408, 410, 412, 419, 422, 426, 429, 433, 
-       435, 437, 441, 443, 445, 449, 451, 455, 
-       457, 459, 461, 463, 467, 470, 474, 476, 
-       484, 488, 492, 495, 499, 507, 510, 514, 
-       516, 518, 520, 522, 524, 526, 528, 530, 
-       532, 536, 542, 547, 553, 555, 557, 559, 
-       561, 565, 567, 569, 571, 573, 577, 583, 
-       592, 603, 608, 610, 612, 619, 622, 626, 
-       628, 630, 632, 634, 636, 638, 640, 642, 
-       644, 646, 648, 650, 653, 657, 659, 667, 
-       671, 675, 678, 682, 690, 693, 697, 699, 
-       701, 703, 705, 707, 709, 711, 713, 715, 
-       717, 719, 723, 725, 727, 731, 736, 741, 
-       747, 749, 751, 753, 755, 757, 759, 761, 
-       763, 765, 769, 771, 773, 775, 777, 779, 
-       781, 783, 787, 792, 797, 803, 805, 807, 
-       809, 811, 815, 821, 827, 836, 840, 850, 
-       852, 854, 861, 864, 868, 874, 876, 878, 
-       880, 882, 884, 886, 888, 890, 894, 900, 
-       906, 916, 921, 925, 927, 929, 931, 933, 
-       935, 945, 950, 954, 961, 965, 967, 969, 
-       971, 973, 975, 979, 986, 992, 997, 1005, 
-       1009, 1021, 1029, 1034, 1044, 1050, 1056, 1061, 
-       1063, 1065, 1067, 1069, 1071, 1075, 1081, 1086, 
-       1092, 1094, 1097, 1102, 1108, 1112, 1117, 1119, 
-       1121, 1128, 1131, 1135, 1143, 1153, 1158, 1167, 
-       1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 
-       1185, 1187, 1189, 1191, 1195, 1200, 1205, 1211, 
-       1213, 1215, 1217, 1219, 1221, 1225, 1227, 1229, 
-       1231, 1233, 1235, 1237, 1239, 1241, 1245, 1253, 
-       1256, 1259, 1261, 1263, 1265, 1267, 1276, 1279, 
-       1282, 1287, 1293, 1299, 1304, 1305, 1307, 1314, 
-       1317, 1320, 1329, 1334, 1335, 1337, 1346, 1349, 
-       1352, 1354, 1356, 1358, 1360, 1362, 1369, 1372, 
-       1375, 1380, 1382, 1391, 1394, 1397, 1399, 1401, 
-       1403, 1405, 1410, 1411, 1413, 1420, 1423, 1426, 
-       1431, 1433, 1445, 1448, 1451, 1453, 1456, 1459, 
-       1462, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 
-       1480
+       326, 336, 341, 343, 345, 352, 355, 359, 
+       362, 366, 368, 378, 383, 385, 387, 394, 
+       397, 401, 404, 408, 410, 412, 416, 418, 
+       420, 424, 426, 430, 432, 434, 436, 438, 
+       442, 445, 449, 451, 459, 463, 467, 470, 
+       474, 482, 485, 489, 491, 493, 495, 497, 
+       499, 501, 503, 505, 507, 511, 517, 522, 
+       528, 530, 532, 534, 536, 540, 542, 544, 
+       546, 548, 552, 558, 567, 577, 582, 584, 
+       586, 593, 596, 600, 603, 607, 609, 617, 
+       621, 625, 628, 632, 640, 643, 647, 649, 
+       651, 653, 655, 657, 659, 661, 663, 665, 
+       667, 669, 673, 675, 677, 681, 686, 691, 
+       697, 699, 701, 703, 705, 707, 709, 711, 
+       713, 715, 719, 721, 723, 725, 727, 729, 
+       731, 733, 737, 742, 747, 753, 755, 757, 
+       759, 761, 765, 771, 777, 786, 790, 800, 
+       802, 804, 811, 814, 818, 824, 826, 828, 
+       830, 832, 834, 836, 838, 840, 844, 850, 
+       856, 866, 871, 875, 877, 879, 881, 883, 
+       885, 895, 900, 904, 911, 915, 917, 919, 
+       921, 923, 925, 929, 936, 942, 947, 955, 
+       959, 971, 979, 984, 994, 1000, 1006, 1011, 
+       1013, 1015, 1017, 1019, 1021, 1025, 1031, 1036, 
+       1042, 1044, 1047, 1052, 1058, 1062, 1067, 1069, 
+       1071, 1078, 1081, 1085, 1093, 1103, 1108, 1117, 
+       1119, 1121, 1123, 1125, 1127, 1129, 1131, 1133, 
+       1135, 1137, 1139, 1141, 1145, 1150, 1155, 1161, 
+       1163, 1165, 1167, 1169, 1171, 1175, 1177, 1179, 
+       1181, 1183, 1185, 1187, 1189, 1191, 1195, 1203, 
+       1206, 1209, 1211, 1213, 1215, 1217, 1226, 1229, 
+       1232, 1237, 1243, 1249, 1254, 1255, 1257, 1264, 
+       1267, 1270, 1279, 1284, 1285, 1287, 1296, 1299, 
+       1302, 1304, 1306, 1308, 1310, 1312, 1319, 1322, 
+       1325, 1330, 1332, 1341, 1344, 1347, 1349, 1351, 
+       1353, 1355, 1360, 1361, 1363, 1370, 1373, 1376, 
+       1381, 1383, 1395, 1398, 1401, 1403, 1406, 1409, 
+       1412, 1415, 1417, 1419, 1421, 1423, 1426, 1428, 
+       1430
 };
 
 static const short _eo_tokenizer_indicies[] = {
@@ -770,315 +799,301 @@ static const short _eo_tokenizer_indicies[] = {
        73, 72, 72, 72, 72, 57, 92, 92, 
        92, 73, 93, 93, 57, 94, 94, 94, 
        94, 94, 94, 94, 94, 57, 94, 94, 
-       94, 94, 95, 96, 94, 94, 94, 94, 
-       57, 98, 98, 98, 99, 97, 100, 97, 
-       101, 97, 102, 103, 101, 103, 103, 103, 
-       97, 105, 106, 104, 105, 106, 107, 104, 
-       108, 57, 109, 57, 110, 57, 111, 57, 
-       112, 57, 113, 57, 114, 57, 115, 57, 
-       116, 57, 117, 57, 118, 57, 119, 57, 
-       122, 123, 121, 122, 123, 124, 121, 126, 
-       125, 127, 127, 127, 127, 128, 127, 127, 
-       127, 127, 120, 130, 130, 130, 131, 129, 
-       132, 129, 133, 129, 134, 135, 133, 135, 
-       135, 135, 129, 137, 138, 136, 137, 138, 
-       139, 136, 142, 143, 141, 142, 143, 144, 
-       141, 146, 145, 147, 140, 148, 149, 147, 
-       140, 150, 140, 151, 140, 152, 153, 151, 
-       140, 154, 140, 155, 156, 154, 140, 157, 
-       140, 158, 140, 159, 140, 160, 140, 161, 
-       162, 160, 140, 165, 166, 164, 165, 166, 
-       167, 164, 169, 168, 171, 172, 173, 170, 
-       172, 172, 172, 163, 175, 176, 174, 163, 
-       179, 180, 181, 178, 179, 180, 178, 179, 
-       180, 182, 178, 183, 180, 184, 181, 184, 
-       184, 184, 178, 186, 187, 185, 186, 187, 
-       188, 185, 190, 189, 191, 177, 192, 177, 
-       193, 177, 194, 177, 195, 177, 196, 177, 
-       197, 177, 198, 177, 199, 199, 199, 177, 
-       199, 199, 199, 200, 200, 177, 201, 201, 
-       201, 201, 177, 202, 201, 201, 201, 201, 
-       177, 203, 177, 204, 177, 205, 177, 206, 
-       177, 207, 208, 206, 177, 209, 177, 210, 
-       177, 211, 177, 212, 177, 213, 213, 213, 
-       177, 213, 213, 213, 214, 214, 177, 215, 
-       215, 215, 215, 215, 215, 215, 215, 177, 
-       215, 215, 215, 215, 216, 217, 215, 215, 
-       215, 215, 177, 219, 219, 219, 220, 218, 
-       221, 218, 222, 218, 223, 224, 222, 224, 
-       224, 224, 218, 226, 227, 225, 226, 227, 
-       228, 225, 229, 177, 230, 177, 231, 177, 
-       232, 177, 233, 177, 234, 177, 235, 177, 
-       236, 177, 237, 177, 238, 177, 239, 177, 
-       240, 177, 243, 244, 242, 243, 244, 245, 
-       242, 247, 246, 249, 250, 251, 248, 250, 
-       250, 250, 241, 253, 254, 252, 241, 257, 
-       258, 259, 256, 257, 258, 256, 257, 258, 
-       260, 256, 261, 258, 262, 259, 262, 262, 
-       262, 256, 264, 265, 263, 264, 265, 266, 
-       263, 268, 267, 269, 255, 270, 255, 271, 
-       255, 272, 255, 273, 255, 274, 255, 275, 
-       255, 276, 255, 277, 255, 278, 255, 279, 
-       280, 278, 255, 281, 255, 282, 255, 283, 
-       284, 282, 255, 285, 284, 286, 286, 255, 
-       287, 287, 287, 287, 255, 288, 287, 287, 
-       287, 287, 255, 289, 255, 290, 255, 291, 
-       255, 292, 255, 293, 255, 294, 255, 295, 
-       255, 296, 255, 297, 255, 298, 299, 297, 
-       255, 300, 255, 301, 255, 302, 255, 303, 
-       255, 304, 255, 305, 255, 306, 255, 307, 
-       308, 306, 255, 309, 308, 310, 310, 255, 
-       311, 311, 311, 311, 255, 312, 311, 311, 
-       311, 311, 255, 313, 255, 314, 255, 315, 
-       255, 316, 255, 317, 318, 316, 255, 319, 
-       321, 318, 320, 320, 255, 322, 322, 322, 
-       322, 322, 255, 324, 322, 325, 322, 323, 
-       322, 322, 322, 255, 327, 328, 326, 255, 
-       328, 319, 328, 328, 329, 321, 318, 320, 
-       320, 255, 330, 255, 331, 255, 332, 333, 
-       331, 333, 333, 333, 255, 335, 336, 334, 
-       335, 336, 337, 334, 339, 341, 338, 340, 
-       340, 255, 342, 255, 343, 255, 344, 255, 
-       345, 255, 346, 255, 347, 255, 348, 255, 
-       349, 255, 350, 351, 349, 255, 352, 354, 
-       351, 353, 353, 255, 356, 355, 355, 355, 
-       355, 255, 358, 356, 359, 355, 360, 357, 
-       355, 355, 355, 255, 362, 351, 363, 361, 
-       255, 364, 365, 363, 255, 366, 255, 367, 
-       255, 368, 255, 369, 255, 370, 255, 372, 
-       373, 372, 372, 374, 376, 371, 375, 375, 
-       255, 378, 379, 380, 377, 255, 381, 382, 
-       379, 255, 352, 351, 354, 351, 353, 353, 
-       255, 383, 384, 380, 255, 385, 255, 386, 
-       255, 387, 255, 388, 255, 389, 255, 390, 
-       391, 389, 255, 392, 393, 394, 391, 395, 
-       395, 255, 393, 393, 393, 396, 396, 255, 
-       397, 397, 397, 397, 255, 399, 400, 397, 
-       398, 397, 397, 397, 255, 402, 394, 401, 
-       255, 394, 404, 394, 394, 405, 393, 394, 
-       406, 403, 395, 395, 255, 404, 393, 394, 
-       406, 403, 395, 395, 255, 407, 407, 407, 
-       407, 255, 408, 408, 408, 409, 410, 407, 
-       407, 407, 407, 255, 411, 411, 411, 393, 
-       394, 255, 413, 412, 414, 415, 412, 255, 
-       413, 414, 415, 412, 255, 416, 255, 417, 
-       255, 418, 255, 419, 255, 420, 255, 421, 
-       421, 421, 255, 421, 421, 421, 422, 422, 
-       255, 423, 423, 423, 423, 255, 424, 423, 
-       423, 423, 423, 255, 425, 255, 426, 426, 
-       255, 427, 427, 427, 427, 255, 428, 427, 
-       427, 427, 427, 255, 430, 415, 429, 255, 
-       381, 379, 382, 379, 255, 431, 255, 432, 
-       255, 433, 434, 432, 434, 434, 434, 255, 
-       436, 437, 435, 436, 437, 438, 435, 440, 
-       441, 442, 444, 439, 443, 443, 255, 445, 
-       378, 445, 445, 379, 380, 377, 446, 446, 
-       255, 447, 447, 447, 447, 255, 449, 450, 
-       447, 451, 448, 447, 447, 447, 255, 355, 
-       255, 452, 255, 453, 255, 454, 255, 455, 
-       255, 456, 255, 457, 255, 458, 255, 459, 
-       255, 460, 255, 461, 255, 462, 255, 463, 
-       464, 462, 255, 465, 464, 466, 466, 255, 
-       467, 467, 467, 467, 255, 468, 467, 467, 
-       467, 467, 255, 469, 255, 470, 255, 471, 
-       255, 472, 255, 473, 255, 474, 475, 473, 
-       255, 476, 255, 477, 255, 478, 255, 479, 
-       255, 480, 255, 481, 255, 482, 255, 483, 
-       255, 484, 485, 483, 255, 488, 489, 490, 
-       491, 492, 493, 487, 486, 488, 487, 494, 
-       1, 5, 495, 496, 495, 497, 495, 498, 
-       495, 499, 495, 502, 503, 505, 506, 507, 
-       501, 504, 504, 500, 502, 501, 508, 510, 
-       69, 509, 72, 72, 72, 72, 509, 72, 
-       511, 72, 72, 72, 509, 72, 512, 72, 
-       72, 72, 509, 98, 98, 98, 99, 513, 
-       514, 516, 515, 519, 520, 522, 518, 521, 
-       521, 517, 519, 518, 523, 121, 125, 524, 
-       127, 127, 127, 127, 127, 127, 127, 127, 
-       524, 130, 130, 130, 131, 525, 526, 528, 
-       527, 531, 532, 533, 534, 535, 536, 537, 
-       530, 529, 531, 530, 538, 141, 145, 539, 
-       540, 539, 541, 539, 542, 539, 543, 539, 
-       545, 544, 548, 549, 551, 547, 550, 550, 
-       546, 548, 547, 552, 164, 168, 553, 172, 
-       172, 172, 172, 553, 555, 554, 558, 559, 
-       560, 561, 562, 563, 564, 557, 556, 558, 
-       557, 565, 567, 189, 566, 568, 566, 569, 
-       566, 570, 566, 571, 566, 219, 219, 219, 
-       220, 572, 573, 575, 574, 578, 579, 581, 
-       577, 580, 580, 576, 578, 577, 582, 242, 
-       246, 583, 250, 250, 250, 250, 583, 585, 
-       584, 588, 589, 590, 591, 592, 593, 594, 
-       595, 596, 597, 587, 586, 588, 587, 598, 
-       600, 267, 599, 601, 599, 602, 603, 599, 
-       606, 605, 604, 607, 608, 599, 611, 610, 
-       609, 613, 612, 614, 599, 616, 615, 617, 
-       599, 620, 619, 618, 621, 599, 622, 599, 
-       624, 623, 0
+       94, 94, 95, 94, 94, 94, 94, 57, 
+       97, 97, 97, 98, 96, 99, 96, 100, 
+       96, 101, 102, 100, 102, 102, 102, 96, 
+       104, 105, 103, 104, 105, 106, 103, 109, 
+       110, 108, 109, 110, 111, 108, 113, 112, 
+       114, 114, 114, 114, 115, 114, 114, 114, 
+       114, 107, 117, 117, 117, 118, 116, 119, 
+       116, 120, 116, 121, 122, 120, 122, 122, 
+       122, 116, 124, 125, 123, 124, 125, 126, 
+       123, 129, 130, 128, 129, 130, 131, 128, 
+       133, 132, 134, 127, 135, 136, 134, 127, 
+       137, 127, 138, 127, 139, 140, 138, 127, 
+       141, 127, 142, 143, 141, 127, 144, 127, 
+       145, 127, 146, 127, 147, 127, 148, 149, 
+       147, 127, 152, 153, 151, 152, 153, 154, 
+       151, 156, 155, 158, 159, 160, 157, 159, 
+       159, 159, 150, 162, 163, 161, 150, 166, 
+       167, 168, 165, 166, 167, 165, 166, 167, 
+       169, 165, 170, 167, 171, 168, 171, 171, 
+       171, 165, 173, 174, 172, 173, 174, 175, 
+       172, 177, 176, 178, 164, 179, 164, 180, 
+       164, 181, 164, 182, 164, 183, 164, 184, 
+       164, 185, 164, 186, 186, 186, 164, 186, 
+       186, 186, 187, 187, 164, 188, 188, 188, 
+       188, 164, 189, 188, 188, 188, 188, 164, 
+       190, 164, 191, 164, 192, 164, 193, 164, 
+       194, 195, 193, 164, 196, 164, 197, 164, 
+       198, 164, 199, 164, 200, 200, 200, 164, 
+       200, 200, 200, 201, 201, 164, 202, 202, 
+       202, 202, 202, 202, 202, 202, 164, 202, 
+       202, 202, 202, 203, 202, 202, 202, 202, 
+       164, 205, 205, 205, 206, 204, 207, 204, 
+       208, 204, 209, 210, 208, 210, 210, 210, 
+       204, 212, 213, 211, 212, 213, 214, 211, 
+       217, 218, 216, 217, 218, 219, 216, 221, 
+       220, 223, 224, 225, 222, 224, 224, 224, 
+       215, 227, 228, 226, 215, 231, 232, 233, 
+       230, 231, 232, 230, 231, 232, 234, 230, 
+       235, 232, 236, 233, 236, 236, 236, 230, 
+       238, 239, 237, 238, 239, 240, 237, 242, 
+       241, 243, 229, 244, 229, 245, 229, 246, 
+       229, 247, 229, 248, 229, 249, 229, 250, 
+       229, 251, 229, 252, 229, 253, 254, 252, 
+       229, 255, 229, 256, 229, 257, 258, 256, 
+       229, 259, 258, 260, 260, 229, 261, 261, 
+       261, 261, 229, 262, 261, 261, 261, 261, 
+       229, 263, 229, 264, 229, 265, 229, 266, 
+       229, 267, 229, 268, 229, 269, 229, 270, 
+       229, 271, 229, 272, 273, 271, 229, 274, 
+       229, 275, 229, 276, 229, 277, 229, 278, 
+       229, 279, 229, 280, 229, 281, 282, 280, 
+       229, 283, 282, 284, 284, 229, 285, 285, 
+       285, 285, 229, 286, 285, 285, 285, 285, 
+       229, 287, 229, 288, 229, 289, 229, 290, 
+       229, 291, 292, 290, 229, 293, 295, 292, 
+       294, 294, 229, 296, 296, 296, 296, 296, 
+       229, 298, 296, 299, 296, 297, 296, 296, 
+       296, 229, 301, 302, 300, 229, 302, 293, 
+       302, 302, 303, 295, 292, 294, 294, 229, 
+       304, 229, 305, 229, 306, 307, 305, 307, 
+       307, 307, 229, 309, 310, 308, 309, 310, 
+       311, 308, 313, 315, 312, 314, 314, 229, 
+       316, 229, 317, 229, 318, 229, 319, 229, 
+       320, 229, 321, 229, 322, 229, 323, 229, 
+       324, 325, 323, 229, 326, 328, 325, 327, 
+       327, 229, 330, 329, 329, 329, 329, 229, 
+       332, 330, 333, 329, 334, 331, 329, 329, 
+       329, 229, 336, 325, 337, 335, 229, 338, 
+       339, 337, 229, 340, 229, 341, 229, 342, 
+       229, 343, 229, 344, 229, 346, 347, 346, 
+       346, 348, 350, 345, 349, 349, 229, 352, 
+       353, 354, 351, 229, 355, 356, 353, 229, 
+       326, 325, 328, 325, 327, 327, 229, 357, 
+       358, 354, 229, 359, 229, 360, 229, 361, 
+       229, 362, 229, 363, 229, 364, 365, 363, 
+       229, 366, 367, 368, 365, 369, 369, 229, 
+       367, 367, 367, 370, 370, 229, 371, 371, 
+       371, 371, 229, 373, 374, 371, 372, 371, 
+       371, 371, 229, 376, 368, 375, 229, 368, 
+       378, 368, 368, 379, 367, 368, 380, 377, 
+       369, 369, 229, 378, 367, 368, 380, 377, 
+       369, 369, 229, 381, 381, 381, 381, 229, 
+       382, 382, 382, 383, 384, 381, 381, 381, 
+       381, 229, 385, 385, 385, 367, 368, 229, 
+       387, 386, 388, 389, 386, 229, 387, 388, 
+       389, 386, 229, 390, 229, 391, 229, 392, 
+       229, 393, 229, 394, 229, 395, 395, 395, 
+       229, 395, 395, 395, 396, 396, 229, 397, 
+       397, 397, 397, 229, 398, 397, 397, 397, 
+       397, 229, 399, 229, 400, 400, 229, 401, 
+       401, 401, 401, 229, 402, 401, 401, 401, 
+       401, 229, 404, 389, 403, 229, 355, 353, 
+       356, 353, 229, 405, 229, 406, 229, 407, 
+       408, 406, 408, 408, 408, 229, 410, 411, 
+       409, 410, 411, 412, 409, 414, 415, 416, 
+       418, 413, 417, 417, 229, 419, 352, 419, 
+       419, 353, 354, 351, 420, 420, 229, 421, 
+       421, 421, 421, 229, 423, 424, 421, 425, 
+       422, 421, 421, 421, 229, 329, 229, 426, 
+       229, 427, 229, 428, 229, 429, 229, 430, 
+       229, 431, 229, 432, 229, 433, 229, 434, 
+       229, 435, 229, 436, 229, 437, 438, 436, 
+       229, 439, 438, 440, 440, 229, 441, 441, 
+       441, 441, 229, 442, 441, 441, 441, 441, 
+       229, 443, 229, 444, 229, 445, 229, 446, 
+       229, 447, 229, 448, 449, 447, 229, 450, 
+       229, 451, 229, 452, 229, 453, 229, 454, 
+       229, 455, 229, 456, 229, 457, 229, 458, 
+       459, 457, 229, 462, 463, 464, 465, 466, 
+       467, 461, 460, 462, 461, 468, 1, 5, 
+       469, 470, 469, 471, 469, 472, 469, 473, 
+       469, 476, 477, 479, 480, 481, 475, 478, 
+       478, 474, 476, 475, 482, 484, 69, 483, 
+       72, 72, 72, 72, 483, 72, 485, 72, 
+       72, 72, 483, 72, 486, 72, 72, 72, 
+       483, 97, 97, 97, 98, 487, 488, 490, 
+       489, 493, 494, 496, 492, 495, 495, 491, 
+       493, 492, 497, 108, 112, 498, 114, 114, 
+       114, 114, 114, 114, 114, 114, 498, 117, 
+       117, 117, 118, 499, 500, 502, 501, 505, 
+       506, 507, 508, 509, 510, 511, 504, 503, 
+       505, 504, 512, 128, 132, 513, 514, 513, 
+       515, 513, 516, 513, 517, 513, 519, 518, 
+       522, 523, 525, 521, 524, 524, 520, 522, 
+       521, 526, 151, 155, 527, 159, 159, 159, 
+       159, 527, 529, 528, 532, 533, 534, 535, 
+       536, 537, 538, 531, 530, 532, 531, 539, 
+       541, 176, 540, 542, 540, 543, 540, 544, 
+       540, 545, 540, 205, 205, 205, 206, 546, 
+       547, 549, 548, 552, 553, 555, 551, 554, 
+       554, 550, 552, 551, 556, 216, 220, 557, 
+       224, 224, 224, 224, 557, 559, 558, 562, 
+       563, 564, 565, 566, 567, 568, 569, 570, 
+       571, 561, 560, 562, 561, 572, 574, 241, 
+       573, 575, 573, 576, 577, 573, 580, 579, 
+       578, 581, 582, 573, 585, 584, 583, 587, 
+       586, 588, 573, 590, 589, 591, 573, 594, 
+       593, 592, 595, 573, 596, 573, 598, 597, 
+       0
 };
 
 static const short _eo_tokenizer_trans_targs[] = {
-       326, 0, 0, 1, 326, 2, 326, 4, 
+       302, 0, 0, 1, 302, 2, 302, 4, 
        5, 6, 7, 8, 9, 10, 10, 11, 
-       12, 13, 14, 13, 15, 326, 13, 13, 
-       326, 14, 15, 16, 17, 13, 13, 326
+       12, 13, 14, 13, 15, 302, 13, 13, 
+       302, 14, 15, 16, 17, 13, 13, 302
        18, 19, 19, 16, 20, 19, 19, 20, 
        20, 22, 23, 24, 10, 26, 27, 28, 
        29, 30, 31, 32, 10, 34, 35, 36, 
-       10, 333, 38, 38, 39, 40, 333, 40, 
-       41, 41, 41, 42, 333, 43, 333, 45, 
-       44, 46, 47, 48, 47, 48, 48, 333, 
-       50, 51, 52, 53, 54, 55, 56, 333, 
-       58, 59, 60, 61, 62, 63, 64, 339, 
-       71, 333, 65, 66, 67, 68, 68, 69, 
-       69, 69, 70, 340, 72, 73, 74, 75, 
-       76, 77, 78, 79, 80, 81, 82, 339, 
-       342, 83, 83, 84, 342, 85, 342, 86, 
-       346, 342, 87, 88, 89, 90, 90, 91, 
-       91, 91, 92, 347, 349, 93, 93, 94, 
-       349, 95, 349, 97, 97, 349, 99, 100, 
-       100, 349, 102, 102, 349, 104, 105, 106, 
-       107, 107, 349, 357, 108, 108, 109, 357, 
-       110, 357, 112, 112, 111, 357, 112, 112, 
-       357, 362, 114, 114, 115, 116, 362, 116, 
-       117, 117, 117, 118, 362, 119, 362, 121, 
-       122, 123, 362, 125, 126, 127, 128, 129, 
-       130, 131, 362, 133, 134, 135, 136, 136, 
-       362, 138, 139, 140, 141, 142, 143, 144, 
-       369, 151, 362, 145, 146, 147, 148, 148, 
-       149, 149, 149, 150, 370, 152, 153, 154, 
-       155, 156, 157, 158, 159, 160, 161, 162, 
-       369, 372, 163, 163, 164, 372, 165, 372, 
-       167, 167, 166, 372, 167, 167, 372, 377, 
-       169, 169, 170, 171, 377, 171, 172, 172, 
-       172, 173, 377, 174, 377, 176, 177, 178, 
-       179, 180, 181, 182, 183, 184, 185, 185, 
-       377, 187, 188, 188, 189, 189, 190, 191, 
-       382, 193, 194, 195, 196, 197, 198, 199, 
-       200, 201, 201, 377, 203, 204, 205, 206, 
-       207, 208, 209, 209, 210, 210, 211, 212, 
-       384, 214, 215, 216, 217, 217, 218, 218, 
-       219, 385, 220, 221, 221, 222, 221, 221, 
-       222, 223, 224, 225, 225, 226, 226, 226, 
-       227, 228, 218, 218, 219, 385, 230, 231, 
-       232, 233, 234, 235, 236, 237, 237, 238, 
-       238, 239, 387, 240, 295, 241, 241, 238, 
-       242, 241, 241, 242, 242, 243, 244, 245, 
-       246, 247, 248, 249, 292, 249, 250, 293, 
-       252, 249, 249, 250, 252, 250, 251, 252, 
-       253, 254, 255, 256, 257, 258, 258, 259, 
-       259, 260, 264, 266, 261, 262, 263, 263, 
-       264, 263, 263, 265, 265, 286, 269, 267, 
-       268, 260, 264, 268, 270, 270, 271, 285, 
-       272, 273, 274, 275, 276, 277, 278, 279, 
-       280, 281, 282, 283, 284, 284, 284, 287, 
-       288, 288, 289, 289, 289, 290, 291, 265, 
-       265, 260, 264, 266, 269, 292, 293, 294, 
-       249, 249, 250, 252, 297, 298, 299, 300, 
-       301, 302, 303, 304, 305, 306, 307, 307, 
-       308, 308, 309, 310, 389, 312, 313, 314, 
-       315, 316, 316, 377, 318, 319, 320, 321, 
-       322, 323, 324, 325, 325, 377, 326, 327, 
-       327, 328, 329, 330, 331, 332, 326, 326, 
-       3, 21, 25, 33, 333, 334, 334, 335, 
-       336, 337, 338, 341, 333, 333, 37, 49, 
-       57, 333, 333, 333, 333, 342, 343, 343, 
-       344, 345, 348, 342, 342, 342, 342, 342, 
-       342, 349, 350, 350, 351, 352, 353, 354, 
-       355, 356, 349, 349, 96, 98, 101, 103, 
-       349, 349, 357, 358, 358, 359, 360, 361, 
-       357, 357, 357, 357, 362, 363, 363, 364, 
-       365, 366, 367, 368, 371, 362, 362, 113, 
-       120, 124, 132, 137, 362, 362, 362, 362, 
-       372, 373, 373, 374, 375, 376, 372, 372, 
-       372, 372, 377, 378, 378, 379, 380, 381, 
-       383, 386, 388, 390, 391, 392, 377, 377, 
-       168, 175, 186, 192, 377, 382, 382, 202, 
-       213, 377, 384, 384, 377, 377, 229, 377, 
-       377, 296, 377, 389, 389, 311, 317, 377, 
-       377
+       10, 309, 38, 38, 39, 40, 309, 40, 
+       41, 41, 41, 42, 309, 43, 309, 45, 
+       44, 46, 47, 48, 47, 48, 48, 309, 
+       50, 51, 52, 53, 54, 55, 56, 309, 
+       58, 59, 60, 61, 62, 63, 64, 315, 
+       309, 65, 66, 67, 68, 68, 69, 69, 
+       69, 70, 316, 318, 71, 71, 72, 318, 
+       73, 318, 74, 322, 318, 75, 76, 77, 
+       78, 78, 79, 79, 79, 80, 323, 325, 
+       81, 81, 82, 325, 83, 325, 85, 85, 
+       325, 87, 88, 88, 325, 90, 90, 325, 
+       92, 93, 94, 95, 95, 325, 333, 96, 
+       96, 97, 333, 98, 333, 100, 100, 99, 
+       333, 100, 100, 333, 338, 102, 102, 103, 
+       104, 338, 104, 105, 105, 105, 106, 338, 
+       107, 338, 109, 110, 111, 338, 113, 114, 
+       115, 116, 117, 118, 119, 338, 121, 122, 
+       123, 124, 124, 338, 126, 127, 128, 129, 
+       130, 131, 132, 345, 338, 133, 134, 135, 
+       136, 136, 137, 137, 137, 138, 346, 348, 
+       139, 139, 140, 348, 141, 348, 143, 143, 
+       142, 348, 143, 143, 348, 353, 145, 145, 
+       146, 147, 353, 147, 148, 148, 148, 149, 
+       353, 150, 353, 152, 153, 154, 155, 156, 
+       157, 158, 159, 160, 161, 161, 353, 163, 
+       164, 164, 165, 165, 166, 167, 358, 169, 
+       170, 171, 172, 173, 174, 175, 176, 177, 
+       177, 353, 179, 180, 181, 182, 183, 184, 
+       185, 185, 186, 186, 187, 188, 360, 190, 
+       191, 192, 193, 193, 194, 194, 195, 361, 
+       196, 197, 197, 198, 197, 197, 198, 199, 
+       200, 201, 201, 202, 202, 202, 203, 204, 
+       194, 194, 195, 361, 206, 207, 208, 209, 
+       210, 211, 212, 213, 213, 214, 214, 215, 
+       363, 216, 271, 217, 217, 214, 218, 217, 
+       217, 218, 218, 219, 220, 221, 222, 223, 
+       224, 225, 268, 225, 226, 269, 228, 225, 
+       225, 226, 228, 226, 227, 228, 229, 230, 
+       231, 232, 233, 234, 234, 235, 235, 236, 
+       240, 242, 237, 238, 239, 239, 240, 239, 
+       239, 241, 241, 262, 245, 243, 244, 236, 
+       240, 244, 246, 246, 247, 261, 248, 249, 
+       250, 251, 252, 253, 254, 255, 256, 257, 
+       258, 259, 260, 260, 260, 263, 264, 264, 
+       265, 265, 265, 266, 267, 241, 241, 236, 
+       240, 242, 245, 268, 269, 270, 225, 225, 
+       226, 228, 273, 274, 275, 276, 277, 278, 
+       279, 280, 281, 282, 283, 283, 284, 284, 
+       285, 286, 365, 288, 289, 290, 291, 292, 
+       292, 353, 294, 295, 296, 297, 298, 299, 
+       300, 301, 301, 353, 302, 303, 303, 304, 
+       305, 306, 307, 308, 302, 302, 3, 21, 
+       25, 33, 309, 310, 310, 311, 312, 313, 
+       314, 317, 309, 309, 37, 49, 57, 309, 
+       309, 309, 309, 318, 319, 319, 320, 321, 
+       324, 318, 318, 318, 318, 318, 318, 325, 
+       326, 326, 327, 328, 329, 330, 331, 332, 
+       325, 325, 84, 86, 89, 91, 325, 325, 
+       333, 334, 334, 335, 336, 337, 333, 333, 
+       333, 333, 338, 339, 339, 340, 341, 342, 
+       343, 344, 347, 338, 338, 101, 108, 112, 
+       120, 125, 338, 338, 338, 338, 348, 349, 
+       349, 350, 351, 352, 348, 348, 348, 348, 
+       353, 354, 354, 355, 356, 357, 359, 362, 
+       364, 366, 367, 368, 353, 353, 144, 151, 
+       162, 168, 353, 358, 358, 178, 189, 353, 
+       360, 360, 353, 353, 205, 353, 353, 272, 
+       353, 365, 365, 287, 293, 353, 353
 };
 
 static const short _eo_tokenizer_trans_actions[] = {
-       223, 0, 1, 0, 213, 0, 246, 0, 
-       0, 0, 0, 0, 0, 47, 0, 3, 
-       0, 53, 53, 324, 53, 327, 0, 1, 
-       215, 0, 0, 0, 3, 17, 288, 291, 
-       0, 15, 285, 15, 15, 0, 1, 0, 
-       1, 0, 0, 0, 45, 0, 0, 0, 
-       0, 0, 0, 0, 51, 0, 0, 0, 
-       49, 79, 0, 1, 0, 0, 63, 1, 
-       3, 0, 1, 0, 61, 0, 225, 0, 
-       0, 0, 7, 255, 0, 3, 0, 258, 
-       0, 0, 0, 0, 0, 3, 0, 252, 
-       0, 0, 0, 0, 0, 3, 0, 336, 
-       5, 77, 0, 0, 0, 0, 1, 3, 
-       0, 1, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 339, 
-       97, 0, 1, 0, 81, 0, 228, 0, 
-       342, 95, 0, 0, 0, 0, 1, 3, 
-       0, 1, 0, 0, 119, 0, 1, 0, 
-       99, 0, 231, 0, 1, 101, 0, 0, 
-       1, 105, 0, 1, 103, 0, 0, 0, 
-       0, 1, 107, 135, 0, 1, 0, 121, 
-       0, 234, 9, 264, 0, 267, 0, 1, 
-       123, 157, 0, 1, 0, 0, 139, 1, 
-       3, 0, 1, 0, 137, 0, 237, 0, 
-       0, 0, 276, 0, 0, 0, 0, 0, 
-       3, 0, 273, 0, 0, 0, 0, 1, 
-       141, 0, 0, 0, 0, 0, 3, 0, 
-       345, 11, 155, 0, 0, 0, 0, 1, 
-       3, 0, 1, 0, 0, 0, 0, 0, 
+       219, 0, 1, 0, 209, 0, 242, 0, 
+       0, 0, 0, 0, 0, 43, 0, 3, 
+       0, 49, 49, 320, 49, 323, 0, 1, 
+       211, 0, 0, 0, 3, 13, 284, 287, 
+       0, 11, 281, 11, 11, 0, 1, 0, 
+       1, 0, 0, 0, 41, 0, 0, 0, 
+       0, 0, 0, 0, 47, 0, 0, 0, 
+       45, 75, 0, 1, 0, 0, 59, 1, 
+       3, 0, 1, 0, 57, 0, 221, 0, 
+       0, 0, 5, 251, 0, 3, 0, 254, 
+       0, 0, 0, 0, 0, 3, 0, 248, 
+       0, 0, 0, 0, 0, 3, 0, 332, 
+       73, 0, 0, 0, 0, 1, 3, 0, 
+       1, 0, 0, 93, 0, 1, 0, 77, 
+       0, 224, 0, 335, 91, 0, 0, 0, 
+       0, 1, 3, 0, 1, 0, 0, 115, 
+       0, 1, 0, 95, 0, 227, 0, 1, 
+       97, 0, 0, 1, 101, 0, 1, 99, 
+       0, 0, 0, 0, 1, 103, 131, 0, 
+       1, 0, 117, 0, 230, 7, 260, 0, 
+       263, 0, 1, 119, 153, 0, 1, 0, 
+       0, 135, 1, 3, 0, 1, 0, 133, 
+       0, 233, 0, 0, 0, 272, 0, 0, 
+       0, 0, 0, 3, 0, 269, 0, 0, 
+       0, 0, 1, 137, 0, 0, 0, 0, 
+       0, 3, 0, 338, 151, 0, 0, 0, 
+       0, 1, 3, 0, 1, 0, 0, 169, 
+       0, 1, 0, 155, 0, 236, 9, 275, 
+       0, 278, 0, 1, 157, 207, 0, 1, 
+       0, 0, 173, 1, 3, 0, 1, 0, 
+       171, 0, 239, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 1, 179, 0, 
+       0, 1, 0, 1, 3, 0, 23, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       348, 173, 0, 1, 0, 159, 0, 240, 
-       13, 279, 0, 282, 0, 1, 161, 211, 
-       0, 1, 0, 0, 177, 1, 3, 0, 
-       1, 0, 175, 0, 243, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 1, 
-       183, 0, 0, 1, 0, 1, 3, 0, 
-       27, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 1, 185, 0, 0, 0, 0, 
+       1, 181, 0, 0, 0, 0, 0, 0, 
+       0, 1, 0, 1, 3, 0, 21, 0, 
        0, 0, 0, 1, 0, 1, 3, 0, 
-       25, 0, 0, 0, 0, 1, 0, 1, 
-       3, 0, 0, 19, 294, 19, 0, 1, 
-       0, 0, 0, 0, 1, 3, 0, 1, 
-       0, 0, 21, 297, 300, 21, 0, 0, 
-       0, 0, 0, 0, 0, 0, 1, 0, 
-       1, 3, 0, 0, 0, 29, 303, 29, 
-       29, 0, 1, 0, 1, 0, 0, 0, 
-       0, 0, 0, 31, 31, 306, 31, 309, 
-       31, 0, 1, 0, 0, 1, 0, 1, 
-       0, 0, 0, 0, 0, 0, 1, 0, 
-       1, 0, 0, 3, 3, 0, 37, 315, 
-       37, 0, 1, 0, 1, 0, 0, 0, 
-       35, 35, 35, 0, 0, 1, 0, 0, 
-       0, 0, 0, 0, 0, 0, 3, 0, 
-       41, 0, 3, 0, 43, 0, 1, 0, 
-       0, 1, 3, 0, 1, 0, 0, 39, 
-       318, 39, 39, 321, 39, 0, 3, 0, 
-       33, 312, 33, 33, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 1, 
-       0, 1, 3, 0, 23, 0, 0, 0, 
-       0, 0, 1, 189, 0, 0, 0, 0, 
-       0, 0, 0, 0, 1, 187, 217, 0, 
-       1, 330, 59, 59, 59, 59, 219, 221, 
-       0, 0, 0, 0, 67, 0, 1, 330, 
-       333, 333, 333, 0, 69, 75, 0, 0, 
-       0, 71, 249, 73, 65, 85, 0, 1, 
-       330, 333, 0, 87, 93, 89, 261, 91, 
-       83, 111, 0, 1, 330, 59, 59, 59, 
-       59, 0, 113, 117, 0, 0, 0, 0, 
-       115, 109, 127, 0, 1, 330, 333, 0, 
-       129, 133, 131, 125, 145, 0, 1, 330, 
-       59, 59, 59, 59, 0, 147, 153, 0, 
-       0, 0, 0, 0, 149, 270, 151, 143, 
-       165, 0, 1, 330, 333, 0, 167, 171, 
-       169, 163, 193, 0, 1, 330, 59, 59, 
-       59, 59, 59, 59, 59, 0, 195, 209, 
-       0, 0, 0, 0, 201, 0, 1, 0, 
-       0, 199, 0, 1, 205, 181, 0, 203, 
-       179, 0, 197, 0, 1, 0, 0, 207, 
-       191
+       0, 15, 290, 15, 0, 1, 0, 0, 
+       0, 0, 1, 3, 0, 1, 0, 0, 
+       17, 293, 296, 17, 0, 0, 0, 0, 
+       0, 0, 0, 0, 1, 0, 1, 3, 
+       0, 0, 0, 25, 299, 25, 25, 0, 
+       1, 0, 1, 0, 0, 0, 0, 0, 
+       0, 27, 27, 302, 27, 305, 27, 0, 
+       1, 0, 0, 1, 0, 1, 0, 0, 
+       0, 0, 0, 0, 1, 0, 1, 0, 
+       0, 3, 3, 0, 33, 311, 33, 0, 
+       1, 0, 1, 0, 0, 0, 31, 31, 
+       31, 0, 0, 1, 0, 0, 0, 0, 
+       0, 0, 0, 0, 3, 0, 37, 0, 
+       3, 0, 39, 0, 1, 0, 0, 1, 
+       3, 0, 1, 0, 0, 35, 314, 35, 
+       35, 317, 35, 0, 3, 0, 29, 308, 
+       29, 29, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 1, 0, 1, 
+       3, 0, 19, 0, 0, 0, 0, 0, 
+       1, 185, 0, 0, 0, 0, 0, 0, 
+       0, 0, 1, 183, 213, 0, 1, 326, 
+       55, 55, 55, 55, 215, 217, 0, 0, 
+       0, 0, 63, 0, 1, 326, 329, 329, 
+       329, 0, 65, 71, 0, 0, 0, 67, 
+       245, 69, 61, 81, 0, 1, 326, 329, 
+       0, 83, 89, 85, 257, 87, 79, 107, 
+       0, 1, 326, 55, 55, 55, 55, 0, 
+       109, 113, 0, 0, 0, 0, 111, 105, 
+       123, 0, 1, 326, 329, 0, 125, 129, 
+       127, 121, 141, 0, 1, 326, 55, 55, 
+       55, 55, 0, 143, 149, 0, 0, 0, 
+       0, 0, 145, 266, 147, 139, 161, 0, 
+       1, 326, 329, 0, 163, 167, 165, 159, 
+       189, 0, 1, 326, 55, 55, 55, 55, 
+       55, 55, 55, 0, 191, 205, 0, 0, 
+       0, 0, 197, 0, 1, 0, 0, 195, 
+       0, 1, 201, 177, 0, 199, 175, 0, 
+       193, 0, 1, 0, 0, 203, 187
 };
 
 static const short _eo_tokenizer_to_state_actions[] = {
@@ -1119,17 +1134,14 @@ static const short _eo_tokenizer_to_state_actions[] = {
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 55, 0, 
-       0, 0, 0, 0, 0, 55, 0, 0, 
-       0, 0, 0, 0, 0, 0, 55, 0, 
-       0, 0, 0, 0, 0, 55, 0, 0, 
-       0, 0, 0, 0, 0, 55, 0, 0, 
-       0, 0, 55, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 55, 0, 0, 0, 
-       0, 55, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 51, 0, 
+       0, 0, 0, 0, 0, 51, 0, 0, 
+       0, 0, 0, 0, 0, 0, 51, 0, 
+       0, 0, 0, 0, 0, 51, 0, 0, 
+       0, 0, 0, 0, 0, 51, 0, 0, 
+       0, 0, 51, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 51, 0, 0, 0, 
+       0, 51, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0
 };
@@ -1172,17 +1184,14 @@ static const short _eo_tokenizer_from_state_actions[] = {
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 0, 0, 57, 0, 
-       0, 0, 0, 0, 0, 57, 0, 0, 
-       0, 0, 0, 0, 0, 0, 57, 0, 
-       0, 0, 0, 0, 0, 57, 0, 0, 
-       0, 0, 0, 0, 0, 57, 0, 0, 
-       0, 0, 57, 0, 0, 0, 0, 0, 
-       0, 0, 0, 0, 57, 0, 0, 0, 
-       0, 57, 0, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 0, 0, 53, 0, 
+       0, 0, 0, 0, 0, 53, 0, 0, 
+       0, 0, 0, 0, 0, 0, 53, 0, 
+       0, 0, 0, 0, 0, 53, 0, 0, 
+       0, 0, 0, 0, 0, 53, 0, 0, 
+       0, 0, 53, 0, 0, 0, 0, 0, 
+       0, 0, 0, 0, 53, 0, 0, 0, 
+       0, 53, 0, 0, 0, 0, 0, 0, 
        0, 0, 0, 0, 0, 0, 0, 0, 
        0
 };
@@ -1196,65 +1205,62 @@ static const short _eo_tokenizer_eof_trans[] = {
        58, 58, 58, 58, 58, 58, 58, 58, 
        58, 58, 58, 58, 58, 58, 58, 58, 
        58, 58, 58, 58, 58, 58, 58, 58, 
-       58, 98, 98, 98, 98, 98, 98, 58, 
-       58, 58, 58, 58, 58, 58, 58, 58, 
-       58, 58, 58, 121, 121, 121, 121, 130, 
-       130, 130, 130, 130, 130, 141, 141, 141, 
-       141, 141, 141, 141, 141, 141, 141, 141, 
-       141, 141, 141, 141, 164, 164, 164, 164, 
-       164, 178, 178, 178, 178, 178, 178, 178, 
-       178, 178, 178, 178, 178, 178, 178, 178, 
-       178, 178, 178, 178, 178, 178, 178, 178, 
-       178, 178, 178, 178, 178, 178, 178, 178, 
-       178, 219, 219, 219, 219, 219, 219, 178, 
-       178, 178, 178, 178, 178, 178, 178, 178, 
-       178, 178, 178, 242, 242, 242, 242, 242, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 256, 256, 
-       256, 256, 256, 256, 256, 256, 0, 495, 
-       496, 496, 496, 496, 496, 0, 509, 510, 
-       510, 510, 510, 514, 515, 516, 0, 524, 
-       525, 525, 526, 527, 528, 0, 539, 540, 
-       540, 540, 540, 540, 545, 0, 553, 554, 
-       554, 555, 0, 566, 567, 567, 567, 567, 
-       567, 573, 574, 575, 0, 583, 584, 584, 
-       585, 0, 599, 600, 600, 600, 605, 600, 
-       610, 613, 600, 616, 600, 619, 600, 600, 
-       624
+       58, 97, 97, 97, 97, 97, 97, 108, 
+       108, 108, 108, 117, 117, 117, 117, 117, 
+       117, 128, 128, 128, 128, 128, 128, 128, 
+       128, 128, 128, 128, 128, 128, 128, 128, 
+       151, 151, 151, 151, 151, 165, 165, 165, 
+       165, 165, 165, 165, 165, 165, 165, 165, 
+       165, 165, 165, 165, 165, 165, 165, 165, 
+       165, 165, 165, 165, 165, 165, 165, 165, 
+       165, 165, 165, 165, 165, 205, 205, 205, 
+       205, 205, 205, 216, 216, 216, 216, 216, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 230, 230, 
+       230, 230, 230, 230, 230, 230, 0, 469, 
+       470, 470, 470, 470, 470, 0, 483, 484, 
+       484, 484, 484, 488, 489, 490, 0, 498, 
+       499, 499, 500, 501, 502, 0, 513, 514, 
+       514, 514, 514, 514, 519, 0, 527, 528, 
+       528, 529, 0, 540, 541, 541, 541, 541, 
+       541, 547, 548, 549, 0, 557, 558, 558, 
+       559, 0, 573, 574, 574, 574, 579, 574, 
+       584, 587, 574, 590, 574, 593, 574, 574, 
+       598
 };
 
-static const int eo_tokenizer_start = 326;
-static const int eo_tokenizer_first_final = 326;
+static const int eo_tokenizer_start = 302;
+static const int eo_tokenizer_first_final = 302;
 static const int eo_tokenizer_error = -1;
 
-static const int eo_tokenizer_en_tokenize_accessor = 333;
-static const int eo_tokenizer_en_tokenize_params = 342;
-static const int eo_tokenizer_en_tokenize_property = 349;
-static const int eo_tokenizer_en_tokenize_properties = 357;
-static const int eo_tokenizer_en_tokenize_method = 362;
-static const int eo_tokenizer_en_tokenize_methods = 372;
-static const int eo_tokenizer_en_tokenize_class = 377;
-static const int eo_tokenizer_en_main = 326;
+static const int eo_tokenizer_en_tokenize_accessor = 309;
+static const int eo_tokenizer_en_tokenize_params = 318;
+static const int eo_tokenizer_en_tokenize_property = 325;
+static const int eo_tokenizer_en_tokenize_properties = 333;
+static const int eo_tokenizer_en_tokenize_method = 338;
+static const int eo_tokenizer_en_tokenize_methods = 348;
+static const int eo_tokenizer_en_tokenize_class = 353;
+static const int eo_tokenizer_en_main = 302;
 
 
-#line 966 "lib/eolian/eo_lexer.rl"
+#line 997 "lib/eolian/eo_lexer.rl"
 
 
 Eina_Bool
@@ -1278,7 +1284,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
      }
 
    
-#line 1282 "lib/eolian/eo_lexer.c"
+#line 1288 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -1286,7 +1292,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
         toknz->act = 0;
        }
 
-#line 989 "lib/eolian/eo_lexer.rl"
+#line 1020 "lib/eolian/eo_lexer.rl"
 
    while (!done)
      {
@@ -1313,7 +1319,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
           }
 
         
-#line 1317 "lib/eolian/eo_lexer.c"
+#line 1323 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -1328,11 +1334,11 @@ _resume:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 39:
+       case 37:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 1336 "lib/eolian/eo_lexer.c"
+#line 1342 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -1399,69 +1405,61 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 292 "lib/eolian/eo_lexer.rl"
+#line 337 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 297 "lib/eolian/eo_lexer.rl"
+#line 342 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.line = toknz->current_line;
       DBG("save line[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 2:
-#line 302 "lib/eolian/eo_lexer.rl"
+#line 347 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.tok = ( toknz->p);
       DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p));
    }
        break;
        case 3:
-#line 376 "lib/eolian/eo_lexer.rl"
+#line 421 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      if (toknz->tmp.accessor->ret.type != NULL)
+      if (toknz->tmp.accessor->ret != NULL)
         ABORT(toknz, "accessor has already a return type");
-      toknz->tmp.accessor->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p));
-      INF("        %s", toknz->tmp.accessor->ret.type);
+      toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
        case 4:
-#line 384 "lib/eolian/eo_lexer.rl"
+#line 428 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      if (toknz->tmp.accessor->ret.comment != NULL)
+      if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
+      if (toknz->tmp.accessor->ret->comment != NULL)
         ABORT(toknz, "accessor return type has already a comment");
-      toknz->tmp.accessor->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
-      INF("        %s", toknz->tmp.accessor->ret.comment);
+      toknz->tmp.accessor->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
+      INF("        %s", toknz->tmp.accessor->ret->comment);
    }
        break;
        case 5:
-#line 392 "lib/eolian/eo_lexer.rl"
-       {
-      if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      toknz->tmp.accessor->ret.warn_unused = EINA_TRUE;
-      INF("        WARN_UNUSED");
-   }
-       break;
-       case 6:
-#line 398 "lib/eolian/eo_lexer.rl"
+#line 437 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 7:
-#line 412 "lib/eolian/eo_lexer.rl"
+       case 6:
+#line 451 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
-       case 8:
-#line 416 "lib/eolian/eo_lexer.rl"
+       case 7:
+#line 455 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -1471,8 +1469,8 @@ _eof_trans:
       toknz->tmp.accessor_param = NULL;
    }
        break;
-       case 9:
-#line 446 "lib/eolian/eo_lexer.rl"
+       case 8:
+#line 484 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -1481,8 +1479,8 @@ _eof_trans:
       toknz->tmp.param = NULL;
    }
        break;
-       case 10:
-#line 454 "lib/eolian/eo_lexer.rl"
+       case 9:
+#line 492 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -1492,90 +1490,82 @@ _eof_trans:
       INF("        %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
    }
        break;
-       case 11:
-#line 554 "lib/eolian/eo_lexer.rl"
+       case 10:
+#line 592 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
       toknz->tmp.prop = _eo_tokenizer_property_get(toknz, ( toknz->p));
    }
        break;
-       case 12:
-#line 594 "lib/eolian/eo_lexer.rl"
+       case 11:
+#line 632 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      if (toknz->tmp.meth->ret.type != NULL)
+      if (toknz->tmp.meth->ret != NULL)
         ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name);
-      toknz->tmp.meth->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p));
-      INF("        %s", toknz->tmp.meth->ret.type);
+      toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
-       case 13:
-#line 602 "lib/eolian/eo_lexer.rl"
+       case 12:
+#line 639 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      if (toknz->tmp.meth->ret.comment != NULL)
+      if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
+      if (toknz->tmp.meth->ret->comment != NULL)
         ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
-      toknz->tmp.meth->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
-      INF("        %s", toknz->tmp.meth->ret.comment);
+      toknz->tmp.meth->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
+      INF("        %s", toknz->tmp.meth->ret->comment);
    }
        break;
-       case 14:
-#line 610 "lib/eolian/eo_lexer.rl"
-       {
-      if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      toknz->tmp.meth->ret.warn_unused = EINA_TRUE;
-      INF("        WARN_UNUSED");
-   }
-       break;
-       case 15:
-#line 616 "lib/eolian/eo_lexer.rl"
+       case 13:
+#line 648 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 16:
-#line 621 "lib/eolian/eo_lexer.rl"
+       case 14:
+#line 653 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
       INF("        obj const");
    }
        break;
-       case 17:
-#line 684 "lib/eolian/eo_lexer.rl"
+       case 15:
+#line 715 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
       toknz->tmp.meth = _eo_tokenizer_method_get(toknz, ( toknz->p));
    }
        break;
-       case 18:
-#line 716 "lib/eolian/eo_lexer.rl"
+       case 16:
+#line 747 "lib/eolian/eo_lexer.rl"
        {
       const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
       toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
    }
        break;
-       case 19:
-#line 721 "lib/eolian/eo_lexer.rl"
+       case 17:
+#line 752 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
       toknz->tmp.str_items = NULL;
    }
        break;
-       case 20:
-#line 769 "lib/eolian/eo_lexer.rl"
+       case 18:
+#line 800 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
       toknz->tmp.kls->events = eina_list_append(toknz->tmp.kls->events, toknz->tmp.event);
    }
        break;
-       case 21:
-#line 775 "lib/eolian/eo_lexer.rl"
+       case 19:
+#line 806 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -1584,8 +1574,8 @@ _eof_trans:
       toknz->tmp.event = NULL;
    }
        break;
-       case 22:
-#line 783 "lib/eolian/eo_lexer.rl"
+       case 20:
+#line 814 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -1593,8 +1583,8 @@ _eof_trans:
       toknz->tmp.kls->legacy_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 23:
-#line 792 "lib/eolian/eo_lexer.rl"
+       case 21:
+#line 823 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -1602,8 +1592,8 @@ _eof_trans:
       toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 24:
-#line 801 "lib/eolian/eo_lexer.rl"
+       case 22:
+#line 832 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -1611,16 +1601,16 @@ _eof_trans:
       toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 25:
-#line 814 "lib/eolian/eo_lexer.rl"
+       case 23:
+#line 845 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
-       case 26:
-#line 820 "lib/eolian/eo_lexer.rl"
+       case 24:
+#line 851 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -1628,8 +1618,8 @@ _eof_trans:
         toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def));
    }
        break;
-       case 27:
-#line 827 "lib/eolian/eo_lexer.rl"
+       case 25:
+#line 858 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1637,8 +1627,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 28:
-#line 834 "lib/eolian/eo_lexer.rl"
+       case 26:
+#line 865 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -1648,24 +1638,24 @@ _eof_trans:
         toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 29:
-#line 843 "lib/eolian/eo_lexer.rl"
+       case 27:
+#line 874 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 30:
-#line 849 "lib/eolian/eo_lexer.rl"
+       case 28:
+#line 880 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
-       case 31:
-#line 855 "lib/eolian/eo_lexer.rl"
+       case 29:
+#line 886 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1673,8 +1663,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 32:
-#line 862 "lib/eolian/eo_lexer.rl"
+       case 30:
+#line 893 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1682,32 +1672,32 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 33:
-#line 932 "lib/eolian/eo_lexer.rl"
+       case 31:
+#line 963 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
-       case 34:
-#line 935 "lib/eolian/eo_lexer.rl"
+       case 32:
+#line 966 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
-       case 35:
-#line 938 "lib/eolian/eo_lexer.rl"
+       case 33:
+#line 969 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
-       case 36:
-#line 941 "lib/eolian/eo_lexer.rl"
+       case 34:
+#line 972 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
-       case 37:
-#line 945 "lib/eolian/eo_lexer.rl"
+       case 35:
+#line 976 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -1715,12 +1705,12 @@ _eof_trans:
       toknz->tmp.kls->type = toknz->tmp.kls_type;
    }
        break;
-       case 40:
+       case 38:
 #line 1 "NONE"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 41:
-#line 368 "lib/eolian/eo_lexer.rl"
+       case 39:
+#line 413 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -1729,34 +1719,34 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->comment);
    }}
        break;
-       case 42:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 40:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 43:
-#line 438 "lib/eolian/eo_lexer.rl"
+       case 41:
+#line 476 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 44:
-#line 439 "lib/eolian/eo_lexer.rl"
+       case 42:
+#line 477 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 45:
-#line 403 "lib/eolian/eo_lexer.rl"
+       case 43:
+#line 442 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 349; goto _again;}
+      { toknz->cs = 325; goto _again;}
    }}
        break;
-       case 46:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 44:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1774,27 +1764,27 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 47:
-#line 434 "lib/eolian/eo_lexer.rl"
+       case 45:
+#line 472 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 48:
-#line 437 "lib/eolian/eo_lexer.rl"
+       case 46:
+#line 475 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 49:
-#line 403 "lib/eolian/eo_lexer.rl"
+       case 47:
+#line 442 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 349; goto _again;}
+      { toknz->cs = 325; goto _again;}
    }}
        break;
-       case 50:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 48:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1812,12 +1802,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 51:
-#line 437 "lib/eolian/eo_lexer.rl"
+       case 49:
+#line 475 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 52:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 50:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1835,29 +1825,29 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 53:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 51:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 54:
-#line 463 "lib/eolian/eo_lexer.rl"
+       case 52:
+#line 501 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 349; goto _again;}
+        { toknz->cs = 325; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 362; goto _again;}
+        { toknz->cs = 338; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 55:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 53:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1875,30 +1865,30 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 56:
-#line 479 "lib/eolian/eo_lexer.rl"
+       case 54:
+#line 517 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 57:
-#line 481 "lib/eolian/eo_lexer.rl"
+       case 55:
+#line 519 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 58:
-#line 463 "lib/eolian/eo_lexer.rl"
+       case 56:
+#line 501 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 349; goto _again;}
+        { toknz->cs = 325; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 362; goto _again;}
+        { toknz->cs = 338; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 59:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 57:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1916,12 +1906,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 60:
-#line 481 "lib/eolian/eo_lexer.rl"
+       case 58:
+#line 519 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 61:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 59:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1939,51 +1929,51 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 62:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 60:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 63:
-#line 488 "lib/eolian/eo_lexer.rl"
+       case 61:
+#line 526 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 333; goto _again;}
+      { toknz->cs = 309; goto _again;}
    }}
        break;
-       case 64:
-#line 495 "lib/eolian/eo_lexer.rl"
+       case 62:
+#line 533 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 333; goto _again;}
+      { toknz->cs = 309; goto _again;}
    }}
        break;
-       case 65:
-#line 502 "lib/eolian/eo_lexer.rl"
+       case 63:
+#line 540 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 318; goto _again;}
    }}
        break;
-       case 66:
-#line 509 "lib/eolian/eo_lexer.rl"
+       case 64:
+#line 547 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 318; goto _again;}
    }}
        break;
-       case 67:
-#line 516 "lib/eolian/eo_lexer.rl"
+       case 65:
+#line 554 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -1994,11 +1984,11 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 357; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 68:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 66:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2016,12 +2006,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 69:
-#line 535 "lib/eolian/eo_lexer.rl"
+       case 67:
+#line 573 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 70:
-#line 516 "lib/eolian/eo_lexer.rl"
+       case 68:
+#line 554 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -2032,11 +2022,11 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 357; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 71:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 69:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2054,8 +2044,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 72:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 70:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2073,32 +2063,32 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 73:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 71:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 74:
-#line 547 "lib/eolian/eo_lexer.rl"
+       case 72:
+#line 585 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 349; goto _again;}
+      { toknz->cs = 325; goto _again;}
    }}
        break;
-       case 75:
-#line 560 "lib/eolian/eo_lexer.rl"
+       case 73:
+#line 598 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 76:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 74:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2116,20 +2106,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 77:
-#line 569 "lib/eolian/eo_lexer.rl"
+       case 75:
+#line 607 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 78:
-#line 560 "lib/eolian/eo_lexer.rl"
+       case 76:
+#line 598 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 79:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 77:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2147,8 +2137,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 80:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 78:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2166,8 +2156,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 81:
-#line 578 "lib/eolian/eo_lexer.rl"
+       case 79:
+#line 616 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -2176,33 +2166,33 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 82:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 80:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 83:
-#line 586 "lib/eolian/eo_lexer.rl"
+       case 81:
+#line 624 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.meth->params);
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 318; goto _again;}
    }}
        break;
-       case 84:
-#line 669 "lib/eolian/eo_lexer.rl"
+       case 82:
+#line 700 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 85:
-#line 670 "lib/eolian/eo_lexer.rl"
+       case 83:
+#line 701 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 86:
-#line 627 "lib/eolian/eo_lexer.rl"
+       case 84:
+#line 659 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2226,11 +2216,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 87:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 85:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2248,16 +2238,16 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 88:
-#line 664 "lib/eolian/eo_lexer.rl"
+       case 86:
+#line 695 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 89:
-#line 668 "lib/eolian/eo_lexer.rl"
+       case 87:
+#line 699 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 90:
-#line 627 "lib/eolian/eo_lexer.rl"
+       case 88:
+#line 659 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2281,11 +2271,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 91:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 89:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2303,12 +2293,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 92:
-#line 668 "lib/eolian/eo_lexer.rl"
+       case 90:
+#line 699 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 93:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 91:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2326,33 +2316,33 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 94:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 92:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 95:
-#line 677 "lib/eolian/eo_lexer.rl"
+       case 93:
+#line 708 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 362; goto _again;}
+      { toknz->cs = 338; goto _again;}
    }}
        break;
-       case 96:
-#line 690 "lib/eolian/eo_lexer.rl"
+       case 94:
+#line 721 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 97:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 95:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2370,21 +2360,21 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 98:
-#line 700 "lib/eolian/eo_lexer.rl"
+       case 96:
+#line 731 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 99:
-#line 690 "lib/eolian/eo_lexer.rl"
+       case 97:
+#line 721 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 100:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 98:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2402,8 +2392,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 101:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 99:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2421,8 +2411,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 102:
-#line 709 "lib/eolian/eo_lexer.rl"
+       case 100:
+#line 740 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -2430,71 +2420,71 @@ _eof_trans:
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 103:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 101:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 104:
-#line 727 "lib/eolian/eo_lexer.rl"
+       case 102:
+#line 758 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 105:
-#line 730 "lib/eolian/eo_lexer.rl"
+       case 103:
+#line 761 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 106:
-#line 733 "lib/eolian/eo_lexer.rl"
+       case 104:
+#line 764 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 107:
-#line 740 "lib/eolian/eo_lexer.rl"
+       case 105:
+#line 771 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 108:
-#line 747 "lib/eolian/eo_lexer.rl"
+       case 106:
+#line 778 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 357; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 109:
-#line 753 "lib/eolian/eo_lexer.rl"
+       case 107:
+#line 784 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 110:
-#line 760 "lib/eolian/eo_lexer.rl"
+       case 108:
+#line 791 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 326; goto _again;}
+      { toknz->cs = 302; goto _again;}
    }}
        break;
-       case 111:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 109:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2512,45 +2502,45 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 112:
-#line 907 "lib/eolian/eo_lexer.rl"
+       case 110:
+#line 938 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 113:
-#line 910 "lib/eolian/eo_lexer.rl"
+       case 111:
+#line 941 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 114:
-#line 911 "lib/eolian/eo_lexer.rl"
+       case 112:
+#line 942 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 115:
-#line 912 "lib/eolian/eo_lexer.rl"
+       case 113:
+#line 943 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 116:
-#line 727 "lib/eolian/eo_lexer.rl"
+       case 114:
+#line 758 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 117:
-#line 730 "lib/eolian/eo_lexer.rl"
+       case 115:
+#line 761 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 118:
-#line 760 "lib/eolian/eo_lexer.rl"
+       case 116:
+#line 791 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 326; goto _again;}
+      { toknz->cs = 302; goto _again;}
    }}
        break;
-       case 119:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 117:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2568,8 +2558,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 120:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 118:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2587,24 +2577,24 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 121:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 119:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 122:
-#line 925 "lib/eolian/eo_lexer.rl"
+       case 120:
+#line 956 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 123:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 121:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2622,12 +2612,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 124:
-#line 960 "lib/eolian/eo_lexer.rl"
+       case 122:
+#line 991 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 125:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 123:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2645,8 +2635,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 126:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 124:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2664,7 +2654,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 2668 "lib/eolian/eo_lexer.c"
+#line 2658 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2673,11 +2663,11 @@ _again:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 38:
+       case 36:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 2681 "lib/eolian/eo_lexer.c"
+#line 2671 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2695,12 +2685,12 @@ _again:
        _out: {}
        }
 
-#line 1015 "lib/eolian/eo_lexer.rl"
+#line 1046 "lib/eolian/eo_lexer.rl"
 
         if ( toknz->cs == 
-#line 2702 "lib/eolian/eo_lexer.c"
+#line 2692 "lib/eolian/eo_lexer.c"
 -1
-#line 1016 "lib/eolian/eo_lexer.rl"
+#line 1047 "lib/eolian/eo_lexer.rl"
  )
           {
              ERR("%s: wrong termination", source);
@@ -2746,7 +2736,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    Eina_Bool ret = EINA_TRUE;
 
    
-#line 2750 "lib/eolian/eo_lexer.c"
+#line 2740 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -2754,7 +2744,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
         toknz->act = 0;
        }
 
-#line 1061 "lib/eolian/eo_lexer.rl"
+#line 1092 "lib/eolian/eo_lexer.rl"
 
    toknz->p = buffer;
 
@@ -2763,7 +2753,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    toknz->eof = toknz->pe;
 
    
-#line 2767 "lib/eolian/eo_lexer.c"
+#line 2757 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -2778,11 +2768,11 @@ _resume:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 39:
+       case 37:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 2786 "lib/eolian/eo_lexer.c"
+#line 2776 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2849,69 +2839,61 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 292 "lib/eolian/eo_lexer.rl"
+#line 337 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 297 "lib/eolian/eo_lexer.rl"
+#line 342 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.line = toknz->current_line;
       DBG("save line[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 2:
-#line 302 "lib/eolian/eo_lexer.rl"
+#line 347 "lib/eolian/eo_lexer.rl"
        {
       toknz->saved.tok = ( toknz->p);
       DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p));
    }
        break;
        case 3:
-#line 376 "lib/eolian/eo_lexer.rl"
+#line 421 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      if (toknz->tmp.accessor->ret.type != NULL)
+      if (toknz->tmp.accessor->ret != NULL)
         ABORT(toknz, "accessor has already a return type");
-      toknz->tmp.accessor->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p));
-      INF("        %s", toknz->tmp.accessor->ret.type);
+      toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
        case 4:
-#line 384 "lib/eolian/eo_lexer.rl"
+#line 428 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      if (toknz->tmp.accessor->ret.comment != NULL)
+      if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
+      if (toknz->tmp.accessor->ret->comment != NULL)
         ABORT(toknz, "accessor return type has already a comment");
-      toknz->tmp.accessor->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
-      INF("        %s", toknz->tmp.accessor->ret.comment);
+      toknz->tmp.accessor->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
+      INF("        %s", toknz->tmp.accessor->ret->comment);
    }
        break;
        case 5:
-#line 392 "lib/eolian/eo_lexer.rl"
-       {
-      if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      toknz->tmp.accessor->ret.warn_unused = EINA_TRUE;
-      INF("        WARN_UNUSED");
-   }
-       break;
-       case 6:
-#line 398 "lib/eolian/eo_lexer.rl"
+#line 437 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 7:
-#line 412 "lib/eolian/eo_lexer.rl"
+       case 6:
+#line 451 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
-       case 8:
-#line 416 "lib/eolian/eo_lexer.rl"
+       case 7:
+#line 455 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -2921,8 +2903,8 @@ _eof_trans:
       toknz->tmp.accessor_param = NULL;
    }
        break;
-       case 9:
-#line 446 "lib/eolian/eo_lexer.rl"
+       case 8:
+#line 484 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -2931,8 +2913,8 @@ _eof_trans:
       toknz->tmp.param = NULL;
    }
        break;
-       case 10:
-#line 454 "lib/eolian/eo_lexer.rl"
+       case 9:
+#line 492 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -2942,90 +2924,82 @@ _eof_trans:
       INF("        %s : %s", toknz->tmp.param->name, toknz->tmp.param->type);
    }
        break;
-       case 11:
-#line 554 "lib/eolian/eo_lexer.rl"
+       case 10:
+#line 592 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
       toknz->tmp.prop = _eo_tokenizer_property_get(toknz, ( toknz->p));
    }
        break;
-       case 12:
-#line 594 "lib/eolian/eo_lexer.rl"
+       case 11:
+#line 632 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      if (toknz->tmp.meth->ret.type != NULL)
+      if (toknz->tmp.meth->ret != NULL)
         ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name);
-      toknz->tmp.meth->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p));
-      INF("        %s", toknz->tmp.meth->ret.type);
-   }
-       break;
-       case 13:
-#line 602 "lib/eolian/eo_lexer.rl"
-       {
-      if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      if (toknz->tmp.meth->ret.comment != NULL)
-        ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
-      toknz->tmp.meth->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
-      INF("        %s", toknz->tmp.meth->ret.comment);
+      toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
    }
        break;
-       case 14:
-#line 610 "lib/eolian/eo_lexer.rl"
+       case 12:
+#line 639 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      toknz->tmp.meth->ret.warn_unused = EINA_TRUE;
-      INF("        WARN_UNUSED");
+      if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
+      if (toknz->tmp.meth->ret->comment != NULL)
+        ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
+      toknz->tmp.meth->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
+      INF("        %s", toknz->tmp.meth->ret->comment);
    }
        break;
-       case 15:
-#line 616 "lib/eolian/eo_lexer.rl"
+       case 13:
+#line 648 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 16:
-#line 621 "lib/eolian/eo_lexer.rl"
+       case 14:
+#line 653 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
       INF("        obj const");
    }
        break;
-       case 17:
-#line 684 "lib/eolian/eo_lexer.rl"
+       case 15:
+#line 715 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
       toknz->tmp.meth = _eo_tokenizer_method_get(toknz, ( toknz->p));
    }
        break;
-       case 18:
-#line 716 "lib/eolian/eo_lexer.rl"
+       case 16:
+#line 747 "lib/eolian/eo_lexer.rl"
        {
       const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
       toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
    }
        break;
-       case 19:
-#line 721 "lib/eolian/eo_lexer.rl"
+       case 17:
+#line 752 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
       toknz->tmp.str_items = NULL;
    }
        break;
-       case 20:
-#line 769 "lib/eolian/eo_lexer.rl"
+       case 18:
+#line 800 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
       toknz->tmp.kls->events = eina_list_append(toknz->tmp.kls->events, toknz->tmp.event);
    }
        break;
-       case 21:
-#line 775 "lib/eolian/eo_lexer.rl"
+       case 19:
+#line 806 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -3034,8 +3008,8 @@ _eof_trans:
       toknz->tmp.event = NULL;
    }
        break;
-       case 22:
-#line 783 "lib/eolian/eo_lexer.rl"
+       case 20:
+#line 814 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -3043,8 +3017,8 @@ _eof_trans:
       toknz->tmp.kls->legacy_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 23:
-#line 792 "lib/eolian/eo_lexer.rl"
+       case 21:
+#line 823 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -3052,8 +3026,8 @@ _eof_trans:
       toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 24:
-#line 801 "lib/eolian/eo_lexer.rl"
+       case 22:
+#line 832 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -3061,16 +3035,16 @@ _eof_trans:
       toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 25:
-#line 814 "lib/eolian/eo_lexer.rl"
+       case 23:
+#line 845 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
         toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl);
    }
        break;
-       case 26:
-#line 820 "lib/eolian/eo_lexer.rl"
+       case 24:
+#line 851 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -3078,8 +3052,8 @@ _eof_trans:
         toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def));
    }
        break;
-       case 27:
-#line 827 "lib/eolian/eo_lexer.rl"
+       case 25:
+#line 858 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3087,8 +3061,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 28:
-#line 834 "lib/eolian/eo_lexer.rl"
+       case 26:
+#line 865 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         toknz->tmp.impl_leg_param = calloc(1, sizeof(Eo_Implement_Legacy_Param_Def));
@@ -3098,24 +3072,24 @@ _eof_trans:
         toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 29:
-#line 843 "lib/eolian/eo_lexer.rl"
+       case 27:
+#line 874 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 30:
-#line 849 "lib/eolian/eo_lexer.rl"
+       case 28:
+#line 880 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
         toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
    }
        break;
-       case 31:
-#line 855 "lib/eolian/eo_lexer.rl"
+       case 29:
+#line 886 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3123,8 +3097,8 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 32:
-#line 862 "lib/eolian/eo_lexer.rl"
+       case 30:
+#line 893 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3132,32 +3106,32 @@ _eof_trans:
         toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p));
    }
        break;
-       case 33:
-#line 932 "lib/eolian/eo_lexer.rl"
+       case 31:
+#line 963 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
-       case 34:
-#line 935 "lib/eolian/eo_lexer.rl"
+       case 32:
+#line 966 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
-       case 35:
-#line 938 "lib/eolian/eo_lexer.rl"
+       case 33:
+#line 969 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
-       case 36:
-#line 941 "lib/eolian/eo_lexer.rl"
+       case 34:
+#line 972 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
-       case 37:
-#line 945 "lib/eolian/eo_lexer.rl"
+       case 35:
+#line 976 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -3165,12 +3139,12 @@ _eof_trans:
       toknz->tmp.kls->type = toknz->tmp.kls_type;
    }
        break;
-       case 40:
+       case 38:
 #line 1 "NONE"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 41:
-#line 368 "lib/eolian/eo_lexer.rl"
+       case 39:
+#line 413 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -3179,34 +3153,34 @@ _eof_trans:
       INF("        %s", toknz->tmp.accessor->comment);
    }}
        break;
-       case 42:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 40:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 43:
-#line 438 "lib/eolian/eo_lexer.rl"
+       case 41:
+#line 476 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 44:
-#line 439 "lib/eolian/eo_lexer.rl"
+       case 42:
+#line 477 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 45:
-#line 403 "lib/eolian/eo_lexer.rl"
+       case 43:
+#line 442 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 349; goto _again;}
+      { toknz->cs = 325; goto _again;}
    }}
        break;
-       case 46:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 44:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3224,27 +3198,27 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 47:
-#line 434 "lib/eolian/eo_lexer.rl"
+       case 45:
+#line 472 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 48:
-#line 437 "lib/eolian/eo_lexer.rl"
+       case 46:
+#line 475 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 49:
-#line 403 "lib/eolian/eo_lexer.rl"
+       case 47:
+#line 442 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
       toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor);
       toknz->tmp.accessor = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 349; goto _again;}
+      { toknz->cs = 325; goto _again;}
    }}
        break;
-       case 50:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 48:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3262,12 +3236,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 51:
-#line 437 "lib/eolian/eo_lexer.rl"
+       case 49:
+#line 475 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 52:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 50:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3285,29 +3259,29 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 53:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 51:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 54:
-#line 463 "lib/eolian/eo_lexer.rl"
+       case 52:
+#line 501 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 349; goto _again;}
+        { toknz->cs = 325; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 362; goto _again;}
+        { toknz->cs = 338; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 55:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 53:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3325,30 +3299,30 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 56:
-#line 479 "lib/eolian/eo_lexer.rl"
+       case 54:
+#line 517 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 57:
-#line 481 "lib/eolian/eo_lexer.rl"
+       case 55:
+#line 519 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 58:
-#line 463 "lib/eolian/eo_lexer.rl"
+       case 56:
+#line 501 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
       toknz->current_nesting--;
       if (toknz->tmp.prop)
-        { toknz->cs = 349; goto _again;}
+        { toknz->cs = 325; goto _again;}
       else if (toknz->tmp.meth)
-        { toknz->cs = 362; goto _again;}
+        { toknz->cs = 338; goto _again;}
       else
         ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
    }}
        break;
-       case 59:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 57:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3366,12 +3340,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 60:
-#line 481 "lib/eolian/eo_lexer.rl"
+       case 58:
+#line 519 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 61:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 59:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3389,51 +3363,51 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 62:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 60:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 63:
-#line 488 "lib/eolian/eo_lexer.rl"
+       case 61:
+#line 526 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
       toknz->current_nesting++;
-      { toknz->cs = 333; goto _again;}
+      { toknz->cs = 309; goto _again;}
    }}
        break;
-       case 64:
-#line 495 "lib/eolian/eo_lexer.rl"
+       case 62:
+#line 533 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
       toknz->current_nesting++;
-      { toknz->cs = 333; goto _again;}
+      { toknz->cs = 309; goto _again;}
    }}
        break;
-       case 65:
-#line 502 "lib/eolian/eo_lexer.rl"
+       case 63:
+#line 540 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->keys);
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 318; goto _again;}
    }}
        break;
-       case 66:
-#line 509 "lib/eolian/eo_lexer.rl"
+       case 64:
+#line 547 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.prop->values);
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 318; goto _again;}
    }}
        break;
-       case 67:
-#line 516 "lib/eolian/eo_lexer.rl"
+       case 65:
+#line 554 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -3444,11 +3418,11 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 357; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 68:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 66:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3466,12 +3440,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 69:
-#line 535 "lib/eolian/eo_lexer.rl"
+       case 67:
+#line 573 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 70:
-#line 516 "lib/eolian/eo_lexer.rl"
+       case 68:
+#line 554 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       if (eina_list_count(toknz->tmp.prop->values) == 0)
@@ -3482,11 +3456,11 @@ _eof_trans:
       toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
       toknz->tmp.prop = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 357; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 71:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 69:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3504,8 +3478,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 72:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 70:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3523,32 +3497,32 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 73:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 71:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 74:
-#line 547 "lib/eolian/eo_lexer.rl"
+       case 72:
+#line 585 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
       toknz->current_nesting++;
-      { toknz->cs = 349; goto _again;}
+      { toknz->cs = 325; goto _again;}
    }}
        break;
-       case 75:
-#line 560 "lib/eolian/eo_lexer.rl"
+       case 73:
+#line 598 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 76:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 74:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3566,20 +3540,20 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 77:
-#line 569 "lib/eolian/eo_lexer.rl"
+       case 75:
+#line 607 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 78:
-#line 560 "lib/eolian/eo_lexer.rl"
+       case 76:
+#line 598 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 79:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 77:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3597,8 +3571,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 80:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 78:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3616,8 +3590,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 81:
-#line 578 "lib/eolian/eo_lexer.rl"
+       case 79:
+#line 616 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -3626,33 +3600,33 @@ _eof_trans:
       INF("        %s", toknz->tmp.meth->comment);
    }}
        break;
-       case 82:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 80:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 83:
-#line 586 "lib/eolian/eo_lexer.rl"
+       case 81:
+#line 624 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
       toknz->current_nesting++;
       toknz->tmp.params = &(toknz->tmp.meth->params);
-      { toknz->cs = 342; goto _again;}
+      { toknz->cs = 318; goto _again;}
    }}
        break;
-       case 84:
-#line 669 "lib/eolian/eo_lexer.rl"
+       case 82:
+#line 700 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 85:
-#line 670 "lib/eolian/eo_lexer.rl"
+       case 83:
+#line 701 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
-       case 86:
-#line 627 "lib/eolian/eo_lexer.rl"
+       case 84:
+#line 659 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3676,11 +3650,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 87:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 85:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3698,16 +3672,16 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 88:
-#line 664 "lib/eolian/eo_lexer.rl"
+       case 86:
+#line 695 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 89:
-#line 668 "lib/eolian/eo_lexer.rl"
+       case 87:
+#line 699 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 90:
-#line 627 "lib/eolian/eo_lexer.rl"
+       case 88:
+#line 659 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3731,11 +3705,11 @@ _eof_trans:
       *l = eina_list_append(*l, toknz->tmp.meth);
       toknz->tmp.meth = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 91:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 89:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3753,12 +3727,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 92:
-#line 668 "lib/eolian/eo_lexer.rl"
+       case 90:
+#line 699 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
-       case 93:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 91:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3776,33 +3750,33 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 94:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 92:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 95:
-#line 677 "lib/eolian/eo_lexer.rl"
+       case 93:
+#line 708 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
       toknz->current_nesting++;
-      { toknz->cs = 362; goto _again;}
+      { toknz->cs = 338; goto _again;}
    }}
        break;
-       case 96:
-#line 690 "lib/eolian/eo_lexer.rl"
+       case 94:
+#line 721 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 97:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 95:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3820,21 +3794,21 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 98:
-#line 700 "lib/eolian/eo_lexer.rl"
+       case 96:
+#line 731 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 99:
-#line 690 "lib/eolian/eo_lexer.rl"
+       case 97:
+#line 721 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
       toknz->current_nesting--;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 100:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 98:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3852,8 +3826,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 101:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 99:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3871,8 +3845,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 102:
-#line 709 "lib/eolian/eo_lexer.rl"
+       case 100:
+#line 740 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -3880,71 +3854,71 @@ _eof_trans:
       toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
    }}
        break;
-       case 103:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 101:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 104:
-#line 727 "lib/eolian/eo_lexer.rl"
+       case 102:
+#line 758 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 105:
-#line 730 "lib/eolian/eo_lexer.rl"
+       case 103:
+#line 761 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
-       case 106:
-#line 733 "lib/eolian/eo_lexer.rl"
+       case 104:
+#line 764 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 107:
-#line 740 "lib/eolian/eo_lexer.rl"
+       case 105:
+#line 771 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
       toknz->current_nesting++;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 108:
-#line 747 "lib/eolian/eo_lexer.rl"
+       case 106:
+#line 778 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
-      { toknz->cs = 357; goto _again;}
+      { toknz->cs = 333; goto _again;}
    }}
        break;
-       case 109:
-#line 753 "lib/eolian/eo_lexer.rl"
+       case 107:
+#line 784 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
       toknz->current_nesting++;
-      { toknz->cs = 372; goto _again;}
+      { toknz->cs = 348; goto _again;}
    }}
        break;
-       case 110:
-#line 760 "lib/eolian/eo_lexer.rl"
+       case 108:
+#line 791 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 326; goto _again;}
+      { toknz->cs = 302; goto _again;}
    }}
        break;
-       case 111:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 109:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3962,45 +3936,45 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 112:
-#line 907 "lib/eolian/eo_lexer.rl"
+       case 110:
+#line 938 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 113:
-#line 910 "lib/eolian/eo_lexer.rl"
+       case 111:
+#line 941 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 114:
-#line 911 "lib/eolian/eo_lexer.rl"
+       case 112:
+#line 942 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 115:
-#line 912 "lib/eolian/eo_lexer.rl"
+       case 113:
+#line 943 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 116:
-#line 727 "lib/eolian/eo_lexer.rl"
+       case 114:
+#line 758 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 117:
-#line 730 "lib/eolian/eo_lexer.rl"
+       case 115:
+#line 761 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
-       case 118:
-#line 760 "lib/eolian/eo_lexer.rl"
+       case 116:
+#line 791 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("end class: %s", toknz->tmp.kls->name);
       toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls);
       toknz->tmp.kls = NULL;
       toknz->current_nesting--;
-      { toknz->cs = 326; goto _again;}
+      { toknz->cs = 302; goto _again;}
    }}
        break;
-       case 119:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 117:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4018,8 +3992,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 120:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 118:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4037,24 +4011,24 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 121:
-#line 307 "lib/eolian/eo_lexer.rl"
+       case 119:
+#line 352 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("comment[%d] line%03d:%03d", toknz->cs,
           toknz->saved.line, toknz->current_line);
    }}
        break;
-       case 122:
-#line 925 "lib/eolian/eo_lexer.rl"
+       case 120:
+#line 956 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       INF("begin class: %s", toknz->tmp.kls->name);
       toknz->current_nesting++;
-      { toknz->cs = 377; goto _again;}
+      { toknz->cs = 353; goto _again;}
    }}
        break;
-       case 123:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 121:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4072,12 +4046,12 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 124:
-#line 960 "lib/eolian/eo_lexer.rl"
+       case 122:
+#line 991 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
-       case 125:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 123:
+#line 361 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4095,8 +4069,8 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-       case 126:
-#line 316 "lib/eolian/eo_lexer.rl"
+       case 124:
+#line 361 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4114,7 +4088,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 4118 "lib/eolian/eo_lexer.c"
+#line 4092 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4123,11 +4097,11 @@ _again:
        _nacts = (unsigned int) *_acts++;
        while ( _nacts-- > 0 ) {
                switch ( *_acts++ ) {
-       case 38:
+       case 36:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 4131 "lib/eolian/eo_lexer.c"
+#line 4105 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4145,12 +4119,12 @@ _again:
        _out: {}
        }
 
-#line 1069 "lib/eolian/eo_lexer.rl"
+#line 1100 "lib/eolian/eo_lexer.rl"
 
    if ( toknz->cs == 
-#line 4152 "lib/eolian/eo_lexer.c"
+#line 4126 "lib/eolian/eo_lexer.c"
 -1
-#line 1070 "lib/eolian/eo_lexer.rl"
+#line 1101 "lib/eolian/eo_lexer.rl"
  )
      {
         ERR("%s: wrong termination", source);
@@ -4217,7 +4191,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->constructors, l, meth)
           {
              printf("  constructors: %s\n", meth->name);
-             printf("    return: %s (%s)\n", meth->ret.type, meth->ret.comment);
+             if (meth->ret)
+                printf("    return: %s (%s)\n", meth->ret->type, meth->ret->comment);
              printf("    legacy : %s\n", meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -4230,7 +4205,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->destructors, l, meth)
           {
              printf("  destructors: %s\n", meth->name);
-             printf("    return: %s (%s)\n", meth->ret.type, meth->ret.comment);
+             if (meth->ret)
+                printf("    return: %s (%s)\n", meth->ret->type, meth->ret->comment);
              printf("    legacy : %s\n", meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -4256,7 +4232,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   printf("    accessor: %s : %s (%s)\n",
-                         accessor->ret.type, _accessor_type_str[accessor->type],
+                         (accessor->ret?accessor->ret->type:""),
+                         _accessor_type_str[accessor->type],
                          accessor->comment);
                   printf("      legacy : %s\n", accessor->legacy);
                }
@@ -4265,7 +4242,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->methods, l, meth)
           {
              printf("  method: %s\n", meth->name);
-             printf("    return: %s (%s)\n", meth->ret.type, meth->ret.comment);
+             if (meth->ret)
+                printf("    return: %s (%s)\n", meth->ret->type, meth->ret->comment);
              printf("    legacy : %s\n", meth->legacy);
              printf("    obj_const : %s\n", meth->obj_const?"true":"false");
              EINA_LIST_FOREACH(meth->params, m, param)
@@ -4364,7 +4342,7 @@ eo_tokenizer_database_fill(const char *filename)
           {
              Eolian_Function foo_id = database_function_new(meth->name, CONSTRUCTOR);
              database_class_function_add(kls->name, foo_id);
-             database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment);
+             if (meth->ret) database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -4376,7 +4354,7 @@ eo_tokenizer_database_fill(const char *filename)
           {
              Eolian_Function foo_id = database_function_new(meth->name, DESTRUCTOR);
              database_class_function_add(kls->name, foo_id);
-             database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment);
+             if (meth->ret) database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -4392,25 +4370,29 @@ eo_tokenizer_database_fill(const char *filename)
                   Eolian_Function_Parameter p = database_property_key_add(
                         foo_id, param->type, param->name, param->comment);
                   database_parameter_nonull_set(p, param->nonull);
+                  database_parameter_own_set(p, param->own);
                }
              EINA_LIST_FOREACH(prop->values, m, param)
                {
                   Eolian_Function_Parameter p = database_property_value_add(
                         foo_id, param->type, param->name, param->comment);
                   database_parameter_nonull_set(p, param->nonull);
+                  database_parameter_own_set(p, param->own);
                }
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   database_function_type_set(foo_id, (accessor->type == SETTER?SET:GET));
-                  if (accessor->ret.type)
+                  if (accessor->ret && accessor->ret->type)
                     {
                        database_function_return_type_set(foo_id,
-                             accessor->type == SETTER?SET:GET, accessor->ret.type);
+                             accessor->type == SETTER?SET:GET, accessor->ret->type);
                        database_function_data_set(foo_id,
                              (accessor->type == SETTER?EOLIAN_PROP_SET_RETURN_COMMENT:EOLIAN_PROP_GET_RETURN_COMMENT),
-                             accessor->ret.comment);
+                             accessor->ret->comment);
                        database_function_return_flag_set_as_warn_unused(foo_id,
-                             accessor->type == SETTER?SET:GET, accessor->ret.warn_unused);
+                             accessor->type == SETTER?SET:GET, accessor->ret->warn_unused);
+                       database_function_return_flag_set_own(foo_id,
+                             accessor->type == SETTER?SET:GET, accessor->ret->own);
                     }
                   if (accessor->legacy)
                     {
@@ -4448,9 +4430,13 @@ eo_tokenizer_database_fill(const char *filename)
           {
              Eolian_Function foo_id = database_function_new(meth->name, METHOD_FUNC);
              database_class_function_add(kls->name, foo_id);
-             database_function_data_set(foo_id, EOLIAN_METHOD_RETURN_TYPE, meth->ret.type);
-             database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment);
-             database_function_return_flag_set_as_warn_unused(foo_id, METHOD_FUNC, meth->ret.warn_unused);
+             if (meth->ret)
+               {
+                  database_function_data_set(foo_id, EOLIAN_METHOD_RETURN_TYPE, meth->ret->type);
+                  database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret->comment);
+                  database_function_return_flag_set_as_warn_unused(foo_id, METHOD_FUNC, meth->ret->warn_unused);
+                  database_function_return_flag_set_own(foo_id, METHOD_FUNC, meth->ret->own);
+               }
              database_function_description_set(foo_id, EOLIAN_COMMENT, meth->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              database_function_object_set_as_const(foo_id, meth->obj_const);
@@ -4459,6 +4445,7 @@ eo_tokenizer_database_fill(const char *filename)
                   Eolian_Function_Parameter p = database_method_parameter_add(foo_id,
                         (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
                   database_parameter_nonull_set(p, param->nonull);
+                  database_parameter_own_set(p, param->own);
                }
           }
 
index a62b39b..68e21a8 100644 (file)
@@ -179,22 +179,30 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
    Eo_Param_Def *param = calloc(1, sizeof(Eo_Param_Def));
    if (param == NULL) ABORT(toknz, "calloc Eo_Param_Def failure");
 
-   /* If @nonull is found, we set s as the end of the string and
-      update the boolean. Otherwise we set the end as the character
-      before the ';'.
-      We need to modify temporarily p because we want strstr to stop
-      at the ';' maximum. p represents the end of the string to search
-      inside.
+   /* The next code part tries to identify the different tags of the
+      parameter.
+      First, we set the ';' to '\0', to search only inside this section.
+      We then strstr the different tags and if found, we update the internal
+      flag and clear the zone of the text. In this way, during the
+      determination of the type/variable, we will not be disturbed by the
+      flags.
+      We have to put back the ';' at the end.
     */
    *p = '\0';
    s = strstr(toknz->saved.tok, "@nonull");
-   *p = ';';
    if (s)
      {
         param->nonull = EINA_TRUE;
-        p = s;
+        memset(s, ' ', 7);
      }
-   s = p - 1; /* Don't look at the current character (';' or '@') */
+   s = strstr(toknz->saved.tok, "@own");
+   if (s)
+     {
+        param->own = EINA_TRUE;
+        memset(s, ' ', 4);
+     }
+   *p = ';';
+   s = p - 1; /* Don't look at the character ';' */
    /* Remove any space between the param name and ';'/@nonull
     * This loop fixes the case where "char *name ;" becomes the type of the param.
     */
@@ -234,6 +242,43 @@ _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p)
    return param;
 }
 
+static Eo_Ret_Def*
+_eo_tokenizer_return_get(Eo_Tokenizer *toknz, char *p)
+{
+   char *s;
+
+   Eo_Ret_Def *ret = calloc(1, sizeof(Eo_Ret_Def));
+   if (ret == NULL) ABORT(toknz, "calloc Eo_Ret_Def failure");
+
+   *p = '\0';
+   s = strstr(toknz->saved.tok, "@warn_unused");
+   if (s)
+     {
+        ret->warn_unused = EINA_TRUE;
+        memset(s, ' ', 12);
+     }
+   s = strstr(toknz->saved.tok, "@own");
+   if (s)
+     {
+        ret->own = EINA_TRUE;
+        memset(s, ' ', 4);
+     }
+   *p = ';';
+   s = p - 1; /* Don't look at the character ';' */
+   /* Remove any space between the param name and ';'
+    * This loop fixes the case where "char *name ;" becomes the type of the param.
+    */
+   while (*s == ' ') s--;
+
+   if (s == toknz->saved.tok)
+     ABORT(toknz, "wrong parameter: %s", _eo_tokenizer_token_get(toknz, p));
+   s++;
+
+   ret->type = _eo_tokenizer_token_get(toknz, s);
+
+   return ret;
+}
+
 static Eo_Accessor_Param*
 _eo_tokenizer_accessor_param_get(Eo_Tokenizer *toknz, char *p)
 {
@@ -373,26 +418,20 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       INF("        %s", toknz->tmp.accessor->comment);
    }
 
-   action end_accessor_rettype {
+   action end_accessor_return {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      if (toknz->tmp.accessor->ret.type != NULL)
+      if (toknz->tmp.accessor->ret != NULL)
         ABORT(toknz, "accessor has already a return type");
-      toknz->tmp.accessor->ret.type = _eo_tokenizer_token_get(toknz, fpc);
-      INF("        %s", toknz->tmp.accessor->ret.type);
+      toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, fpc);
    }
 
    action end_accessor_rettype_comment {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      if (toknz->tmp.accessor->ret.comment != NULL)
+      if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
+      if (toknz->tmp.accessor->ret->comment != NULL)
         ABORT(toknz, "accessor return type has already a comment");
-      toknz->tmp.accessor->ret.comment = _eo_tokenizer_token_get(toknz, fpc-2);
-      INF("        %s", toknz->tmp.accessor->ret.comment);
-   }
-
-   action end_accessor_rettype_unused_flag {
-      if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
-      toknz->tmp.accessor->ret.warn_unused = EINA_TRUE;
-      INF("        WARN_UNUSED");
+      toknz->tmp.accessor->ret->comment = _eo_tokenizer_token_get(toknz, fpc-2);
+      INF("        %s", toknz->tmp.accessor->ret->comment);
    }
 
    action end_accessor_legacy {
@@ -422,9 +461,8 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
       toknz->tmp.accessor_param = NULL;
    }
 
-   rettype_flag = "@warn_unused" %end_accessor_rettype_unused_flag;
    rettype_comment = ws* eo_comment %end_accessor_rettype_comment;
-   rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws )+ %end_accessor_rettype rettype_flag? end_statement rettype_comment?;
+   rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws | '@')+ %end_accessor_return end_statement rettype_comment?;
 
    legacy = 'legacy' ws+ ident %end_accessor_legacy end_statement;
 
@@ -593,24 +631,18 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 
    action end_method_rettype {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      if (toknz->tmp.meth->ret.type != NULL)
+      if (toknz->tmp.meth->ret != NULL)
         ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name);
-      toknz->tmp.meth->ret.type = _eo_tokenizer_token_get(toknz, fpc);
-      INF("        %s", toknz->tmp.meth->ret.type);
+      toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, fpc);
    }
 
    action end_method_rettype_comment {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      if (toknz->tmp.meth->ret.comment != NULL)
+      if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
+      if (toknz->tmp.meth->ret->comment != NULL)
         ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
-      toknz->tmp.meth->ret.comment = _eo_tokenizer_token_get(toknz, fpc-2);
-      INF("        %s", toknz->tmp.meth->ret.comment);
-   }
-
-   action end_method_rettype_unused_flag{
-      if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
-      toknz->tmp.meth->ret.warn_unused = EINA_TRUE;
-      INF("        WARN_UNUSED");
+      toknz->tmp.meth->ret->comment = _eo_tokenizer_token_get(toknz, fpc-2);
+      INF("        %s", toknz->tmp.meth->ret->comment);
    }
 
    action end_method_legacy {
@@ -654,9 +686,8 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    meth_params = 'params' ignore* begin_def;
    meth_legacy = 'legacy' ws+ ident %end_method_legacy end_statement;
 
-   meth_rettype_flag = "@warn_unused" %end_method_rettype_unused_flag;
    meth_rettype_comment = ws* eo_comment %end_method_rettype_comment;
-   meth_rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws )+ %end_method_rettype meth_rettype_flag? end_statement meth_rettype_comment?;
+   meth_rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws | '@')+ %end_method_rettype end_statement meth_rettype_comment?;
 
    meth_obj_const = 'const' %end_method_obj_const end_statement;
 
@@ -1133,7 +1164,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->constructors, l, meth)
           {
              printf("  constructors: %s\n", meth->name);
-             printf("    return: %s (%s)\n", meth->ret.type, meth->ret.comment);
+             if (meth->ret)
+                printf("    return: %s (%s)\n", meth->ret->type, meth->ret->comment);
              printf("    legacy : %s\n", meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -1146,7 +1178,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->destructors, l, meth)
           {
              printf("  destructors: %s\n", meth->name);
-             printf("    return: %s (%s)\n", meth->ret.type, meth->ret.comment);
+             if (meth->ret)
+                printf("    return: %s (%s)\n", meth->ret->type, meth->ret->comment);
              printf("    legacy : %s\n", meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -1172,7 +1205,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   printf("    accessor: %s : %s (%s)\n",
-                         accessor->ret.type, _accessor_type_str[accessor->type],
+                         (accessor->ret?accessor->ret->type:""),
+                         _accessor_type_str[accessor->type],
                          accessor->comment);
                   printf("      legacy : %s\n", accessor->legacy);
                }
@@ -1181,7 +1215,8 @@ eo_tokenizer_dump(Eo_Tokenizer *toknz)
         EINA_LIST_FOREACH(kls->methods, l, meth)
           {
              printf("  method: %s\n", meth->name);
-             printf("    return: %s (%s)\n", meth->ret.type, meth->ret.comment);
+             if (meth->ret)
+                printf("    return: %s (%s)\n", meth->ret->type, meth->ret->comment);
              printf("    legacy : %s\n", meth->legacy);
              printf("    obj_const : %s\n", meth->obj_const?"true":"false");
              EINA_LIST_FOREACH(meth->params, m, param)
@@ -1280,7 +1315,7 @@ eo_tokenizer_database_fill(const char *filename)
           {
              Eolian_Function foo_id = database_function_new(meth->name, CONSTRUCTOR);
              database_class_function_add(kls->name, foo_id);
-             database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment);
+             if (meth->ret) database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -1292,7 +1327,7 @@ eo_tokenizer_database_fill(const char *filename)
           {
              Eolian_Function foo_id = database_function_new(meth->name, DESTRUCTOR);
              database_class_function_add(kls->name, foo_id);
-             database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment);
+             if (meth->ret) database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              EINA_LIST_FOREACH(meth->params, m, param)
                {
@@ -1308,25 +1343,29 @@ eo_tokenizer_database_fill(const char *filename)
                   Eolian_Function_Parameter p = database_property_key_add(
                         foo_id, param->type, param->name, param->comment);
                   database_parameter_nonull_set(p, param->nonull);
+                  database_parameter_own_set(p, param->own);
                }
              EINA_LIST_FOREACH(prop->values, m, param)
                {
                   Eolian_Function_Parameter p = database_property_value_add(
                         foo_id, param->type, param->name, param->comment);
                   database_parameter_nonull_set(p, param->nonull);
+                  database_parameter_own_set(p, param->own);
                }
              EINA_LIST_FOREACH(prop->accessors, m, accessor)
                {
                   database_function_type_set(foo_id, (accessor->type == SETTER?SET:GET));
-                  if (accessor->ret.type)
+                  if (accessor->ret && accessor->ret->type)
                     {
                        database_function_return_type_set(foo_id,
-                             accessor->type == SETTER?SET:GET, accessor->ret.type);
+                             accessor->type == SETTER?SET:GET, accessor->ret->type);
                        database_function_data_set(foo_id,
                              (accessor->type == SETTER?EOLIAN_PROP_SET_RETURN_COMMENT:EOLIAN_PROP_GET_RETURN_COMMENT),
-                             accessor->ret.comment);
+                             accessor->ret->comment);
                        database_function_return_flag_set_as_warn_unused(foo_id,
-                             accessor->type == SETTER?SET:GET, accessor->ret.warn_unused);
+                             accessor->type == SETTER?SET:GET, accessor->ret->warn_unused);
+                       database_function_return_flag_set_own(foo_id,
+                             accessor->type == SETTER?SET:GET, accessor->ret->own);
                     }
                   if (accessor->legacy)
                     {
@@ -1364,9 +1403,13 @@ eo_tokenizer_database_fill(const char *filename)
           {
              Eolian_Function foo_id = database_function_new(meth->name, METHOD_FUNC);
              database_class_function_add(kls->name, foo_id);
-             database_function_data_set(foo_id, EOLIAN_METHOD_RETURN_TYPE, meth->ret.type);
-             database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment);
-             database_function_return_flag_set_as_warn_unused(foo_id, METHOD_FUNC, meth->ret.warn_unused);
+             if (meth->ret)
+               {
+                  database_function_data_set(foo_id, EOLIAN_METHOD_RETURN_TYPE, meth->ret->type);
+                  database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret->comment);
+                  database_function_return_flag_set_as_warn_unused(foo_id, METHOD_FUNC, meth->ret->warn_unused);
+                  database_function_return_flag_set_own(foo_id, METHOD_FUNC, meth->ret->own);
+               }
              database_function_description_set(foo_id, EOLIAN_COMMENT, meth->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
              database_function_object_set_as_const(foo_id, meth->obj_const);
@@ -1375,6 +1418,7 @@ eo_tokenizer_database_fill(const char *filename)
                   Eolian_Function_Parameter p = database_method_parameter_add(foo_id,
                         (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment);
                   database_parameter_nonull_set(p, param->nonull);
+                  database_parameter_own_set(p, param->own);
                }
           }
 
index a8850de..3194d49 100644 (file)
@@ -37,6 +37,8 @@ typedef struct
    Eina_Bool virtual_pure :1;
    Eina_Bool get_return_warn_unused :1; /* also used for methods */
    Eina_Bool set_return_warn_unused :1;
+   Eina_Bool get_return_own :1; /* also used for methods */
+   Eina_Bool set_return_own :1;
 } _Function_Id;
 
 typedef struct
@@ -47,6 +49,7 @@ typedef struct
    Eolian_Parameter_Dir param_dir;
    Eina_Bool is_const :1; /* True if const in this function (e.g get) but not const in the opposite one (e.g set) */
    Eina_Bool nonull :1; /* True if this argument cannot be NULL */
+   Eina_Bool own :1; /* True if the ownership of this argument passes to the caller/callee */
 } _Parameter_Desc;
 
 typedef struct
@@ -803,6 +806,22 @@ eolian_parameter_is_nonull(Eolian_Function_Parameter param_desc)
    return param->nonull;
 }
 
+void
+database_parameter_own_set(Eolian_Function_Parameter param_desc, Eina_Bool own)
+{
+   _Parameter_Desc *param = (_Parameter_Desc *)param_desc;
+   EINA_SAFETY_ON_NULL_RETURN(param);
+   param->own = own;
+}
+
+EAPI Eina_Bool
+eolian_parameter_is_own(Eolian_Function_Parameter param_desc)
+{
+   _Parameter_Desc *param = (_Parameter_Desc *)param_desc;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(param, EINA_FALSE);
+   return param->own;
+}
+
 void database_function_return_type_set(Eolian_Function foo_id, Eolian_Function_Type ftype, const char *ret_type)
 {
    const char *key = NULL;
@@ -873,6 +892,33 @@ eolian_function_return_is_warn_unused(Eolian_Function foo_id,
      }
 }
 
+void database_function_return_flag_set_own(Eolian_Function foo_id,
+      Eolian_Function_Type ftype, Eina_Bool own)
+{
+   _Function_Id *fid = (_Function_Id *)foo_id;
+   EINA_SAFETY_ON_NULL_RETURN(fid);
+   switch (ftype)
+     {
+      case METHOD_FUNC: case GET: fid->get_return_own = own; break;
+      case SET: fid->set_return_own = own; break;
+      default: return;
+     }
+}
+
+EAPI Eina_Bool
+eolian_function_return_own_get(Eolian_Function foo_id,
+      Eolian_Function_Type ftype)
+{
+   _Function_Id *fid = (_Function_Id *)foo_id;
+   EINA_SAFETY_ON_NULL_RETURN_VAL(fid, EINA_FALSE);
+   switch (ftype)
+     {
+      case METHOD_FUNC: case GET: return fid->get_return_own;
+      case SET: return fid->set_return_own;
+      default: return EINA_FALSE;
+     }
+}
+
 void
 database_function_object_set_as_const(Eolian_Function foo_id, Eina_Bool is_const)
 {
index a858518..da57bfc 100644 (file)
@@ -90,11 +90,16 @@ void database_parameter_get_const_attribute_set(Eolian_Function_Parameter param_
 
 void database_parameter_nonull_set(Eolian_Function_Parameter, Eina_Bool nonull);
 
+void database_parameter_own_set(Eolian_Function_Parameter, Eina_Bool own);
+
 void database_function_return_type_set(Eolian_Function foo_id, Eolian_Function_Type ftype, const char *ret_type);
 
 void database_function_return_flag_set_as_warn_unused(Eolian_Function foo_id,
       Eolian_Function_Type ftype, Eina_Bool warn_unused);
 
+void database_function_return_flag_set_own(Eolian_Function foo_id,
+      Eolian_Function_Type ftype, Eina_Bool own);
+
 void database_function_object_set_as_const(Eolian_Function foo_id, Eina_Bool is_const);
 
 Eina_Bool