Mercurial > hg > index.cgi
annotate lwcc/token.c @ 514:1c26076891e3 lwtools-4.18
Bump version in preparation for release
author | William Astle <lost@l-w.ca> |
---|---|
date | Tue, 19 Jan 2021 19:06:20 -0700 |
parents | 54f213c8fb81 |
children |
rev | line source |
---|---|
295 | 1 /* |
2 lwcc/token.c | |
3 | |
4 Copyright © 2013 William Astle | |
5 | |
6 This file is part of LWTOOLS. | |
7 | |
8 LWTOOLS is free software: you can redistribute it and/or modify it under the | |
9 terms of the GNU General Public License as published by the Free Software | |
10 Foundation, either version 3 of the License, or (at your option) any later | |
11 version. | |
12 | |
13 This program is distributed in the hope that it will be useful, but WITHOUT | |
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
16 more details. | |
17 | |
18 You should have received a copy of the GNU General Public License along with | |
19 this program. If not, see <http://www.gnu.org/licenses/>. | |
20 */ | |
21 | |
22 #include <stdlib.h> | |
23 | |
24 #include <lw_alloc.h> | |
25 #include <lw_string.h> | |
26 | |
27 #include "token.h" | |
28 | |
29 struct token *token_create(int ttype, char *strval, int row, int col, const char *fn) | |
30 { | |
31 struct token *t; | |
32 | |
33 t = lw_alloc(sizeof(struct token)); | |
34 t -> ttype = ttype; | |
35 if (strval) | |
36 t -> strval = lw_strdup(strval); | |
37 else | |
304
d85d173ba120
Checkpoint lwcc development - preprocessor is runnable but nonfunctional
William Astle <lost@l-w.ca>
parents:
299
diff
changeset
|
38 t -> strval = NULL; |
295 | 39 t -> lineno = row; |
40 t -> column = col; | |
41 t -> fn = fn; | |
42 t -> next = NULL; | |
43 t -> prev = NULL; | |
305
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
44 t -> list = NULL; |
295 | 45 return t; |
46 } | |
47 | |
48 void token_free(struct token *t) | |
49 { | |
50 lw_free(t -> strval); | |
51 lw_free(t); | |
52 } | |
53 | |
54 struct token *token_dup(struct token *t) | |
55 { | |
56 struct token *t2; | |
57 | |
58 t2 = lw_alloc(sizeof(struct token)); | |
305
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
59 t2 -> ttype = t -> ttype; |
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
60 t2 -> lineno = t -> lineno; |
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
61 t2 -> column = t -> column; |
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
62 t2 -> list = NULL; |
295 | 63 t2 -> next = NULL; |
64 t2 -> prev = NULL; | |
65 if (t -> strval) | |
66 t2 -> strval = lw_strdup(t -> strval); | |
305
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
67 else |
54f213c8fb81
Various bugfixes and output tuning
William Astle <lost@l-w.ca>
parents:
304
diff
changeset
|
68 t2 -> strval = NULL; |
295 | 69 return t2; |
70 } | |
71 | |
72 static struct { int ttype; char *tstr; } tok_strs[] = | |
73 { | |
74 { TOK_WSPACE, " " }, | |
75 { TOK_EOL, "\n" }, | |
76 { TOK_DIV, "/" }, | |
77 { TOK_ADD, "+" }, | |
78 { TOK_SUB, "-" }, | |
79 { TOK_OPAREN, "(" }, | |
80 { TOK_CPAREN, ")" }, | |
81 { TOK_NE, "!=" }, | |
82 { TOK_EQ, "==" }, | |
83 { TOK_LE, "<=" }, | |
84 { TOK_LT, "<" }, | |
85 { TOK_GE, ">=" }, | |
86 { TOK_GT, ">" }, | |
87 { TOK_BAND, "&&" }, | |
88 { TOK_BOR, "||" }, | |
89 { TOK_BNOT, "!" }, | |
90 { TOK_MOD, "%"}, | |
91 { TOK_COMMA, "," }, | |
92 { TOK_ELLIPSIS, "..." }, | |
93 { TOK_QMARK, "?" }, | |
94 { TOK_COLON, ":" }, | |
95 { TOK_OBRACE, "{" }, | |
96 { TOK_CBRACE, "}" }, | |
97 { TOK_OSQUARE, "[" }, | |
98 { TOK_CSQUARE, "]" }, | |
99 { TOK_COM, "~" }, | |
100 { TOK_EOS, ";" }, | |
101 { TOK_HASH, "#" }, | |
102 { TOK_DBLHASH, "##" }, | |
103 { TOK_XOR, "^" }, | |
104 { TOK_XORASS, "^=" }, | |
105 { TOK_STAR, "*" }, | |
106 { TOK_MULASS, "*=" }, | |
107 { TOK_DIVASS, "/=" }, | |
108 { TOK_ASS, "=" }, | |
109 { TOK_MODASS, "%=" }, | |
110 { TOK_SUBASS, "-=" }, | |
111 { TOK_DBLSUB, "--" }, | |
112 { TOK_ADDASS, "+=" }, | |
113 { TOK_DBLADD, "++" }, | |
114 { TOK_BWAND, "&" }, | |
115 { TOK_BWANDASS, "&=" }, | |
116 { TOK_BWOR, "|" }, | |
117 { TOK_BWORASS, "|=" }, | |
118 { TOK_LSH, "<<" }, | |
119 { TOK_LSHASS, "<<=" }, | |
120 { TOK_RSH, ">>" }, | |
121 { TOK_RSHASS, ">>=" }, | |
122 { TOK_DOT, "." }, | |
123 { TOK_ARROW, "->" }, | |
124 { TOK_NONE, "" } | |
125 }; | |
126 | |
127 void token_print(struct token *t, FILE *f) | |
128 { | |
129 int i; | |
130 for (i = 0; tok_strs[i].ttype != TOK_NONE; i++) | |
131 { | |
132 if (tok_strs[i].ttype == t -> ttype) | |
133 { | |
134 fprintf(f, "%s", tok_strs[i].tstr); | |
135 break; | |
136 } | |
137 } | |
138 if (t -> strval) | |
139 fprintf(f, "%s", t -> strval); | |
140 } | |
299
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
141 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
142 /* token list management */ |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
143 struct token_list *token_list_create(void) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
144 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
145 struct token_list *tl; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
146 tl = lw_alloc(sizeof(struct token_list)); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
147 tl -> head = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
148 tl -> tail = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
149 return tl; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
150 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
151 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
152 void token_list_destroy(struct token_list *tl) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
153 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
154 if (tl == NULL) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
155 return; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
156 while (tl -> head) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
157 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
158 tl -> tail = tl -> head; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
159 tl -> head = tl -> head -> next; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
160 token_free(tl -> tail); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
161 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
162 lw_free(tl); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
163 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
164 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
165 void token_list_append(struct token_list *tl, struct token *tok) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
166 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
167 tok -> list = tl; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
168 if (tl -> head == NULL) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
169 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
170 tl -> head = tl -> tail = tok; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
171 tok -> next = tok -> prev = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
172 return; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
173 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
174 tl -> tail -> next = tok; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
175 tok -> prev = tl -> tail; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
176 tl -> tail = tok; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
177 tok -> next = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
178 return; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
179 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
180 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
181 void token_list_remove(struct token *tok) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
182 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
183 if (tok -> list == NULL) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
184 return; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
185 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
186 if (tok -> prev) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
187 tok -> prev -> next = tok -> next; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
188 if (tok -> next) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
189 tok -> next -> prev = tok -> prev; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
190 if (tok == tok -> list -> head) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
191 tok -> list -> head = tok -> next; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
192 if (tok == tok -> list -> tail) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
193 tok -> list -> tail = tok -> prev; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
194 tok -> list = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
195 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
196 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
197 void token_list_prepend(struct token_list *tl, struct token *tok) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
198 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
199 tok -> list = tl; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
200 if (tl -> head == NULL) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
201 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
202 tl -> head = tl -> tail = tok; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
203 tok -> next = tok -> prev = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
204 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
205 tl -> head -> prev = tok; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
206 tok -> next = tl -> head; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
207 tl -> head = tok; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
208 tok -> prev = NULL; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
209 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
210 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
211 void token_list_insert(struct token_list *tl, struct token *after, struct token *newt) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
212 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
213 struct token *t; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
214 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
215 if (after == NULL || tl -> head == NULL) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
216 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
217 token_list_prepend(tl, newt); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
218 return; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
219 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
220 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
221 for (t = tl -> head; t && t != after; t = t -> next) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
222 /* do nothing */ ; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
223 if (!t) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
224 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
225 token_list_append(tl, newt); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
226 return; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
227 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
228 newt -> prev = t; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
229 newt -> next = t -> next; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
230 if (t -> next) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
231 t -> next -> prev = newt; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
232 else |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
233 tl -> tail = newt; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
234 t -> next = newt; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
235 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
236 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
237 struct token_list *token_list_dup(struct token_list *tl) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
238 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
239 struct token_list *nl; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
240 struct token *t; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
241 |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
242 nl = token_list_create(); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
243 for (t = tl -> head; t; t = t -> next) |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
244 { |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
245 token_list_append(nl, token_dup(t)); |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
246 } |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
247 return nl; |
856caf91ffaa
Added token list structure and switched some stuff to use it
William Astle <lost@l-w.ca>
parents:
295
diff
changeset
|
248 } |