static lex_tok_t* lexer_integer(char* text, int base)
{
char* end;
- long* p_int = (long*)malloc(sizeof(long));
+ long* p_int = (long*)mem_allocate(sizeof(long), NULL);
errno = 0;
*p_int = strtol(text, &end, base);
assert(errno == 0);
static lex_tok_t* lexer_float(char* text)
{
char* end;
- double* p_dbl = (double*)malloc(sizeof(double));
+ double* p_dbl = (double*)mem_allocate(sizeof(double), NULL);
errno = 0;
*p_dbl = strtod(text, &end);
assert(errno == 0);
static char* lexer_dup(const char* p_old) {
size_t length = strlen(p_old);
- char* p_str = (char*)malloc(length+1);
+ char* p_str = (char*)mem_allocate(length+1, NULL);
memcpy(p_str, p_old, length);
p_str[length] = '\0';
return p_str;
static void parser_free(void* p_obj) {
parser_t* p_parser = (parser_t*)p_obj;
+ if ((NULL != p_parser->p_tok) && (&tok_eof != p_parser->p_tok))
+ mem_release(p_parser->p_tok);
mem_release(p_parser->p_lexer);
mem_release(p_parser->p_tok_buf);
}
{
bool ret = false;
if (parser_peek(p_parser)->type == type) {
+ vec_push_back(p_parser->p_tok_buf, p_parser->p_tok);
p_parser->p_tok = NULL;
ret = true;
}
{
bool ret = false;
if ((parser_peek(p_parser)->type == type) && (0 == strcmp((char*)(p_parser->p_tok->value), p_text))) {
+ vec_push_back(p_parser->p_tok_buf, p_parser->p_tok);
p_parser->p_tok = NULL;
ret = true;
}