#line 1 "lib/eolian/eo_lexer.rl" #include #include #include #include "Eolian.h" # #include "eo_lexer.h" #include "eolian_database.h" static int _eo_tokenizer_log_dom = -1; #ifdef CRITICAL #undef CRITICAL #endif #define CRITICAL(...) EINA_LOG_DOM_CRIT(_eo_tokenizer_log_dom, __VA_ARGS__) #ifdef ERR #undef ERR #endif #define ERR(...) EINA_LOG_DOM_ERR(_eo_tokenizer_log_dom, __VA_ARGS__) #ifdef WRN #undef WRN #endif #define WRN(...) EINA_LOG_DOM_WARN(_eo_tokenizer_log_dom, __VA_ARGS__) #ifdef INF #undef INF #endif #define INF(...) EINA_LOG_DOM_INFO(_eo_tokenizer_log_dom, __VA_ARGS__) #ifdef DBG #undef DBG #endif #define DBG(...) EINA_LOG_DOM_DBG(_eo_tokenizer_log_dom, __VA_ARGS__) static int _init_counter = 0; int eo_tokenizer_init() { if (!_init_counter) { eina_init(); eina_log_color_disable_set(EINA_FALSE); _eo_tokenizer_log_dom = eina_log_domain_register("eo_toknz", EINA_COLOR_CYAN); } return _init_counter++; } int eo_tokenizer_shutdown() { if (_init_counter <= 0) return 0; _init_counter--; if (!_init_counter) { eina_log_domain_unregister(_eo_tokenizer_log_dom); _eo_tokenizer_log_dom = -1; eina_shutdown(); } return _init_counter; } static void _eo_tokenizer_abort(Eo_Tokenizer *toknz, const char *file, const char* fct, int line, const char *fmt, ...) { va_list ap; va_start (ap, fmt); eina_log_vprint(_eo_tokenizer_log_dom, EINA_LOG_LEVEL_ERR, file, fct, line, fmt, ap); va_end(ap); fprintf(stderr, "File:%s\n toknz[%d] n:%d l:%d p:%d pe:%d ts:%s te:%s act:%d\n", toknz->source, toknz->cs, toknz->current_nesting, toknz->current_line, (int)(toknz->p - toknz->buf), (int)(toknz->pe - toknz->buf), toknz->ts, toknz->te, toknz->act); exit(EXIT_FAILURE); } #define ABORT(toknz, ...) \ _eo_tokenizer_abort(toknz, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__); static void _eo_tokenizer_normalize_buf(char *buf) { int c; char *s, *d; Eina_Bool in_space = EINA_TRUE; Eina_Bool in_newline = EINA_FALSE; /* ' '+ -> ' ' * '\n' ' '* '*' ' '* -> '\n' */ for (s = buf, d = buf; *s != '\0'; s++) { c = *s; *d = c; if (!in_space || (c != ' ')) d++; if (c == ' ') in_space = EINA_TRUE; else in_space = EINA_FALSE; if (c == '\n') { in_newline = EINA_TRUE; in_space = EINA_TRUE; } else if (in_newline && c == '*' ) { in_space = EINA_TRUE; in_newline = EINA_FALSE; d--; } } /* ' '+$ -> $ */ d--; while (*d == ' ') d--; d++; if (d < buf) return; *d = '\0'; } static const char* _eo_tokenizer_token_get(Eo_Tokenizer *toknz, char *p) { if (toknz->saved.tok == NULL) ABORT(toknz, "toknz->saved.tok is NULL"); char d[BUFSIZE]; int l = (p - toknz->saved.tok); memcpy(d, toknz->saved.tok, l); d[l] = '\0'; _eo_tokenizer_normalize_buf(d); toknz->saved.tok = NULL; DBG("token : >%s<", d); return eina_stringshare_add(d); } static Eo_Class_Def* _eo_tokenizer_class_get(Eo_Tokenizer *toknz, char *p) { Eo_Class_Def *kls = calloc(1, sizeof(Eo_Class_Def)); if (kls == NULL) ABORT(toknz, "calloc Eo_Class_Def failure"); kls->name = _eo_tokenizer_token_get(toknz, p); return kls; } static Eo_Property_Def* _eo_tokenizer_property_get(Eo_Tokenizer *toknz, char *p) { Eo_Property_Def *prop = calloc(1, sizeof(Eo_Property_Def)); if (prop == NULL) ABORT(toknz, "calloc Eo_Property_Def failure"); prop->name = _eo_tokenizer_token_get(toknz, p); return prop; } static Eo_Method_Def* _eo_tokenizer_method_get(Eo_Tokenizer *toknz, char *p) { Eo_Method_Def *meth = calloc(1, sizeof(Eo_Method_Def)); if (meth == NULL) ABORT(toknz, "calloc Eo_Method_Def failure"); meth->name = _eo_tokenizer_token_get(toknz, p); return meth; } static Eo_Param_Def* _eo_tokenizer_param_get(Eo_Tokenizer *toknz, char *p) { char *s; Eo_Param_Def *param = calloc(1, sizeof(Eo_Param_Def)); if (param == NULL) ABORT(toknz, "calloc Eo_Param_Def failure"); /* If @nonull is found, we set s as the end of the string and update the boolean. Otherwise we set the end as the character before the ';'. We need to modify temporarily p because we want strstr to stop at the ';' maximum. p represents the end of the string to search inside. */ *p = '\0'; s = strstr(toknz->saved.tok, "@nonull"); *p = ';'; if (s) { param->nonull = EINA_TRUE; p = s; } s = p - 1; /* Don't look at the current character (';' or '@') */ /* Remove any space between the param name and ';'/@nonull * This loop fixes the case where "char *name ;" becomes the type of the param. */ while (*s == ' ') s--; for (; s >= toknz->saved.tok; s--) { if ((*s == ' ') || (*s == '*')) break; } if (s == toknz->saved.tok) ABORT(toknz, "wrong parameter: %s", _eo_tokenizer_token_get(toknz, p)); s++; param->way = PARAM_IN; if (strncmp(toknz->saved.tok, "@in ", 3) == 0) { toknz->saved.tok += 3; param->way = PARAM_IN; } else if (strncmp(toknz->saved.tok, "@out ", 4) == 0) { toknz->saved.tok += 4; param->way = PARAM_OUT; } else if (strncmp(toknz->saved.tok, "@inout ", 6) == 0) { toknz->saved.tok += 6; param->way = PARAM_INOUT; } param->type = _eo_tokenizer_token_get(toknz, s); toknz->saved.tok = s; param->name = _eo_tokenizer_token_get(toknz, p); return param; } static Eo_Accessor_Param* _eo_tokenizer_accessor_param_get(Eo_Tokenizer *toknz, char *p) { Eo_Accessor_Param *param = calloc(1, sizeof(Eo_Accessor_Param)); if (param == NULL) ABORT(toknz, "calloc Eo_Accessor_Param failure"); /* Remove the colon and spaces - we just need the param name */ while (*p == ':') p--; while (*p == ' ') p--; param->name = _eo_tokenizer_token_get(toknz, p); return param; } static Eo_Accessor_Def * _eo_tokenizer_accessor_get(Eo_Tokenizer *toknz, Eo_Accessor_Type type) { Eo_Accessor_Def *accessor = calloc(1, sizeof(Eo_Accessor_Def)); if (accessor == NULL) ABORT(toknz, "calloc Eo_Accessor_Def failure"); accessor->type = type; return accessor; } static Eo_Event_Def* _eo_tokenizer_event_get(Eo_Tokenizer *toknz, char *p) { Eo_Event_Def *sgn = calloc(1, sizeof(Eo_Event_Def)); if (sgn == NULL) ABORT(toknz, "calloc Eo_Event_Def failure"); sgn->name = _eo_tokenizer_token_get(toknz, p); return sgn; } static Eo_Implement_Def* _eo_tokenizer_implement_get(Eo_Tokenizer *toknz, char *p) { Eo_Implement_Def *impl = calloc(1, sizeof(Eo_Implement_Def)); if (impl == NULL) ABORT(toknz, "calloc Eo_Implement_Def failure"); impl->meth_name = _eo_tokenizer_token_get(toknz, p); return impl; } #line 358 "lib/eolian/eo_lexer.rl" #line 292 "lib/eolian/eo_lexer.c" static const char _eo_tokenizer_actions[] = { 0, 1, 0, 1, 2, 1, 3, 1, 7, 1, 11, 1, 12, 1, 17, 1, 18, 1, 19, 1, 20, 1, 21, 1, 22, 1, 23, 1, 24, 1, 25, 1, 26, 1, 27, 1, 28, 1, 29, 1, 30, 1, 31, 1, 32, 1, 33, 1, 34, 1, 35, 1, 36, 1, 37, 1, 38, 1, 39, 1, 40, 1, 41, 1, 42, 1, 45, 1, 46, 1, 47, 1, 48, 1, 49, 1, 50, 1, 51, 1, 52, 1, 53, 1, 54, 1, 55, 1, 56, 1, 57, 1, 58, 1, 59, 1, 60, 1, 61, 1, 62, 1, 63, 1, 64, 1, 65, 1, 66, 1, 67, 1, 68, 1, 69, 1, 70, 1, 71, 1, 72, 1, 73, 1, 74, 1, 75, 1, 76, 1, 77, 1, 78, 1, 79, 1, 80, 1, 81, 1, 82, 1, 83, 1, 86, 1, 87, 1, 88, 1, 89, 1, 90, 1, 91, 1, 92, 1, 93, 1, 94, 1, 95, 1, 96, 1, 97, 1, 98, 1, 99, 1, 100, 1, 101, 1, 102, 1, 103, 1, 104, 1, 105, 1, 106, 1, 107, 1, 108, 1, 109, 1, 110, 1, 111, 1, 112, 1, 113, 1, 114, 1, 115, 1, 116, 1, 117, 1, 118, 1, 119, 1, 120, 1, 121, 1, 122, 1, 123, 1, 124, 1, 125, 1, 126, 2, 0, 42, 2, 0, 53, 2, 0, 62, 2, 0, 73, 2, 0, 82, 2, 0, 94, 2, 0, 103, 2, 0, 121, 2, 4, 48, 2, 6, 43, 2, 7, 2, 2, 8, 44, 2, 9, 57, 2, 11, 0, 2, 11, 74, 2, 13, 89, 2, 15, 84, 2, 16, 85, 2, 17, 0, 2, 17, 95, 2, 18, 0, 2, 19, 0, 2, 19, 122, 2, 20, 0, 2, 21, 0, 2, 21, 2, 2, 25, 0, 2, 26, 0, 2, 26, 2, 2, 27, 0, 2, 29, 0, 2, 30, 0, 2, 30, 2, 2, 37, 0, 2, 37, 122, 2, 40, 1, 2, 40, 2, 2, 40, 3, 2, 40, 5, 2, 40, 10, 2, 40, 12, 2, 40, 14 }; static const short _eo_tokenizer_key_offsets[] = { 0, 2, 5, 6, 7, 8, 9, 10, 11, 12, 15, 22, 29, 44, 48, 56, 61, 65, 72, 84, 89, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 109, 112, 113, 114, 115, 118, 121, 123, 126, 137, 139, 142, 143, 154, 158, 165, 172, 184, 196, 208, 220, 232, 243, 251, 258, 266, 278, 290, 302, 314, 325, 333, 344, 357, 361, 362, 363, 373, 375, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 392, 395, 396, 408, 412, 413, 414, 424, 426, 429, 431, 434, 435, 436, 440, 441, 442, 446, 447, 451, 452, 453, 454, 455, 459, 461, 464, 465, 476, 480, 483, 485, 488, 499, 501, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 516, 523, 530, 538, 539, 540, 541, 542, 546, 547, 548, 549, 550, 553, 560, 571, 584, 588, 589, 590, 600, 602, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 619, 622, 623, 634, 638, 641, 643, 646, 657, 659, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 677, 678, 679, 683, 690, 697, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 718, 719, 720, 721, 722, 723, 724, 725, 729, 736, 743, 751, 752, 753, 754, 755, 759, 767, 775, 787, 791, 803, 804, 805, 815, 817, 820, 828, 829, 830, 831, 832, 833, 834, 835, 836, 840, 848, 856, 869, 874, 878, 879, 880, 881, 882, 883, 895, 900, 904, 913, 917, 918, 919, 920, 921, 922, 926, 935, 942, 949, 960, 964, 978, 988, 995, 1007, 1012, 1018, 1023, 1024, 1025, 1026, 1027, 1028, 1031, 1038, 1045, 1053, 1054, 1058, 1065, 1073, 1077, 1082, 1083, 1084, 1094, 1096, 1099, 1109, 1121, 1128, 1140, 1141, 1142, 1143, 1144, 1145, 1146, 1147, 1148, 1149, 1150, 1151, 1152, 1156, 1163, 1170, 1178, 1179, 1180, 1181, 1182, 1183, 1187, 1188, 1189, 1190, 1191, 1192, 1193, 1194, 1195, 1199, 1207, 1210, 1212, 1213, 1214, 1215, 1216, 1227, 1230, 1232, 1239, 1247, 1255, 1259, 1259, 1260, 1269, 1272, 1274, 1285, 1289, 1289, 1290, 1299, 1302, 1304, 1305, 1306, 1307, 1308, 1309, 1318, 1321, 1323, 1330, 1331, 1340, 1343, 1345, 1346, 1347, 1348, 1349, 1353, 1353, 1354, 1363, 1366, 1368, 1375, 1376, 1388, 1391, 1393, 1394, 1396, 1399, 1401, 1404, 1405, 1406, 1407, 1408, 1411, 1412, 1413 }; static const char _eo_tokenizer_trans_keys[] = { 10, 42, 10, 42, 47, 10, 115, 116, 114, 97, 99, 116, 9, 13, 32, 9, 13, 32, 65, 90, 97, 122, 95, 48, 57, 65, 90, 97, 122, 9, 10, 13, 32, 40, 95, 123, 0, 31, 48, 57, 65, 90, 97, 122, 10, 123, 0, 32, 9, 10, 13, 32, 40, 123, 0, 31, 41, 65, 90, 97, 122, 10, 123, 0, 32, 95, 48, 57, 65, 90, 97, 122, 10, 41, 44, 95, 0, 32, 48, 57, 65, 90, 97, 122, 10, 41, 44, 0, 32, 10, 0, 32, 65, 90, 97, 122, 97, 115, 115, 9, 13, 32, 116, 101, 114, 102, 97, 99, 101, 9, 13, 32, 120, 105, 110, 9, 13, 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, 9, 13, 32, 58, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 9, 13, 32, 65, 90, 97, 122, 9, 13, 32, 65, 90, 97, 122, 9, 13, 32, 44, 59, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 103, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 97, 48, 57, 65, 90, 98, 122, 9, 13, 32, 58, 95, 99, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 121, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 65, 90, 97, 122, 95, 48, 57, 65, 90, 97, 122, 59, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 116, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 117, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 114, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 110, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 58, 65, 90, 97, 122, 9, 13, 32, 42, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 42, 59, 64, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 47, 42, 64, 10, 95, 0, 32, 48, 57, 64, 90, 97, 122, 10, 42, 10, 42, 47, 119, 97, 114, 110, 95, 117, 110, 117, 115, 101, 100, 59, 10, 42, 10, 42, 47, 10, 9, 13, 32, 42, 59, 95, 48, 57, 64, 90, 97, 122, 9, 13, 32, 47, 42, 64, 10, 95, 0, 32, 48, 57, 64, 90, 97, 122, 10, 42, 10, 42, 47, 10, 42, 10, 42, 47, 10, 116, 10, 123, 0, 32, 121, 115, 10, 123, 0, 32, 116, 10, 123, 0, 32, 108, 117, 101, 115, 10, 123, 0, 32, 10, 42, 10, 42, 47, 10, 10, 95, 123, 0, 32, 48, 57, 65, 90, 97, 122, 10, 123, 0, 32, 10, 42, 64, 10, 42, 10, 42, 47, 10, 42, 95, 0, 32, 48, 57, 64, 90, 97, 122, 10, 42, 10, 42, 47, 10, 110, 115, 116, 59, 103, 97, 99, 121, 9, 13, 32, 9, 13, 32, 65, 90, 97, 122, 95, 48, 57, 65, 90, 97, 122, 59, 95, 48, 57, 65, 90, 97, 122, 114, 97, 109, 115, 10, 123, 0, 32, 116, 117, 114, 110, 9, 13, 32, 9, 13, 32, 65, 90, 97, 122, 9, 13, 32, 42, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 42, 59, 64, 95, 48, 57, 65, 90, 97, 122, 9, 13, 32, 47, 42, 64, 10, 95, 0, 32, 48, 57, 64, 90, 97, 122, 10, 42, 10, 42, 47, 119, 97, 114, 110, 95, 117, 110, 117, 115, 101, 100, 59, 10, 42, 10, 42, 47, 10, 10, 95, 123, 0, 32, 48, 57, 65, 90, 97, 122, 10, 123, 0, 32, 10, 42, 64, 10, 42, 10, 42, 47, 10, 42, 95, 0, 32, 48, 57, 64, 90, 97, 122, 10, 42, 10, 42, 47, 10, 110, 115, 116, 114, 117, 99, 116, 111, 114, 115, 10, 123, 0, 32, 116, 97, 10, 58, 0, 32, 10, 0, 32, 65, 90, 97, 122, 95, 48, 57, 65, 90, 97, 122, 59, 95, 48, 57, 65, 90, 97, 122, 115, 116, 114, 117, 99, 116, 111, 114, 115, 10, 123, 0, 32, 95, 112, 114, 101, 102, 105, 120, 10, 58, 0, 32, 10, 0, 32, 65, 90, 97, 122, 95, 48, 57, 65, 90, 97, 122, 59, 95, 48, 57, 65, 90, 97, 122, 101, 110, 116, 115, 10, 123, 0, 32, 10, 125, 0, 32, 65, 90, 97, 122, 44, 95, 48, 57, 65, 90, 97, 122, 10, 44, 59, 95, 0, 32, 48, 57, 65, 90, 97, 122, 10, 59, 0, 32, 9, 10, 13, 32, 47, 125, 0, 31, 65, 90, 97, 122, 42, 64, 10, 95, 0, 32, 48, 57, 64, 90, 97, 122, 10, 42, 10, 42, 47, 10, 125, 0, 32, 65, 90, 97, 122, 112, 108, 101, 109, 101, 110, 116, 115, 10, 123, 0, 32, 10, 125, 0, 32, 65, 90, 97, 122, 58, 95, 48, 57, 65, 90, 97, 122, 10, 58, 59, 95, 123, 0, 32, 48, 57, 65, 90, 97, 122, 10, 59, 123, 0, 32, 10, 108, 0, 32, 101, 103, 97, 99, 121, 9, 10, 13, 32, 59, 123, 0, 31, 65, 90, 97, 122, 10, 59, 123, 0, 32, 10, 125, 0, 32, 10, 59, 125, 0, 32, 65, 90, 97, 122, 10, 112, 0, 32, 97, 114, 97, 109, 115, 10, 123, 0, 32, 10, 58, 59, 0, 32, 65, 90, 97, 122, 9, 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, 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[] = { 2, 3, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 7, 2, 6, 1, 2, 1, 4, 3, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 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, 7, 4, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 6, 4, 1, 1, 2, 2, 3, 2, 3, 1, 1, 2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 3, 1, 3, 2, 3, 2, 3, 3, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 3, 3, 5, 7, 4, 1, 1, 2, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 3, 2, 3, 2, 3, 3, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 4, 2, 6, 1, 1, 2, 2, 3, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 5, 3, 2, 1, 1, 1, 1, 1, 6, 3, 2, 3, 2, 1, 1, 1, 1, 1, 2, 3, 3, 1, 3, 2, 8, 4, 1, 6, 5, 4, 3, 1, 1, 1, 1, 1, 3, 3, 1, 2, 1, 0, 1, 2, 2, 3, 1, 1, 2, 2, 3, 4, 6, 1, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 6, 1, 2, 1, 1, 1, 1, 5, 1, 2, 1, 2, 2, 4, 0, 1, 3, 1, 2, 5, 4, 0, 1, 7, 1, 2, 1, 1, 1, 1, 1, 3, 1, 2, 1, 1, 7, 1, 2, 1, 1, 1, 1, 4, 0, 1, 3, 1, 2, 1, 1, 10, 1, 2, 1, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; static const char _eo_tokenizer_range_lengths[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 4, 1, 1, 2, 1, 3, 4, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 4, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 3, 3, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 0, 0, 0, 0, 1, 3, 3, 4, 1, 3, 0, 0, 4, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 4, 1, 1, 0, 0, 0, 0, 0, 3, 1, 1, 3, 1, 0, 0, 0, 0, 0, 1, 3, 2, 3, 4, 1, 3, 3, 3, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 2, 3, 3, 0, 2, 3, 3, 1, 1, 0, 0, 4, 0, 0, 3, 3, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 3, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 3, 1, 0, 3, 3, 3, 0, 0, 0, 3, 1, 0, 3, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 3, 1, 0, 3, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 3, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 }; static const short _eo_tokenizer_index_offsets[] = { 0, 3, 7, 9, 11, 13, 15, 17, 19, 21, 25, 31, 36, 48, 52, 60, 64, 68, 73, 82, 87, 92, 94, 96, 98, 102, 104, 106, 108, 110, 112, 114, 116, 120, 122, 124, 126, 130, 134, 137, 141, 149, 152, 156, 158, 167, 172, 178, 184, 194, 204, 214, 224, 234, 243, 250, 255, 261, 271, 281, 291, 301, 310, 317, 326, 337, 342, 344, 346, 353, 356, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 380, 382, 384, 387, 391, 393, 403, 408, 410, 412, 419, 422, 426, 429, 433, 435, 437, 441, 443, 445, 449, 451, 455, 457, 459, 461, 463, 467, 470, 474, 476, 484, 488, 492, 495, 499, 507, 510, 514, 516, 518, 520, 522, 524, 526, 528, 530, 532, 536, 542, 547, 553, 555, 557, 559, 561, 565, 567, 569, 571, 573, 577, 583, 592, 603, 608, 610, 612, 619, 622, 626, 628, 630, 632, 634, 636, 638, 640, 642, 644, 646, 648, 650, 653, 657, 659, 667, 671, 675, 678, 682, 690, 693, 697, 699, 701, 703, 705, 707, 709, 711, 713, 715, 717, 719, 723, 725, 727, 731, 736, 741, 747, 749, 751, 753, 755, 757, 759, 761, 763, 765, 769, 771, 773, 775, 777, 779, 781, 783, 787, 792, 797, 803, 805, 807, 809, 811, 815, 821, 827, 836, 840, 850, 852, 854, 861, 864, 868, 874, 876, 878, 880, 882, 884, 886, 888, 890, 894, 900, 906, 916, 921, 925, 927, 929, 931, 933, 935, 945, 950, 954, 961, 965, 967, 969, 971, 973, 975, 979, 986, 992, 997, 1005, 1009, 1021, 1029, 1034, 1044, 1050, 1056, 1061, 1063, 1065, 1067, 1069, 1071, 1075, 1081, 1086, 1092, 1094, 1097, 1102, 1108, 1112, 1117, 1119, 1121, 1128, 1131, 1135, 1143, 1153, 1158, 1167, 1169, 1171, 1173, 1175, 1177, 1179, 1181, 1183, 1185, 1187, 1189, 1191, 1195, 1200, 1205, 1211, 1213, 1215, 1217, 1219, 1221, 1225, 1227, 1229, 1231, 1233, 1235, 1237, 1239, 1241, 1245, 1253, 1256, 1259, 1261, 1263, 1265, 1267, 1276, 1279, 1282, 1287, 1293, 1299, 1304, 1305, 1307, 1314, 1317, 1320, 1329, 1334, 1335, 1337, 1346, 1349, 1352, 1354, 1356, 1358, 1360, 1362, 1369, 1372, 1375, 1380, 1382, 1391, 1394, 1397, 1399, 1401, 1403, 1405, 1410, 1411, 1413, 1420, 1423, 1426, 1431, 1433, 1445, 1448, 1451, 1453, 1456, 1459, 1462, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 1480 }; static const short _eo_tokenizer_indicies[] = { 2, 3, 1, 2, 3, 4, 1, 6, 5, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12, 0, 13, 13, 13, 0, 14, 14, 14, 15, 15, 0, 16, 16, 16, 16, 0, 18, 19, 18, 18, 20, 16, 21, 17, 16, 16, 16, 0, 23, 24, 22, 0, 25, 23, 25, 25, 26, 24, 22, 0, 27, 28, 28, 0, 30, 31, 29, 0, 32, 32, 32, 32, 0, 34, 35, 36, 32, 33, 32, 32, 32, 0, 38, 27, 39, 37, 0, 40, 39, 28, 28, 0, 41, 0, 42, 0, 43, 0, 44, 44, 44, 0, 45, 0, 46, 0, 47, 0, 48, 0, 49, 0, 50, 0, 51, 0, 52, 52, 52, 0, 53, 0, 54, 0, 55, 0, 56, 56, 56, 0, 59, 60, 61, 58, 59, 60, 58, 59, 60, 62, 58, 63, 60, 64, 61, 64, 64, 64, 58, 66, 67, 65, 66, 67, 68, 65, 70, 69, 71, 71, 71, 73, 72, 72, 72, 72, 57, 71, 71, 71, 73, 57, 74, 74, 74, 75, 75, 57, 76, 76, 76, 77, 77, 57, 78, 78, 78, 78, 79, 78, 78, 78, 78, 57, 71, 71, 71, 73, 72, 80, 72, 72, 72, 57, 71, 71, 71, 73, 72, 81, 72, 72, 72, 57, 71, 71, 71, 73, 72, 82, 72, 72, 72, 57, 71, 71, 71, 73, 72, 83, 72, 72, 72, 57, 84, 84, 84, 73, 72, 72, 72, 72, 57, 84, 84, 84, 73, 85, 85, 57, 86, 86, 86, 86, 57, 87, 86, 86, 86, 86, 57, 71, 71, 71, 73, 72, 88, 72, 72, 72, 57, 71, 71, 71, 73, 72, 89, 72, 72, 72, 57, 71, 71, 71, 73, 72, 90, 72, 72, 72, 57, 71, 71, 71, 73, 72, 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, 96, 94, 94, 94, 94, 57, 98, 98, 98, 99, 97, 100, 97, 101, 97, 102, 103, 101, 103, 103, 103, 97, 105, 106, 104, 105, 106, 107, 104, 108, 57, 109, 57, 110, 57, 111, 57, 112, 57, 113, 57, 114, 57, 115, 57, 116, 57, 117, 57, 118, 57, 119, 57, 122, 123, 121, 122, 123, 124, 121, 126, 125, 127, 127, 127, 127, 128, 127, 127, 127, 127, 120, 130, 130, 130, 131, 129, 132, 129, 133, 129, 134, 135, 133, 135, 135, 135, 129, 137, 138, 136, 137, 138, 139, 136, 142, 143, 141, 142, 143, 144, 141, 146, 145, 147, 140, 148, 149, 147, 140, 150, 140, 151, 140, 152, 153, 151, 140, 154, 140, 155, 156, 154, 140, 157, 140, 158, 140, 159, 140, 160, 140, 161, 162, 160, 140, 165, 166, 164, 165, 166, 167, 164, 169, 168, 171, 172, 173, 170, 172, 172, 172, 163, 175, 176, 174, 163, 179, 180, 181, 178, 179, 180, 178, 179, 180, 182, 178, 183, 180, 184, 181, 184, 184, 184, 178, 186, 187, 185, 186, 187, 188, 185, 190, 189, 191, 177, 192, 177, 193, 177, 194, 177, 195, 177, 196, 177, 197, 177, 198, 177, 199, 199, 199, 177, 199, 199, 199, 200, 200, 177, 201, 201, 201, 201, 177, 202, 201, 201, 201, 201, 177, 203, 177, 204, 177, 205, 177, 206, 177, 207, 208, 206, 177, 209, 177, 210, 177, 211, 177, 212, 177, 213, 213, 213, 177, 213, 213, 213, 214, 214, 177, 215, 215, 215, 215, 215, 215, 215, 215, 177, 215, 215, 215, 215, 216, 217, 215, 215, 215, 215, 177, 219, 219, 219, 220, 218, 221, 218, 222, 218, 223, 224, 222, 224, 224, 224, 218, 226, 227, 225, 226, 227, 228, 225, 229, 177, 230, 177, 231, 177, 232, 177, 233, 177, 234, 177, 235, 177, 236, 177, 237, 177, 238, 177, 239, 177, 240, 177, 243, 244, 242, 243, 244, 245, 242, 247, 246, 249, 250, 251, 248, 250, 250, 250, 241, 253, 254, 252, 241, 257, 258, 259, 256, 257, 258, 256, 257, 258, 260, 256, 261, 258, 262, 259, 262, 262, 262, 256, 264, 265, 263, 264, 265, 266, 263, 268, 267, 269, 255, 270, 255, 271, 255, 272, 255, 273, 255, 274, 255, 275, 255, 276, 255, 277, 255, 278, 255, 279, 280, 278, 255, 281, 255, 282, 255, 283, 284, 282, 255, 285, 284, 286, 286, 255, 287, 287, 287, 287, 255, 288, 287, 287, 287, 287, 255, 289, 255, 290, 255, 291, 255, 292, 255, 293, 255, 294, 255, 295, 255, 296, 255, 297, 255, 298, 299, 297, 255, 300, 255, 301, 255, 302, 255, 303, 255, 304, 255, 305, 255, 306, 255, 307, 308, 306, 255, 309, 308, 310, 310, 255, 311, 311, 311, 311, 255, 312, 311, 311, 311, 311, 255, 313, 255, 314, 255, 315, 255, 316, 255, 317, 318, 316, 255, 319, 321, 318, 320, 320, 255, 322, 322, 322, 322, 322, 255, 324, 322, 325, 322, 323, 322, 322, 322, 255, 327, 328, 326, 255, 328, 319, 328, 328, 329, 321, 318, 320, 320, 255, 330, 255, 331, 255, 332, 333, 331, 333, 333, 333, 255, 335, 336, 334, 335, 336, 337, 334, 339, 341, 338, 340, 340, 255, 342, 255, 343, 255, 344, 255, 345, 255, 346, 255, 347, 255, 348, 255, 349, 255, 350, 351, 349, 255, 352, 354, 351, 353, 353, 255, 356, 355, 355, 355, 355, 255, 358, 356, 359, 355, 360, 357, 355, 355, 355, 255, 362, 351, 363, 361, 255, 364, 365, 363, 255, 366, 255, 367, 255, 368, 255, 369, 255, 370, 255, 372, 373, 372, 372, 374, 376, 371, 375, 375, 255, 378, 379, 380, 377, 255, 381, 382, 379, 255, 352, 351, 354, 351, 353, 353, 255, 383, 384, 380, 255, 385, 255, 386, 255, 387, 255, 388, 255, 389, 255, 390, 391, 389, 255, 392, 393, 394, 391, 395, 395, 255, 393, 393, 393, 396, 396, 255, 397, 397, 397, 397, 255, 399, 400, 397, 398, 397, 397, 397, 255, 402, 394, 401, 255, 394, 404, 394, 394, 405, 393, 394, 406, 403, 395, 395, 255, 404, 393, 394, 406, 403, 395, 395, 255, 407, 407, 407, 407, 255, 408, 408, 408, 409, 410, 407, 407, 407, 407, 255, 411, 411, 411, 393, 394, 255, 413, 412, 414, 415, 412, 255, 413, 414, 415, 412, 255, 416, 255, 417, 255, 418, 255, 419, 255, 420, 255, 421, 421, 421, 255, 421, 421, 421, 422, 422, 255, 423, 423, 423, 423, 255, 424, 423, 423, 423, 423, 255, 425, 255, 426, 426, 255, 427, 427, 427, 427, 255, 428, 427, 427, 427, 427, 255, 430, 415, 429, 255, 381, 379, 382, 379, 255, 431, 255, 432, 255, 433, 434, 432, 434, 434, 434, 255, 436, 437, 435, 436, 437, 438, 435, 440, 441, 442, 444, 439, 443, 443, 255, 445, 378, 445, 445, 379, 380, 377, 446, 446, 255, 447, 447, 447, 447, 255, 449, 450, 447, 451, 448, 447, 447, 447, 255, 355, 255, 452, 255, 453, 255, 454, 255, 455, 255, 456, 255, 457, 255, 458, 255, 459, 255, 460, 255, 461, 255, 462, 255, 463, 464, 462, 255, 465, 464, 466, 466, 255, 467, 467, 467, 467, 255, 468, 467, 467, 467, 467, 255, 469, 255, 470, 255, 471, 255, 472, 255, 473, 255, 474, 475, 473, 255, 476, 255, 477, 255, 478, 255, 479, 255, 480, 255, 481, 255, 482, 255, 483, 255, 484, 485, 483, 255, 488, 489, 490, 491, 492, 493, 487, 486, 488, 487, 494, 1, 5, 495, 496, 495, 497, 495, 498, 495, 499, 495, 502, 503, 505, 506, 507, 501, 504, 504, 500, 502, 501, 508, 510, 69, 509, 72, 72, 72, 72, 509, 72, 511, 72, 72, 72, 509, 72, 512, 72, 72, 72, 509, 98, 98, 98, 99, 513, 514, 516, 515, 519, 520, 522, 518, 521, 521, 517, 519, 518, 523, 121, 125, 524, 127, 127, 127, 127, 127, 127, 127, 127, 524, 130, 130, 130, 131, 525, 526, 528, 527, 531, 532, 533, 534, 535, 536, 537, 530, 529, 531, 530, 538, 141, 145, 539, 540, 539, 541, 539, 542, 539, 543, 539, 545, 544, 548, 549, 551, 547, 550, 550, 546, 548, 547, 552, 164, 168, 553, 172, 172, 172, 172, 553, 555, 554, 558, 559, 560, 561, 562, 563, 564, 557, 556, 558, 557, 565, 567, 189, 566, 568, 566, 569, 566, 570, 566, 571, 566, 219, 219, 219, 220, 572, 573, 575, 574, 578, 579, 581, 577, 580, 580, 576, 578, 577, 582, 242, 246, 583, 250, 250, 250, 250, 583, 585, 584, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 587, 586, 588, 587, 598, 600, 267, 599, 601, 599, 602, 603, 599, 606, 605, 604, 607, 608, 599, 611, 610, 609, 613, 612, 614, 599, 616, 615, 617, 599, 620, 619, 618, 621, 599, 622, 599, 624, 623, 0 }; static const short _eo_tokenizer_trans_targs[] = { 326, 0, 0, 1, 326, 2, 326, 4, 5, 6, 7, 8, 9, 10, 10, 11, 12, 13, 14, 13, 15, 326, 13, 13, 326, 14, 15, 16, 17, 13, 13, 326, 18, 19, 19, 16, 20, 19, 19, 20, 20, 22, 23, 24, 10, 26, 27, 28, 29, 30, 31, 32, 10, 34, 35, 36, 10, 333, 38, 38, 39, 40, 333, 40, 41, 41, 41, 42, 333, 43, 333, 45, 44, 46, 47, 48, 47, 48, 48, 333, 50, 51, 52, 53, 54, 55, 56, 333, 58, 59, 60, 61, 62, 63, 64, 339, 71, 333, 65, 66, 67, 68, 68, 69, 69, 69, 70, 340, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 339, 342, 83, 83, 84, 342, 85, 342, 86, 346, 342, 87, 88, 89, 90, 90, 91, 91, 91, 92, 347, 349, 93, 93, 94, 349, 95, 349, 97, 97, 349, 99, 100, 100, 349, 102, 102, 349, 104, 105, 106, 107, 107, 349, 357, 108, 108, 109, 357, 110, 357, 112, 112, 111, 357, 112, 112, 357, 362, 114, 114, 115, 116, 362, 116, 117, 117, 117, 118, 362, 119, 362, 121, 122, 123, 362, 125, 126, 127, 128, 129, 130, 131, 362, 133, 134, 135, 136, 136, 362, 138, 139, 140, 141, 142, 143, 144, 369, 151, 362, 145, 146, 147, 148, 148, 149, 149, 149, 150, 370, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 369, 372, 163, 163, 164, 372, 165, 372, 167, 167, 166, 372, 167, 167, 372, 377, 169, 169, 170, 171, 377, 171, 172, 172, 172, 173, 377, 174, 377, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 185, 377, 187, 188, 188, 189, 189, 190, 191, 382, 193, 194, 195, 196, 197, 198, 199, 200, 201, 201, 377, 203, 204, 205, 206, 207, 208, 209, 209, 210, 210, 211, 212, 384, 214, 215, 216, 217, 217, 218, 218, 219, 385, 220, 221, 221, 222, 221, 221, 222, 223, 224, 225, 225, 226, 226, 226, 227, 228, 218, 218, 219, 385, 230, 231, 232, 233, 234, 235, 236, 237, 237, 238, 238, 239, 387, 240, 295, 241, 241, 238, 242, 241, 241, 242, 242, 243, 244, 245, 246, 247, 248, 249, 292, 249, 250, 293, 252, 249, 249, 250, 252, 250, 251, 252, 253, 254, 255, 256, 257, 258, 258, 259, 259, 260, 264, 266, 261, 262, 263, 263, 264, 263, 263, 265, 265, 286, 269, 267, 268, 260, 264, 268, 270, 270, 271, 285, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 284, 284, 287, 288, 288, 289, 289, 289, 290, 291, 265, 265, 260, 264, 266, 269, 292, 293, 294, 249, 249, 250, 252, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 307, 308, 308, 309, 310, 389, 312, 313, 314, 315, 316, 316, 377, 318, 319, 320, 321, 322, 323, 324, 325, 325, 377, 326, 327, 327, 328, 329, 330, 331, 332, 326, 326, 3, 21, 25, 33, 333, 334, 334, 335, 336, 337, 338, 341, 333, 333, 37, 49, 57, 333, 333, 333, 333, 342, 343, 343, 344, 345, 348, 342, 342, 342, 342, 342, 342, 349, 350, 350, 351, 352, 353, 354, 355, 356, 349, 349, 96, 98, 101, 103, 349, 349, 357, 358, 358, 359, 360, 361, 357, 357, 357, 357, 362, 363, 363, 364, 365, 366, 367, 368, 371, 362, 362, 113, 120, 124, 132, 137, 362, 362, 362, 362, 372, 373, 373, 374, 375, 376, 372, 372, 372, 372, 377, 378, 378, 379, 380, 381, 383, 386, 388, 390, 391, 392, 377, 377, 168, 175, 186, 192, 377, 382, 382, 202, 213, 377, 384, 384, 377, 377, 229, 377, 377, 296, 377, 389, 389, 311, 317, 377, 377 }; static const short _eo_tokenizer_trans_actions[] = { 223, 0, 1, 0, 213, 0, 246, 0, 0, 0, 0, 0, 0, 47, 0, 3, 0, 53, 53, 324, 53, 327, 0, 1, 215, 0, 0, 0, 3, 17, 288, 291, 0, 15, 285, 15, 15, 0, 1, 0, 1, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 51, 0, 0, 0, 49, 79, 0, 1, 0, 0, 63, 1, 3, 0, 1, 0, 61, 0, 225, 0, 0, 0, 7, 255, 0, 3, 0, 258, 0, 0, 0, 0, 0, 3, 0, 252, 0, 0, 0, 0, 0, 3, 0, 336, 5, 77, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, 97, 0, 1, 0, 81, 0, 228, 0, 342, 95, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 119, 0, 1, 0, 99, 0, 231, 0, 1, 101, 0, 0, 1, 105, 0, 1, 103, 0, 0, 0, 0, 1, 107, 135, 0, 1, 0, 121, 0, 234, 9, 264, 0, 267, 0, 1, 123, 157, 0, 1, 0, 0, 139, 1, 3, 0, 1, 0, 137, 0, 237, 0, 0, 0, 276, 0, 0, 0, 0, 0, 3, 0, 273, 0, 0, 0, 0, 1, 141, 0, 0, 0, 0, 0, 3, 0, 345, 11, 155, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 173, 0, 1, 0, 159, 0, 240, 13, 279, 0, 282, 0, 1, 161, 211, 0, 1, 0, 0, 177, 1, 3, 0, 1, 0, 175, 0, 243, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 183, 0, 0, 1, 0, 1, 3, 0, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 185, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 3, 0, 25, 0, 0, 0, 0, 1, 0, 1, 3, 0, 0, 19, 294, 19, 0, 1, 0, 0, 0, 0, 1, 3, 0, 1, 0, 0, 21, 297, 300, 21, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 3, 0, 0, 0, 29, 303, 29, 29, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 31, 31, 306, 31, 309, 31, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 3, 3, 0, 37, 315, 37, 0, 1, 0, 1, 0, 0, 0, 35, 35, 35, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 41, 0, 3, 0, 43, 0, 1, 0, 0, 1, 3, 0, 1, 0, 0, 39, 318, 39, 39, 321, 39, 0, 3, 0, 33, 312, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 3, 0, 23, 0, 0, 0, 0, 0, 1, 189, 0, 0, 0, 0, 0, 0, 0, 0, 1, 187, 217, 0, 1, 330, 59, 59, 59, 59, 219, 221, 0, 0, 0, 0, 67, 0, 1, 330, 333, 333, 333, 0, 69, 75, 0, 0, 0, 71, 249, 73, 65, 85, 0, 1, 330, 333, 0, 87, 93, 89, 261, 91, 83, 111, 0, 1, 330, 59, 59, 59, 59, 0, 113, 117, 0, 0, 0, 0, 115, 109, 127, 0, 1, 330, 333, 0, 129, 133, 131, 125, 145, 0, 1, 330, 59, 59, 59, 59, 0, 147, 153, 0, 0, 0, 0, 0, 149, 270, 151, 143, 165, 0, 1, 330, 333, 0, 167, 171, 169, 163, 193, 0, 1, 330, 59, 59, 59, 59, 59, 59, 59, 0, 195, 209, 0, 0, 0, 0, 201, 0, 1, 0, 0, 199, 0, 1, 205, 181, 0, 203, 179, 0, 197, 0, 1, 0, 0, 207, 191 }; static const short _eo_tokenizer_to_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _eo_tokenizer_from_state_actions[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 0, 0, 0, 0, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; static const short _eo_tokenizer_eof_trans[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 98, 98, 98, 98, 98, 98, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 121, 121, 121, 121, 130, 130, 130, 130, 130, 130, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 164, 164, 164, 164, 164, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 219, 219, 219, 219, 219, 219, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 178, 242, 242, 242, 242, 242, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 0, 495, 496, 496, 496, 496, 496, 0, 509, 510, 510, 510, 510, 514, 515, 516, 0, 524, 525, 525, 526, 527, 528, 0, 539, 540, 540, 540, 540, 540, 545, 0, 553, 554, 554, 555, 0, 566, 567, 567, 567, 567, 567, 573, 574, 575, 0, 583, 584, 584, 585, 0, 599, 600, 600, 600, 605, 600, 610, 613, 600, 616, 600, 619, 600, 600, 624 }; static const int eo_tokenizer_start = 326; static const int eo_tokenizer_first_final = 326; static const int eo_tokenizer_error = -1; static const int eo_tokenizer_en_tokenize_accessor = 333; static const int eo_tokenizer_en_tokenize_params = 342; static const int eo_tokenizer_en_tokenize_property = 349; static const int eo_tokenizer_en_tokenize_properties = 357; static const int eo_tokenizer_en_tokenize_method = 362; static const int eo_tokenizer_en_tokenize_methods = 372; static const int eo_tokenizer_en_tokenize_class = 377; static const int eo_tokenizer_en_main = 326; #line 966 "lib/eolian/eo_lexer.rl" Eina_Bool eo_tokenizer_walk(Eo_Tokenizer *toknz, const char *source) { INF("tokenize %s...", source); toknz->source = eina_stringshare_add(source); FILE *stream; Eina_Bool ret = EINA_TRUE; int done = 0; int have = 0; int offset = 0; stream = fopen(toknz->source, "rb"); if (!stream) { ERR("unable to read in %s", toknz->source); return EINA_FALSE; } #line 1282 "lib/eolian/eo_lexer.c" { toknz->cs = eo_tokenizer_start; toknz->ts = 0; toknz->te = 0; toknz->act = 0; } #line 989 "lib/eolian/eo_lexer.rl" while (!done) { int len; int space; toknz->p = toknz->buf + have; space = BUFSIZE - have; if (space == 0) { fclose(stream); ABORT(toknz, "out of buffer space"); } len = fread(toknz->p, 1, space, stream); if (len == 0) break; toknz->pe = toknz->p + len; if (len < space) { toknz->eof = toknz->pe; done = 1; } #line 1317 "lib/eolian/eo_lexer.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( ( toknz->p) == ( toknz->pe) ) goto _test_eof; _resume: _acts = _eo_tokenizer_actions + _eo_tokenizer_from_state_actions[ toknz->cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 39: #line 1 "NONE" { toknz->ts = ( toknz->p);} break; #line 1336 "lib/eolian/eo_lexer.c" } } _keys = _eo_tokenizer_trans_keys + _eo_tokenizer_key_offsets[ toknz->cs]; _trans = _eo_tokenizer_index_offsets[ toknz->cs]; _klen = _eo_tokenizer_single_lengths[ toknz->cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*( toknz->p)) < *_mid ) _upper = _mid - 1; else if ( (*( toknz->p)) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _eo_tokenizer_range_lengths[ toknz->cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*( toknz->p)) < _mid[0] ) _upper = _mid - 2; else if ( (*( toknz->p)) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: _trans = _eo_tokenizer_indicies[_trans]; _eof_trans: toknz->cs = _eo_tokenizer_trans_targs[_trans]; if ( _eo_tokenizer_trans_actions[_trans] == 0 ) goto _again; _acts = _eo_tokenizer_actions + _eo_tokenizer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 292 "lib/eolian/eo_lexer.rl" { toknz->current_line += 1; DBG("inc[%d] %d", toknz->cs, toknz->current_line); } break; case 1: #line 297 "lib/eolian/eo_lexer.rl" { toknz->saved.line = toknz->current_line; DBG("save line[%d] %d", toknz->cs, toknz->current_line); } break; case 2: #line 302 "lib/eolian/eo_lexer.rl" { toknz->saved.tok = ( toknz->p); DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p)); } break; case 3: #line 376 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); if (toknz->tmp.accessor->ret.type != NULL) ABORT(toknz, "accessor has already a return type"); toknz->tmp.accessor->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p)); INF(" %s", toknz->tmp.accessor->ret.type); } break; case 4: #line 384 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); if (toknz->tmp.accessor->ret.comment != NULL) ABORT(toknz, "accessor return type has already a comment"); toknz->tmp.accessor->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); INF(" %s", toknz->tmp.accessor->ret.comment); } break; case 5: #line 392 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); toknz->tmp.accessor->ret.warn_unused = EINA_TRUE; INF(" WARN_UNUSED"); } break; case 6: #line 398 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 7: #line 412 "lib/eolian/eo_lexer.rl" { toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p)); } break; case 8: #line 416 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor_param) ABORT(toknz, "No accessor param!!!"); toknz->tmp.accessor_param->attrs = _eo_tokenizer_token_get(toknz, ( toknz->p)); toknz->tmp.accessor->params = eina_list_append(toknz->tmp.accessor->params, toknz->tmp.accessor_param); toknz->tmp.accessor_param = NULL; } break; case 9: #line 446 "lib/eolian/eo_lexer.rl" { const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); if (toknz->tmp.param == NULL) ABORT(toknz, "no parameter set to associate this comment to: %s", c); toknz->tmp.param->comment = c; toknz->tmp.param = NULL; } break; case 10: #line 454 "lib/eolian/eo_lexer.rl" { toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p)); if (toknz->tmp.params) *(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param); else ABORT(toknz, "got a param but there is no property nor method waiting for it"); INF(" %s : %s", toknz->tmp.param->name, toknz->tmp.param->type); } break; case 11: #line 554 "lib/eolian/eo_lexer.rl" { if (toknz->tmp.prop != NULL) ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name); toknz->tmp.prop = _eo_tokenizer_property_get(toknz, ( toknz->p)); } break; case 12: #line 594 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (toknz->tmp.meth->ret.type != NULL) ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name); toknz->tmp.meth->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p)); INF(" %s", toknz->tmp.meth->ret.type); } break; case 13: #line 602 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (toknz->tmp.meth->ret.comment != NULL) ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name); toknz->tmp.meth->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); INF(" %s", toknz->tmp.meth->ret.comment); } break; case 14: #line 610 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); toknz->tmp.meth->ret.warn_unused = EINA_TRUE; INF(" WARN_UNUSED"); } break; case 15: #line 616 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 16: #line 621 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); toknz->tmp.meth->obj_const = EINA_TRUE; INF(" obj const"); } break; case 17: #line 684 "lib/eolian/eo_lexer.rl" { if (toknz->tmp.meth != NULL) ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name); toknz->tmp.meth = _eo_tokenizer_method_get(toknz, ( toknz->p)); } break; case 18: #line 716 "lib/eolian/eo_lexer.rl" { const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p)); toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base); } break; case 19: #line 721 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); toknz->tmp.kls->inherits = toknz->tmp.str_items; toknz->tmp.str_items = NULL; } break; case 20: #line 769 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p)); toknz->tmp.kls->events = eina_list_append(toknz->tmp.kls->events, toknz->tmp.event); } break; case 21: #line 775 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.event) ABORT(toknz, "No event!!!"); if (toknz->tmp.event->comment != NULL) ABORT(toknz, "event %s has already a comment", toknz->tmp.event->name); toknz->tmp.event->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); toknz->tmp.event = NULL; } break; case 22: #line 783 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->legacy_prefix != NULL) ABORT(toknz, "A legacy prefix has already been given"); toknz->tmp.kls->legacy_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 23: #line 792 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->eo_prefix != NULL) ABORT(toknz, "An Eo prefix has already been given"); toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 24: #line 801 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->data_type != NULL) ABORT(toknz, "A data type has already been given"); toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 25: #line 814 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p)); toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl); } break; case 26: #line 820 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (toknz->tmp.impl->legacy) ABORT(toknz, "Legacy section already allocated for implement item"); toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def)); } break; case 27: #line 827 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (!toknz->tmp.impl->legacy) ABORT(toknz, "No legacy section"); toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 28: #line 834 "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)); toknz->tmp.impl->legacy->params = eina_list_append( toknz->tmp.impl->legacy->params, toknz->tmp.impl_leg_param); toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 29: #line 843 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl_leg_param) ABORT(toknz, "No implement legacy param!!!"); toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 30: #line 849 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl_leg_param) ABORT(toknz, "No implement legacy param!!!"); toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); } break; case 31: #line 855 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (!toknz->tmp.impl->legacy) ABORT(toknz, "No legacy section"); toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 32: #line 862 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (!toknz->tmp.impl->legacy) ABORT(toknz, "No legacy section"); toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 33: #line 932 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR; } break; case 34: #line 935 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT; } break; case 35: #line 938 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN; } break; case 36: #line 941 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE; } break; case 37: #line 945 "lib/eolian/eo_lexer.rl" { if (toknz->tmp.kls != NULL) ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name); toknz->tmp.kls = _eo_tokenizer_class_get(toknz, ( toknz->p)); toknz->tmp.kls->type = toknz->tmp.kls_type; } break; case 40: #line 1 "NONE" { toknz->te = ( toknz->p)+1;} break; case 41: #line 368 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); if (toknz->tmp.accessor->comment != NULL) ABORT(toknz, "accessor has already a comment"); toknz->tmp.accessor->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1); INF(" %s", toknz->tmp.accessor->comment); }} break; case 42: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 43: #line 438 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 44: #line 439 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 45: #line 403 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!"); toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor); toknz->tmp.accessor = NULL; toknz->current_nesting--; { toknz->cs = 349; goto _again;} }} break; case 46: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 47: #line 434 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 48: #line 437 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 49: #line 403 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!"); toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor); toknz->tmp.accessor = NULL; toknz->current_nesting--; { toknz->cs = 349; goto _again;} }} break; case 50: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 51: #line 437 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}} break; case 52: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 53: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 54: #line 463 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); toknz->tmp.param = NULL; toknz->current_nesting--; if (toknz->tmp.prop) { toknz->cs = 349; goto _again;} else if (toknz->tmp.meth) { toknz->cs = 362; goto _again;} else ABORT(toknz, "leaving tokenize_params but there is no property nor method pending"); }} break; case 55: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 56: #line 479 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 57: #line 481 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 58: #line 463 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); toknz->tmp.param = NULL; toknz->current_nesting--; if (toknz->tmp.prop) { toknz->cs = 349; goto _again;} else if (toknz->tmp.meth) { toknz->cs = 362; goto _again;} else ABORT(toknz, "leaving tokenize_params but there is no property nor method pending"); }} break; case 59: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 60: #line 481 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}} break; case 61: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 62: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 63: #line 488 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" get {"); toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER); toknz->current_nesting++; { toknz->cs = 333; goto _again;} }} break; case 64: #line 495 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" set {"); toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER); toknz->current_nesting++; { toknz->cs = 333; goto _again;} }} break; case 65: #line 502 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" keys {"); toknz->current_nesting++; toknz->tmp.params = &(toknz->tmp.prop->keys); { toknz->cs = 342; goto _again;} }} break; case 66: #line 509 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" values {"); toknz->current_nesting++; toknz->tmp.params = &(toknz->tmp.prop->values); { toknz->cs = 342; goto _again;} }} break; case 67: #line 516 "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) WRN("property '%s' has no values.", toknz->tmp.prop->name); if (eina_list_count(toknz->tmp.prop->accessors) == 0) WRN("property '%s' has no accessors.", toknz->tmp.prop->name); INF(" }"); toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop); toknz->tmp.prop = NULL; toknz->current_nesting--; { toknz->cs = 357; goto _again;} }} break; case 68: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 69: #line 535 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 70: #line 516 "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) WRN("property '%s' has no values.", toknz->tmp.prop->name); if (eina_list_count(toknz->tmp.prop->accessors) == 0) WRN("property '%s' has no accessors.", toknz->tmp.prop->name); INF(" }"); toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop); toknz->tmp.prop = NULL; toknz->current_nesting--; { toknz->cs = 357; goto _again;} }} break; case 71: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 72: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 73: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 74: #line 547 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.prop) ABORT(toknz, "No property!!!"); INF(" %s {", toknz->tmp.prop->name); toknz->current_nesting++; { toknz->cs = 349; goto _again;} }} break; case 75: #line 560 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 76: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 77: #line 569 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 78: #line 560 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 79: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 80: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 81: #line 578 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (toknz->tmp.meth->comment != NULL) ABORT(toknz, "method has already a comment"); toknz->tmp.meth->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1); INF(" %s", toknz->tmp.meth->comment); }} break; case 82: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 83: #line 586 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); INF(" params {"); toknz->current_nesting++; toknz->tmp.params = &(toknz->tmp.meth->params); { toknz->cs = 342; goto _again;} }} break; case 84: #line 669 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 85: #line 670 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 86: #line 627 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ Eina_List **l = NULL; if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (eina_list_count(toknz->tmp.meth->params) == 0) WRN("method '%s' has no parameters.", toknz->tmp.meth->name); INF(" }"); switch (toknz->current_methods_type) { case METH_CONSTRUCTOR: l = &toknz->tmp.kls->constructors; break; case METH_DESTRUCTOR: l = &toknz->tmp.kls->destructors; break; case METH_REGULAR: l = &toknz->tmp.kls->methods; break; default: ABORT(toknz, "unknown method type %d", toknz->current_methods_type); } toknz->tmp.meth->type = toknz->current_methods_type; *l = eina_list_append(*l, toknz->tmp.meth); toknz->tmp.meth = NULL; toknz->current_nesting--; { toknz->cs = 372; goto _again;} }} break; case 87: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 88: #line 664 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 89: #line 668 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 90: #line 627 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ Eina_List **l = NULL; if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (eina_list_count(toknz->tmp.meth->params) == 0) WRN("method '%s' has no parameters.", toknz->tmp.meth->name); INF(" }"); switch (toknz->current_methods_type) { case METH_CONSTRUCTOR: l = &toknz->tmp.kls->constructors; break; case METH_DESTRUCTOR: l = &toknz->tmp.kls->destructors; break; case METH_REGULAR: l = &toknz->tmp.kls->methods; break; default: ABORT(toknz, "unknown method type %d", toknz->current_methods_type); } toknz->tmp.meth->type = toknz->current_methods_type; *l = eina_list_append(*l, toknz->tmp.meth); toknz->tmp.meth = NULL; toknz->current_nesting--; { toknz->cs = 372; goto _again;} }} break; case 91: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 92: #line 668 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}} break; case 93: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 94: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 95: #line 677 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); INF(" %s {", toknz->tmp.meth->name); toknz->current_nesting++; { toknz->cs = 362; goto _again;} }} break; case 96: #line 690 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); toknz->current_methods_type = METH_TYPE_LAST; toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 97: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 98: #line 700 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 99: #line 690 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); toknz->current_methods_type = METH_TYPE_LAST; toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 100: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 101: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 102: #line 709 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->comment != NULL) ABORT(toknz, "class %s has already a comment", toknz->tmp.kls->name); toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1); }} break; case 103: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 104: #line 727 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ }} break; case 105: #line 730 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ }} break; case 106: #line 733 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" constructors {"); toknz->current_methods_type = METH_CONSTRUCTOR; toknz->current_nesting++; { toknz->cs = 372; goto _again;} }} break; case 107: #line 740 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" destructors {"); toknz->current_methods_type = METH_DESTRUCTOR; toknz->current_nesting++; { toknz->cs = 372; goto _again;} }} break; case 108: #line 747 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" properties {"); toknz->current_nesting++; { toknz->cs = 357; goto _again;} }} break; case 109: #line 753 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" begin methods"); toknz->current_methods_type = METH_REGULAR; toknz->current_nesting++; { toknz->cs = 372; goto _again;} }} break; case 110: #line 760 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); INF("end class: %s", toknz->tmp.kls->name); toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls); toknz->tmp.kls = NULL; toknz->current_nesting--; { toknz->cs = 326; goto _again;} }} break; case 111: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 112: #line 907 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 113: #line 910 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 114: #line 911 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 115: #line 912 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 116: #line 727 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ }} break; case 117: #line 730 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ }} break; case 118: #line 760 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); INF("end class: %s", toknz->tmp.kls->name); toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls); toknz->tmp.kls = NULL; toknz->current_nesting--; { toknz->cs = 326; goto _again;} }} break; case 119: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 120: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 121: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 122: #line 925 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); INF("begin class: %s", toknz->tmp.kls->name); toknz->current_nesting++; { toknz->cs = 377; goto _again;} }} break; case 123: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 124: #line 960 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 125: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 126: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; #line 2668 "lib/eolian/eo_lexer.c" } } _again: _acts = _eo_tokenizer_actions + _eo_tokenizer_to_state_actions[ toknz->cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 38: #line 1 "NONE" { toknz->ts = 0;} break; #line 2681 "lib/eolian/eo_lexer.c" } } if ( ++( toknz->p) != ( toknz->pe) ) goto _resume; _test_eof: {} if ( ( toknz->p) == ( toknz->eof) ) { if ( _eo_tokenizer_eof_trans[ toknz->cs] > 0 ) { _trans = _eo_tokenizer_eof_trans[ toknz->cs] - 1; goto _eof_trans; } } _out: {} } #line 1015 "lib/eolian/eo_lexer.rl" if ( toknz->cs == #line 2702 "lib/eolian/eo_lexer.c" -1 #line 1016 "lib/eolian/eo_lexer.rl" ) { ERR("%s: wrong termination", source); ret = EINA_FALSE; break; } if ( toknz->ts == 0 ) have = 0; else { DBG("move data and pointers before buffer feed"); have = toknz->pe - toknz->ts; offset = toknz->ts - toknz->buf; memmove(toknz->buf, toknz->ts, have); toknz->te -= offset; toknz->ts = toknz->buf; } if (toknz->saved.tok != NULL) { if ((have == 0) || ((toknz->saved.tok - offset) < toknz->buf)) { WRN("reset lost saved token %p", toknz->saved.tok); toknz->saved.tok = NULL; } else toknz->saved.tok -= offset; } } fclose(stream); return ret; } static Eina_Bool eo_tokenizer_mem_walk(Eo_Tokenizer *toknz, const char *source, char *buffer, unsigned int len) { INF("tokenize %s...", source); toknz->source = eina_stringshare_add(source); Eina_Bool ret = EINA_TRUE; if (!len) { ERR("%s: given size is 0", source); return EINA_FALSE; } if (len > BUFSIZE) { ERR("%s: buffer not enough big. Required size: %d", source, len); return EINA_FALSE; } #line 2762 "lib/eolian/eo_lexer.c" { toknz->cs = eo_tokenizer_start; toknz->ts = 0; toknz->te = 0; toknz->act = 0; } #line 1073 "lib/eolian/eo_lexer.rl" toknz->p = buffer; toknz->pe = toknz->p + len; toknz->eof = toknz->pe; #line 2779 "lib/eolian/eo_lexer.c" { int _klen; unsigned int _trans; const char *_acts; unsigned int _nacts; const char *_keys; if ( ( toknz->p) == ( toknz->pe) ) goto _test_eof; _resume: _acts = _eo_tokenizer_actions + _eo_tokenizer_from_state_actions[ toknz->cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 39: #line 1 "NONE" { toknz->ts = ( toknz->p);} break; #line 2798 "lib/eolian/eo_lexer.c" } } _keys = _eo_tokenizer_trans_keys + _eo_tokenizer_key_offsets[ toknz->cs]; _trans = _eo_tokenizer_index_offsets[ toknz->cs]; _klen = _eo_tokenizer_single_lengths[ toknz->cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + _klen - 1; while (1) { if ( _upper < _lower ) break; _mid = _lower + ((_upper-_lower) >> 1); if ( (*( toknz->p)) < *_mid ) _upper = _mid - 1; else if ( (*( toknz->p)) > *_mid ) _lower = _mid + 1; else { _trans += (unsigned int)(_mid - _keys); goto _match; } } _keys += _klen; _trans += _klen; } _klen = _eo_tokenizer_range_lengths[ toknz->cs]; if ( _klen > 0 ) { const char *_lower = _keys; const char *_mid; const char *_upper = _keys + (_klen<<1) - 2; while (1) { if ( _upper < _lower ) break; _mid = _lower + (((_upper-_lower) >> 1) & ~1); if ( (*( toknz->p)) < _mid[0] ) _upper = _mid - 2; else if ( (*( toknz->p)) > _mid[1] ) _lower = _mid + 2; else { _trans += (unsigned int)((_mid - _keys)>>1); goto _match; } } _trans += _klen; } _match: _trans = _eo_tokenizer_indicies[_trans]; _eof_trans: toknz->cs = _eo_tokenizer_trans_targs[_trans]; if ( _eo_tokenizer_trans_actions[_trans] == 0 ) goto _again; _acts = _eo_tokenizer_actions + _eo_tokenizer_trans_actions[_trans]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 0: #line 292 "lib/eolian/eo_lexer.rl" { toknz->current_line += 1; DBG("inc[%d] %d", toknz->cs, toknz->current_line); } break; case 1: #line 297 "lib/eolian/eo_lexer.rl" { toknz->saved.line = toknz->current_line; DBG("save line[%d] %d", toknz->cs, toknz->current_line); } break; case 2: #line 302 "lib/eolian/eo_lexer.rl" { toknz->saved.tok = ( toknz->p); DBG("save token[%d] %p %c", toknz->cs, ( toknz->p), *( toknz->p)); } break; case 3: #line 376 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); if (toknz->tmp.accessor->ret.type != NULL) ABORT(toknz, "accessor has already a return type"); toknz->tmp.accessor->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p)); INF(" %s", toknz->tmp.accessor->ret.type); } break; case 4: #line 384 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); if (toknz->tmp.accessor->ret.comment != NULL) ABORT(toknz, "accessor return type has already a comment"); toknz->tmp.accessor->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); INF(" %s", toknz->tmp.accessor->ret.comment); } break; case 5: #line 392 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); toknz->tmp.accessor->ret.warn_unused = EINA_TRUE; INF(" WARN_UNUSED"); } break; case 6: #line 398 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 7: #line 412 "lib/eolian/eo_lexer.rl" { toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p)); } break; case 8: #line 416 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.accessor_param) ABORT(toknz, "No accessor param!!!"); toknz->tmp.accessor_param->attrs = _eo_tokenizer_token_get(toknz, ( toknz->p)); toknz->tmp.accessor->params = eina_list_append(toknz->tmp.accessor->params, toknz->tmp.accessor_param); toknz->tmp.accessor_param = NULL; } break; case 9: #line 446 "lib/eolian/eo_lexer.rl" { const char *c = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); if (toknz->tmp.param == NULL) ABORT(toknz, "no parameter set to associate this comment to: %s", c); toknz->tmp.param->comment = c; toknz->tmp.param = NULL; } break; case 10: #line 454 "lib/eolian/eo_lexer.rl" { toknz->tmp.param = _eo_tokenizer_param_get(toknz, ( toknz->p)); if (toknz->tmp.params) *(toknz->tmp.params) = eina_list_append(*(toknz->tmp.params), toknz->tmp.param); else ABORT(toknz, "got a param but there is no property nor method waiting for it"); INF(" %s : %s", toknz->tmp.param->name, toknz->tmp.param->type); } break; case 11: #line 554 "lib/eolian/eo_lexer.rl" { if (toknz->tmp.prop != NULL) ABORT(toknz, "there is a pending property definition %s", toknz->tmp.prop->name); toknz->tmp.prop = _eo_tokenizer_property_get(toknz, ( toknz->p)); } break; case 12: #line 594 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (toknz->tmp.meth->ret.type != NULL) ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name); toknz->tmp.meth->ret.type = _eo_tokenizer_token_get(toknz, ( toknz->p)); INF(" %s", toknz->tmp.meth->ret.type); } break; case 13: #line 602 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (toknz->tmp.meth->ret.comment != NULL) ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name); toknz->tmp.meth->ret.comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); INF(" %s", toknz->tmp.meth->ret.comment); } break; case 14: #line 610 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); toknz->tmp.meth->ret.warn_unused = EINA_TRUE; INF(" WARN_UNUSED"); } break; case 15: #line 616 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 16: #line 621 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); toknz->tmp.meth->obj_const = EINA_TRUE; INF(" obj const"); } break; case 17: #line 684 "lib/eolian/eo_lexer.rl" { if (toknz->tmp.meth != NULL) ABORT(toknz, "there is a pending method definition %s", toknz->tmp.meth->name); toknz->tmp.meth = _eo_tokenizer_method_get(toknz, ( toknz->p)); } break; case 18: #line 716 "lib/eolian/eo_lexer.rl" { const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p)); toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base); } break; case 19: #line 721 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); toknz->tmp.kls->inherits = toknz->tmp.str_items; toknz->tmp.str_items = NULL; } break; case 20: #line 769 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); toknz->tmp.event = _eo_tokenizer_event_get(toknz, ( toknz->p)); toknz->tmp.kls->events = eina_list_append(toknz->tmp.kls->events, toknz->tmp.event); } break; case 21: #line 775 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.event) ABORT(toknz, "No event!!!"); if (toknz->tmp.event->comment != NULL) ABORT(toknz, "event %s has already a comment", toknz->tmp.event->name); toknz->tmp.event->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); toknz->tmp.event = NULL; } break; case 22: #line 783 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->legacy_prefix != NULL) ABORT(toknz, "A legacy prefix has already been given"); toknz->tmp.kls->legacy_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 23: #line 792 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->eo_prefix != NULL) ABORT(toknz, "An Eo prefix has already been given"); toknz->tmp.kls->eo_prefix = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 24: #line 801 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->data_type != NULL) ABORT(toknz, "A data type has already been given"); toknz->tmp.kls->data_type = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 25: #line 814 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); toknz->tmp.impl = _eo_tokenizer_implement_get(toknz, ( toknz->p)); toknz->tmp.kls->implements = eina_list_append(toknz->tmp.kls->implements, toknz->tmp.impl); } break; case 26: #line 820 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (toknz->tmp.impl->legacy) ABORT(toknz, "Legacy section already allocated for implement item"); toknz->tmp.impl->legacy = calloc(1, sizeof(Eo_Implement_Legacy_Def)); } break; case 27: #line 827 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (!toknz->tmp.impl->legacy) ABORT(toknz, "No legacy section"); toknz->tmp.impl->legacy->function_name = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 28: #line 834 "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)); toknz->tmp.impl->legacy->params = eina_list_append( toknz->tmp.impl->legacy->params, toknz->tmp.impl_leg_param); toknz->tmp.impl_leg_param->eo_name = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 29: #line 843 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl_leg_param) ABORT(toknz, "No implement legacy param!!!"); toknz->tmp.impl_leg_param->legacy_name = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 30: #line 849 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl_leg_param) ABORT(toknz, "No implement legacy param!!!"); toknz->tmp.impl_leg_param->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2); } break; case 31: #line 855 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (!toknz->tmp.impl->legacy) ABORT(toknz, "No legacy section"); toknz->tmp.impl->legacy->ret_type= _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 32: #line 862 "lib/eolian/eo_lexer.rl" { if (!toknz->tmp.impl) ABORT(toknz, "No implement!!!"); if (!toknz->tmp.impl->legacy) ABORT(toknz, "No legacy section"); toknz->tmp.impl->legacy->ret_value = _eo_tokenizer_token_get(toknz, ( toknz->p)); } break; case 33: #line 932 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR; } break; case 34: #line 935 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT; } break; case 35: #line 938 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN; } break; case 36: #line 941 "lib/eolian/eo_lexer.rl" { toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE; } break; case 37: #line 945 "lib/eolian/eo_lexer.rl" { if (toknz->tmp.kls != NULL) ABORT(toknz, "there is a pending class definition %s", toknz->tmp.kls->name); toknz->tmp.kls = _eo_tokenizer_class_get(toknz, ( toknz->p)); toknz->tmp.kls->type = toknz->tmp.kls_type; } break; case 40: #line 1 "NONE" { toknz->te = ( toknz->p)+1;} break; case 41: #line 368 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!"); if (toknz->tmp.accessor->comment != NULL) ABORT(toknz, "accessor has already a comment"); toknz->tmp.accessor->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1); INF(" %s", toknz->tmp.accessor->comment); }} break; case 42: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 43: #line 438 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 44: #line 439 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 45: #line 403 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!"); toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor); toknz->tmp.accessor = NULL; toknz->current_nesting--; { toknz->cs = 349; goto _again;} }} break; case 46: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 47: #line 434 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 48: #line 437 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 49: #line 403 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); if (!toknz->tmp.prop) ABORT(toknz, "No prop!!!"); toknz->tmp.prop->accessors = eina_list_append(toknz->tmp.prop->accessors, toknz->tmp.accessor); toknz->tmp.accessor = NULL; toknz->current_nesting--; { toknz->cs = 349; goto _again;} }} break; case 50: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 51: #line 437 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}} break; case 52: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 53: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 54: #line 463 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); toknz->tmp.param = NULL; toknz->current_nesting--; if (toknz->tmp.prop) { toknz->cs = 349; goto _again;} else if (toknz->tmp.meth) { toknz->cs = 362; goto _again;} else ABORT(toknz, "leaving tokenize_params but there is no property nor method pending"); }} break; case 55: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 56: #line 479 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 57: #line 481 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 58: #line 463 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); toknz->tmp.param = NULL; toknz->current_nesting--; if (toknz->tmp.prop) { toknz->cs = 349; goto _again;} else if (toknz->tmp.meth) { toknz->cs = 362; goto _again;} else ABORT(toknz, "leaving tokenize_params but there is no property nor method pending"); }} break; case 59: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 60: #line 481 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}} break; case 61: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 62: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 63: #line 488 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" get {"); toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, GETTER); toknz->current_nesting++; { toknz->cs = 333; goto _again;} }} break; case 64: #line 495 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" set {"); toknz->tmp.accessor = _eo_tokenizer_accessor_get(toknz, SETTER); toknz->current_nesting++; { toknz->cs = 333; goto _again;} }} break; case 65: #line 502 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" keys {"); toknz->current_nesting++; toknz->tmp.params = &(toknz->tmp.prop->keys); { toknz->cs = 342; goto _again;} }} break; case 66: #line 509 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" values {"); toknz->current_nesting++; toknz->tmp.params = &(toknz->tmp.prop->values); { toknz->cs = 342; goto _again;} }} break; case 67: #line 516 "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) WRN("property '%s' has no values.", toknz->tmp.prop->name); if (eina_list_count(toknz->tmp.prop->accessors) == 0) WRN("property '%s' has no accessors.", toknz->tmp.prop->name); INF(" }"); toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop); toknz->tmp.prop = NULL; toknz->current_nesting--; { toknz->cs = 357; goto _again;} }} break; case 68: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 69: #line 535 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 70: #line 516 "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) WRN("property '%s' has no values.", toknz->tmp.prop->name); if (eina_list_count(toknz->tmp.prop->accessors) == 0) WRN("property '%s' has no accessors.", toknz->tmp.prop->name); INF(" }"); toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop); toknz->tmp.prop = NULL; toknz->current_nesting--; { toknz->cs = 357; goto _again;} }} break; case 71: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 72: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 73: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 74: #line 547 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.prop) ABORT(toknz, "No property!!!"); INF(" %s {", toknz->tmp.prop->name); toknz->current_nesting++; { toknz->cs = 349; goto _again;} }} break; case 75: #line 560 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 76: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 77: #line 569 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 78: #line 560 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 79: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 80: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 81: #line 578 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (toknz->tmp.meth->comment != NULL) ABORT(toknz, "method has already a comment"); toknz->tmp.meth->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1); INF(" %s", toknz->tmp.meth->comment); }} break; case 82: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 83: #line 586 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); INF(" params {"); toknz->current_nesting++; toknz->tmp.params = &(toknz->tmp.meth->params); { toknz->cs = 342; goto _again;} }} break; case 84: #line 669 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 85: #line 670 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;} break; case 86: #line 627 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ Eina_List **l = NULL; if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (eina_list_count(toknz->tmp.meth->params) == 0) WRN("method '%s' has no parameters.", toknz->tmp.meth->name); INF(" }"); switch (toknz->current_methods_type) { case METH_CONSTRUCTOR: l = &toknz->tmp.kls->constructors; break; case METH_DESTRUCTOR: l = &toknz->tmp.kls->destructors; break; case METH_REGULAR: l = &toknz->tmp.kls->methods; break; default: ABORT(toknz, "unknown method type %d", toknz->current_methods_type); } toknz->tmp.meth->type = toknz->current_methods_type; *l = eina_list_append(*l, toknz->tmp.meth); toknz->tmp.meth = NULL; toknz->current_nesting--; { toknz->cs = 372; goto _again;} }} break; case 87: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 88: #line 664 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 89: #line 668 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 90: #line 627 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ Eina_List **l = NULL; if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); if (eina_list_count(toknz->tmp.meth->params) == 0) WRN("method '%s' has no parameters.", toknz->tmp.meth->name); INF(" }"); switch (toknz->current_methods_type) { case METH_CONSTRUCTOR: l = &toknz->tmp.kls->constructors; break; case METH_DESTRUCTOR: l = &toknz->tmp.kls->destructors; break; case METH_REGULAR: l = &toknz->tmp.kls->methods; break; default: ABORT(toknz, "unknown method type %d", toknz->current_methods_type); } toknz->tmp.meth->type = toknz->current_methods_type; *l = eina_list_append(*l, toknz->tmp.meth); toknz->tmp.meth = NULL; toknz->current_nesting--; { toknz->cs = 372; goto _again;} }} break; case 91: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 92: #line 668 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}} break; case 93: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 94: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 95: #line 677 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.meth) ABORT(toknz, "No method!!!"); INF(" %s {", toknz->tmp.meth->name); toknz->current_nesting++; { toknz->cs = 362; goto _again;} }} break; case 96: #line 690 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" }"); toknz->current_methods_type = METH_TYPE_LAST; toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 97: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 98: #line 700 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 99: #line 690 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ INF(" }"); toknz->current_methods_type = METH_TYPE_LAST; toknz->current_nesting--; { toknz->cs = 377; goto _again;} }} break; case 100: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 101: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 102: #line 709 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); if (toknz->tmp.kls->comment != NULL) ABORT(toknz, "class %s has already a comment", toknz->tmp.kls->name); toknz->tmp.kls->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-1); }} break; case 103: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 104: #line 727 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ }} break; case 105: #line 730 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ }} break; case 106: #line 733 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" constructors {"); toknz->current_methods_type = METH_CONSTRUCTOR; toknz->current_nesting++; { toknz->cs = 372; goto _again;} }} break; case 107: #line 740 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" destructors {"); toknz->current_methods_type = METH_DESTRUCTOR; toknz->current_nesting++; { toknz->cs = 372; goto _again;} }} break; case 108: #line 747 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" properties {"); toknz->current_nesting++; { toknz->cs = 357; goto _again;} }} break; case 109: #line 753 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ INF(" begin methods"); toknz->current_methods_type = METH_REGULAR; toknz->current_nesting++; { toknz->cs = 372; goto _again;} }} break; case 110: #line 760 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); INF("end class: %s", toknz->tmp.kls->name); toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls); toknz->tmp.kls = NULL; toknz->current_nesting--; { toknz->cs = 326; goto _again;} }} break; case 111: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 112: #line 907 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 113: #line 910 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 114: #line 911 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 115: #line 912 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 116: #line 727 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ }} break; case 117: #line 730 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ }} break; case 118: #line 760 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); INF("end class: %s", toknz->tmp.kls->name); toknz->classes = eina_list_append(toknz->classes, toknz->tmp.kls); toknz->tmp.kls = NULL; toknz->current_nesting--; { toknz->cs = 326; goto _again;} }} break; case 119: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 120: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 121: #line 307 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("comment[%d] line%03d:%03d", toknz->cs, toknz->saved.line, toknz->current_line); }} break; case 122: #line 925 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ if (!toknz->tmp.kls) ABORT(toknz, "No class!!!"); INF("begin class: %s", toknz->tmp.kls->name); toknz->current_nesting++; { toknz->cs = 377; goto _again;} }} break; case 123: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p)+1;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 124: #line 960 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;} break; case 125: #line 316 "lib/eolian/eo_lexer.rl" { toknz->te = ( toknz->p);( toknz->p)--;{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; case 126: #line 316 "lib/eolian/eo_lexer.rl" {{( toknz->p) = (( toknz->te))-1;}{ DBG("error[%d]", toknz->cs); char *s, *d; char buf[BUFSIZE]; for (s = ( toknz->p), d = buf; (s <= toknz->pe); s++) { if ((*s == '\r') || (*s == '\n')) break; *d++ = *s; } *d = '\0'; ERR("error n:%d l:%d c:'%c': %s", toknz->current_nesting, toknz->current_line, *( toknz->p), buf); toknz->cs = eo_tokenizer_error; {( toknz->p)++; goto _out; } /* necessary to stop scanners */ }} break; #line 4130 "lib/eolian/eo_lexer.c" } } _again: _acts = _eo_tokenizer_actions + _eo_tokenizer_to_state_actions[ toknz->cs]; _nacts = (unsigned int) *_acts++; while ( _nacts-- > 0 ) { switch ( *_acts++ ) { case 38: #line 1 "NONE" { toknz->ts = 0;} break; #line 4143 "lib/eolian/eo_lexer.c" } } if ( ++( toknz->p) != ( toknz->pe) ) goto _resume; _test_eof: {} if ( ( toknz->p) == ( toknz->eof) ) { if ( _eo_tokenizer_eof_trans[ toknz->cs] > 0 ) { _trans = _eo_tokenizer_eof_trans[ toknz->cs] - 1; goto _eof_trans; } } _out: {} } #line 1081 "lib/eolian/eo_lexer.rl" if ( toknz->cs == #line 4164 "lib/eolian/eo_lexer.c" -1 #line 1082 "lib/eolian/eo_lexer.rl" ) { ERR("%s: wrong termination", source); ret = EINA_FALSE; } return ret; } Eo_Tokenizer* eo_tokenizer_get(void) { Eo_Tokenizer *toknz = calloc(1, sizeof(Eo_Tokenizer)); if (!toknz) return NULL; toknz->ts = NULL; toknz->te = NULL; /* toknz->top = 0; */ toknz->source = NULL; toknz->max_nesting = 10; toknz->current_line = 1; toknz->current_nesting = 0; toknz->current_methods_type = METH_TYPE_LAST; toknz->saved.tok = NULL; toknz->saved.line = 0; toknz->classes = NULL; return toknz; } static char *_accessor_type_str[ACCESSOR_TYPE_LAST] = { "setter", "getter" }; static char *_param_way_str[PARAM_WAY_LAST] = { "IN", "OUT", "INOUT" }; void eo_tokenizer_dump(Eo_Tokenizer *toknz) { const char *s; Eina_List *k, *l, *m; Eo_Class_Def *kls; Eo_Property_Def *prop; Eo_Method_Def *meth; Eo_Param_Def *param; Eo_Accessor_Def *accessor; Eo_Event_Def *sgn; /* Eo_Ret_Def *ret; */ EINA_LIST_FOREACH(toknz->classes, k, kls) { printf("Class: %s (%s)\n", kls->name, (kls->comment ? kls->comment : "-")); printf(" inherits from :"); EINA_LIST_FOREACH(kls->inherits, l, s) printf(" %s", s); printf("\n"); printf(" implements:"); EINA_LIST_FOREACH(kls->implements, l, s) printf(" %s", s); printf("\n"); printf(" events:\n"); EINA_LIST_FOREACH(kls->events, l, sgn) printf(" %s (%s)\n", sgn->name, sgn->comment); EINA_LIST_FOREACH(kls->constructors, l, meth) { printf(" constructors: %s\n", meth->name); printf(" return: %s (%s)\n", meth->ret.type, meth->ret.comment); printf(" legacy : %s\n", meth->legacy); EINA_LIST_FOREACH(meth->params, m, param) { printf(" param: %s %s : %s (%s)\n", _param_way_str[param->way], param->name, param->type, param->comment); } } EINA_LIST_FOREACH(kls->destructors, l, meth) { printf(" destructors: %s\n", meth->name); printf(" return: %s (%s)\n", meth->ret.type, meth->ret.comment); printf(" legacy : %s\n", meth->legacy); EINA_LIST_FOREACH(meth->params, m, param) { printf(" param: %s %s : %s (%s)\n", _param_way_str[param->way], param->name, param->type, param->comment); } } EINA_LIST_FOREACH(kls->properties, l, prop) { printf(" property: %s\n", prop->name); EINA_LIST_FOREACH(prop->keys, m, param) { printf(" key: %s : %s (%s)\n", param->name, param->type, param->comment); } EINA_LIST_FOREACH(prop->values, m, param) { printf(" value: %s : %s (%s)\n", param->name, param->type, param->comment); } EINA_LIST_FOREACH(prop->accessors, m, accessor) { printf(" accessor: %s : %s (%s)\n", accessor->ret.type, _accessor_type_str[accessor->type], accessor->comment); printf(" legacy : %s\n", accessor->legacy); } } EINA_LIST_FOREACH(kls->methods, l, meth) { printf(" method: %s\n", meth->name); printf(" return: %s (%s)\n", meth->ret.type, meth->ret.comment); printf(" legacy : %s\n", meth->legacy); printf(" obj_const : %s\n", meth->obj_const?"true":"false"); EINA_LIST_FOREACH(meth->params, m, param) { printf(" param: %s %s : %s (%s)\n", _param_way_str[param->way], param->name, param->type, param->comment); } } } } Eina_Bool eo_tokenizer_database_fill(const char *filename) { Eina_Bool ret = EINA_FALSE; const char *s; Eina_List *k, *l, *m; Eo_Class_Def *kls; Eo_Property_Def *prop; Eo_Method_Def *meth; Eo_Param_Def *param; Eo_Accessor_Def *accessor; Eo_Event_Def *event; Eo_Implement_Def *impl; FILE *stream = NULL; char *buffer = NULL; Eo_Tokenizer *toknz = eo_tokenizer_get(); if (!toknz) { ERR("can't create eo_tokenizer"); goto end; } stream = fopen(filename, "rb"); if (!stream) { ERR("unable to read in %s", filename); goto end; } buffer = malloc(BUFSIZE); unsigned int len = fread(buffer, 1, BUFSIZE, stream); if (!eo_tokenizer_mem_walk(toknz, filename, buffer, len)) goto end; if (!toknz->classes) { ERR("No classes for file %s", filename); goto end; } EINA_LIST_FOREACH(toknz->classes, k, kls) { database_class_add(kls->name, kls->type); database_class_file_set(kls->name, filename); if (kls->comment) database_class_description_set(kls->name, kls->comment); EINA_LIST_FOREACH(kls->inherits, l, s) database_class_inherit_add(kls->name, s); if (kls->legacy_prefix) { database_class_legacy_prefix_set(kls->name, kls->legacy_prefix); } if (kls->eo_prefix) { database_class_eo_prefix_set(kls->name, kls->eo_prefix); } if (kls->data_type) { database_class_data_type_set(kls->name, kls->data_type); } EINA_LIST_FOREACH(kls->constructors, l, meth) { Eolian_Function foo_id = database_function_new(meth->name, CONSTRUCTOR); database_class_function_add(kls->name, foo_id); database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment); database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy); EINA_LIST_FOREACH(meth->params, m, param) { database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment); } } EINA_LIST_FOREACH(kls->destructors, l, meth) { Eolian_Function foo_id = database_function_new(meth->name, DESTRUCTOR); database_class_function_add(kls->name, foo_id); database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment); database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy); EINA_LIST_FOREACH(meth->params, m, param) { database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment); } } EINA_LIST_FOREACH(kls->properties, l, prop) { Eolian_Function foo_id = database_function_new(prop->name, UNRESOLVED); EINA_LIST_FOREACH(prop->keys, m, param) { Eolian_Function_Parameter p = database_property_key_add( foo_id, param->type, param->name, param->comment); database_parameter_nonull_set(p, param->nonull); } EINA_LIST_FOREACH(prop->values, m, param) { Eolian_Function_Parameter p = database_property_value_add( foo_id, param->type, param->name, param->comment); database_parameter_nonull_set(p, param->nonull); } EINA_LIST_FOREACH(prop->accessors, m, accessor) { database_function_type_set(foo_id, (accessor->type == SETTER?SET:GET)); if (accessor->ret.type) { database_function_return_type_set(foo_id, accessor->type == SETTER?SET:GET, accessor->ret.type); database_function_data_set(foo_id, (accessor->type == SETTER?EOLIAN_PROP_SET_RETURN_COMMENT:EOLIAN_PROP_GET_RETURN_COMMENT), accessor->ret.comment); database_function_return_flag_set_as_warn_unused(foo_id, accessor->type == SETTER?SET:GET, accessor->ret.warn_unused); } database_function_description_set(foo_id, (accessor->type == SETTER?EOLIAN_COMMENT_SET:EOLIAN_COMMENT_GET), accessor->comment); Eo_Accessor_Param *acc_param; Eina_List *m2; /* Only in get access, we check const attribute */ if (accessor->type == GETTER) { EINA_LIST_FOREACH(accessor->params, m2, acc_param) { Eolian_Function_Parameter desc = eolian_function_parameter_get(foo_id, acc_param->name); if (!desc) { printf("Error - %s not known as parameter of property %s\n", acc_param->name, prop->name); } else if (strstr(acc_param->attrs, "const")) { database_parameter_get_const_attribute_set(desc, EINA_TRUE); } } } } database_class_function_add(kls->name, foo_id); } EINA_LIST_FOREACH(kls->methods, l, meth) { Eolian_Function foo_id = database_function_new(meth->name, METHOD_FUNC); database_class_function_add(kls->name, foo_id); database_function_data_set(foo_id, EOLIAN_METHOD_RETURN_TYPE, meth->ret.type); database_function_description_set(foo_id, EOLIAN_RETURN_COMMENT, meth->ret.comment); database_function_return_flag_set_as_warn_unused(foo_id, METHOD_FUNC, meth->ret.warn_unused); database_function_description_set(foo_id, EOLIAN_COMMENT, meth->comment); database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy); database_function_object_set_as_const(foo_id, meth->obj_const); EINA_LIST_FOREACH(meth->params, m, param) { Eolian_Function_Parameter p = database_method_parameter_add(foo_id, (Eolian_Parameter_Dir)param->way, param->type, param->name, param->comment); database_parameter_nonull_set(p, param->nonull); } } EINA_LIST_FOREACH(kls->implements, l, impl) { const char *class = impl->meth_name; Eina_Bool virtual_pure = EINA_FALSE; if (!strcmp(class, "Eo_Base::constructor")) { Eolian_Function foo_id = database_function_new("constructor", DFLT_CONSTRUCTOR); database_class_function_add(kls->name, foo_id); continue; } if (!strcmp(class, "Eo_Base::destructor")) { Eolian_Function foo_id = database_function_new("destructor", DFLT_DESTRUCTOR); database_class_function_add(kls->name, foo_id); continue; } if (!strcmp(class, "class::constructor")) { database_class_ctor_enable_set(kls->name, EINA_TRUE); continue; } if (!strcmp(class, "class::destructor")) { database_class_dtor_enable_set(kls->name, EINA_TRUE); continue; } if (!strncmp(class, "virtual::", 9)) virtual_pure = EINA_TRUE; char *func = strstr(class, "::"); if (func) *func = '\0'; func += 2; Eolian_Function_Type ftype = UNRESOLVED; char *type_as_str = strstr(func, "::"); if (type_as_str) { *type_as_str = '\0'; if (!strcmp(type_as_str+2, "set")) ftype = SET; else if (!strcmp(type_as_str+2, "get")) ftype = GET; } if (virtual_pure) { /* Search the function into the existing functions of the current class */ Eolian_Function foo_id = eolian_class_function_find_by_name( kls->name, func, ftype); if (!foo_id) { ERR("Error - %s not known in class %s", class + 9, kls->name); goto end; } database_function_set_as_virtual_pure(foo_id); continue; } Eolian_Implement impl_desc = database_implement_new(class, func, ftype); if (impl->legacy) { Eo_Implement_Legacy_Def *eo_leg = impl->legacy; Eolian_Implement_Legacy leg = database_implement_legacy_add( impl_desc, eo_leg->function_name); database_implement_legacy_return_add(leg, eo_leg->ret_type, eo_leg->ret_value); if (eo_leg->params) { Eina_List *itr; Eo_Implement_Legacy_Param_Def *p; EINA_LIST_FOREACH(eo_leg->params, itr, p) database_implement_legacy_param_add(leg, p->eo_name, p->legacy_name, p->comment); } } database_class_implement_add(kls->name, impl_desc); } EINA_LIST_FOREACH(kls->events, l, event) { Eolian_Event ev = database_event_new(event->name, event->comment); database_class_event_add(kls->name, ev); } } ret = EINA_TRUE; end: if (buffer) free(buffer); if (stream) fclose(stream); if (toknz) eo_tokenizer_free(toknz); return ret; } void eo_tokenizer_free(Eo_Tokenizer *toknz) { Eo_Class_Def *kls; if (toknz->source) eina_stringshare_del(toknz->source); EINA_LIST_FREE(toknz->classes, kls) eo_definitions_class_def_free(kls); free(toknz); }