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

Diff of /stack/stack.c

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

revision 1.63 by masse, Fri Feb 8 13:01:16 2002 UTC revision 1.65 by masse, Sat Feb 9 00:20:02 2002 UTC
# Line 496  extern void eval(environment *env) Line 496  extern void eval(environment *env)
496      return;      return;
497    }    }
498    
499     eval_start:
500    
501    switch(env->head->item->type) {    switch(env->head->item->type) {
502      /* if it's a symbol */      /* if it's a symbol */
503    case symb:    case symb:
504      rcl(env);                   /* get its contents */      rcl(env);                   /* get its contents */
505      if(env->err) return;      if(env->err) return;
506      if(env->head->item->type!=symb){ /* don't recurse symbols */      if(env->head->item->type!=symb){ /* don't recurse symbols */
507        return eval(env);         /* evaluate the value */        goto eval_start;
508      }      }
509      return;      return;
510    
# Line 528  extern void eval(environment *env) Line 530  extern void eval(environment *env)
530          if(env->err) return;          if(env->err) return;
531          if(iterator->next == NULL){          if(iterator->next == NULL){
532            free_val(temp_val);            free_val(temp_val);
533            return eval(env);            goto eval_start;
534          }          }
535          eval(env);          eval(env);
536          if(env->err) return;          if(env->err) return;
# Line 551  extern void eval(environment *env) Line 553  extern void eval(environment *env)
553      strcat(temp_string, " ]");      strcat(temp_string, " ]");
554      stack_read(env, temp_string);      stack_read(env, temp_string);
555      free(temp_string);      free(temp_string);
556      return eval(env);      goto eval_start;
557    
558    case integer:    case integer:
559      return;      return;
# Line 1190  extern void sx_7768696c65(environment *e Line 1192  extern void sx_7768696c65(environment *e
1192    free_val(test);    free_val(test);
1193    free_val(loop);    free_val(loop);
1194  }  }
1195    
1196    /* For-loop */
1197    extern void sx_666f72(environment *env) {
1198      
1199      value *loop, *foo;
1200      stackitem *iterator;
1201      
1202      if((env->head)==NULL || env->head->next==NULL) {
1203        printerr("Too Few Arguments");
1204        env->err=1;
1205        return;
1206      }
1207    
1208      if(env->head->next->item->type != list) {
1209        printerr("Bad Argument Type");
1210        env->err=2;
1211        return;
1212      }
1213    
1214      loop= env->head->item;
1215      loop->refcount++;
1216      toss(env); if(env->err) return;
1217    
1218      foo= env->head->item;
1219      foo->refcount++;
1220      toss(env); if(env->err) return;
1221    
1222      iterator= foo->content.ptr;
1223    
1224      while(iterator!=NULL) {
1225        push_val(&(env->head), iterator->item);
1226        push_val(&(env->head), loop);
1227        eval(env); if(env->err) return;
1228        iterator= iterator->next;
1229      }
1230    
1231      free_val(loop);
1232      free_val(foo);
1233    }

Legend:
Removed from v.1.63  
changed lines
  Added in v.1.65

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26