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

Diff of /stack/stack.c

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

revision 1.111 by teddy, Sat Mar 16 19:09:54 2002 UTC revision 1.112 by teddy, Sat Mar 16 20:09:51 2002 UTC
# Line 450  extern void nl() Line 450  extern void nl()
450  /* Gets the type of a value */  /* Gets the type of a value */
451  extern void type(environment *env)  extern void type(environment *env)
452  {  {
   int typenum;  
   
453    if(env->head->type==empty) {    if(env->head->type==empty) {
454      printerr("Too Few Arguments");      printerr("Too Few Arguments");
455      env->err= 1;      env->err= 1;
456      return;      return;
457    }    }
458    
459    typenum= CAR(env->head)->type;    switch(CAR(env->head)->type){
460    toss(env);    case empty:
461    switch(typenum){      push_sym(env, "empty");
462        break;
463    case integer:    case integer:
464      push_sym(env, "integer");      push_sym(env, "integer");
465      break;      break;
# Line 480  extern void type(environment *env) Line 479  extern void type(environment *env)
479      push_sym(env, "list");      push_sym(env, "list");
480      break;      break;
481    }    }
482      swap(env);
483      if (env->err) return;
484      toss(env);
485  }      }    
486    
487  /* Prints the top element of the stack. */  /* Prints the top element of the stack. */
488  void print_h(value *stack_head, int noquote)  void print_h(value *stack_head, int noquote)
489  {  {
490    switch(CAR(stack_head)->type) {    switch(CAR(stack_head)->type) {
491      case empty:
492        printf("[]");
493        break;
494    case integer:    case integer:
495      printf("%d", CAR(stack_head)->content.i);      printf("%d", CAR(stack_head)->content.i);
496      break;      break;
# Line 494  void print_h(value *stack_head, int noqu Line 499  void print_h(value *stack_head, int noqu
499      break;      break;
500    case string:    case string:
501      if(noquote)      if(noquote)
502        printf("%s", (char*)CAR(stack_head)->content.ptr);        printf("%s", (char*)(CAR(stack_head)->content.ptr));
503      else      else
504        printf("\"%s\"", (char*)CAR(stack_head)->content.ptr);        printf("\"%s\"", (char*)(CAR(stack_head)->content.ptr));
505      break;      break;
506    case symb:    case symb:
507      printf("%s", CAR(stack_head)->content.sym->id);      printf("%s", CAR(stack_head)->content.sym->id);
# Line 508  void print_h(value *stack_head, int noqu Line 513  void print_h(value *stack_head, int noqu
513      /* A list is just a stack, so make stack_head point to it */      /* A list is just a stack, so make stack_head point to it */
514      stack_head= CAR(stack_head);      stack_head= CAR(stack_head);
515      printf("[ ");      printf("[ ");
516      while(CAR(stack_head)->type != empty) {      while(stack_head->type != empty) {
517        print_h(stack_head, noquote);        print_h(stack_head, noquote);
518        if(CDR(stack_head)->type==tcons)        switch(CDR(stack_head)->type){
519          case empty:
520            break;
521          case tcons:
522          printf(" ");          printf(" ");
523        else          break;
524          default:
525          printf(" . ");          /* Improper list */          printf(" . ");          /* Improper list */
526          }
527        stack_head= CDR(stack_head);        stack_head= CDR(stack_head);
528      }      }
529      printf(" ]");      printf(" ]");

Legend:
Removed from v.1.111  
changed lines
  Added in v.1.112

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26