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

Diff of /stack/stack.c

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

revision 1.134 by masse, Wed Aug 13 06:12:26 2003 UTC revision 1.135 by masse, Wed Aug 13 11:58:00 2003 UTC
# Line 50  void init_env(environment *env) Line 50  void init_env(environment *env)
50  }  }
51    
52    
53  void printerr(environment *env, const char* in_string)  void printerr(environment *env)
54  {  {
55      char *in_string;
56    
57      switch(env->err) {
58      case 0:
59        return;
60      case 1:
61        in_string= "Too Few Arguments";
62        break;
63      case 2:
64        in_string= "Bad Argument Type";
65        break;
66      case 3:
67        in_string= "Unbound Variable";
68        break;
69      default:
70        in_string= "Unknown error";
71        break;
72      }
73    
74    fprintf(stderr, "\"%s\":\nErr: %s\n", env->errsymb, in_string);    fprintf(stderr, "\"%s\":\nErr: %s\n", env->errsymb, in_string);
75  }  }
76    
# Line 586  extern void swap(environment *env) Line 605  extern void swap(environment *env)
605  {  {
606    value *temp= env->head;    value *temp= env->head;
607    
608    switch(check_args(env, unknown, unknown, empty)) {    if(check_args(env, unknown, unknown, empty))
609    case 1:      return printerr(env);
     printerr(env, "Too Few Arguments");  
     return;  
   case 2:  
     printerr(env, "Bad Argument Type");  
     return;  
   default:  
     break;  
   }  
610        
611    env->head= CDR(env->head);    env->head= CDR(env->head);
612    CDR(temp)= CDR(env->head);    CDR(temp)= CDR(env->head);
# Line 608  extern void rcl(environment *env) Line 619  extern void rcl(environment *env)
619  {  {
620    value *val;    value *val;
621    
622    switch(check_args(env, symb, empty)) {    if(check_args(env, symb, empty))
623    case 1:      return printerr(env);
     printerr(env, "Too Few Arguments");  
     return;  
   case 2:  
     printerr(env, "Bad Argument Type");  
     return;  
   default:  
     break;  
   }  
624    
625    val= CAR(env->head)->content.sym->val;    val= CAR(env->head)->content.sym->val;
626    if(val == NULL){    if(val == NULL){
     printerr(env, "Unbound Variable");  
627      env->err= 3;      env->err= 3;
628      return;      return printerr(env);
629    }    }
630    
631    push_val(env, val);           /* Return the symbol's bound value */    push_val(env, val);           /* Return the symbol's bound value */
632    swap(env);    swap(env);
633    if(env->err) return;    if(env->err) return;
# Line 645  extern void eval(environment *env) Line 648  extern void eval(environment *env)
648    
649    gc_maybe(env);    gc_maybe(env);
650    
651    switch(check_args(env, unknown, empty)) {    if(check_args(env, unknown, empty))
652    case 1:      return printerr(env);
     printerr(env, "Too Few Arguments");  
     return;  
   case 2:  
     printerr(env, "Bad Argument Type");  
     return;  
   default:  
     break;  
   }  
653    
654    switch(CAR(env->head)->type) {    switch(CAR(env->head)->type) {
655      /* if it's a symbol */      /* if it's a symbol */
# Line 671  extern void eval(environment *env) Line 666  extern void eval(environment *env)
666    case func:    case func:
667      in_func= CAR(env->head)->content.func;      in_func= CAR(env->head)->content.func;
668      env->head= CDR(env->head);      env->head= CDR(env->head);
669      return in_func(env);      return in_func((void*)env);
670    
671      /* If it's a list */      /* If it's a list */
672    case tcons:    case tcons:
# Line 697  extern void eval(environment *env) Line 692  extern void eval(environment *env)
692        if (CDR(iterator)->type == empty || CDR(iterator)->type == tcons)        if (CDR(iterator)->type == empty || CDR(iterator)->type == tcons)
693          iterator= CDR(iterator);          iterator= CDR(iterator);
694        else {        else {
695          printerr(env, "Bad Argument Type"); /* Improper list */          env->err= 2; /* Improper list */
696          env->err= 2;          return printerr(env);
         return;  
697        }        }
698      }      }
699      unprotect(temp_val);      unprotect(temp_val);
# Line 866  extern void rev(environment *env) Line 860  extern void rev(environment *env)
860    if(CAR(env->head)->type==empty)    if(CAR(env->head)->type==empty)
861      return;                     /* Don't reverse an empty list */      return;                     /* Don't reverse an empty list */
862    
863    switch(check_args(env, tcons, empty)) {    if(check_args(env, tcons, empty))
864    case 1:      return printerr(env);
     printerr(env, "Too Few Arguments");  
     return;  
   case 2:  
     printerr(env, "Bad Argument Type");  
     return;  
   default:  
     break;  
   }  
865    
866    old_head= CAR(env->head);    old_head= CAR(env->head);
867    new_head= new_val(env);    new_head= new_val(env);

Legend:
Removed from v.1.134  
changed lines
  Added in v.1.135

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26