| 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; |