Eolian: Support default return values from .eo file.
authorDaniel Zaoui <daniel.zaoui@samsung.com>
Sun, 16 Mar 2014 06:33:24 +0000 (08:33 +0200)
committerDaniel Zaoui <daniel.zaoui@samsung.com>
Sun, 16 Mar 2014 06:37:23 +0000 (08:37 +0200)
Now, it is possible to assign a default return value for a
method/property.
It will be used in case the function invocation makes issues, e.g eo_do
failing to find the function...

src/bin/eolian/legacy_generator.c
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 41b3d65..5ef1632 100644 (file)
@@ -298,8 +298,11 @@ _eapi_func_generate(const char *classname, Eolian_Function funcid, Eolian_Functi
      {
         if (eina_strbuf_length_get(eoparam)) eina_strbuf_append(eoparam, ", ");
         Eina_Bool had_star = !!strchr(rettype, '*');
-        sprintf (tmpstr, "   %s%s%s%s = 0;\n",
-              ret_const?"const ":"", rettype, had_star?"":" ", retname);
+        const char *dflt_ret_val =
+           eolian_function_return_dflt_value_get(funcid, ftype);
+        sprintf (tmpstr, "   %s%s%s%s = %s;\n",
+              ret_const?"const ":"", rettype, had_star?"":" ", retname,
+              dflt_ret_val?dflt_ret_val:"0");
         eina_strbuf_append_printf(eoparam, "&%s", retname);
      }
 
index 212002a..126b60a 100644 (file)
@@ -465,6 +465,22 @@ EAPI Eina_Bool eolian_parameter_is_own(Eolian_Function_Parameter param_desc);
 EAPI const char *eolian_function_return_type_get(Eolian_Function function_id, Eolian_Function_Type ftype);
 
 /*
+ * @brief Get the return default value of a function.
+ *
+ * @param[in] function_id id of the function
+ * @param[in] ftype type of the function
+ * @return the return default value of the function
+ *
+ * The return default value is needed to return an appropriate
+ * value if an error occurs (eo_do failure...).
+ * The default value is not mandatory, so NULL can be returned.
+ *
+ * @ingroup Eolian
+ */
+EAPI const char *
+eolian_function_return_dflt_value_get(Eolian_Function foo_id, Eolian_Function_Type ftype);
+
+/*
  * @brief Get the return comment of a function.
  *
  * @param[in] function_id id of the function
index aec0ab5..11d860e 100644 (file)
@@ -8,6 +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);
+   if (ret->dflt_ret_val) free(ret->dflt_ret_val);
    free(ret);
 }
 
index 1e8f2a3..fa08aad 100644 (file)
@@ -10,6 +10,7 @@ typedef struct _eo_ret_def
 {
    const char *type;
    const char *comment;
+   const char *dflt_ret_val;
    Eina_Bool warn_unused:1;
    Eina_Bool own:1;
 } Eo_Ret_Def;
index af94f1b..8d9acb5 100644 (file)
@@ -265,6 +265,24 @@ _eo_tokenizer_return_get(Eo_Tokenizer *toknz, char *p)
         ret->own = EINA_TRUE;
         memset(s, ' ', 4);
      }
+   s = strchr(toknz->saved.tok, '(');
+   if (s)
+     {
+        char *end = strchr(s, ')');
+        if (!end)
+           ABORT(toknz, "wrong syntax (missing ')'): %s",
+                 _eo_tokenizer_token_get(toknz, p));
+        /* Current values in s and end have to be changed to ' ' to not disturb the next steps (type extraction) */
+        *s++ = ' ';
+        while (*s == ' ') s++;
+        *end-- = ' ';
+        while (end > s && *end == ' ') end--;
+        if (end < s)
+           ABORT(toknz, "empty default return value: %s",
+                 _eo_tokenizer_token_get(toknz, p));
+        ret->dflt_ret_val = strndup(s, end - s + 1);
+        memset(s, ' ', end - s + 1);
+     }
    *p = ';';
    s = p - 1; /* Don't look at the character ';' */
    /* Remove any space between the param name and ';'
@@ -329,11 +347,11 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
 }
 
 
-#line 403 "lib/eolian/eo_lexer.rl"
+#line 423 "lib/eolian/eo_lexer.rl"
 
 
 
-#line 337 "lib/eolian/eo_lexer.c"
+#line 355 "lib/eolian/eo_lexer.c"
 static const char _eo_tokenizer_actions[] = {
        0, 1, 0, 1, 2, 1, 6, 1, 
        10, 1, 15, 1, 16, 1, 17, 1, 
@@ -389,45 +407,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, 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
+       347, 362, 366, 367, 368, 378, 380, 383
+       385, 388, 389, 401, 405, 406, 407, 417
+       419, 422, 424, 427, 428, 429, 433, 434
+       435, 439, 440, 444, 445, 446, 447, 448
+       452, 454, 457, 458, 469, 473, 476, 478
+       481, 492, 494, 497, 498, 499, 500, 501
+       502, 503, 504, 505, 506, 509, 516, 523
+       531, 532, 533, 534, 535, 539, 540, 541
+       542, 543, 546, 553, 567, 582, 586, 587
+       588, 598, 600, 603, 605, 608, 609, 620
+       624, 627, 629, 632, 643, 645, 648, 649
+       650, 651, 652, 653, 654, 655, 656, 657
+       658, 659, 663, 664, 665, 669, 676, 683
+       691, 692, 693, 694, 695, 696, 697, 698
+       699, 700, 704, 705, 706, 707, 708, 709
+       710, 711, 715, 722, 729, 737, 738, 739
+       740, 741, 745, 753, 761, 773, 777, 789
+       790, 791, 801, 803, 806, 814, 815, 816
+       817, 818, 819, 820, 821, 822, 826, 834
+       842, 855, 860, 864, 865, 866, 867, 868
+       869, 881, 886, 890, 899, 903, 904, 905
+       906, 907, 908, 912, 921, 928, 935, 946
+       950, 964, 974, 981, 993, 998, 1004, 1009
+       1010, 1011, 1012, 1013, 1014, 1017, 1024, 1031
+       1039, 1040, 1044, 1051, 1059, 1063, 1068, 1069
+       1070, 1080, 1082, 1085, 1095, 1107, 1114, 1126
+       1127, 1128, 1129, 1130, 1131, 1132, 1133, 1134
+       1135, 1136, 1137, 1138, 1142, 1149, 1156, 1164
+       1165, 1166, 1167, 1168, 1169, 1173, 1174, 1175
+       1176, 1177, 1178, 1179, 1180, 1181, 1185, 1193
+       1196, 1198, 1199, 1200, 1201, 1202, 1213, 1216
+       1218, 1225, 1233, 1241, 1245, 1245, 1246, 1255
+       1258, 1260, 1271, 1275, 1275, 1276, 1285, 1288
+       1290, 1291, 1292, 1293, 1294, 1295, 1304, 1307
+       1309, 1316, 1317, 1326, 1329, 1331, 1332, 1333
+       1334, 1335, 1339, 1339, 1340, 1349, 1352, 1354
+       1361, 1362, 1374, 1377, 1379, 1380, 1382, 1385
+       1387, 1390, 1391, 1392, 1393, 1394, 1397, 1398
+       1399
 };
 
 static const char _eo_tokenizer_trans_keys[] = {
@@ -473,138 +491,140 @@ 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, 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, 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, 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, 
+       95, 40, 42, 45, 46, 48, 57, 64, 
+       90, 97, 122, 9, 13, 32, 59, 95, 
+       40, 42, 45, 46, 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, 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, 
+       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, 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, 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, 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, 
+       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, 95, 40, 42, 45, 
+       46, 48, 57, 64, 90, 97, 122, 9, 
+       13, 32, 59, 95, 40, 42, 45, 46, 
+       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, 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, 58, 95, 48, 57, 65, 
-       90, 97, 122, 58, 65, 90, 97, 122, 
-       95, 48, 57, 65, 90, 97, 122, 59, 
+       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, 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, 
-       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, 
+       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, 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, 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
+       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, 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, 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[] = {
@@ -615,8 +635,8 @@ static const char _eo_tokenizer_single_lengths[] = {
        3, 1, 1, 1, 3, 3, 2, 3, 
        3, 2, 3, 1, 5, 4, 3, 3, 
        6, 6, 6, 6, 6, 5, 4, 1, 
-       2, 6, 6, 6, 6, 5, 4, 5
-       6, 4, 1, 1, 2, 2, 3, 2, 
+       2, 6, 6, 6, 6, 5, 4, 4
+       5, 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, 
@@ -624,7 +644,7 @@ static const char _eo_tokenizer_single_lengths[] = {
        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, 
+       1, 3, 3, 4, 5, 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, 
@@ -665,8 +685,8 @@ static const char _eo_tokenizer_range_lengths[] = {
        0, 0, 0, 0, 0, 0, 0, 0, 
        4, 0, 0, 0, 3, 0, 2, 2, 
        3, 3, 3, 3, 3, 3, 2, 3, 
-       3, 3, 3, 3, 3, 3, 2, 3
-       3, 0, 0, 0, 4, 0, 0, 0, 
+       3, 3, 3, 3, 3, 3, 2, 5
+       5, 0, 0, 0, 4, 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, 
@@ -674,7 +694,7 @@ static const char _eo_tokenizer_range_lengths[] = {
        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, 
+       0, 0, 2, 5, 5, 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, 
@@ -716,45 +736,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, 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
+       327, 338, 343, 345, 347, 354, 357, 361
+       364, 368, 370, 380, 385, 387, 389, 396
+       399, 403, 406, 410, 412, 414, 418, 420
+       422, 426, 428, 432, 434, 436, 438, 440
+       444, 447, 451, 453, 461, 465, 469, 472
+       476, 484, 487, 491, 493, 495, 497, 499
+       501, 503, 505, 507, 509, 513, 519, 524
+       530, 532, 534, 536, 538, 542, 544, 546
+       548, 550, 554, 560, 570, 581, 586, 588
+       590, 597, 600, 604, 607, 611, 613, 621
+       625, 629, 632, 636, 644, 647, 651, 653
+       655, 657, 659, 661, 663, 665, 667, 669
+       671, 673, 677, 679, 681, 685, 690, 695
+       701, 703, 705, 707, 709, 711, 713, 715
+       717, 719, 723, 725, 727, 729, 731, 733
+       735, 737, 741, 746, 751, 757, 759, 761
+       763, 765, 769, 775, 781, 790, 794, 804
+       806, 808, 815, 818, 822, 828, 830, 832
+       834, 836, 838, 840, 842, 844, 848, 854
+       860, 870, 875, 879, 881, 883, 885, 887
+       889, 899, 904, 908, 915, 919, 921, 923
+       925, 927, 929, 933, 940, 946, 951, 959
+       963, 975, 983, 988, 998, 1004, 1010, 1015
+       1017, 1019, 1021, 1023, 1025, 1029, 1035, 1040
+       1046, 1048, 1051, 1056, 1062, 1066, 1071, 1073
+       1075, 1082, 1085, 1089, 1097, 1107, 1112, 1121
+       1123, 1125, 1127, 1129, 1131, 1133, 1135, 1137
+       1139, 1141, 1143, 1145, 1149, 1154, 1159, 1165
+       1167, 1169, 1171, 1173, 1175, 1179, 1181, 1183
+       1185, 1187, 1189, 1191, 1193, 1195, 1199, 1207
+       1210, 1213, 1215, 1217, 1219, 1221, 1230, 1233
+       1236, 1241, 1247, 1253, 1258, 1259, 1261, 1268
+       1271, 1274, 1283, 1288, 1289, 1291, 1300, 1303
+       1306, 1308, 1310, 1312, 1314, 1316, 1323, 1326
+       1329, 1334, 1336, 1345, 1348, 1351, 1353, 1355
+       1357, 1359, 1364, 1365, 1367, 1374, 1377, 1380
+       1385, 1387, 1399, 1402, 1405, 1407, 1410, 1413
+       1416, 1419, 1421, 1423, 1425, 1427, 1430, 1432
+       1434
 };
 
 static const short _eo_tokenizer_indicies[] = {
@@ -798,146 +818,146 @@ static const short _eo_tokenizer_indicies[] = {
        91, 72, 72, 72, 57, 92, 92, 92, 
        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, 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
+       94, 94, 94, 94, 94, 94, 57, 94, 
+       94, 94, 95, 94, 94, 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, 
+       202, 164, 202, 202, 202, 203, 202, 202, 
+       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[] = {
@@ -1260,7 +1280,7 @@ static const int eo_tokenizer_en_tokenize_class = 353;
 static const int eo_tokenizer_en_main = 302;
 
 
-#line 997 "lib/eolian/eo_lexer.rl"
+#line 1017 "lib/eolian/eo_lexer.rl"
 
 
 Eina_Bool
@@ -1284,7 +1304,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
      }
 
    
-#line 1288 "lib/eolian/eo_lexer.c"
+#line 1308 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -1292,7 +1312,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
         toknz->act = 0;
        }
 
-#line 1020 "lib/eolian/eo_lexer.rl"
+#line 1040 "lib/eolian/eo_lexer.rl"
 
    while (!done)
      {
@@ -1319,7 +1339,7 @@ eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source)
           }
 
         
-#line 1323 "lib/eolian/eo_lexer.c"
+#line 1343 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -1338,7 +1358,7 @@ _resume:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 1342 "lib/eolian/eo_lexer.c"
+#line 1362 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -1405,28 +1425,28 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 337 "lib/eolian/eo_lexer.rl"
+#line 355 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 342 "lib/eolian/eo_lexer.rl"
+#line 360 "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 347 "lib/eolian/eo_lexer.rl"
+#line 365 "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 421 "lib/eolian/eo_lexer.rl"
+#line 441 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->ret != NULL)
@@ -1435,7 +1455,7 @@ _eof_trans:
    }
        break;
        case 4:
-#line 428 "lib/eolian/eo_lexer.rl"
+#line 448 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
@@ -1446,20 +1466,20 @@ _eof_trans:
    }
        break;
        case 5:
-#line 437 "lib/eolian/eo_lexer.rl"
+#line 457 "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 6:
-#line 451 "lib/eolian/eo_lexer.rl"
+#line 471 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
        case 7:
-#line 455 "lib/eolian/eo_lexer.rl"
+#line 475 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -1470,7 +1490,7 @@ _eof_trans:
    }
        break;
        case 8:
-#line 484 "lib/eolian/eo_lexer.rl"
+#line 504 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -1480,7 +1500,7 @@ _eof_trans:
    }
        break;
        case 9:
-#line 492 "lib/eolian/eo_lexer.rl"
+#line 512 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -1491,7 +1511,7 @@ _eof_trans:
    }
        break;
        case 10:
-#line 592 "lib/eolian/eo_lexer.rl"
+#line 612 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
@@ -1499,7 +1519,7 @@ _eof_trans:
    }
        break;
        case 11:
-#line 632 "lib/eolian/eo_lexer.rl"
+#line 652 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL)
@@ -1508,7 +1528,7 @@ _eof_trans:
    }
        break;
        case 12:
-#line 639 "lib/eolian/eo_lexer.rl"
+#line 659 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
@@ -1519,14 +1539,14 @@ _eof_trans:
    }
        break;
        case 13:
-#line 648 "lib/eolian/eo_lexer.rl"
+#line 668 "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 14:
-#line 653 "lib/eolian/eo_lexer.rl"
+#line 673 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
@@ -1534,7 +1554,7 @@ _eof_trans:
    }
        break;
        case 15:
-#line 715 "lib/eolian/eo_lexer.rl"
+#line 735 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
@@ -1542,14 +1562,14 @@ _eof_trans:
    }
        break;
        case 16:
-#line 747 "lib/eolian/eo_lexer.rl"
+#line 767 "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 17:
-#line 752 "lib/eolian/eo_lexer.rl"
+#line 772 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
@@ -1557,7 +1577,7 @@ _eof_trans:
    }
        break;
        case 18:
-#line 800 "lib/eolian/eo_lexer.rl"
+#line 820 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
@@ -1565,7 +1585,7 @@ _eof_trans:
    }
        break;
        case 19:
-#line 806 "lib/eolian/eo_lexer.rl"
+#line 826 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -1575,7 +1595,7 @@ _eof_trans:
    }
        break;
        case 20:
-#line 814 "lib/eolian/eo_lexer.rl"
+#line 834 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -1584,7 +1604,7 @@ _eof_trans:
    }
        break;
        case 21:
-#line 823 "lib/eolian/eo_lexer.rl"
+#line 843 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -1593,7 +1613,7 @@ _eof_trans:
    }
        break;
        case 22:
-#line 832 "lib/eolian/eo_lexer.rl"
+#line 852 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -1602,7 +1622,7 @@ _eof_trans:
    }
        break;
        case 23:
-#line 845 "lib/eolian/eo_lexer.rl"
+#line 865 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
@@ -1610,7 +1630,7 @@ _eof_trans:
    }
        break;
        case 24:
-#line 851 "lib/eolian/eo_lexer.rl"
+#line 871 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -1619,7 +1639,7 @@ _eof_trans:
    }
        break;
        case 25:
-#line 858 "lib/eolian/eo_lexer.rl"
+#line 878 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1628,7 +1648,7 @@ _eof_trans:
    }
        break;
        case 26:
-#line 865 "lib/eolian/eo_lexer.rl"
+#line 885 "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));
@@ -1639,7 +1659,7 @@ _eof_trans:
    }
        break;
        case 27:
-#line 874 "lib/eolian/eo_lexer.rl"
+#line 894 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -1647,7 +1667,7 @@ _eof_trans:
    }
        break;
        case 28:
-#line 880 "lib/eolian/eo_lexer.rl"
+#line 900 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -1655,7 +1675,7 @@ _eof_trans:
    }
        break;
        case 29:
-#line 886 "lib/eolian/eo_lexer.rl"
+#line 906 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1664,7 +1684,7 @@ _eof_trans:
    }
        break;
        case 30:
-#line 893 "lib/eolian/eo_lexer.rl"
+#line 913 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -1673,31 +1693,31 @@ _eof_trans:
    }
        break;
        case 31:
-#line 963 "lib/eolian/eo_lexer.rl"
+#line 983 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
        case 32:
-#line 966 "lib/eolian/eo_lexer.rl"
+#line 986 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
        case 33:
-#line 969 "lib/eolian/eo_lexer.rl"
+#line 989 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
        case 34:
-#line 972 "lib/eolian/eo_lexer.rl"
+#line 992 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
        case 35:
-#line 976 "lib/eolian/eo_lexer.rl"
+#line 996 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -1710,7 +1730,7 @@ _eof_trans:
        { toknz->te = ( toknz->p)+1;}
        break;
        case 39:
-#line 413 "lib/eolian/eo_lexer.rl"
+#line 433 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -1720,22 +1740,22 @@ _eof_trans:
    }}
        break;
        case 40:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 41:
-#line 476 "lib/eolian/eo_lexer.rl"
+#line 496 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 42:
-#line 477 "lib/eolian/eo_lexer.rl"
+#line 497 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 43:
-#line 442 "lib/eolian/eo_lexer.rl"
+#line 462 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
@@ -1746,7 +1766,7 @@ _eof_trans:
    }}
        break;
        case 44:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1765,15 +1785,15 @@ _eof_trans:
    }}
        break;
        case 45:
-#line 472 "lib/eolian/eo_lexer.rl"
+#line 492 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 46:
-#line 475 "lib/eolian/eo_lexer.rl"
+#line 495 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 47:
-#line 442 "lib/eolian/eo_lexer.rl"
+#line 462 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
@@ -1784,7 +1804,7 @@ _eof_trans:
    }}
        break;
        case 48:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1803,11 +1823,11 @@ _eof_trans:
    }}
        break;
        case 49:
-#line 475 "lib/eolian/eo_lexer.rl"
+#line 495 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 50:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1826,14 +1846,14 @@ _eof_trans:
    }}
        break;
        case 51:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 52:
-#line 501 "lib/eolian/eo_lexer.rl"
+#line 521 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
@@ -1847,7 +1867,7 @@ _eof_trans:
    }}
        break;
        case 53:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1866,15 +1886,15 @@ _eof_trans:
    }}
        break;
        case 54:
-#line 517 "lib/eolian/eo_lexer.rl"
+#line 537 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 55:
-#line 519 "lib/eolian/eo_lexer.rl"
+#line 539 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 56:
-#line 501 "lib/eolian/eo_lexer.rl"
+#line 521 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
@@ -1888,7 +1908,7 @@ _eof_trans:
    }}
        break;
        case 57:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1907,11 +1927,11 @@ _eof_trans:
    }}
        break;
        case 58:
-#line 519 "lib/eolian/eo_lexer.rl"
+#line 539 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 59:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -1930,14 +1950,14 @@ _eof_trans:
    }}
        break;
        case 60:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 61:
-#line 526 "lib/eolian/eo_lexer.rl"
+#line 546 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
@@ -1946,7 +1966,7 @@ _eof_trans:
    }}
        break;
        case 62:
-#line 533 "lib/eolian/eo_lexer.rl"
+#line 553 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
@@ -1955,7 +1975,7 @@ _eof_trans:
    }}
        break;
        case 63:
-#line 540 "lib/eolian/eo_lexer.rl"
+#line 560 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
@@ -1964,7 +1984,7 @@ _eof_trans:
    }}
        break;
        case 64:
-#line 547 "lib/eolian/eo_lexer.rl"
+#line 567 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
@@ -1973,7 +1993,7 @@ _eof_trans:
    }}
        break;
        case 65:
-#line 554 "lib/eolian/eo_lexer.rl"
+#line 574 "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)
@@ -1988,7 +2008,7 @@ _eof_trans:
    }}
        break;
        case 66:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2007,11 +2027,11 @@ _eof_trans:
    }}
        break;
        case 67:
-#line 573 "lib/eolian/eo_lexer.rl"
+#line 593 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 68:
-#line 554 "lib/eolian/eo_lexer.rl"
+#line 574 "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)
@@ -2026,7 +2046,7 @@ _eof_trans:
    }}
        break;
        case 69:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2045,7 +2065,7 @@ _eof_trans:
    }}
        break;
        case 70:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2064,14 +2084,14 @@ _eof_trans:
    }}
        break;
        case 71:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 72:
-#line 585 "lib/eolian/eo_lexer.rl"
+#line 605 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
@@ -2080,7 +2100,7 @@ _eof_trans:
    }}
        break;
        case 73:
-#line 598 "lib/eolian/eo_lexer.rl"
+#line 618 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
@@ -2088,7 +2108,7 @@ _eof_trans:
    }}
        break;
        case 74:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2107,11 +2127,11 @@ _eof_trans:
    }}
        break;
        case 75:
-#line 607 "lib/eolian/eo_lexer.rl"
+#line 627 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 76:
-#line 598 "lib/eolian/eo_lexer.rl"
+#line 618 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
@@ -2119,7 +2139,7 @@ _eof_trans:
    }}
        break;
        case 77:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2138,7 +2158,7 @@ _eof_trans:
    }}
        break;
        case 78:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2157,7 +2177,7 @@ _eof_trans:
    }}
        break;
        case 79:
-#line 616 "lib/eolian/eo_lexer.rl"
+#line 636 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -2167,14 +2187,14 @@ _eof_trans:
    }}
        break;
        case 80:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 81:
-#line 624 "lib/eolian/eo_lexer.rl"
+#line 644 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
@@ -2184,15 +2204,15 @@ _eof_trans:
    }}
        break;
        case 82:
-#line 700 "lib/eolian/eo_lexer.rl"
+#line 720 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 83:
-#line 701 "lib/eolian/eo_lexer.rl"
+#line 721 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 84:
-#line 659 "lib/eolian/eo_lexer.rl"
+#line 679 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2220,7 +2240,7 @@ _eof_trans:
    }}
        break;
        case 85:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2239,15 +2259,15 @@ _eof_trans:
    }}
        break;
        case 86:
-#line 695 "lib/eolian/eo_lexer.rl"
+#line 715 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 87:
-#line 699 "lib/eolian/eo_lexer.rl"
+#line 719 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 88:
-#line 659 "lib/eolian/eo_lexer.rl"
+#line 679 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -2275,7 +2295,7 @@ _eof_trans:
    }}
        break;
        case 89:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2294,11 +2314,11 @@ _eof_trans:
    }}
        break;
        case 90:
-#line 699 "lib/eolian/eo_lexer.rl"
+#line 719 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 91:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2317,14 +2337,14 @@ _eof_trans:
    }}
        break;
        case 92:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 93:
-#line 708 "lib/eolian/eo_lexer.rl"
+#line 728 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
@@ -2333,7 +2353,7 @@ _eof_trans:
    }}
        break;
        case 94:
-#line 721 "lib/eolian/eo_lexer.rl"
+#line 741 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
@@ -2342,7 +2362,7 @@ _eof_trans:
    }}
        break;
        case 95:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2361,11 +2381,11 @@ _eof_trans:
    }}
        break;
        case 96:
-#line 731 "lib/eolian/eo_lexer.rl"
+#line 751 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 97:
-#line 721 "lib/eolian/eo_lexer.rl"
+#line 741 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
@@ -2374,7 +2394,7 @@ _eof_trans:
    }}
        break;
        case 98:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2393,7 +2413,7 @@ _eof_trans:
    }}
        break;
        case 99:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2412,7 +2432,7 @@ _eof_trans:
    }}
        break;
        case 100:
-#line 740 "lib/eolian/eo_lexer.rl"
+#line 760 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -2421,24 +2441,24 @@ _eof_trans:
    }}
        break;
        case 101:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 102:
-#line 758 "lib/eolian/eo_lexer.rl"
+#line 778 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 103:
-#line 761 "lib/eolian/eo_lexer.rl"
+#line 781 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 104:
-#line 764 "lib/eolian/eo_lexer.rl"
+#line 784 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
@@ -2447,7 +2467,7 @@ _eof_trans:
    }}
        break;
        case 105:
-#line 771 "lib/eolian/eo_lexer.rl"
+#line 791 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
@@ -2456,7 +2476,7 @@ _eof_trans:
    }}
        break;
        case 106:
-#line 778 "lib/eolian/eo_lexer.rl"
+#line 798 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
@@ -2464,7 +2484,7 @@ _eof_trans:
    }}
        break;
        case 107:
-#line 784 "lib/eolian/eo_lexer.rl"
+#line 804 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
@@ -2473,7 +2493,7 @@ _eof_trans:
    }}
        break;
        case 108:
-#line 791 "lib/eolian/eo_lexer.rl"
+#line 811 "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);
@@ -2484,7 +2504,7 @@ _eof_trans:
    }}
        break;
        case 109:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2503,33 +2523,33 @@ _eof_trans:
    }}
        break;
        case 110:
-#line 938 "lib/eolian/eo_lexer.rl"
+#line 958 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 111:
-#line 941 "lib/eolian/eo_lexer.rl"
+#line 961 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 112:
-#line 942 "lib/eolian/eo_lexer.rl"
+#line 962 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 113:
-#line 943 "lib/eolian/eo_lexer.rl"
+#line 963 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 114:
-#line 758 "lib/eolian/eo_lexer.rl"
+#line 778 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 115:
-#line 761 "lib/eolian/eo_lexer.rl"
+#line 781 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 116:
-#line 791 "lib/eolian/eo_lexer.rl"
+#line 811 "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);
@@ -2540,7 +2560,7 @@ _eof_trans:
    }}
        break;
        case 117:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2559,7 +2579,7 @@ _eof_trans:
    }}
        break;
        case 118:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2578,14 +2598,14 @@ _eof_trans:
    }}
        break;
        case 119:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 120:
-#line 956 "lib/eolian/eo_lexer.rl"
+#line 976 "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);
@@ -2594,7 +2614,7 @@ _eof_trans:
    }}
        break;
        case 121:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2613,11 +2633,11 @@ _eof_trans:
    }}
        break;
        case 122:
-#line 991 "lib/eolian/eo_lexer.rl"
+#line 1011 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 123:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2636,7 +2656,7 @@ _eof_trans:
    }}
        break;
        case 124:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -2654,7 +2674,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 2658 "lib/eolian/eo_lexer.c"
+#line 2678 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2667,7 +2687,7 @@ _again:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 2671 "lib/eolian/eo_lexer.c"
+#line 2691 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2685,12 +2705,12 @@ _again:
        _out: {}
        }
 
-#line 1046 "lib/eolian/eo_lexer.rl"
+#line 1066 "lib/eolian/eo_lexer.rl"
 
         if ( toknz->cs == 
-#line 2692 "lib/eolian/eo_lexer.c"
+#line 2712 "lib/eolian/eo_lexer.c"
 -1
-#line 1047 "lib/eolian/eo_lexer.rl"
+#line 1067 "lib/eolian/eo_lexer.rl"
  )
           {
              ERR("%s: wrong termination", source);
@@ -2736,7 +2756,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    Eina_Bool ret = EINA_TRUE;
 
    
-#line 2740 "lib/eolian/eo_lexer.c"
+#line 2760 "lib/eolian/eo_lexer.c"
        {
         toknz->cs = eo_tokenizer_start;
         toknz->ts = 0;
@@ -2744,7 +2764,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
         toknz->act = 0;
        }
 
-#line 1092 "lib/eolian/eo_lexer.rl"
+#line 1112 "lib/eolian/eo_lexer.rl"
 
    toknz->p = buffer;
 
@@ -2753,7 +2773,7 @@ eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, uns
    toknz->eof = toknz->pe;
 
    
-#line 2757 "lib/eolian/eo_lexer.c"
+#line 2777 "lib/eolian/eo_lexer.c"
        {
        int _klen;
        unsigned int _trans;
@@ -2772,7 +2792,7 @@ _resume:
 #line 1 "NONE"
        { toknz->ts = ( toknz->p);}
        break;
-#line 2776 "lib/eolian/eo_lexer.c"
+#line 2796 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -2839,28 +2859,28 @@ _eof_trans:
                switch ( *_acts++ )
                {
        case 0:
-#line 337 "lib/eolian/eo_lexer.rl"
+#line 355 "lib/eolian/eo_lexer.rl"
        {
       toknz->current_line += 1;
       DBG("inc[%d] %d", toknz->cs, toknz->current_line);
    }
        break;
        case 1:
-#line 342 "lib/eolian/eo_lexer.rl"
+#line 360 "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 347 "lib/eolian/eo_lexer.rl"
+#line 365 "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 421 "lib/eolian/eo_lexer.rl"
+#line 441 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->ret != NULL)
@@ -2869,7 +2889,7 @@ _eof_trans:
    }
        break;
        case 4:
-#line 428 "lib/eolian/eo_lexer.rl"
+#line 448 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
@@ -2880,20 +2900,20 @@ _eof_trans:
    }
        break;
        case 5:
-#line 437 "lib/eolian/eo_lexer.rl"
+#line 457 "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 6:
-#line 451 "lib/eolian/eo_lexer.rl"
+#line 471 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
    }
        break;
        case 7:
-#line 455 "lib/eolian/eo_lexer.rl"
+#line 475 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.accessor_param)
          ABORT(toknz, "No accessor param!!!");
@@ -2904,7 +2924,7 @@ _eof_trans:
    }
        break;
        case 8:
-#line 484 "lib/eolian/eo_lexer.rl"
+#line 504 "lib/eolian/eo_lexer.rl"
        {
       const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
       if (toknz->tmp.param == NULL)
@@ -2914,7 +2934,7 @@ _eof_trans:
    }
        break;
        case 9:
-#line 492 "lib/eolian/eo_lexer.rl"
+#line 512 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p));
       if (toknz->tmp.params)
@@ -2925,7 +2945,7 @@ _eof_trans:
    }
        break;
        case 10:
-#line 592 "lib/eolian/eo_lexer.rl"
+#line 612 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.prop != NULL)
         ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name);
@@ -2933,7 +2953,7 @@ _eof_trans:
    }
        break;
        case 11:
-#line 632 "lib/eolian/eo_lexer.rl"
+#line 652 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL)
@@ -2942,7 +2962,7 @@ _eof_trans:
    }
        break;
        case 12:
-#line 639 "lib/eolian/eo_lexer.rl"
+#line 659 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
@@ -2953,14 +2973,14 @@ _eof_trans:
    }
        break;
        case 13:
-#line 648 "lib/eolian/eo_lexer.rl"
+#line 668 "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 14:
-#line 653 "lib/eolian/eo_lexer.rl"
+#line 673 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       toknz->tmp.meth->obj_const = EINA_TRUE;
@@ -2968,7 +2988,7 @@ _eof_trans:
    }
        break;
        case 15:
-#line 715 "lib/eolian/eo_lexer.rl"
+#line 735 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.meth != NULL)
         ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name);
@@ -2976,14 +2996,14 @@ _eof_trans:
    }
        break;
        case 16:
-#line 747 "lib/eolian/eo_lexer.rl"
+#line 767 "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 17:
-#line 752 "lib/eolian/eo_lexer.rl"
+#line 772 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.kls->inherits = toknz->tmp.str_items;
@@ -2991,7 +3011,7 @@ _eof_trans:
    }
        break;
        case 18:
-#line 800 "lib/eolian/eo_lexer.rl"
+#line 820 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p));
@@ -2999,7 +3019,7 @@ _eof_trans:
    }
        break;
        case 19:
-#line 806 "lib/eolian/eo_lexer.rl"
+#line 826 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
       if (toknz->tmp.event->comment != NULL)
@@ -3009,7 +3029,7 @@ _eof_trans:
    }
        break;
        case 20:
-#line 814 "lib/eolian/eo_lexer.rl"
+#line 834 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->legacy_prefix != NULL)
@@ -3018,7 +3038,7 @@ _eof_trans:
    }
        break;
        case 21:
-#line 823 "lib/eolian/eo_lexer.rl"
+#line 843 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->eo_prefix != NULL)
@@ -3027,7 +3047,7 @@ _eof_trans:
    }
        break;
        case 22:
-#line 832 "lib/eolian/eo_lexer.rl"
+#line 852 "lib/eolian/eo_lexer.rl"
        {
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->data_type != NULL)
@@ -3036,7 +3056,7 @@ _eof_trans:
    }
        break;
        case 23:
-#line 845 "lib/eolian/eo_lexer.rl"
+#line 865 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
         toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p));
@@ -3044,7 +3064,7 @@ _eof_trans:
    }
        break;
        case 24:
-#line 851 "lib/eolian/eo_lexer.rl"
+#line 871 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (toknz->tmp.impl->legacy)
@@ -3053,7 +3073,7 @@ _eof_trans:
    }
        break;
        case 25:
-#line 858 "lib/eolian/eo_lexer.rl"
+#line 878 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3062,7 +3082,7 @@ _eof_trans:
    }
        break;
        case 26:
-#line 865 "lib/eolian/eo_lexer.rl"
+#line 885 "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));
@@ -3073,7 +3093,7 @@ _eof_trans:
    }
        break;
        case 27:
-#line 874 "lib/eolian/eo_lexer.rl"
+#line 894 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -3081,7 +3101,7 @@ _eof_trans:
    }
        break;
        case 28:
-#line 880 "lib/eolian/eo_lexer.rl"
+#line 900 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl_leg_param)
            ABORT(toknz, "No implement legacy param!!!");
@@ -3089,7 +3109,7 @@ _eof_trans:
    }
        break;
        case 29:
-#line 886 "lib/eolian/eo_lexer.rl"
+#line 906 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3098,7 +3118,7 @@ _eof_trans:
    }
        break;
        case 30:
-#line 893 "lib/eolian/eo_lexer.rl"
+#line 913 "lib/eolian/eo_lexer.rl"
        {
         if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!");
         if (!toknz->tmp.impl->legacy)
@@ -3107,31 +3127,31 @@ _eof_trans:
    }
        break;
        case 31:
-#line 963 "lib/eolian/eo_lexer.rl"
+#line 983 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
    }
        break;
        case 32:
-#line 966 "lib/eolian/eo_lexer.rl"
+#line 986 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
    }
        break;
        case 33:
-#line 969 "lib/eolian/eo_lexer.rl"
+#line 989 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
    }
        break;
        case 34:
-#line 972 "lib/eolian/eo_lexer.rl"
+#line 992 "lib/eolian/eo_lexer.rl"
        {
       toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
    }
        break;
        case 35:
-#line 976 "lib/eolian/eo_lexer.rl"
+#line 996 "lib/eolian/eo_lexer.rl"
        {
       if (toknz->tmp.kls != NULL)
         ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name);
@@ -3144,7 +3164,7 @@ _eof_trans:
        { toknz->te = ( toknz->p)+1;}
        break;
        case 39:
-#line 413 "lib/eolian/eo_lexer.rl"
+#line 433 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
       if (toknz->tmp.accessor->comment != NULL)
@@ -3154,22 +3174,22 @@ _eof_trans:
    }}
        break;
        case 40:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 41:
-#line 476 "lib/eolian/eo_lexer.rl"
+#line 496 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 42:
-#line 477 "lib/eolian/eo_lexer.rl"
+#line 497 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 43:
-#line 442 "lib/eolian/eo_lexer.rl"
+#line 462 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
@@ -3180,7 +3200,7 @@ _eof_trans:
    }}
        break;
        case 44:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3199,15 +3219,15 @@ _eof_trans:
    }}
        break;
        case 45:
-#line 472 "lib/eolian/eo_lexer.rl"
+#line 492 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 46:
-#line 475 "lib/eolian/eo_lexer.rl"
+#line 495 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 47:
-#line 442 "lib/eolian/eo_lexer.rl"
+#line 462 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!");
@@ -3218,7 +3238,7 @@ _eof_trans:
    }}
        break;
        case 48:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3237,11 +3257,11 @@ _eof_trans:
    }}
        break;
        case 49:
-#line 475 "lib/eolian/eo_lexer.rl"
+#line 495 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 50:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3260,14 +3280,14 @@ _eof_trans:
    }}
        break;
        case 51:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 52:
-#line 501 "lib/eolian/eo_lexer.rl"
+#line 521 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      }");
       toknz->tmp.param = NULL;
@@ -3281,7 +3301,7 @@ _eof_trans:
    }}
        break;
        case 53:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3300,15 +3320,15 @@ _eof_trans:
    }}
        break;
        case 54:
-#line 517 "lib/eolian/eo_lexer.rl"
+#line 537 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 55:
-#line 519 "lib/eolian/eo_lexer.rl"
+#line 539 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 56:
-#line 501 "lib/eolian/eo_lexer.rl"
+#line 521 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("      }");
       toknz->tmp.param = NULL;
@@ -3322,7 +3342,7 @@ _eof_trans:
    }}
        break;
        case 57:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3341,11 +3361,11 @@ _eof_trans:
    }}
        break;
        case 58:
-#line 519 "lib/eolian/eo_lexer.rl"
+#line 539 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 59:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3364,14 +3384,14 @@ _eof_trans:
    }}
        break;
        case 60:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 61:
-#line 526 "lib/eolian/eo_lexer.rl"
+#line 546 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      get {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER);
@@ -3380,7 +3400,7 @@ _eof_trans:
    }}
        break;
        case 62:
-#line 533 "lib/eolian/eo_lexer.rl"
+#line 553 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      set {");
       toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER);
@@ -3389,7 +3409,7 @@ _eof_trans:
    }}
        break;
        case 63:
-#line 540 "lib/eolian/eo_lexer.rl"
+#line 560 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      keys {");
       toknz->current_nesting++;
@@ -3398,7 +3418,7 @@ _eof_trans:
    }}
        break;
        case 64:
-#line 547 "lib/eolian/eo_lexer.rl"
+#line 567 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("      values {");
       toknz->current_nesting++;
@@ -3407,7 +3427,7 @@ _eof_trans:
    }}
        break;
        case 65:
-#line 554 "lib/eolian/eo_lexer.rl"
+#line 574 "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)
@@ -3422,7 +3442,7 @@ _eof_trans:
    }}
        break;
        case 66:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3441,11 +3461,11 @@ _eof_trans:
    }}
        break;
        case 67:
-#line 573 "lib/eolian/eo_lexer.rl"
+#line 593 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 68:
-#line 554 "lib/eolian/eo_lexer.rl"
+#line 574 "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)
@@ -3460,7 +3480,7 @@ _eof_trans:
    }}
        break;
        case 69:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3479,7 +3499,7 @@ _eof_trans:
    }}
        break;
        case 70:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3498,14 +3518,14 @@ _eof_trans:
    }}
        break;
        case 71:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 72:
-#line 585 "lib/eolian/eo_lexer.rl"
+#line 605 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
       INF("    %s {", toknz->tmp.prop->name);
@@ -3514,7 +3534,7 @@ _eof_trans:
    }}
        break;
        case 73:
-#line 598 "lib/eolian/eo_lexer.rl"
+#line 618 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_nesting--;
@@ -3522,7 +3542,7 @@ _eof_trans:
    }}
        break;
        case 74:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3541,11 +3561,11 @@ _eof_trans:
    }}
        break;
        case 75:
-#line 607 "lib/eolian/eo_lexer.rl"
+#line 627 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 76:
-#line 598 "lib/eolian/eo_lexer.rl"
+#line 618 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_nesting--;
@@ -3553,7 +3573,7 @@ _eof_trans:
    }}
        break;
        case 77:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3572,7 +3592,7 @@ _eof_trans:
    }}
        break;
        case 78:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3591,7 +3611,7 @@ _eof_trans:
    }}
        break;
        case 79:
-#line 616 "lib/eolian/eo_lexer.rl"
+#line 636 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       if (toknz->tmp.meth->comment != NULL)
@@ -3601,14 +3621,14 @@ _eof_trans:
    }}
        break;
        case 80:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 81:
-#line 624 "lib/eolian/eo_lexer.rl"
+#line 644 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("      params {");
@@ -3618,15 +3638,15 @@ _eof_trans:
    }}
        break;
        case 82:
-#line 700 "lib/eolian/eo_lexer.rl"
+#line 720 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 83:
-#line 701 "lib/eolian/eo_lexer.rl"
+#line 721 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;}
        break;
        case 84:
-#line 659 "lib/eolian/eo_lexer.rl"
+#line 679 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3654,7 +3674,7 @@ _eof_trans:
    }}
        break;
        case 85:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3673,15 +3693,15 @@ _eof_trans:
    }}
        break;
        case 86:
-#line 695 "lib/eolian/eo_lexer.rl"
+#line 715 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 87:
-#line 699 "lib/eolian/eo_lexer.rl"
+#line 719 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 88:
-#line 659 "lib/eolian/eo_lexer.rl"
+#line 679 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       Eina_List **l = NULL;
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
@@ -3709,7 +3729,7 @@ _eof_trans:
    }}
        break;
        case 89:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3728,11 +3748,11 @@ _eof_trans:
    }}
        break;
        case 90:
-#line 699 "lib/eolian/eo_lexer.rl"
+#line 719 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}}
        break;
        case 91:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3751,14 +3771,14 @@ _eof_trans:
    }}
        break;
        case 92:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 93:
-#line 708 "lib/eolian/eo_lexer.rl"
+#line 728 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
       INF("    %s {", toknz->tmp.meth->name);
@@ -3767,7 +3787,7 @@ _eof_trans:
    }}
        break;
        case 94:
-#line 721 "lib/eolian/eo_lexer.rl"
+#line 741 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
@@ -3776,7 +3796,7 @@ _eof_trans:
    }}
        break;
        case 95:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3795,11 +3815,11 @@ _eof_trans:
    }}
        break;
        case 96:
-#line 731 "lib/eolian/eo_lexer.rl"
+#line 751 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 97:
-#line 721 "lib/eolian/eo_lexer.rl"
+#line 741 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       INF("  }");
       toknz->current_methods_type = METH_TYPE_LAST;
@@ -3808,7 +3828,7 @@ _eof_trans:
    }}
        break;
        case 98:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3827,7 +3847,7 @@ _eof_trans:
    }}
        break;
        case 99:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3846,7 +3866,7 @@ _eof_trans:
    }}
        break;
        case 100:
-#line 740 "lib/eolian/eo_lexer.rl"
+#line 760 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       if (!toknz->tmp.kls) ABORT(toknz, "No class!!!");
       if (toknz->tmp.kls->comment != NULL)
@@ -3855,24 +3875,24 @@ _eof_trans:
    }}
        break;
        case 101:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 102:
-#line 758 "lib/eolian/eo_lexer.rl"
+#line 778 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 103:
-#line 761 "lib/eolian/eo_lexer.rl"
+#line 781 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
    }}
        break;
        case 104:
-#line 764 "lib/eolian/eo_lexer.rl"
+#line 784 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  constructors {");
       toknz->current_methods_type = METH_CONSTRUCTOR;
@@ -3881,7 +3901,7 @@ _eof_trans:
    }}
        break;
        case 105:
-#line 771 "lib/eolian/eo_lexer.rl"
+#line 791 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  destructors {");
       toknz->current_methods_type = METH_DESTRUCTOR;
@@ -3890,7 +3910,7 @@ _eof_trans:
    }}
        break;
        case 106:
-#line 778 "lib/eolian/eo_lexer.rl"
+#line 798 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  properties {");
       toknz->current_nesting++;
@@ -3898,7 +3918,7 @@ _eof_trans:
    }}
        break;
        case 107:
-#line 784 "lib/eolian/eo_lexer.rl"
+#line 804 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       INF("  begin methods");
       toknz->current_methods_type = METH_REGULAR;
@@ -3907,7 +3927,7 @@ _eof_trans:
    }}
        break;
        case 108:
-#line 791 "lib/eolian/eo_lexer.rl"
+#line 811 "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);
@@ -3918,7 +3938,7 @@ _eof_trans:
    }}
        break;
        case 109:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3937,33 +3957,33 @@ _eof_trans:
    }}
        break;
        case 110:
-#line 938 "lib/eolian/eo_lexer.rl"
+#line 958 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 111:
-#line 941 "lib/eolian/eo_lexer.rl"
+#line 961 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 112:
-#line 942 "lib/eolian/eo_lexer.rl"
+#line 962 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 113:
-#line 943 "lib/eolian/eo_lexer.rl"
+#line 963 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 114:
-#line 758 "lib/eolian/eo_lexer.rl"
+#line 778 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 115:
-#line 761 "lib/eolian/eo_lexer.rl"
+#line 781 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
    }}
        break;
        case 116:
-#line 791 "lib/eolian/eo_lexer.rl"
+#line 811 "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);
@@ -3974,7 +3994,7 @@ _eof_trans:
    }}
        break;
        case 117:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -3993,7 +4013,7 @@ _eof_trans:
    }}
        break;
        case 118:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4012,14 +4032,14 @@ _eof_trans:
    }}
        break;
        case 119:
-#line 352 "lib/eolian/eo_lexer.rl"
+#line 370 "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 120:
-#line 956 "lib/eolian/eo_lexer.rl"
+#line 976 "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);
@@ -4028,7 +4048,7 @@ _eof_trans:
    }}
        break;
        case 121:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p)+1;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4047,11 +4067,11 @@ _eof_trans:
    }}
        break;
        case 122:
-#line 991 "lib/eolian/eo_lexer.rl"
+#line 1011 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;}
        break;
        case 123:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        { toknz->te = ( toknz->p);( toknz->p)--;{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4070,7 +4090,7 @@ _eof_trans:
    }}
        break;
        case 124:
-#line 361 "lib/eolian/eo_lexer.rl"
+#line 379 "lib/eolian/eo_lexer.rl"
        {{( toknz->p) = (( toknz->te))-1;}{
       DBG("error[%d]", toknz->cs);
       char *s, *d;
@@ -4088,7 +4108,7 @@ _eof_trans:
       {( toknz->p)++; goto _out; }  /* necessary to stop scanners */
    }}
        break;
-#line 4092 "lib/eolian/eo_lexer.c"
+#line 4112 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4101,7 +4121,7 @@ _again:
 #line 1 "NONE"
        { toknz->ts = 0;}
        break;
-#line 4105 "lib/eolian/eo_lexer.c"
+#line 4125 "lib/eolian/eo_lexer.c"
                }
        }
 
@@ -4119,12 +4139,12 @@ _again:
        _out: {}
        }
 
-#line 1100 "lib/eolian/eo_lexer.rl"
+#line 1120 "lib/eolian/eo_lexer.rl"
 
    if ( toknz->cs == 
-#line 4126 "lib/eolian/eo_lexer.c"
+#line 4146 "lib/eolian/eo_lexer.c"
 -1
-#line 1101 "lib/eolian/eo_lexer.rl"
+#line 1121 "lib/eolian/eo_lexer.rl"
  )
      {
         ERR("%s: wrong termination", source);
@@ -4393,6 +4413,8 @@ eo_tokenizer_database_fill(const char *filename)
                              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);
+                       database_function_return_dflt_val_set(foo_id,
+                             accessor->type == SETTER?SET:GET, accessor->ret->dflt_ret_val);
                     }
                   if (accessor->legacy)
                     {
@@ -4434,8 +4456,11 @@ eo_tokenizer_database_fill(const char *filename)
                {
                   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_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_return_dflt_val_set(foo_id,
+                        METHOD_FUNC, meth->ret->dflt_ret_val);
                }
              database_function_description_set(foo_id, EOLIAN_COMMENT, meth->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
index 68e21a8..6ee8536 100644 (file)
@@ -263,6 +263,24 @@ _eo_tokenizer_return_get(Eo_Tokenizer *toknz, char *p)
         ret->own = EINA_TRUE;
         memset(s, ' ', 4);
      }
+   s = strchr(toknz->saved.tok, '(');
+   if (s)
+     {
+        char *end = strchr(s, ')');
+        if (!end)
+           ABORT(toknz, "wrong syntax (missing ')'): %s",
+                 _eo_tokenizer_token_get(toknz, p));
+        /* Current values in s and end have to be changed to ' ' to not disturb the next steps (type extraction) */
+        *s++ = ' ';
+        while (*s == ' ') s++;
+        *end-- = ' ';
+        while (end > s && *end == ' ') end--;
+        if (end < s)
+           ABORT(toknz, "empty default return value: %s",
+                 _eo_tokenizer_token_get(toknz, p));
+        ret->dflt_ret_val = strndup(s, end - s + 1);
+        memset(s, ' ', end - s + 1);
+     }
    *p = ';';
    s = p - 1; /* Don't look at the character ';' */
    /* Remove any space between the param name and ';'
@@ -400,6 +418,8 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    list_separator    = ',';
    colon             = ':';
 
+   # chars allowed on the return line.
+   return_char       = (alnum_u | '*' | ws | '@' | '(' | ')' | '.' | '-');
 }%%
 
 %%{
@@ -462,7 +482,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    }
 
    rettype_comment = ws* eo_comment %end_accessor_rettype_comment;
-   rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws | '@')+ %end_accessor_return end_statement rettype_comment?;
+   rettype = 'return' ws+ alpha+ >save_fpc return_char+ %end_accessor_return end_statement rettype_comment?;
 
    legacy = 'legacy' ws+ ident %end_accessor_legacy end_statement;
 
@@ -687,7 +707,7 @@ _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p)
    meth_legacy = 'legacy' ws+ ident %end_method_legacy end_statement;
 
    meth_rettype_comment = ws* eo_comment %end_method_rettype_comment;
-   meth_rettype = 'return' ws+ alpha+ >save_fpc (alnum_u | '*' | ws | '@')+ %end_method_rettype end_statement meth_rettype_comment?;
+   meth_rettype = 'return' ws+ alpha+ >save_fpc return_char+ %end_method_rettype end_statement meth_rettype_comment?;
 
    meth_obj_const = 'const' %end_method_obj_const end_statement;
 
@@ -1366,6 +1386,8 @@ eo_tokenizer_database_fill(const char *filename)
                              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);
+                       database_function_return_dflt_val_set(foo_id,
+                             accessor->type == SETTER?SET:GET, accessor->ret->dflt_ret_val);
                     }
                   if (accessor->legacy)
                     {
@@ -1407,8 +1429,11 @@ eo_tokenizer_database_fill(const char *filename)
                {
                   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_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_return_dflt_val_set(foo_id,
+                        METHOD_FUNC, meth->ret->dflt_ret_val);
                }
              database_function_description_set(foo_id, EOLIAN_COMMENT, meth->comment);
              database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
index 3194d49..a77759d 100644 (file)
@@ -1,6 +1,10 @@
 #include <Eina.h>
 #include "eolian_database.h"
 
+#define PROP_GET_RETURN_DFLT_VAL "property_get_return_dflt_val"
+#define PROP_SET_RETURN_DFLT_VAL "property_set_return_dflt_val"
+#define METHOD_RETURN_DFLT_VAL "method_return_dflt_val"
+
 static Eina_Hash *_classes = NULL;
 static int _database_init_count = 0;
 
@@ -851,6 +855,33 @@ eolian_function_return_type_get(Eolian_Function foo_id, Eolian_Function_Type fty
    return ret;
 }
 
+void database_function_return_dflt_val_set(Eolian_Function foo_id, Eolian_Function_Type ftype, const char *ret_dflt_value)
+{
+   const char *key = NULL;
+   switch (ftype)
+     {
+      case SET: key = PROP_SET_RETURN_DFLT_VAL; break;
+      case GET: key = PROP_GET_RETURN_DFLT_VAL; break;
+      case METHOD_FUNC: key = METHOD_RETURN_DFLT_VAL; break;
+      default: return;
+     }
+   database_function_data_set(foo_id, key, ret_dflt_value);
+}
+
+EAPI const char *
+eolian_function_return_dflt_value_get(Eolian_Function foo_id, Eolian_Function_Type ftype)
+{
+   const char *key = NULL;
+   switch (ftype)
+     {
+      case SET: key = PROP_SET_RETURN_DFLT_VAL; break;
+      case GET: key = PROP_GET_RETURN_DFLT_VAL; break;
+      case UNRESOLVED: case METHOD_FUNC: key = METHOD_RETURN_DFLT_VAL; break;
+      default: return NULL;
+     }
+   return eolian_function_data_get(foo_id, key);
+}
+
 EAPI const char *
 eolian_function_return_comment_get(Eolian_Function foo_id, Eolian_Function_Type ftype)
 {
index da57bfc..8de18eb 100644 (file)
@@ -94,6 +94,8 @@ 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_dflt_val_set(Eolian_Function foo_id, Eolian_Function_Type ftype, const char *ret_dflt_value);
+
 void database_function_return_flag_set_as_warn_unused(Eolian_Function foo_id,
       Eolian_Function_Type ftype, Eina_Bool warn_unused);