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

Diff of /stack/stack.c

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

revision 1.61 by teddy, Fri Feb 8 05:37:54 2002 UTC revision 1.63 by masse, Fri Feb 8 13:01:16 2002 UTC
# Line 955  extern void sx_2b(environment *env) { Line 955  extern void sx_2b(environment *env) {
955    a=env->head->item->content.val;    a=env->head->item->content.val;
956    toss(env);    toss(env);
957    if(env->err) return;    if(env->err) return;
958    b=env->head->item->content.val;    if(env->head->item->refcount == 1)
959    toss(env);      env->head->item->content.val += a;
960    if(env->err) return;    else {
961    push_int(&(env->head), a+b);      b=env->head->item->content.val;
962        toss(env);
963        if(env->err) return;
964        push_int(&(env->head), a+b);
965      }
966  }  }
967    
968  /* - */  /* - */
969  extern void sx_2d(environment *env) {  extern void sx_2d(environment *env) {
970    int a;    int a, b;
971    
972    if((env->head)==NULL || env->head->next==NULL) {    if((env->head)==NULL || env->head->next==NULL) {
973      printerr("Too Few Arguments");      printerr("Too Few Arguments");
# Line 980  extern void sx_2d(environment *env) { Line 984  extern void sx_2d(environment *env) {
984    a=env->head->item->content.val;    a=env->head->item->content.val;
985    toss(env);    toss(env);
986    if(env->err) return;    if(env->err) return;
987    env->head->item->content.val -= a;    if(env->head->item->refcount == 1)
988        env->head->item->content.val -= a;
989      else {
990        b=env->head->item->content.val;
991        toss(env);
992        if(env->err) return;
993        push_int(&(env->head), b-a);
994      }
995  }  }
996    
997  /* > */  /* > */
998  extern void sx_3e(environment *env) {  extern void sx_3e(environment *env) {
999    int a;    int a, b;
1000    
1001    if((env->head)==NULL || env->head->next==NULL) {    if((env->head)==NULL || env->head->next==NULL) {
1002      printerr("Too Few Arguments");      printerr("Too Few Arguments");
# Line 1002  extern void sx_3e(environment *env) { Line 1013  extern void sx_3e(environment *env) {
1013    a=env->head->item->content.val;    a=env->head->item->content.val;
1014    toss(env);    toss(env);
1015    if(env->err) return;    if(env->err) return;
1016    env->head->item->content.val = (env->head->item->content.val > a);    if(env->head->item->refcount == 1)
1017        env->head->item->content.val = (env->head->item->content.val > a);
1018      else {
1019        b=env->head->item->content.val;
1020        toss(env);
1021        if(env->err) return;
1022        push_int(&(env->head), b>a);
1023      }
1024  }  }
1025    
1026  /* Return copy of a value */  /* Return copy of a value */
# Line 1131  extern void ifelse(environment *env) { Line 1149  extern void ifelse(environment *env) {
1149  extern void sx_7768696c65(environment *env) {  extern void sx_7768696c65(environment *env) {
1150    
1151    int truth;    int truth;
1152      value *loop, *test;
1153    
1154    if((env->head)==NULL || env->head->next==NULL) {    if((env->head)==NULL || env->head->next==NULL) {
1155      printerr("Too Few Arguments");      printerr("Too Few Arguments");
# Line 1138  extern void sx_7768696c65(environment *e Line 1157  extern void sx_7768696c65(environment *e
1157      return;      return;
1158    }    }
1159    
1160      loop= env->head->item;
1161      loop->refcount++;
1162      toss(env); if(env->err) return;
1163    
1164      test= env->head->item;
1165      test->refcount++;
1166      toss(env); if(env->err) return;
1167    
1168    do {    do {
1169      swap(env); if(env->err) return;      push_val(&(env->head), test);
1170      dup(env); if(env->err) return;      eval(env);
     eval(env); if(env->err) return;  
1171            
1172      if(env->head->item->type != integer) {      if(env->head->item->type != integer) {
1173        printerr("Bad Argument Type");        printerr("Bad Argument Type");
# Line 1150  extern void sx_7768696c65(environment *e Line 1176  extern void sx_7768696c65(environment *e
1176      }      }
1177            
1178      truth= env->head->item->content.val;      truth= env->head->item->content.val;
       
1179      toss(env); if(env->err) return;      toss(env); if(env->err) return;
     swap(env); if(env->err) return;  
1180            
1181      if(truth) {      if(truth) {
1182        dup(env);        push_val(&(env->head), loop);
1183        eval(env);        eval(env);
1184      } else {      } else {
1185        toss(env);        toss(env);
       toss(env);  
1186      }      }
1187        
1188    } while(truth);    } while(truth);
1189    
1190      free_val(test);
1191      free_val(loop);
1192  }  }

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

root@recompile.se
ViewVC Help
Powered by ViewVC 1.1.26