6 typedef struct token_pos token_pos_t;
8 #define dTOKENS(init_lim) \
9 token_pos_t token_buf[init_lim]; \
10 int token_lim = init_lim; \
11 token_pos_t *tokens = token_buf; \
14 #define PUSH_TOKEN(p_beg, p_end) \
17 if (num_tokens == token_lim) \
18 tokens_grow(&tokens, &token_lim, (bool)(tokens != token_buf)); \
19 tokens[num_tokens-1].beg = p_beg; \
20 tokens[num_tokens-1].end = p_end; \
25 if (tokens != token_buf) \
30 tokens_grow(token_pos_t **token_ptr, int *token_lim_ptr, bool tokens_on_heap)
32 int new_lim = *token_lim_ptr;
38 Renew(*token_ptr, new_lim, token_pos_t);
41 token_pos_t *new_tokens;
43 New(57, new_tokens, new_lim, token_pos_t);
44 for (i = 0; i < *token_lim_ptr; i++)
45 new_tokens[i] = (*token_ptr)[i];
46 *token_ptr = new_tokens;
48 *token_lim_ptr = new_lim;