Mercurial > hg > index.cgi
annotate lwcc/token.c @ 577:e49d24f4a9a5
Correct bug in the object file output code leading to stack corruption
It turns out leaving a pointer to a stack allocated temporary in a
persistent data structure is not conducive to correct program operation.
Undo the export check setup in the object file output sequence so a
pointer to stack allocated memory is not left hanging when the function
returns. This seems to correct at least one mysterious crash bug, and
possibly others.
Thanks to Boisy Pitre for reporting the crash bug that led to this
discovery, as well as a previous crash bug that likely has the same
root cause.
Additional thanks to Ciaran Anscomb whose debugger wielding wizardry
revealed the exact location of this particular bit of unbrilliance.
author | William Astle <lost@l-w.ca> |
---|---|
date | Sat, 03 Aug 2024 14:30:06 -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 } |