/[cvs]/stack/stack.c
ViewVC logotype

Diff of /stack/stack.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.98 by masse, Sun Mar 10 09:13:36 2002 UTC revision 1.99 by teddy, Sun Mar 10 10:06:36 2002 UTC
# Line 126  value* new_val(environment *env) Line 126  value* new_val(environment *env)
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  }  }
# Line 137  inline void gc_mark(value *val) Line 138  inline void gc_mark(value *val)
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;
# Line 188  extern void gc_init(environment *env) Line 189  extern void gc_init(environment *env)
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:
# Line 214  extern void gc_init(environment *env) Line 214  extern void gc_init(environment *env)
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    }    }
# Line 228  void protect(value *val) Line 228  void protect(value *val)
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;
# Line 248  void unprotect(value *val) Line 248  void unprotect(value *val)
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;

Legend:
Removed from v.1.98  
changed lines
  Added in v.1.99

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26