Mercurial > hg > index.cgi
annotate lwcc/token.c @ 502:14a40f8bb4eb
Add various operators to lwcc
Add various binary and ternary operators to lwcc, but only those which can
work with constant operands. Seems like variables are probably required
next.
author | William Astle <lost@l-w.ca> |
---|---|
date | Wed, 25 Sep 2019 20:23:49 -0600 |
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 } |