diff options
| author | Paul Buetow <paul@buetow.org> | 2008-09-16 17:05:51 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-09-16 17:05:51 +0000 |
| commit | 71185ab0ab0b08b4d5bb2e750ff85e11f105a453 (patch) | |
| tree | a6ad933176f92b60d2f1560d2f1bac46ec6b9566 /src/core/token.c | |
| parent | 8b31b18a43dea55489e70d5b2ea6fc183cc67533 (diff) | |
array progress
Diffstat (limited to 'src/core/token.c')
| -rw-r--r-- | src/core/token.c | 53 |
1 files changed, 41 insertions, 12 deletions
diff --git a/src/core/token.c b/src/core/token.c index 1a2aec9..49a9721 100644 --- a/src/core/token.c +++ b/src/core/token.c @@ -57,7 +57,6 @@ get_tt(char *c_token) { CHECK("proc") TT_PROC; CHECK("func") TT_FUNC; CHECK("my") TT_MY; - CHECK("arr") TT_ARR; CHECK("!") TT_NOT; CHECK("!=") TT_NEQ; CHECK("=~") TT_RE; @@ -123,7 +122,6 @@ tt_get_name(TokenType tt_cur) { CASE(TT_PROC,"TT_PROC") CASE(TT_FUNC,"TT_FUNC") CASE(TT_MY,"TT_MY") - CASE(TT_ARR,"TT_ARR") CASE(TT_WHILE,"TT_WHILE") CASE(TT_UNTIL,"TT_UNTIL") CASE(TT_NEXT,"TT_NEXT") @@ -248,7 +246,11 @@ Token* token_new_array(int i_size) { Token *p_token = token_new_dummy(); token_set_tt(p_token, TT_ARRAY); - array_resize(p_token->p_array, i_size); + + if (p_token->p_array == NULL) + p_token->p_array = array_new(); + + //array_resize(p_token->p_array, i_size); return (p_token); } @@ -305,10 +307,24 @@ void token_copy_vals(Token *p_token_to, Token *p_token_from) { i_len = strlen(p_token_from->c_val); p_token_to->c_val = calloc(i_len+1, sizeof(char)); strcpy(p_token_to->c_val, p_token_from->c_val); + } else { p_token_to->c_val = NULL; } + if (p_token_from->tt_cur == TT_ARRAY) { + p_token_to->p_array = array_new(); + ArrayIterator *p_iter = arrayiterator_new(p_token_from->p_array); + while (arrayiterator_has_next(p_iter)) { + Token *p_token = arrayiterator_next(p_iter); + token_ref_up(p_token); + array_unshift(p_token_to->p_array, p_token); + } + arrayiterator_delete(p_iter); + } else { + p_token_to->p_array = NULL; + } + p_token_to->tt_cur = p_token_from->tt_cur; p_token_to->i_val = p_token_from->i_val; p_token_to->d_val = p_token_from->d_val; @@ -344,8 +360,10 @@ token_delete(Token *p_token) { if (p_token->c_val) free(p_token->c_val); - if (p_token->p_array) - array_delete(p_token->p_array); + if (p_token->p_array) { + array_iterate(p_token->p_array, token_delete_cb); + array_delete(p_token->p_array); + } free(p_token); } @@ -366,16 +384,27 @@ token_delete(Token *p_token) { void token_print(Token *p_token) { - printf("(id=%05u, line=%05d, pos=%04d, type=%s, val=%s, ival=%d, dval=%f," - " refs=%d)", + printf("(id=%05u, line=%05d, pos=%04d, type=%s", p_token->u_token_id, p_token->i_line_nr, p_token->i_pos_nr, - tt_get_name(p_token->tt_cur), - p_token->c_val, - p_token->i_val, - p_token->d_val, - p_token->i_ref_count); + tt_get_name(p_token->tt_cur)); + + if (IS_ARRAY(p_token)) { + } else { + printf(", val=%s, ival=%d, dval=%f", + p_token->c_val, + p_token->i_val, + p_token->d_val); + } + + printf(", refs=%d)", p_token->i_ref_count); +} + +void +token_print_ln(Token *p_token) { + token_print(p_token); + printf("\n"); } void |
