126 |
env->gc_ref= nitem; |
env->gc_ref= nitem; |
127 |
|
|
128 |
env->gc_count++; |
env->gc_count++; |
129 |
nval->gc_garb= 1; |
nval->gc.flag.mark= 0; |
130 |
|
nval->gc.flag.protect= 0; |
131 |
|
|
132 |
return nval; |
return nval; |
133 |
} |
} |
138 |
{ |
{ |
139 |
stackitem *iterator; |
stackitem *iterator; |
140 |
|
|
141 |
if(val->gc_garb==0) |
if(val->gc.flag.mark) |
142 |
return; |
return; |
143 |
|
|
144 |
val->gc_garb= 0; |
val->gc.flag.mark= 1; |
145 |
|
|
146 |
if(val->type==list) { |
if(val->type==list) { |
147 |
iterator= val->content.ptr; |
iterator= val->content.ptr; |
189 |
|
|
190 |
while(env->gc_ref!=NULL) { /* Sweep unused values */ |
while(env->gc_ref!=NULL) { /* Sweep unused values */ |
191 |
|
|
192 |
if(env->gc_ref->item->gc_garb |
if(!(env->gc_ref->item->gc.no_gc)){ /* neither mark nor protect */ |
|
&& !(env->gc_ref->item->gc_protect)) { |
|
193 |
|
|
194 |
switch(env->gc_ref->item->type) { /* Remove content */ |
switch(env->gc_ref->item->type) { /* Remove content */ |
195 |
case string: |
case string: |
214 |
titem= env->gc_ref->next; |
titem= env->gc_ref->next; |
215 |
env->gc_ref->next= new_head; |
env->gc_ref->next= new_head; |
216 |
new_head= env->gc_ref; |
new_head= env->gc_ref; |
217 |
new_head->item->gc_garb= 1; |
new_head->item->gc.flag.mark= 0; |
218 |
env->gc_ref= titem; |
env->gc_ref= titem; |
219 |
env->gc_count++; |
env->gc_count++; |
220 |
} |
} |
228 |
{ |
{ |
229 |
stackitem *iterator; |
stackitem *iterator; |
230 |
|
|
231 |
if(val->gc_protect) |
if(val->gc.flag.protect) |
232 |
return; |
return; |
233 |
|
|
234 |
val->gc_protect= 1; |
val->gc.flag.protect= 1; |
235 |
|
|
236 |
if(val->type==list) { |
if(val->type==list) { |
237 |
iterator= val->content.ptr; |
iterator= val->content.ptr; |
248 |
{ |
{ |
249 |
stackitem *iterator; |
stackitem *iterator; |
250 |
|
|
251 |
if(!(val->gc_protect)) |
if(!(val->gc.flag.protect)) |
252 |
return; |
return; |
253 |
|
|
254 |
val->gc_protect= 0; |
val->gc.flag.protect= 0; |
255 |
|
|
256 |
if(val->type==list) { |
if(val->type==list) { |
257 |
iterator= val->content.ptr; |
iterator= val->content.ptr; |