efl/src/lib/eolian/eo_lexer.c

4600 lines
137 KiB
C
Raw Normal View History

#line 1 "lib/eolian/eo_lexer.rl"
#include <stdio.h>
#include <stdlib.h>
#include <Eina.h>
#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__)
#define INF_ENABLED EINA_FALSE
#ifdef INF
#undef INF
#endif
#define INF(...) if (INF_ENABLED) EINA_LOG_DOM_INFO(_eo_tokenizer_log_dom, __VA_ARGS__)
#define DBG_ENABLED EINA_FALSE
#ifdef DBG
#undef DBG
#endif
#define DBG(...) if (DBG_ENABLED) EINA_LOG_DOM_DBG(_eo_tokenizer_log_dom, __VA_ARGS__)
#define FUNC_PUBLIC 0
#define FUNC_PROTECTED 1
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 = NULL;
if (!strncmp(toknz->saved.tok, "protected ", 10))
{
toknz->saved.tok += 10;
toknz->tmp.fscope = FUNC_PROTECTED;
}
else
{
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);
prop->scope = toknz->tmp.fscope;
toknz->tmp.fscope = FUNC_PUBLIC;
}
return prop;
}
static Eo_Method_Def*
_eo_tokenizer_method_get(Eo_Tokenizer *toknz, char *p)
{
Eo_Method_Def *meth = NULL;
if (!strncmp(toknz->saved.tok, "protected ", 10))
{
toknz->saved.tok += 10;
toknz->tmp.fscope = FUNC_PROTECTED;
}
else
{
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);
meth->scope = toknz->tmp.fscope;
toknz->tmp.fscope = FUNC_PUBLIC;
}
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");
/* The next code part tries to identify the different tags of the
parameter.
First, we set the ';' to '\0', to search only inside this section.
We then strstr the different tags and if found, we update the internal
flag and clear the zone of the text. In this way, during the
determination of the type/variable, we will not be disturbed by the
flags.
We have to put back the ';' at the end.
*/
*p = '\0';
s = strstr(toknz->saved.tok, "@nonull");
if (s)
{
param->nonull = EINA_TRUE;
memset(s, ' ', 7);
}
s = strstr(toknz->saved.tok, "@own");
if (s)
{
param->own = EINA_TRUE;
memset(s, ' ', 4);
}
*p = ';';
s = p - 1; /* Don't look at the character ';' */
/* Remove any space between the param name and ';'/@nonull
* This loop fixes the case where "char *name ;" becomes the type of the param.
*/
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 ", 4) == 0)
{
toknz->saved.tok += 3;
param->way = PARAM_IN;
}
else if (strncmp(toknz->saved.tok, "@out ", 5) == 0)
{
toknz->saved.tok += 4;
param->way = PARAM_OUT;
}
else if (strncmp(toknz->saved.tok, "@inout ", 7) == 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_Ret_Def*
_eo_tokenizer_return_get(Eo_Tokenizer *toknz, char *p)
{
char *s;
Eo_Ret_Def *ret = calloc(1, sizeof(Eo_Ret_Def));
if (ret == NULL) ABORT(toknz, "calloc Eo_Ret_Def failure");
*p = '\0';
s = strstr(toknz->saved.tok, "@warn_unused");
if (s)
{
ret->warn_unused = EINA_TRUE;
memset(s, ' ', 12);
}
s = strstr(toknz->saved.tok, "@own");
if (s)
{
ret->own = EINA_TRUE;
memset(s, ' ', 4);
}
s = strchr(toknz->saved.tok, '(');
if (s)
{
char *ret_val;
char *end = strchr(s, ')');
if (!end)
ABORT(toknz, "wrong syntax (missing ')'): %s",
_eo_tokenizer_token_get(toknz, p));
/* Current values in s and end have to be changed to ' ' to not disturb the next steps (type extraction) */
*s++ = ' ';
while (*s == ' ') s++;
*end-- = ' ';
while (end > s && *end == ' ') end--;
if (end < s)
ABORT(toknz, "empty default return value: %s",
_eo_tokenizer_token_get(toknz, p));
ret_val = malloc(end - s + 2); /* string + '\0' */
memcpy(ret_val, s, end - s + 1);
ret_val[end - s + 1] = '\0';
ret->dflt_ret_val = ret_val;
memset(s, ' ', end - s + 1);
}
*p = ';';
s = p - 1; /* Don't look at the character ';' */
/* Remove any space between the param name and ';'
* This loop fixes the case where "char *name ;" becomes the type of the param.
*/
while (*s == ' ') s--;
if (s == toknz->saved.tok)
ABORT(toknz, "wrong parameter: %s", _eo_tokenizer_token_get(toknz, p));
s++;
ret->type = _eo_tokenizer_token_get(toknz, s);
return ret;
}
static Eo_Accessor_Param*
_eo_tokenizer_accessor_param_get(Eo_Tokenizer *toknz, char *p)
{
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 455 "lib/eolian/eo_lexer.rl"
#line 386 "lib/eolian/eo_lexer.c"
static const char _eo_tokenizer_actions[] = {
0, 1, 0, 1, 2, 1, 6, 1,
10, 1, 15, 1, 16, 1, 17, 1,
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,
44, 1, 45, 1, 46, 1, 47, 1,
48, 1, 49, 1, 50, 1, 51, 1,
52, 1, 53, 1, 54, 1, 55, 1,
56, 1, 57, 1, 58, 1, 59, 1,
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, 85, 1,
86, 1, 87, 1, 88, 1, 89, 1,
90, 1, 91, 1, 92, 1, 93, 1,
94, 1, 95, 1, 96, 1, 97, 1,
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, 2,
0, 41, 2, 0, 52, 2, 0, 61,
2, 0, 72, 2, 0, 81, 2, 0,
93, 2, 0, 102, 2, 0, 120, 2,
4, 47, 2, 5, 42, 2, 6, 2,
2, 7, 43, 2, 8, 56, 2, 10,
0, 2, 10, 73, 2, 12, 88, 2,
13, 83, 2, 14, 84, 2, 15, 0,
2, 15, 94, 2, 16, 0, 2, 17,
0, 2, 17, 121, 2, 18, 0, 2,
19, 0, 2, 20, 0, 2, 20, 2,
2, 24, 0, 2, 25, 0, 2, 25,
2, 2, 26, 0, 2, 28, 0, 2,
29, 0, 2, 29, 2, 2, 36, 0,
2, 36, 121, 2, 39, 1, 2, 39,
2, 2, 39, 3, 2, 39, 9, 2,
39, 11
};
static const short _eo_tokenizer_key_offsets[] = {
0, 2, 5, 6, 7, 8, 9, 10,
11, 12, 15, 22, 37, 41, 49, 54,
58, 70, 75, 82, 83, 84, 85, 88,
89, 90, 91, 92, 93, 94, 95, 98,
99, 100, 101, 104, 107, 109, 112, 123,
125, 128, 129, 133, 140, 147, 159, 170,
182, 194, 206, 218, 229, 237, 245, 257,
269, 281, 293, 304, 312, 326, 341, 345,
346, 347, 357, 359, 362, 364, 367, 368,
380, 384, 385, 386, 396, 398, 401, 403,
406, 407, 408, 412, 413, 414, 418, 419,
423, 424, 425, 426, 427, 431, 433, 436,
437, 451, 455, 466, 477, 480, 482, 485,
496, 498, 501, 502, 503, 504, 505, 506,
507, 508, 509, 510, 513, 520, 528, 529,
530, 531, 532, 536, 537, 538, 539, 540,
543, 550, 564, 579, 583, 584, 585, 595,
597, 600, 602, 605, 606, 620, 624, 635,
646, 649, 651, 654, 665, 667, 670, 671,
672, 673, 674, 675, 676, 677, 678, 679,
680, 681, 685, 686, 687, 691, 698, 706,
707, 708, 709, 710, 711, 712, 713, 714,
715, 719, 720, 721, 722, 723, 724, 725,
726, 730, 737, 745, 746, 747, 748, 749,
753, 761, 777, 781, 793, 794, 795, 805,
807, 810, 818, 826, 834, 846, 850, 851,
852, 853, 854, 855, 856, 857, 858, 862,
870, 883, 888, 892, 893, 894, 895, 896,
897, 909, 914, 918, 927, 931, 932, 933,
934, 935, 936, 940, 949, 956, 967, 971,
985, 995, 1007, 1012, 1018, 1023, 1024, 1025,
1026, 1027, 1028, 1031, 1038, 1046, 1047, 1051,
1059, 1063, 1068, 1069, 1070, 1080, 1082, 1085,
1095, 1107, 1119, 1120, 1121, 1122, 1123, 1124,
1125, 1126, 1127, 1128, 1129, 1130, 1131, 1135,
1142, 1150, 1151, 1152, 1153, 1154, 1155, 1159,
1160, 1161, 1162, 1163, 1164, 1165, 1166, 1167,
1171, 1179, 1182, 1184, 1185, 1186, 1187, 1188,
1199, 1202, 1204, 1215, 1227, 1239, 1243, 1243,
1244, 1253, 1256, 1258, 1269, 1273, 1273, 1274,
1283, 1286, 1288, 1289, 1290, 1291, 1292, 1293,
1304, 1307, 1309, 1316, 1317, 1326, 1329, 1331,
1332, 1333, 1334, 1335, 1339, 1339, 1340, 1351,
1354, 1356, 1363, 1364, 1376, 1379, 1381, 1382,
1384, 1387, 1389, 1392, 1393, 1394, 1395, 1396,
1399, 1400, 1401
};
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, 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, 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, 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, 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, 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, 95, 40, 42, 45, 46,
48, 57, 64, 90, 97, 122, 9, 13,
32, 59, 95, 40, 42, 45, 46, 48,
57, 64, 90, 97, 122, 9, 13, 32,
47, 42, 64, 10, 95, 0, 32, 48,
57, 64, 90, 97, 122, 10, 42, 10,
42, 47, 10, 42, 10, 42, 47, 10,
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, 9, 10, 13,
32, 95, 123, 0, 31, 48, 57, 65,
90, 97, 122, 10, 123, 0, 32, 10,
95, 123, 0, 32, 48, 57, 65, 90,
97, 122, 10, 95, 123, 0, 32, 48,
57, 65, 90, 97, 122, 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,
59, 95, 48, 57, 65, 90, 97, 122,
114, 97, 109, 115, 10, 123, 0, 32,
116, 117, 114, 110, 9, 13, 32, 9,
13, 32, 65, 90, 97, 122, 9, 13,
32, 95, 40, 42, 45, 46, 48, 57,
64, 90, 97, 122, 9, 13, 32, 59,
95, 40, 42, 45, 46, 48, 57, 64,
90, 97, 122, 9, 13, 32, 47, 42,
64, 10, 95, 0, 32, 48, 57, 64,
90, 97, 122, 10, 42, 10, 42, 47,
10, 42, 10, 42, 47, 10, 9, 10,
13, 32, 95, 123, 0, 31, 48, 57,
65, 90, 97, 122, 10, 123, 0, 32,
10, 95, 123, 0, 32, 48, 57, 65,
90, 97, 122, 10, 95, 123, 0, 32,
48, 57, 65, 90, 97, 122, 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, 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, 59, 95, 48, 57, 65, 90, 97,
122, 101, 110, 116, 115, 10, 123, 0,
32, 10, 125, 0, 32, 65, 90, 97,
122, 9, 10, 13, 32, 40, 44, 59,
95, 0, 31, 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, 9, 10, 13, 32, 40, 59,
0, 31, 9, 13, 32, 95, 65, 90,
97, 122, 9, 13, 32, 41, 42, 95,
48, 57, 65, 90, 97, 122, 10, 59,
0, 32, 112, 108, 101, 109, 101, 110,
116, 115, 10, 123, 0, 32, 10, 125,
0, 32, 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, 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, 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, 58, 95,
48, 57, 65, 90, 97, 122, 58, 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, 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, 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, 9, 13, 32, 58,
95, 48, 57, 65, 90, 97, 122, 9,
13, 32, 58, 95, 101, 48, 57, 65,
90, 97, 122, 9, 13, 32, 58, 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, 48, 57, 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, 48, 57, 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, 7, 2, 6, 1, 2,
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, 4, 3, 3, 6, 5, 6,
6, 6, 6, 5, 4, 2, 6, 6,
6, 6, 5, 4, 4, 5, 4, 1,
1, 2, 2, 3, 2, 3, 1, 6,
4, 1, 1, 2, 2, 3, 2, 3,
1, 1, 2, 1, 1, 2, 1, 2,
1, 1, 1, 1, 2, 2, 3, 1,
6, 2, 3, 3, 3, 2, 3, 3,
2, 3, 1, 1, 1, 1, 1, 1,
1, 1, 1, 3, 3, 2, 1, 1,
1, 1, 2, 1, 1, 1, 1, 3,
3, 4, 5, 4, 1, 1, 2, 2,
3, 2, 3, 1, 6, 2, 3, 3,
3, 2, 3, 3, 2, 3, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 1, 2, 1, 2, 1,
1, 1, 1, 1, 1, 1, 1, 1,
2, 1, 1, 1, 1, 1, 1, 1,
2, 1, 2, 1, 1, 1, 1, 2,
2, 8, 2, 6, 1, 1, 2, 2,
3, 2, 6, 4, 6, 2, 1, 1,
1, 1, 1, 1, 1, 1, 2, 2,
5, 3, 2, 1, 1, 1, 1, 1,
6, 3, 2, 3, 2, 1, 1, 1,
1, 1, 2, 3, 3, 3, 2, 8,
4, 6, 5, 4, 3, 1, 1, 1,
1, 1, 3, 3, 2, 1, 0, 2,
2, 3, 1, 1, 2, 2, 3, 4,
6, 4, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 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, 5, 6, 6, 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, 4, 1, 1, 2, 1,
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, 0, 2, 2, 3, 3, 3,
3, 3, 3, 3, 2, 3, 3, 3,
3, 3, 3, 2, 5, 5, 0, 0,
0, 4, 0, 0, 0, 0, 0, 3,
0, 0, 0, 4, 0, 0, 0, 0,
0, 0, 1, 0, 0, 1, 0, 1,
0, 0, 0, 0, 1, 0, 0, 0,
4, 1, 4, 4, 0, 0, 0, 4,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 2, 3, 0, 0,
0, 0, 1, 0, 0, 0, 0, 0,
2, 5, 5, 0, 0, 0, 4, 0,
0, 0, 0, 0, 4, 1, 4, 4,
0, 0, 0, 4, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 1, 3, 3, 0,
0, 0, 0, 0, 0, 0, 0, 0,
1, 0, 0, 0, 0, 0, 0, 0,
1, 3, 3, 0, 0, 0, 0, 1,
3, 4, 1, 3, 0, 0, 4, 0,
0, 3, 1, 2, 3, 1, 0, 0,
0, 0, 0, 0, 0, 0, 1, 3,
4, 1, 1, 0, 0, 0, 0, 0,
3, 1, 1, 3, 1, 0, 0, 0,
0, 0, 1, 3, 2, 4, 1, 3,
3, 3, 0, 1, 1, 0, 0, 0,
0, 0, 0, 2, 3, 0, 2, 3,
1, 1, 0, 0, 4, 0, 0, 3,
3, 4, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 1, 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, 4,
1, 0, 3, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 0, 4, 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, 43, 47, 55, 59,
63, 72, 77, 82, 84, 86, 88, 92,
94, 96, 98, 100, 102, 104, 106, 110,
112, 114, 116, 120, 124, 127, 131, 139,
142, 146, 148, 153, 159, 165, 175, 184,
194, 204, 214, 224, 233, 240, 246, 256,
266, 276, 286, 295, 302, 312, 323, 328,
330, 332, 339, 342, 346, 349, 353, 355,
365, 370, 372, 374, 381, 384, 388, 391,
395, 397, 399, 403, 405, 407, 411, 413,
417, 419, 421, 423, 425, 429, 432, 436,
438, 449, 453, 461, 469, 473, 476, 480,
488, 491, 495, 497, 499, 501, 503, 505,
507, 509, 511, 513, 517, 523, 529, 531,
533, 535, 537, 541, 543, 545, 547, 549,
553, 559, 569, 580, 585, 587, 589, 596,
599, 603, 606, 610, 612, 623, 627, 635,
643, 647, 650, 654, 662, 665, 669, 671,
673, 675, 677, 679, 681, 683, 685, 687,
689, 691, 695, 697, 699, 703, 708, 714,
716, 718, 720, 722, 724, 726, 728, 730,
732, 736, 738, 740, 742, 744, 746, 748,
750, 754, 759, 765, 767, 769, 771, 773,
777, 783, 796, 800, 810, 812, 814, 821,
824, 828, 834, 842, 849, 859, 863, 865,
867, 869, 871, 873, 875, 877, 879, 883,
889, 899, 904, 908, 910, 912, 914, 916,
918, 928, 933, 937, 944, 948, 950, 952,
954, 956, 958, 962, 969, 975, 983, 987,
999, 1007, 1017, 1023, 1029, 1034, 1036, 1038,
1040, 1042, 1044, 1048, 1054, 1060, 1062, 1065,
1071, 1075, 1080, 1082, 1084, 1091, 1094, 1098,
1106, 1116, 1125, 1127, 1129, 1131, 1133, 1135,
1137, 1139, 1141, 1143, 1145, 1147, 1149, 1153,
1158, 1164, 1166, 1168, 1170, 1172, 1174, 1178,
1180, 1182, 1184, 1186, 1188, 1190, 1192, 1194,
1198, 1206, 1209, 1212, 1214, 1216, 1218, 1220,
1229, 1232, 1235, 1244, 1254, 1264, 1269, 1270,
1272, 1279, 1282, 1285, 1294, 1299, 1300, 1302,
1311, 1314, 1317, 1319, 1321, 1323, 1325, 1327,
1335, 1338, 1341, 1346, 1348, 1357, 1360, 1363,
1365, 1367, 1369, 1371, 1376, 1377, 1379, 1387,
1390, 1393, 1398, 1400, 1412, 1415, 1418, 1420,
1423, 1426, 1429, 1432, 1434, 1436, 1438, 1440,
1443, 1445, 1447
};
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, 17,
18, 17, 17, 19, 20, 21, 16, 20,
20, 20, 0, 23, 24, 22, 0, 25,
23, 25, 25, 26, 24, 22, 0, 27,
28, 28, 0, 30, 31, 29, 0, 33,
34, 35, 36, 32, 36, 36, 36, 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, 72,
57, 73, 73, 73, 74, 74, 57, 75,
75, 75, 76, 76, 57, 77, 77, 77,
77, 78, 77, 77, 77, 77, 57, 71,
71, 71, 72, 79, 79, 79, 79, 57,
71, 71, 71, 72, 79, 80, 79, 79,
79, 57, 71, 71, 71, 72, 79, 81,
79, 79, 79, 57, 71, 71, 71, 72,
79, 82, 79, 79, 79, 57, 71, 71,
71, 72, 79, 83, 79, 79, 79, 57,
84, 84, 84, 72, 79, 79, 79, 79,
57, 84, 84, 84, 72, 85, 85, 57,
87, 86, 86, 86, 86, 57, 71, 71,
71, 72, 79, 88, 79, 79, 79, 57,
71, 71, 71, 72, 79, 89, 79, 79,
79, 57, 71, 71, 71, 72, 79, 90,
79, 79, 79, 57, 71, 71, 71, 72,
79, 91, 79, 79, 79, 57, 92, 92,
92, 72, 79, 79, 79, 79, 57, 92,
92, 92, 72, 93, 93, 57, 94, 94,
94, 94, 94, 94, 94, 94, 94, 57,
94, 94, 94, 95, 94, 94, 94, 94,
94, 94, 57, 97, 97, 97, 98, 96,
99, 96, 100, 96, 101, 102, 100, 102,
102, 102, 96, 104, 105, 103, 104, 105,
106, 103, 109, 110, 108, 109, 110, 111,
108, 113, 112, 114, 114, 114, 114, 115,
114, 114, 114, 114, 107, 117, 117, 117,
118, 116, 119, 116, 120, 116, 121, 122,
120, 122, 122, 122, 116, 124, 125, 123,
124, 125, 126, 123, 129, 130, 128, 129,
130, 131, 128, 133, 132, 134, 127, 135,
136, 134, 127, 137, 127, 138, 127, 139,
140, 138, 127, 141, 127, 142, 143, 141,
127, 144, 127, 145, 127, 146, 127, 147,
127, 148, 149, 147, 127, 152, 153, 151,
152, 153, 154, 151, 156, 155, 158, 159,
158, 158, 160, 161, 157, 160, 160, 160,
150, 163, 164, 162, 150, 163, 165, 164,
162, 165, 165, 165, 150, 159, 165, 161,
157, 165, 165, 165, 150, 168, 169, 170,
167, 168, 169, 167, 168, 169, 171, 167,
172, 169, 173, 170, 173, 173, 173, 167,
175, 176, 174, 175, 176, 177, 174, 179,
178, 180, 166, 181, 166, 182, 166, 183,
166, 184, 166, 185, 166, 186, 166, 187,
166, 188, 188, 188, 166, 188, 188, 188,
189, 189, 166, 191, 190, 190, 190, 190,
166, 192, 166, 193, 166, 194, 166, 195,
166, 196, 197, 195, 166, 198, 166, 199,
166, 200, 166, 201, 166, 202, 202, 202,
166, 202, 202, 202, 203, 203, 166, 204,
204, 204, 204, 204, 204, 204, 204, 204,
166, 204, 204, 204, 205, 204, 204, 204,
204, 204, 204, 166, 207, 207, 207, 208,
206, 209, 206, 210, 206, 211, 212, 210,
212, 212, 212, 206, 214, 215, 213, 214,
215, 216, 213, 219, 220, 218, 219, 220,
221, 218, 223, 222, 225, 226, 225, 225,
227, 228, 224, 227, 227, 227, 217, 230,
231, 229, 217, 230, 232, 231, 229, 232,
232, 232, 217, 226, 232, 228, 224, 232,
232, 232, 217, 235, 236, 237, 234, 235,
236, 234, 235, 236, 238, 234, 239, 236,
240, 237, 240, 240, 240, 234, 242, 243,
241, 242, 243, 244, 241, 246, 245, 247,
233, 248, 233, 249, 233, 250, 233, 251,
233, 252, 233, 253, 233, 254, 233, 255,
233, 256, 233, 257, 258, 256, 233, 259,
233, 260, 233, 261, 262, 260, 233, 263,
262, 264, 264, 233, 266, 265, 265, 265,
265, 233, 267, 233, 268, 233, 269, 233,
270, 233, 271, 233, 272, 233, 273, 233,
274, 233, 275, 233, 276, 277, 275, 233,
278, 233, 279, 233, 280, 233, 281, 233,
282, 233, 283, 233, 284, 233, 285, 286,
284, 233, 287, 286, 288, 288, 233, 290,
289, 289, 289, 289, 233, 291, 233, 292,
233, 293, 233, 294, 233, 295, 296, 294,
233, 297, 299, 296, 298, 298, 233, 301,
302, 301, 301, 303, 304, 305, 304, 300,
304, 304, 304, 233, 307, 308, 306, 233,
308, 297, 308, 308, 309, 299, 296, 298,
298, 233, 310, 233, 311, 233, 312, 313,
311, 313, 313, 313, 233, 315, 316, 314,
315, 316, 317, 314, 319, 321, 318, 320,
320, 233, 322, 307, 322, 322, 323, 308,
306, 233, 323, 323, 323, 324, 324, 324,
233, 325, 325, 325, 326, 325, 325, 325,
325, 325, 233, 328, 329, 327, 233, 330,
233, 331, 233, 332, 233, 333, 233, 334,
233, 335, 233, 336, 233, 337, 233, 338,
339, 337, 233, 340, 342, 339, 341, 341,
233, 344, 346, 347, 345, 348, 343, 345,
345, 345, 233, 350, 339, 351, 349, 233,
352, 353, 351, 233, 354, 233, 355, 233,
356, 233, 357, 233, 358, 233, 360, 361,
360, 360, 362, 364, 359, 363, 363, 233,
366, 367, 368, 365, 233, 369, 370, 367,
233, 340, 339, 342, 339, 341, 341, 233,
371, 372, 368, 233, 373, 233, 374, 233,
375, 233, 376, 233, 377, 233, 378, 379,
377, 233, 380, 381, 382, 379, 383, 383,
233, 381, 381, 381, 384, 384, 233, 386,
388, 387, 385, 387, 387, 387, 233, 390,
382, 389, 233, 382, 392, 382, 382, 393,
381, 382, 394, 391, 383, 383, 233, 392,
381, 382, 394, 391, 383, 383, 233, 395,
395, 395, 397, 398, 396, 396, 396, 396,
233, 399, 399, 399, 381, 382, 233, 401,
400, 402, 403, 400, 233, 401, 402, 403,
400, 233, 404, 233, 405, 233, 406, 233,
407, 233, 408, 233, 409, 409, 409, 233,
409, 409, 409, 410, 410, 233, 412, 411,
411, 411, 411, 233, 413, 233, 414, 414,
233, 416, 415, 415, 415, 415, 233, 418,
403, 417, 233, 369, 367, 370, 367, 233,
419, 233, 420, 233, 421, 422, 420, 422,
422, 422, 233, 424, 425, 423, 424, 425,
426, 423, 428, 429, 430, 432, 427, 431,
431, 233, 433, 366, 433, 433, 367, 368,
365, 434, 434, 233, 436, 438, 437, 439,
435, 437, 437, 437, 233, 345, 233, 440,
233, 441, 233, 442, 233, 443, 233, 444,
233, 445, 233, 446, 233, 447, 233, 448,
233, 449, 233, 450, 233, 451, 452, 450,
233, 453, 452, 454, 454, 233, 456, 455,
455, 455, 455, 233, 457, 233, 458, 233,
459, 233, 460, 233, 461, 233, 462, 463,
461, 233, 464, 233, 465, 233, 466, 233,
467, 233, 468, 233, 469, 233, 470, 233,
471, 233, 472, 473, 471, 233, 476, 477,
478, 479, 480, 481, 475, 474, 476, 475,
482, 1, 5, 483, 484, 483, 485, 483,
486, 483, 487, 483, 490, 491, 493, 494,
495, 489, 492, 492, 488, 490, 489, 496,
498, 69, 497, 71, 71, 71, 72, 79,
79, 79, 79, 497, 71, 71, 71, 72,
79, 499, 79, 79, 79, 497, 71, 71,
71, 72, 79, 500, 79, 79, 79, 497,
97, 97, 97, 98, 501, 502, 504, 503,
507, 508, 510, 506, 509, 509, 505, 507,
506, 511, 108, 112, 512, 114, 114, 114,
114, 114, 114, 114, 114, 512, 117, 117,
117, 118, 513, 514, 516, 515, 519, 520,
521, 522, 523, 524, 525, 518, 517, 519,
518, 526, 128, 132, 527, 528, 527, 529,
527, 530, 527, 531, 527, 533, 532, 536,
537, 539, 535, 538, 538, 538, 534, 536,
535, 540, 151, 155, 541, 160, 160, 160,
160, 541, 543, 542, 546, 547, 548, 549,
550, 551, 552, 545, 544, 546, 545, 553,
555, 178, 554, 556, 554, 557, 554, 558,
554, 559, 554, 207, 207, 207, 208, 560,
561, 563, 562, 566, 567, 569, 565, 568,
568, 568, 564, 566, 565, 570, 218, 222,
571, 227, 227, 227, 227, 571, 573, 572,
576, 577, 578, 579, 580, 581, 582, 583,
584, 585, 575, 574, 576, 575, 586, 588,
245, 587, 589, 587, 590, 591, 587, 594,
593, 592, 595, 596, 587, 599, 598, 597,
601, 600, 602, 587, 604, 603, 605, 587,
608, 607, 606, 609, 587, 610, 587, 612,
611, 0
};
static const short _eo_tokenizer_trans_targs[] = {
296, 0, 0, 1, 296, 2, 296, 4,
5, 6, 7, 8, 9, 10, 10, 11,
12, 13, 12, 14, 11, 296, 12, 12,
296, 13, 14, 15, 16, 12, 12, 296,
17, 17, 15, 18, 16, 17, 17, 18,
18, 20, 21, 22, 10, 24, 25, 26,
27, 28, 29, 30, 10, 32, 33, 34,
10, 303, 36, 36, 37, 38, 303, 38,
39, 39, 39, 40, 303, 41, 303, 42,
43, 44, 45, 44, 45, 45, 303, 46,
48, 49, 50, 51, 52, 53, 53, 303,
55, 56, 57, 58, 59, 60, 61, 309,
303, 62, 63, 64, 65, 65, 66, 66,
66, 67, 310, 312, 68, 68, 69, 312,
70, 312, 71, 316, 312, 72, 73, 74,
75, 75, 76, 76, 76, 77, 317, 319,
78, 78, 79, 319, 80, 319, 82, 82,
319, 84, 85, 85, 319, 87, 87, 319,
89, 90, 91, 92, 92, 319, 327, 93,
93, 94, 327, 95, 327, 97, 98, 97,
96, 327, 97, 97, 327, 99, 332, 101,
101, 102, 103, 332, 103, 104, 104, 104,
105, 332, 106, 332, 108, 109, 110, 332,
112, 113, 114, 115, 116, 117, 117, 332,
119, 120, 121, 122, 122, 332, 124, 125,
126, 127, 128, 129, 130, 339, 332, 131,
132, 133, 134, 134, 135, 135, 135, 136,
340, 342, 137, 137, 138, 342, 139, 342,
141, 142, 141, 140, 342, 141, 141, 342,
143, 347, 145, 145, 146, 147, 347, 147,
148, 148, 148, 149, 347, 150, 347, 152,
153, 154, 155, 156, 157, 158, 159, 160,
161, 161, 347, 163, 164, 164, 165, 165,
166, 166, 352, 168, 169, 170, 171, 172,
173, 174, 175, 176, 176, 347, 178, 179,
180, 181, 182, 183, 184, 184, 185, 185,
186, 186, 354, 188, 189, 190, 191, 191,
192, 192, 193, 355, 194, 202, 194, 203,
193, 195, 194, 194, 195, 196, 197, 198,
198, 199, 199, 199, 200, 201, 192, 192,
193, 355, 202, 203, 204, 204, 205, 194,
194, 195, 207, 208, 209, 210, 211, 212,
213, 214, 214, 215, 215, 216, 357, 217,
217, 216, 266, 215, 218, 217, 217, 218,
218, 219, 220, 221, 222, 223, 224, 225,
264, 225, 226, 265, 228, 225, 225, 226,
228, 226, 227, 228, 229, 230, 231, 232,
233, 234, 234, 235, 235, 236, 239, 241,
237, 238, 238, 237, 239, 238, 238, 240,
240, 258, 243, 242, 241, 236, 239, 242,
244, 244, 245, 257, 246, 247, 248, 249,
250, 251, 252, 252, 253, 254, 255, 255,
256, 256, 256, 259, 260, 260, 261, 261,
261, 262, 263, 240, 240, 236, 239, 241,
243, 264, 265, 225, 225, 265, 226, 228,
268, 269, 270, 271, 272, 273, 274, 275,
276, 277, 278, 278, 279, 279, 280, 280,
359, 282, 283, 284, 285, 286, 286, 347,
288, 289, 290, 291, 292, 293, 294, 295,
295, 347, 296, 297, 297, 298, 299, 300,
301, 302, 296, 296, 3, 19, 23, 31,
303, 304, 304, 305, 306, 307, 308, 311,
303, 303, 35, 47, 54, 303, 303, 303,
303, 312, 313, 313, 314, 315, 318, 312,
312, 312, 312, 312, 312, 319, 320, 320,
321, 322, 323, 324, 325, 326, 319, 319,
81, 83, 86, 88, 319, 319, 327, 328,
328, 329, 330, 331, 327, 327, 327, 327,
332, 333, 333, 334, 335, 336, 337, 338,
341, 332, 332, 100, 107, 111, 118, 123,
332, 332, 332, 332, 342, 343, 343, 344,
345, 346, 342, 342, 342, 342, 347, 348,
348, 349, 350, 351, 353, 356, 358, 360,
361, 362, 347, 347, 144, 151, 162, 167,
347, 352, 352, 177, 187, 347, 354, 354,
347, 347, 206, 347, 347, 267, 347, 359,
359, 281, 287, 347, 347
};
static const short _eo_tokenizer_trans_actions[] = {
221, 0, 1, 0, 211, 0, 244, 0,
0, 0, 0, 0, 0, 45, 0, 3,
51, 51, 325, 51, 0, 328, 0, 1,
213, 0, 0, 0, 3, 13, 286, 289,
11, 283, 11, 11, 0, 0, 1, 0,
1, 0, 0, 0, 43, 0, 0, 0,
0, 0, 0, 0, 49, 0, 0, 0,
47, 77, 0, 1, 0, 0, 61, 1,
3, 0, 1, 0, 59, 0, 223, 0,
0, 5, 253, 0, 3, 0, 256, 0,
0, 0, 0, 0, 0, 3, 0, 250,
0, 0, 0, 0, 0, 3, 0, 337,
75, 0, 0, 0, 0, 1, 3, 0,
1, 0, 0, 95, 0, 1, 0, 79,
0, 226, 0, 340, 93, 0, 0, 0,
0, 1, 3, 0, 1, 0, 0, 117,
0, 1, 0, 97, 0, 229, 0, 1,
99, 0, 0, 1, 103, 0, 1, 101,
0, 0, 0, 0, 1, 105, 133, 0,
1, 0, 119, 0, 232, 7, 7, 262,
0, 265, 0, 1, 121, 0, 155, 0,
1, 0, 0, 137, 1, 3, 0, 1,
0, 135, 0, 235, 0, 0, 0, 274,
0, 0, 0, 0, 0, 3, 0, 271,
0, 0, 0, 0, 1, 139, 0, 0,
0, 0, 0, 3, 0, 343, 153, 0,
0, 0, 0, 1, 3, 0, 1, 0,
0, 171, 0, 1, 0, 157, 0, 238,
9, 9, 277, 0, 280, 0, 1, 159,
0, 209, 0, 1, 0, 0, 175, 1,
3, 0, 1, 0, 173, 0, 241, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 181, 0, 0, 1, 0, 1,
3, 0, 25, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 183, 0, 0,
0, 0, 0, 0, 0, 1, 0, 1,
3, 0, 23, 0, 0, 0, 0, 1,
0, 1, 3, 0, 15, 15, 292, 15,
0, 15, 0, 1, 0, 0, 0, 0,
1, 3, 0, 1, 0, 0, 19, 298,
301, 19, 0, 0, 3, 0, 0, 17,
295, 17, 0, 0, 0, 0, 0, 0,
0, 0, 1, 0, 1, 3, 0, 27,
304, 0, 0, 27, 27, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 29,
29, 307, 29, 310, 29, 0, 1, 0,
0, 1, 0, 1, 0, 0, 0, 0,
0, 0, 1, 0, 1, 0, 0, 3,
3, 35, 316, 0, 35, 0, 1, 0,
1, 0, 0, 33, 0, 33, 33, 0,
0, 1, 0, 0, 0, 0, 0, 0,
0, 0, 3, 0, 39, 0, 3, 0,
41, 0, 1, 0, 0, 1, 3, 0,
1, 0, 0, 37, 319, 37, 37, 322,
37, 0, 3, 31, 313, 0, 31, 31,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1, 0, 1, 3, 0,
21, 0, 0, 0, 0, 0, 1, 187,
0, 0, 0, 0, 0, 0, 0, 0,
1, 185, 215, 0, 1, 331, 57, 57,
57, 57, 217, 219, 0, 0, 0, 0,
65, 0, 1, 331, 334, 334, 334, 0,
67, 73, 0, 0, 0, 69, 247, 71,
63, 83, 0, 1, 331, 334, 0, 85,
91, 87, 259, 89, 81, 109, 0, 1,
331, 57, 57, 57, 57, 0, 111, 115,
0, 0, 0, 0, 113, 107, 125, 0,
1, 331, 334, 0, 127, 131, 129, 123,
143, 0, 1, 331, 57, 57, 57, 57,
0, 145, 151, 0, 0, 0, 0, 0,
147, 268, 149, 141, 163, 0, 1, 331,
334, 0, 165, 169, 167, 161, 191, 0,
1, 331, 57, 57, 57, 57, 57, 57,
57, 0, 193, 207, 0, 0, 0, 0,
199, 0, 1, 0, 0, 197, 0, 1,
203, 179, 0, 201, 177, 0, 195, 0,
1, 0, 0, 205, 189
};
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,
53, 0, 0, 0, 0, 0, 0, 53,
0, 0, 0, 0, 0, 0, 0, 0,
53, 0, 0, 0, 0, 0, 0, 53,
0, 0, 0, 0, 0, 0, 0, 53,
0, 0, 0, 0, 53, 0, 0, 0,
0, 0, 0, 0, 0, 0, 53, 0,
0, 0, 0, 53, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0
};
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,
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_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, 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, 97, 97,
97, 97, 97, 97, 108, 108, 108, 108,
117, 117, 117, 117, 117, 117, 128, 128,
128, 128, 128, 128, 128, 128, 128, 128,
128, 128, 128, 128, 128, 151, 151, 151,
151, 151, 151, 151, 167, 167, 167, 167,
167, 167, 167, 167, 167, 167, 167, 167,
167, 167, 167, 167, 167, 167, 167, 167,
167, 167, 167, 167, 167, 167, 167, 167,
167, 167, 167, 207, 207, 207, 207, 207,
207, 218, 218, 218, 218, 218, 218, 218,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
234, 234, 234, 234, 234, 234, 234, 234,
0, 483, 484, 484, 484, 484, 484, 0,
497, 498, 498, 498, 498, 502, 503, 504,
0, 512, 513, 513, 514, 515, 516, 0,
527, 528, 528, 528, 528, 528, 533, 0,
541, 542, 542, 543, 0, 554, 555, 555,
555, 555, 555, 561, 562, 563, 0, 571,
572, 572, 573, 0, 587, 588, 588, 588,
593, 588, 598, 601, 588, 604, 588, 607,
588, 588, 612
};
static const int eo_tokenizer_start = 296;
static const int eo_tokenizer_first_final = 296;
static const int eo_tokenizer_error = -1;
static const int eo_tokenizer_en_tokenize_accessor = 303;
static const int eo_tokenizer_en_tokenize_params = 312;
static const int eo_tokenizer_en_tokenize_property = 319;
static const int eo_tokenizer_en_tokenize_properties = 327;
static const int eo_tokenizer_en_tokenize_method = 332;
static const int eo_tokenizer_en_tokenize_methods = 342;
static const int eo_tokenizer_en_tokenize_class = 347;
static const int eo_tokenizer_en_main = 296;
#line 1053 "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 1339 "lib/eolian/eo_lexer.c"
{
toknz->cs = eo_tokenizer_start;
toknz->ts = 0;
toknz->te = 0;
toknz->act = 0;
}
#line 1076 "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 1374 "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 38:
#line 1 "NONE"
{ toknz->ts = ( toknz->p);}
break;
#line 1393 "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 386 "lib/eolian/eo_lexer.rl"
{
toknz->current_line += 1;
DBG("inc[%d] %d", toknz->cs, toknz->current_line);
}
break;
case 1:
#line 391 "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 396 "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 473 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
if (toknz->tmp.accessor->ret != NULL)
ABORT(toknz, "accessor has already a return type");
toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
}
break;
case 4:
#line 480 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
if (toknz->tmp.accessor->ret->comment != NULL)
ABORT(toknz, "accessor return type has already a comment");
toknz->tmp.accessor->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
INF(" %s", toknz->tmp.accessor->ret->comment);
}
break;
case 5:
#line 489 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
}
break;
case 6:
#line 503 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
}
break;
case 7:
#line 507 "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 8:
#line 536 "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 9:
#line 544 "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 10:
#line 642 "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 11:
#line 682 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
if (toknz->tmp.meth->ret != NULL)
ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name);
toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
}
break;
case 12:
#line 689 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
if (toknz->tmp.meth->ret->comment != NULL)
ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
toknz->tmp.meth->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
INF(" %s", toknz->tmp.meth->ret->comment);
}
break;
case 13:
#line 698 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
}
break;
case 14:
#line 703 "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 15:
#line 763 "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 16:
#line 795 "lib/eolian/eo_lexer.rl"
{
const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
}
break;
case 17:
#line 800 "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 18:
#line 848 "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 19:
#line 854 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
if (toknz->tmp.event->type != NULL)
ABORT(toknz, "event %s has already a type %s", toknz->tmp.event->name, toknz->tmp.event->type);
toknz->tmp.event->type = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
}
break;
case 20:
#line 861 "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 21:
#line 869 "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 22:
#line 878 "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 23:
#line 887 "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 24:
#line 900 "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 25:
#line 906 "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 26:
#line 913 "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 27:
#line 920 "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 28:
#line 929 "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 29:
#line 935 "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 30:
#line 941 "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 31:
#line 948 "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 32:
#line 1019 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
}
break;
case 33:
#line 1022 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
}
break;
case 34:
#line 1025 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
}
break;
case 35:
#line 1028 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
}
break;
case 36:
#line 1032 "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 39:
#line 1 "NONE"
{ toknz->te = ( toknz->p)+1;}
break;
case 40:
#line 465 "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 41:
#line 401 "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 42:
#line 528 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 43:
#line 529 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 44:
#line 494 "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 = 319; goto _again;}
}}
break;
case 45:
#line 410 "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 46:
#line 524 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 47:
#line 527 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 48:
#line 494 "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 = 319; goto _again;}
}}
break;
case 49:
#line 410 "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 50:
#line 527 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 51:
#line 410 "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 52:
#line 401 "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 53:
#line 553 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" }");
toknz->tmp.param = NULL;
toknz->current_nesting--;
if (toknz->tmp.prop)
{ toknz->cs = 319; goto _again;}
else if (toknz->tmp.meth)
{ toknz->cs = 332; goto _again;}
else
ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
}}
break;
case 54:
#line 410 "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 55:
#line 569 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 56:
#line 571 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 57:
#line 553 "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 = 319; goto _again;}
else if (toknz->tmp.meth)
{ toknz->cs = 332; goto _again;}
else
ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
}}
break;
case 58:
#line 410 "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 59:
#line 571 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 60:
#line 410 "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 61:
#line 401 "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 62:
#line 578 "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 = 303; goto _again;}
}}
break;
case 63:
#line 585 "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 = 303; goto _again;}
}}
break;
case 64:
#line 592 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" keys {");
toknz->current_nesting++;
toknz->tmp.params = &(toknz->tmp.prop->keys);
{ toknz->cs = 312; goto _again;}
}}
break;
case 65:
#line 599 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" values {");
toknz->current_nesting++;
toknz->tmp.params = &(toknz->tmp.prop->values);
{ toknz->cs = 312; goto _again;}
}}
break;
case 66:
#line 606 "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->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 = 327; goto _again;}
}}
break;
case 67:
#line 410 "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 68:
#line 623 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 69:
#line 606 "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->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 = 327; goto _again;}
}}
break;
case 70:
#line 410 "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 71:
#line 410 "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 72:
#line 401 "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 73:
#line 635 "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 = 319; goto _again;}
}}
break;
case 74:
#line 648 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" }");
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 75:
#line 410 "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 76:
#line 657 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 77:
#line 648 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
INF(" }");
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 78:
#line 410 "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 79:
#line 410 "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 80:
#line 666 "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 81:
#line 401 "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 82:
#line 674 "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 = 312; goto _again;}
}}
break;
case 83:
#line 748 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 84:
#line 749 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 85:
#line 709 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
Eina_List **l = NULL;
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
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 = 342; goto _again;}
}}
break;
case 86:
#line 410 "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 87:
#line 743 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 88:
#line 747 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 89:
#line 709 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
Eina_List **l = NULL;
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
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 = 342; goto _again;}
}}
break;
case 90:
#line 410 "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 91:
#line 747 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 92:
#line 410 "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 93:
#line 401 "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 94:
#line 756 "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 = 332; goto _again;}
}}
break;
case 95:
#line 769 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" }");
toknz->current_methods_type = METH_TYPE_LAST;
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 96:
#line 410 "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 97:
#line 779 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 98:
#line 769 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
INF(" }");
toknz->current_methods_type = METH_TYPE_LAST;
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 99:
#line 410 "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 100:
#line 410 "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 101:
#line 788 "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 102:
#line 401 "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 103:
#line 806 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 104:
#line 809 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 105:
#line 812 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" constructors {");
toknz->current_methods_type = METH_CONSTRUCTOR;
toknz->current_nesting++;
{ toknz->cs = 342; goto _again;}
}}
break;
case 106:
#line 819 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" destructors {");
toknz->current_methods_type = METH_DESTRUCTOR;
toknz->current_nesting++;
{ toknz->cs = 342; goto _again;}
}}
break;
case 107:
#line 826 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" properties {");
toknz->current_nesting++;
{ toknz->cs = 327; goto _again;}
}}
break;
case 108:
#line 832 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" begin methods");
toknz->current_methods_type = METH_REGULAR;
toknz->current_nesting++;
{ toknz->cs = 342; goto _again;}
}}
break;
case 109:
#line 839 "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 = 296; goto _again;}
}}
break;
case 110:
#line 410 "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 111:
#line 994 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 112:
#line 997 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 113:
#line 998 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 114:
#line 999 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 115:
#line 806 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 116:
#line 809 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 117:
#line 839 "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 = 296; goto _again;}
}}
break;
case 118:
#line 410 "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 119:
#line 410 "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 120:
#line 401 "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 121:
#line 1012 "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 = 347; goto _again;}
}}
break;
case 122:
#line 410 "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 123:
#line 1047 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 124:
#line 410 "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 125:
#line 410 "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 2710 "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 37:
#line 1 "NONE"
{ toknz->ts = 0;}
break;
#line 2723 "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 1102 "lib/eolian/eo_lexer.rl"
if ( toknz->cs ==
#line 2744 "lib/eolian/eo_lexer.c"
-1
#line 1103 "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;
#line 2792 "lib/eolian/eo_lexer.c"
{
toknz->cs = eo_tokenizer_start;
toknz->ts = 0;
toknz->te = 0;
toknz->act = 0;
}
#line 1148 "lib/eolian/eo_lexer.rl"
toknz->p = buffer;
toknz->pe = toknz->p + len;
toknz->eof = toknz->pe;
#line 2809 "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 38:
#line 1 "NONE"
{ toknz->ts = ( toknz->p);}
break;
#line 2828 "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 386 "lib/eolian/eo_lexer.rl"
{
toknz->current_line += 1;
DBG("inc[%d] %d", toknz->cs, toknz->current_line);
}
break;
case 1:
#line 391 "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 396 "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 473 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
if (toknz->tmp.accessor->ret != NULL)
ABORT(toknz, "accessor has already a return type");
toknz->tmp.accessor->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
}
break;
case 4:
#line 480 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
if (!toknz->tmp.accessor->ret) ABORT(toknz, "No ret!!!");
if (toknz->tmp.accessor->ret->comment != NULL)
ABORT(toknz, "accessor return type has already a comment");
toknz->tmp.accessor->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
INF(" %s", toknz->tmp.accessor->ret->comment);
}
break;
case 5:
#line 489 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.accessor) ABORT(toknz, "No accessor!!!");
toknz->tmp.accessor->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
}
break;
case 6:
#line 503 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
}
break;
case 7:
#line 507 "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 8:
#line 536 "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 9:
#line 544 "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 10:
#line 642 "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 11:
#line 682 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
if (toknz->tmp.meth->ret != NULL)
ABORT(toknz, "method '%s' has already a return type", toknz->tmp.meth->name);
toknz->tmp.meth->ret = _eo_tokenizer_return_get(toknz, ( toknz->p));
}
break;
case 12:
#line 689 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
if (toknz->tmp.meth->ret != NULL) ABORT(toknz, "No ret!!!");
if (toknz->tmp.meth->ret->comment != NULL)
ABORT(toknz, "method '%s' return type has already a comment", toknz->tmp.meth->name);
toknz->tmp.meth->ret->comment = _eo_tokenizer_token_get(toknz, ( toknz->p)-2);
INF(" %s", toknz->tmp.meth->ret->comment);
}
break;
case 13:
#line 698 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
toknz->tmp.meth->legacy = _eo_tokenizer_token_get(toknz, ( toknz->p));
}
break;
case 14:
#line 703 "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 15:
#line 763 "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 16:
#line 795 "lib/eolian/eo_lexer.rl"
{
const char *base = _eo_tokenizer_token_get(toknz, ( toknz->p));
toknz->tmp.str_items = eina_list_append(toknz->tmp.str_items, base);
}
break;
case 17:
#line 800 "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 18:
#line 848 "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 19:
#line 854 "lib/eolian/eo_lexer.rl"
{
if (!toknz->tmp.event) ABORT(toknz, "No event!!!");
if (toknz->tmp.event->type != NULL)
ABORT(toknz, "event %s has already a type %s", toknz->tmp.event->name, toknz->tmp.event->type);
toknz->tmp.event->type = _eo_tokenizer_token_get(toknz, ( toknz->p)-1);
}
break;
case 20:
#line 861 "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 21:
#line 869 "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 22:
#line 878 "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 23:
#line 887 "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 24:
#line 900 "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 25:
#line 906 "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 26:
#line 913 "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 27:
#line 920 "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 28:
#line 929 "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 29:
#line 935 "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 30:
#line 941 "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 31:
#line 948 "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 32:
#line 1019 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
}
break;
case 33:
#line 1022 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
}
break;
case 34:
#line 1025 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
}
break;
case 35:
#line 1028 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
}
break;
case 36:
#line 1032 "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 39:
#line 1 "NONE"
{ toknz->te = ( toknz->p)+1;}
break;
case 40:
#line 465 "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 41:
#line 401 "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 42:
#line 528 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 43:
#line 529 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 44:
#line 494 "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 = 319; goto _again;}
}}
break;
case 45:
#line 410 "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 46:
#line 524 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 47:
#line 527 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 48:
#line 494 "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 = 319; goto _again;}
}}
break;
case 49:
#line 410 "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 50:
#line 527 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 51:
#line 410 "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 52:
#line 401 "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 53:
#line 553 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" }");
toknz->tmp.param = NULL;
toknz->current_nesting--;
if (toknz->tmp.prop)
{ toknz->cs = 319; goto _again;}
else if (toknz->tmp.meth)
{ toknz->cs = 332; goto _again;}
else
ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
}}
break;
case 54:
#line 410 "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 55:
#line 569 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 56:
#line 571 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 57:
#line 553 "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 = 319; goto _again;}
else if (toknz->tmp.meth)
{ toknz->cs = 332; goto _again;}
else
ABORT(toknz, "leaving tokenize_params but there is no property nor method pending");
}}
break;
case 58:
#line 410 "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 59:
#line 571 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 60:
#line 410 "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 61:
#line 401 "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 62:
#line 578 "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 = 303; goto _again;}
}}
break;
case 63:
#line 585 "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 = 303; goto _again;}
}}
break;
case 64:
#line 592 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" keys {");
toknz->current_nesting++;
toknz->tmp.params = &(toknz->tmp.prop->keys);
{ toknz->cs = 312; goto _again;}
}}
break;
case 65:
#line 599 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" values {");
toknz->current_nesting++;
toknz->tmp.params = &(toknz->tmp.prop->values);
{ toknz->cs = 312; goto _again;}
}}
break;
case 66:
#line 606 "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->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 = 327; goto _again;}
}}
break;
case 67:
#line 410 "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 68:
#line 623 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 69:
#line 606 "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->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 = 327; goto _again;}
}}
break;
case 70:
#line 410 "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 71:
#line 410 "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 72:
#line 401 "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 73:
#line 635 "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 = 319; goto _again;}
}}
break;
case 74:
#line 648 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" }");
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 75:
#line 410 "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 76:
#line 657 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 77:
#line 648 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
INF(" }");
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 78:
#line 410 "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 79:
#line 410 "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 80:
#line 666 "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 81:
#line 401 "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 82:
#line 674 "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 = 312; goto _again;}
}}
break;
case 83:
#line 748 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 84:
#line 749 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 85:
#line 709 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
Eina_List **l = NULL;
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
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 = 342; goto _again;}
}}
break;
case 86:
#line 410 "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 87:
#line 743 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 88:
#line 747 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 89:
#line 709 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
Eina_List **l = NULL;
if (!toknz->tmp.meth) ABORT(toknz, "No method!!!");
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 = 342; goto _again;}
}}
break;
case 90:
#line 410 "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 91:
#line 747 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 92:
#line 410 "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 93:
#line 401 "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 94:
#line 756 "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 = 332; goto _again;}
}}
break;
case 95:
#line 769 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" }");
toknz->current_methods_type = METH_TYPE_LAST;
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 96:
#line 410 "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 97:
#line 779 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 98:
#line 769 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
INF(" }");
toknz->current_methods_type = METH_TYPE_LAST;
toknz->current_nesting--;
{ toknz->cs = 347; goto _again;}
}}
break;
case 99:
#line 410 "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 100:
#line 410 "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 101:
#line 788 "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 102:
#line 401 "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 103:
#line 806 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 104:
#line 809 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 105:
#line 812 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" constructors {");
toknz->current_methods_type = METH_CONSTRUCTOR;
toknz->current_nesting++;
{ toknz->cs = 342; goto _again;}
}}
break;
case 106:
#line 819 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" destructors {");
toknz->current_methods_type = METH_DESTRUCTOR;
toknz->current_nesting++;
{ toknz->cs = 342; goto _again;}
}}
break;
case 107:
#line 826 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" properties {");
toknz->current_nesting++;
{ toknz->cs = 327; goto _again;}
}}
break;
case 108:
#line 832 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" begin methods");
toknz->current_methods_type = METH_REGULAR;
toknz->current_nesting++;
{ toknz->cs = 342; goto _again;}
}}
break;
case 109:
#line 839 "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 = 296; goto _again;}
}}
break;
case 110:
#line 410 "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 111:
#line 994 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 112:
#line 997 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 113:
#line 998 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 114:
#line 999 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 115:
#line 806 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 116:
#line 809 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 117:
#line 839 "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 = 296; goto _again;}
}}
break;
case 118:
#line 410 "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 119:
#line 410 "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 120:
#line 401 "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 121:
#line 1012 "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 = 347; goto _again;}
}}
break;
case 122:
#line 410 "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 123:
#line 1047 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 124:
#line 410 "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 125:
#line 410 "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 4145 "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 37:
#line 1 "NONE"
{ toknz->ts = 0;}
break;
#line 4158 "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 1156 "lib/eolian/eo_lexer.rl"
if ( toknz->cs ==
#line 4179 "lib/eolian/eo_lexer.c"
-1
#line 1157 "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> (%s)\n", sgn->name, sgn->type, sgn->comment);
EINA_LIST_FOREACH(kls->constructors, l, meth)
{
printf(" constructors: %s\n", meth->name);
if (meth->ret)
printf(" return: %s (%s)\n", meth->ret->type, meth->ret->comment);
printf(" legacy : %s\n", meth->legacy);
EINA_LIST_FOREACH(meth->params, m, param)
{
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);
if (meth->ret)
printf(" return: %s (%s)\n", meth->ret->type, meth->ret->comment);
printf(" legacy : %s\n", meth->legacy);
EINA_LIST_FOREACH(meth->params, m, param)
{
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?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);
if (meth->ret)
printf(" return: %s (%s)\n", meth->ret->type, meth->ret->comment);
printf(" legacy : %s\n", meth->legacy);
printf(" obj_const : %s\n", meth->obj_const?"true":"false");
EINA_LIST_FOREACH(meth->params, m, param)
{
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);
if (!buffer)
{
ERR("unable to allocate read buffer");
goto end;
}
unsigned int len = fread(buffer, 1, BUFSIZE, stream);
if (!len)
{
ERR("%s: is an empty file", filename);
goto end;
}
if (len == BUFSIZE)
{
ERR("%s: buffer(%d) is full, might not be big enough.", filename, len);
goto end;
}
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, EOLIAN_CTOR);
database_class_function_add(kls->name, foo_id);
if (meth->ret) database_function_return_comment_set(foo_id, EOLIAN_METHOD, 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, EOLIAN_DTOR);
database_class_function_add(kls->name, foo_id);
if (meth->ret) database_function_return_comment_set(foo_id, EOLIAN_METHOD, 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, EOLIAN_UNRESOLVED);
database_function_scope_set(foo_id, prop->scope);
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);
database_parameter_own_set(p, param->own);
}
EINA_LIST_FOREACH(prop->values, m, param)
{
Eolian_Function_Parameter p = database_property_value_add(
foo_id, param->type, param->name, param->comment);
database_parameter_nonull_set(p, param->nonull);
database_parameter_own_set(p, param->own);
}
EINA_LIST_FOREACH(prop->accessors, m, accessor)
{
database_function_type_set(foo_id, (accessor->type == SETTER?EOLIAN_PROP_SET:EOLIAN_PROP_GET));
if (accessor->ret && accessor->ret->type)
{
Eolian_Function_Type ftype =
accessor->type == SETTER?EOLIAN_PROP_SET:EOLIAN_PROP_GET;
database_function_return_type_set(foo_id,
ftype, accessor->ret->type);
database_function_return_comment_set(foo_id,
ftype, accessor->ret->comment);
database_function_return_flag_set_as_warn_unused(foo_id,
ftype, accessor->ret->warn_unused);
database_function_return_flag_set_own(foo_id,
ftype, accessor->ret->own);
database_function_return_dflt_val_set(foo_id,
ftype, accessor->ret->dflt_ret_val);
}
if (accessor->legacy)
{
database_function_data_set(foo_id,
(accessor->type == SETTER?EOLIAN_LEGACY_SET:EOLIAN_LEGACY_GET),
accessor->legacy);
}
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;
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_const_attribute_set(desc, accessor->type == GETTER, 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, EOLIAN_METHOD);
database_function_scope_set(foo_id, meth->scope);
database_class_function_add(kls->name, foo_id);
if (meth->ret)
{
database_function_return_type_set(foo_id, EOLIAN_METHOD, meth->ret->type);
database_function_return_comment_set(foo_id, EOLIAN_METHOD, meth->ret->comment);
database_function_return_flag_set_as_warn_unused(foo_id,
EOLIAN_METHOD, meth->ret->warn_unused);
database_function_return_flag_set_own(foo_id, EOLIAN_METHOD, meth->ret->own);
database_function_return_dflt_val_set(foo_id,
EOLIAN_METHOD, meth->ret->dflt_ret_val);
}
database_function_description_set(foo_id, EOLIAN_COMMENT, meth->comment);
database_function_data_set(foo_id, EOLIAN_LEGACY, meth->legacy);
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);
database_parameter_own_set(p, param->own);
}
}
EINA_LIST_FOREACH(kls->implements, l, impl)
{
const char *class = impl->meth_name;
Eina_Bool virtual_pure = EINA_FALSE;
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 = EOLIAN_UNRESOLVED;
char *type_as_str = strstr(func, "::");
if (type_as_str)
{
*type_as_str = '\0';
if (!strcmp(type_as_str+2, "set")) ftype = EOLIAN_PROP_SET;
else if (!strcmp(type_as_str+2, "get")) ftype = EOLIAN_PROP_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, ftype);
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->type, 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);
}