efl/src/lib/eolian/eo_lexer.c

4614 lines
138 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__)
#ifdef INF
#undef INF
#endif
#define INF(...) EINA_LOG_DOM_INFO(_eo_tokenizer_log_dom, __VA_ARGS__)
#ifdef DBG
#undef DBG
#endif
#define DBG(...) EINA_LOG_DOM_DBG(_eo_tokenizer_log_dom, __VA_ARGS__)
#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 453 "lib/eolian/eo_lexer.rl"
#line 384 "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 1055 "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 1337 "lib/eolian/eo_lexer.c"
{
toknz->cs = eo_tokenizer_start;
toknz->ts = 0;
toknz->te = 0;
toknz->act = 0;
}
#line 1078 "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 1372 "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 1391 "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 384 "lib/eolian/eo_lexer.rl"
{
toknz->current_line += 1;
DBG("inc[%d] %d", toknz->cs, toknz->current_line);
}
break;
case 1:
#line 389 "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 394 "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 471 "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 478 "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 487 "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 501 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
}
break;
case 7:
#line 505 "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 534 "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 542 "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 765 "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 797 "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 802 "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 850 "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 856 "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 863 "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 871 "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 880 "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 889 "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 902 "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 908 "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 915 "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 922 "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 931 "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 937 "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 943 "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 950 "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 1021 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
}
break;
case 33:
#line 1024 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
}
break;
case 34:
#line 1027 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
}
break;
case 35:
#line 1030 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
}
break;
case 36:
#line 1034 "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 463 "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 399 "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 526 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 43:
#line 527 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 44:
#line 492 "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 408 "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 522 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 47:
#line 525 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 48:
#line 492 "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 408 "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 525 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 51:
#line 408 "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 399 "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 551 "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 408 "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 567 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 56:
#line 569 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 57:
#line 551 "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 408 "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 569 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 60:
#line 408 "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 399 "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 576 "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 583 "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 590 "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 597 "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 604 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
if (eina_list_count(toknz->tmp.prop->values) == 0)
WRN("property '%s' has no values.", toknz->tmp.prop->name);
if (eina_list_count(toknz->tmp.prop->accessors) == 0)
WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
INF(" }");
toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
toknz->tmp.prop = NULL;
toknz->current_nesting--;
{ toknz->cs = 327; goto _again;}
}}
break;
case 67:
#line 408 "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 604 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
if (eina_list_count(toknz->tmp.prop->values) == 0)
WRN("property '%s' has no values.", toknz->tmp.prop->name);
if (eina_list_count(toknz->tmp.prop->accessors) == 0)
WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
INF(" }");
toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
toknz->tmp.prop = NULL;
toknz->current_nesting--;
{ toknz->cs = 327; goto _again;}
}}
break;
case 70:
#line 408 "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 408 "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 399 "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 408 "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 408 "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 408 "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 399 "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 750 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 84:
#line 751 "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!!!");
if (eina_list_count(toknz->tmp.meth->params) == 0)
WRN("method '%s' has no parameters.", toknz->tmp.meth->name);
INF(" }");
switch (toknz->current_methods_type) {
case METH_CONSTRUCTOR:
l = &toknz->tmp.kls->constructors;
break;
case METH_DESTRUCTOR:
l = &toknz->tmp.kls->destructors;
break;
case METH_REGULAR:
l = &toknz->tmp.kls->methods;
break;
default:
ABORT(toknz, "unknown method type %d", toknz->current_methods_type);
}
toknz->tmp.meth->type = toknz->current_methods_type;
*l = eina_list_append(*l, toknz->tmp.meth);
toknz->tmp.meth = NULL;
toknz->current_nesting--;
{ toknz->cs = 342; goto _again;}
}}
break;
case 86:
#line 408 "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 745 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 88:
#line 749 "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!!!");
if (eina_list_count(toknz->tmp.meth->params) == 0)
WRN("method '%s' has no parameters.", toknz->tmp.meth->name);
INF(" }");
switch (toknz->current_methods_type) {
case METH_CONSTRUCTOR:
l = &toknz->tmp.kls->constructors;
break;
case METH_DESTRUCTOR:
l = &toknz->tmp.kls->destructors;
break;
case METH_REGULAR:
l = &toknz->tmp.kls->methods;
break;
default:
ABORT(toknz, "unknown method type %d", toknz->current_methods_type);
}
toknz->tmp.meth->type = toknz->current_methods_type;
*l = eina_list_append(*l, toknz->tmp.meth);
toknz->tmp.meth = NULL;
toknz->current_nesting--;
{ toknz->cs = 342; goto _again;}
}}
break;
case 90:
#line 408 "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 749 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 92:
#line 408 "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 399 "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 758 "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 771 "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 408 "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 781 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 98:
#line 771 "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 408 "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 408 "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 790 "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 399 "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 808 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 104:
#line 811 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 105:
#line 814 "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 821 "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 828 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" properties {");
toknz->current_nesting++;
{ toknz->cs = 327; goto _again;}
}}
break;
case 108:
#line 834 "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 841 "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 408 "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 996 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 112:
#line 999 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 113:
#line 1000 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 114:
#line 1001 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 115:
#line 808 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 116:
#line 811 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 117:
#line 841 "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 408 "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 408 "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 399 "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 1014 "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 408 "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 1049 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 124:
#line 408 "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 408 "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 2716 "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 2729 "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 1104 "lib/eolian/eo_lexer.rl"
if ( toknz->cs ==
#line 2750 "lib/eolian/eo_lexer.c"
-1
#line 1105 "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 2798 "lib/eolian/eo_lexer.c"
{
toknz->cs = eo_tokenizer_start;
toknz->ts = 0;
toknz->te = 0;
toknz->act = 0;
}
#line 1150 "lib/eolian/eo_lexer.rl"
toknz->p = buffer;
toknz->pe = toknz->p + len;
toknz->eof = toknz->pe;
#line 2815 "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 2834 "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 384 "lib/eolian/eo_lexer.rl"
{
toknz->current_line += 1;
DBG("inc[%d] %d", toknz->cs, toknz->current_line);
}
break;
case 1:
#line 389 "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 394 "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 471 "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 478 "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 487 "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 501 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.accessor_param = _eo_tokenizer_accessor_param_get(toknz, ( toknz->p));
}
break;
case 7:
#line 505 "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 534 "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 542 "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 765 "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 797 "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 802 "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 850 "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 856 "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 863 "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 871 "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 880 "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 889 "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 902 "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 908 "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 915 "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 922 "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 931 "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 937 "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 943 "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 950 "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 1021 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_REGULAR;
}
break;
case 33:
#line 1024 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_ABSTRACT;
}
break;
case 34:
#line 1027 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_MIXIN;
}
break;
case 35:
#line 1030 "lib/eolian/eo_lexer.rl"
{
toknz->tmp.kls_type = EOLIAN_CLASS_INTERFACE;
}
break;
case 36:
#line 1034 "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 463 "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 399 "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 526 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 43:
#line 527 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 44:
#line 492 "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 408 "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 522 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 47:
#line 525 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 48:
#line 492 "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 408 "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 525 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 51:
#line 408 "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 399 "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 551 "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 408 "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 567 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 56:
#line 569 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 57:
#line 551 "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 408 "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 569 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 60:
#line 408 "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 399 "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 576 "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 583 "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 590 "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 597 "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 604 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
if (eina_list_count(toknz->tmp.prop->values) == 0)
WRN("property '%s' has no values.", toknz->tmp.prop->name);
if (eina_list_count(toknz->tmp.prop->accessors) == 0)
WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
INF(" }");
toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
toknz->tmp.prop = NULL;
toknz->current_nesting--;
{ toknz->cs = 327; goto _again;}
}}
break;
case 67:
#line 408 "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 604 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
if (!toknz->tmp.prop) ABORT(toknz, "No property!!!");
if (eina_list_count(toknz->tmp.prop->values) == 0)
WRN("property '%s' has no values.", toknz->tmp.prop->name);
if (eina_list_count(toknz->tmp.prop->accessors) == 0)
WRN("property '%s' has no accessors.", toknz->tmp.prop->name);
INF(" }");
toknz->tmp.kls->properties = eina_list_append(toknz->tmp.kls->properties, toknz->tmp.prop);
toknz->tmp.prop = NULL;
toknz->current_nesting--;
{ toknz->cs = 327; goto _again;}
}}
break;
case 70:
#line 408 "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 408 "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 399 "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 408 "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 408 "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 408 "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 399 "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 750 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;}
break;
case 84:
#line 751 "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!!!");
if (eina_list_count(toknz->tmp.meth->params) == 0)
WRN("method '%s' has no parameters.", toknz->tmp.meth->name);
INF(" }");
switch (toknz->current_methods_type) {
case METH_CONSTRUCTOR:
l = &toknz->tmp.kls->constructors;
break;
case METH_DESTRUCTOR:
l = &toknz->tmp.kls->destructors;
break;
case METH_REGULAR:
l = &toknz->tmp.kls->methods;
break;
default:
ABORT(toknz, "unknown method type %d", toknz->current_methods_type);
}
toknz->tmp.meth->type = toknz->current_methods_type;
*l = eina_list_append(*l, toknz->tmp.meth);
toknz->tmp.meth = NULL;
toknz->current_nesting--;
{ toknz->cs = 342; goto _again;}
}}
break;
case 86:
#line 408 "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 745 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 88:
#line 749 "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!!!");
if (eina_list_count(toknz->tmp.meth->params) == 0)
WRN("method '%s' has no parameters.", toknz->tmp.meth->name);
INF(" }");
switch (toknz->current_methods_type) {
case METH_CONSTRUCTOR:
l = &toknz->tmp.kls->constructors;
break;
case METH_DESTRUCTOR:
l = &toknz->tmp.kls->destructors;
break;
case METH_REGULAR:
l = &toknz->tmp.kls->methods;
break;
default:
ABORT(toknz, "unknown method type %d", toknz->current_methods_type);
}
toknz->tmp.meth->type = toknz->current_methods_type;
*l = eina_list_append(*l, toknz->tmp.meth);
toknz->tmp.meth = NULL;
toknz->current_nesting--;
{ toknz->cs = 342; goto _again;}
}}
break;
case 90:
#line 408 "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 749 "lib/eolian/eo_lexer.rl"
{{( toknz->p) = (( toknz->te))-1;}}
break;
case 92:
#line 408 "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 399 "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 758 "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 771 "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 408 "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 781 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 98:
#line 771 "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 408 "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 408 "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 790 "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 399 "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 808 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 104:
#line 811 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
}}
break;
case 105:
#line 814 "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 821 "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 828 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p)+1;{
INF(" properties {");
toknz->current_nesting++;
{ toknz->cs = 327; goto _again;}
}}
break;
case 108:
#line 834 "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 841 "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 408 "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 996 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 112:
#line 999 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 113:
#line 1000 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 114:
#line 1001 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 115:
#line 808 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 116:
#line 811 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;{
}}
break;
case 117:
#line 841 "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 408 "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 408 "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 399 "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 1014 "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 408 "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 1049 "lib/eolian/eo_lexer.rl"
{ toknz->te = ( toknz->p);( toknz->p)--;}
break;
case 124:
#line 408 "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 408 "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 4159 "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 4172 "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 1158 "lib/eolian/eo_lexer.rl"
if ( toknz->cs ==
#line 4193 "lib/eolian/eo_lexer.c"
-1
#line 1159 "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);
}