Add bytecode generator

This commit is contained in:
Ilmir Usmanov
2014-07-15 19:32:26 +04:00
parent 25ad63c9be
commit 0647cdd4f1
15 changed files with 467 additions and 151 deletions
+24 -3
View File
@@ -81,7 +81,7 @@ static string_and_token keyword_tokens[] =
#define MAX_NAMES 100
static string_and_token seen_names[MAX_NAMES];
static size_t seen_names_num;
static uint8_t seen_names_num;
static inline bool
is_empty (token tok)
@@ -210,9 +210,29 @@ add_to_seen_tokens (string_and_token snt)
{
JERRY_ASSERT (seen_names_num < MAX_NAMES);
snt.tok.data.name = (string_id) seen_names_num;
seen_names[seen_names_num++] = snt;
}
uint8_t
lexer_get_strings (const char **strings)
{
int i;
for (i = 0; i < seen_names_num; i++)
strings[i] = seen_names[i].str;
return seen_names_num;
}
const char *
lexer_get_string_by_id (string_id id)
{
JERRY_ASSERT (id < seen_names_num);
return seen_names[id].str;
}
static inline void
new_token (void)
{
@@ -318,7 +338,7 @@ parse_name (void)
}
string = current_token ();
known_token = (token) { .type = TOK_NAME, .data.name = string };
known_token = (token) { .type = TOK_NAME, .data.name = seen_names_num };
add_to_seen_tokens ((string_and_token) { .str = string, .tok = known_token });
@@ -561,7 +581,7 @@ parse_string (void)
// Eat up '"'
consume_char ();
res = (token) { .type = TOK_STRING, .data.str = tok };
res = (token) { .type = TOK_STRING, .data.str = seen_names_num };
add_to_seen_tokens ((string_and_token) { .str = tok, .tok = res });
@@ -588,6 +608,7 @@ lexer_set_file (FILE *ex_file)
file = ex_file;
lexer_debug_log = __fopen ("lexer.log", "w");
saved_token = empty_token;
buffer = buffer_start = token_start = NULL;
}
#else
void