forked from enlightenment/efl
eolian: remove TOK_EOF, replace with -1
This commit is contained in:
parent
226f417005
commit
c636882158
|
@ -44,7 +44,7 @@ next_char(Eo_Lexer *ls)
|
||||||
|
|
||||||
static const char * const tokens[] =
|
static const char * const tokens[] =
|
||||||
{
|
{
|
||||||
"<comment>", "<eof>", "<value>",
|
"<comment>", "<value>",
|
||||||
|
|
||||||
KEYWORDS
|
KEYWORDS
|
||||||
};
|
};
|
||||||
|
@ -104,9 +104,9 @@ init_hash(void)
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
if (keyword_map) return;
|
if (keyword_map) return;
|
||||||
keyword_map = eina_hash_string_superfast_new(NULL);
|
keyword_map = eina_hash_string_superfast_new(NULL);
|
||||||
for (i = 3; i < (sizeof(tokens) / sizeof(const char*)); ++i)
|
for (i = 2; i < (sizeof(tokens) / sizeof(const char*)); ++i)
|
||||||
{
|
{
|
||||||
eina_hash_add(keyword_map, tokens[i], (void*)(size_t)(i - 2));
|
eina_hash_add(keyword_map, tokens[i], (void*)(size_t)(i - 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ read_long_comment(Eo_Lexer *ls, const char **value)
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!ls->current)
|
if (!ls->current)
|
||||||
eo_lexer_lex_error(ls, "unfinished long comment", TOK_EOF);
|
eo_lexer_lex_error(ls, "unfinished long comment", -1);
|
||||||
if (ls->current == '*')
|
if (ls->current == '*')
|
||||||
{
|
{
|
||||||
next_char(ls);
|
next_char(ls);
|
||||||
|
@ -225,7 +225,7 @@ lex(Eo_Lexer *ls, const char **value, int *kwid)
|
||||||
next_char(ls);
|
next_char(ls);
|
||||||
continue;
|
continue;
|
||||||
case '\0':
|
case '\0':
|
||||||
return TOK_EOF;
|
return -1;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
if (isspace(ls->current))
|
if (isspace(ls->current))
|
||||||
|
@ -306,7 +306,7 @@ eo_lexer_set_input(Eo_Lexer *ls, const char *source)
|
||||||
ERR("%s", strerror(errno));
|
ERR("%s", strerror(errno));
|
||||||
longjmp(ls->err_jmp, EINA_TRUE);
|
longjmp(ls->err_jmp, EINA_TRUE);
|
||||||
}
|
}
|
||||||
ls->lookahead.token = TOK_EOF;
|
ls->lookahead.token = -1;
|
||||||
ls->buff = eina_strbuf_new();
|
ls->buff = eina_strbuf_new();
|
||||||
ls->handle = f;
|
ls->handle = f;
|
||||||
ls->stream = eina_file_map_all(f, EINA_FILE_RANDOM);
|
ls->stream = eina_file_map_all(f, EINA_FILE_RANDOM);
|
||||||
|
@ -367,17 +367,17 @@ eo_lexer_new(const char *source)
|
||||||
int
|
int
|
||||||
eo_lexer_get_balanced(Eo_Lexer *ls, char beg, char end)
|
eo_lexer_get_balanced(Eo_Lexer *ls, char beg, char end)
|
||||||
{
|
{
|
||||||
assert(ls->lookahead.token == TOK_EOF);
|
assert(ls->lookahead.token < 0);
|
||||||
return (ls->t.token == lex_balanced(ls, &ls->t.value, &ls->t.kw, beg, end));
|
return (ls->t.token == lex_balanced(ls, &ls->t.value, &ls->t.kw, beg, end));
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
eo_lexer_get(Eo_Lexer *ls)
|
eo_lexer_get(Eo_Lexer *ls)
|
||||||
{
|
{
|
||||||
if (ls->lookahead.token != TOK_EOF)
|
if (ls->lookahead.token >= 0)
|
||||||
{
|
{
|
||||||
ls->t = ls->lookahead;
|
ls->t = ls->lookahead;
|
||||||
ls->lookahead.token = TOK_EOF;
|
ls->lookahead.token = -1;
|
||||||
return ls->t.token;
|
return ls->t.token;
|
||||||
}
|
}
|
||||||
ls->t.kw = 0;
|
ls->t.kw = 0;
|
||||||
|
@ -387,7 +387,7 @@ eo_lexer_get(Eo_Lexer *ls)
|
||||||
int
|
int
|
||||||
eo_lexer_lookahead(Eo_Lexer *ls)
|
eo_lexer_lookahead(Eo_Lexer *ls)
|
||||||
{
|
{
|
||||||
assert (ls->lookahead.token == TOK_EOF);
|
assert (ls->lookahead.token < 0);
|
||||||
ls->lookahead.kw = 0;
|
ls->lookahead.kw = 0;
|
||||||
return (ls->lookahead.token = lex(ls, &ls->lookahead.value,
|
return (ls->lookahead.token = lex(ls, &ls->lookahead.value,
|
||||||
&ls->lookahead.kw));
|
&ls->lookahead.kw));
|
||||||
|
@ -415,6 +415,10 @@ eo_lexer_syntax_error(Eo_Lexer *ls, const char *msg)
|
||||||
void
|
void
|
||||||
eo_lexer_token_to_str(int token, char *buf)
|
eo_lexer_token_to_str(int token, char *buf)
|
||||||
{
|
{
|
||||||
|
if (token < 0)
|
||||||
|
{
|
||||||
|
memcpy(buf, "<eof>", 6);
|
||||||
|
}
|
||||||
if (token < START_CUSTOM)
|
if (token < START_CUSTOM)
|
||||||
{
|
{
|
||||||
assert((unsigned char)token == token);
|
assert((unsigned char)token == token);
|
||||||
|
@ -433,7 +437,7 @@ eo_lexer_token_to_str(int token, char *buf)
|
||||||
const char *
|
const char *
|
||||||
eo_lexer_keyword_str_get(int kw)
|
eo_lexer_keyword_str_get(int kw)
|
||||||
{
|
{
|
||||||
return tokens[kw + 2];
|
return tokens[kw + 1];
|
||||||
}
|
}
|
||||||
|
|
||||||
Eina_Bool
|
Eina_Bool
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
enum Tokens
|
enum Tokens
|
||||||
{
|
{
|
||||||
TOK_COMMENT = START_CUSTOM, TOK_EOF, TOK_VALUE
|
TOK_COMMENT = START_CUSTOM, TOK_VALUE
|
||||||
};
|
};
|
||||||
|
|
||||||
/* all keywords in eolian, they can still be used as names (they're TOK_VALUE)
|
/* all keywords in eolian, they can still be used as names (they're TOK_VALUE)
|
||||||
|
|
|
@ -1085,7 +1085,7 @@ found_class:
|
||||||
static void
|
static void
|
||||||
parse_chunk(Eo_Lexer *ls, Eina_Bool eot)
|
parse_chunk(Eo_Lexer *ls, Eina_Bool eot)
|
||||||
{
|
{
|
||||||
while (ls->t.token != TOK_EOF)
|
while (ls->t.token >= 0)
|
||||||
parse_unit(ls, eot);
|
parse_unit(ls, eot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue