-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtoken.c
More file actions
75 lines (67 loc) · 1.86 KB
/
token.c
File metadata and controls
75 lines (67 loc) · 1.86 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
/*
* TccGen - The Tiny C Compiler backend
*
* Copyright (c) 2001-2004 Fabrice Bellard
* (c) 2024 Rochus Keller
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "token.h"
#include "helper.h"
#include "tccstate.h"
#include "values.h"
void tok_str_new(TokenString *s)
{
s->str = NULL;
s->len = s->lastlen = 0;
s->allocated_len = 0;
s->last_line_num = -1;
}
TokenString *tok_str_alloc(void)
{
TokenString *str = (TokenString *)tcc_realloc(0, sizeof *str);
tok_str_new(str);
return str;
}
int *tok_str_realloc(TokenString *s, int new_size)
{
int *str, size;
size = s->allocated_len;
if (size < 16)
size = 16;
while (size < new_size)
size = size * 2;
if (size > s->allocated_len) {
void* tmp = (void*)s->str;
str = (int*)tcc_realloc(tmp, size * sizeof(int));
s->allocated_len = size;
s->str = str;
}
return s->str;
}
void tok_str_add(TokenString *s, int t)
{
int len, *str;
len = s->len;
str = s->str;
if (len >= s->allocated_len)
str = tok_str_realloc(s, len + 1);
str[len++] = t;
s->len = len;
}
void tok_str_free(TokenString *s)
{
tcc_free(s);
}