[BACK]Return to primitive.c CVS log [TXT][DIR] Up to [local] / OpenXM / src / kan96xx / Kan

Diff for /OpenXM/src/kan96xx/Kan/primitive.c between version 1.12 and 1.13

version 1.12, 2004/09/11 01:00:42 version 1.13, 2004/09/12 02:37:57
Line 1 
Line 1 
 /* $OpenXM: OpenXM/src/kan96xx/Kan/primitive.c,v 1.11 2003/12/05 23:14:14 takayama Exp $ */  /* $OpenXM: OpenXM/src/kan96xx/Kan/primitive.c,v 1.12 2004/09/11 01:00:42 takayama Exp $ */
 /*   primitive.c */  /*   primitive.c */
 /*  The functions in this module were in stackmachine.c */  /*  The functions in this module were in stackmachine.c */
   
Line 424  int executePrimitive(ob) 
Line 424  int executePrimitive(ob) 
   int size;    int size;
   int i,j,k,n;    int i,j,k,n;
   int status;    int status;
     int infixOn;
     struct tokens infixToken;
   struct tokens *tokenArray;    struct tokens *tokenArray;
   struct tokens token;    struct tokens token;
   FILE *fp;    FILE *fp;
Line 442  int executePrimitive(ob) 
Line 444  int executePrimitive(ob) 
   extern TimerOn;    extern TimerOn;
   extern SecureMode;    extern SecureMode;
   
     infixOn = 0;
   
   if (DebugStack >= 2) {    if (DebugStack >= 2) {
     fprintf(Fstack,"In execute %d\n",ob.lc.ival); printOperandStack();      fprintf(Fstack,"In execute %d\n",ob.lc.ival); printOperandStack();
   }    }
Line 751  int executePrimitive(ob) 
Line 755  int executePrimitive(ob) 
         i=0;          i=0;
       }        }
       status = executeToken(token);        status = executeToken(token);
       if (status || GotoP) break;        if ((status & STATUS_BREAK) || GotoP) break;
       /* here, do not return 1. Do not propagate exit signal outside of the        /* here, do not return 1. Do not propagate exit signal outside of the
          loop. */           loop. */
   
         if (status & STATUS_INFIX) {
           infixOn = 1; infixToken = token;
           infixToken.tflag |= NO_DELAY;  continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if ((status & STATUS_BREAK) || GotoP) break;
         }
   
     }      }
     break;      break;
   
Line 793  int executePrimitive(ob) 
Line 806  int executePrimitive(ob) 
           size = ob1.rc.ival;            size = ob1.rc.ival;
           for (j=0; j<size; j++) {            for (j=0; j<size; j++) {
             status = executeToken(tokenArray[j]);              status = executeToken(tokenArray[j]);
             if (status || GotoP) goto xyz;              if ((status & STATUS_BREAK) || GotoP) goto xyz;
           }  
         }              if (status & STATUS_INFIX) {
                 if (j == size-1) errorStackmachine("infix operator at the end.\n");
                 infixOn = 1; infixToken = tokenArray[j];
                 infixToken.tflag |= NO_DELAY; continue;
               }else if (infixOn) {
                 infixOn = 0; status = executeToken(infixToken);
                 if ((status & STATUS_BREAK) || GotoP) goto xyz;
               }
   
                     }
                   }
       }else{        }else{
         /*          /*
           if (lim > i) errorStackmachine("The initial value must not be less than limit value (for).\n");            if (lim > i) errorStackmachine("The initial value must not be less than limit value (for).\n");
Line 806  int executePrimitive(ob) 
Line 829  int executePrimitive(ob) 
           size = ob1.rc.ival;            size = ob1.rc.ival;
           for (j=0; j<size; j++) {            for (j=0; j<size; j++) {
             status = executeToken(tokenArray[j]);              status = executeToken(tokenArray[j]);
             if (status || GotoP) goto xyz;              if ((status & STATUS_BREAK) || GotoP) goto xyz;
   
               if (status & STATUS_INFIX) {
                 if (j == size-1) errorStackmachine("infix operator at the end.\n");
                 infixOn = 1; infixToken = tokenArray[j];
                 infixToken.tflag |= NO_DELAY; continue;
               }else if (infixOn) {
                 infixOn = 0; status = executeToken(infixToken);
                 if ((status & STATUS_BREAK) || GotoP) goto xyz;
                           }
   
           }            }
         }          }
       }        }
Line 842  int executePrimitive(ob) 
Line 875  int executePrimitive(ob) 
       size = ob2.rc.ival;        size = ob2.rc.ival;
       for (j=0; j<size; j++) {        for (j=0; j<size; j++) {
         status = executeToken(tokenArray[j]);          status = executeToken(tokenArray[j]);
         if (status) goto foor;          if (status & STATUS_BREAK) goto foor;
   
           if (status & STATUS_INFIX) {
             if (j == size-1) errorStackmachine("infix operator at the end(map).\n");
             infixOn = 1; infixToken = tokenArray[j];
             infixToken.tflag |= NO_DELAY; continue;
           }else if (infixOn) {
             infixOn = 0; status = executeToken(infixToken);
             if ((status & STATUS_BREAK) || GotoP) goto foor;
           }
   
       }        }
     }      }
     foor: ;      foor: ;
Line 897  int executePrimitive(ob) 
Line 940  int executePrimitive(ob) 
     for (i=0; i<size; i++) {      for (i=0; i<size; i++) {
       token = tokenArray[i];        token = tokenArray[i];
       status = executeToken(token);        status = executeToken(token);
       if (status != 0) return(status);        if (status & STATUS_BREAK) return(status);
   
         if (status & STATUS_INFIX) {
           if (i == size-1) errorStackmachine("infix operator at the end(if).\n");
           infixOn = 1; infixToken = tokenArray[i];
           infixToken.tflag |= NO_DELAY; continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if (status & STATUS_BREAK) return(status);
         }
   
     }      }
   
     break;      break;
Line 915  int executePrimitive(ob) 
Line 968  int executePrimitive(ob) 
       token = tokenArray[i];        token = tokenArray[i];
       /***printf("[token %d]%s\n",i,token.token);*/        /***printf("[token %d]%s\n",i,token.token);*/
       status = executeToken(token);        status = executeToken(token);
       if (status != 0) break;        if (status & STATUS_BREAK) break;
   
         if (status & STATUS_INFIX) {
           if (i == size-1) errorStackmachine("infix operator at the end(exec).\n");
           infixOn = 1; infixToken = tokenArray[i];
           infixToken.tflag |= NO_DELAY; continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if (status & STATUS_BREAK) break;
         }
   
     }      }
     break;      break;
   
Line 1501  int executePrimitive(ob) 
Line 1564  int executePrimitive(ob) 
     for (i=0; i<size; i++) {      for (i=0; i<size; i++) {
       token = tokenArray[i];        token = tokenArray[i];
       status = executeToken(token);        status = executeToken(token);
       if (status != 0) break;        if (status & STATUS_BREAK) break;
   
         if (status & STATUS_INFIX) {
           if (i == size-1) errorStackmachine("infix operator at the end(sendmsg).\n");
           infixOn = 1; infixToken = token;
           infixToken.tflag |= NO_DELAY; continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if (status & STATUS_BREAK) break;
         }
   
     }      }
     if (ccflag) {      if (ccflag) {
       contextControl(CCPOP); ccflag = 0; /* recover the Current context. */        contextControl(CCPOP); ccflag = 0; /* recover the Current context. */
Line 1550  int executePrimitive(ob) 
Line 1623  int executePrimitive(ob) 
       InSendmsg2 = 1;        InSendmsg2 = 1;
       status = executeToken(token);        status = executeToken(token);
       InSendmsg2 = 0;        InSendmsg2 = 0;
       if (QuoteMode && (status==DO_QUOTE)) {  
         if (status & STATUS_INFIX) {
                   if (status & DO_QUOTE) errorStackmachine("infix op with DO_QUOTE\n");
           if (i == size-1) errorStackmachine("infix operator at the end(sendmsg2).\n");
           infixOn = 1; infixToken = tokenArray[i];
           infixToken.tflag |= NO_DELAY; continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if (status & STATUS_BREAK) break;
         }
   
         if (QuoteMode && (status & DO_QUOTE)) {
         /* generate tree object, for kan/k0 */          /* generate tree object, for kan/k0 */
         struct object qob;          struct object qob;
         struct object qattr;          struct object qattr;
Line 1578  int executePrimitive(ob) 
Line 1662  int executePrimitive(ob) 
         putoa(qob,2,ob4);  /* Argument */          putoa(qob,2,ob4);  /* Argument */
         qob = KpoTree(qob);          qob = KpoTree(qob);
         Kpush(qob);          Kpush(qob);
       } else if (status != 0) break;        } else if (status & STATUS_BREAK) break;
   
     }      }
     if (ccflag) {      if (ccflag) {
       contextControl(CCPOP); ccflag = 0;        contextControl(CCPOP); ccflag = 0;
Line 1603  int executePrimitive(ob) 
Line 1688  int executePrimitive(ob) 
     for (i=0; i<size; i++) {      for (i=0; i<size; i++) {
       token = tokenArray[i];        token = tokenArray[i];
       status = executeToken(token);        status = executeToken(token);
       if (status != 0) break;        if (status & STATUS_BREAK) break;
   
         if (status & STATUS_INFIX) {
           if (i == size-1) errorStackmachine("infix operator at the end(primmsg).\n");
           infixOn = 1; infixToken = tokenArray[i];
           infixToken.tflag |= NO_DELAY; continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if (status & STATUS_BREAK) break;
         }
   
     }      }
   
     contextControl(CCPOP); /* recover the Current context. */      contextControl(CCPOP); /* recover the Current context. */
Line 1655  int executePrimitive(ob) 
Line 1750  int executePrimitive(ob) 
     for (i=0; i<size; i++) {      for (i=0; i<size; i++) {
       token = tokenArray[i];        token = tokenArray[i];
       status = executeToken(token);        status = executeToken(token);
       if (status != 0) break;        if (status & STATUS_BREAK) break;
   
         if (status & STATUS_INFIX) {
           if (i == size-1) errorStackmachine("infix operator at the end(supmsg).\n");
           infixOn = 1; infixToken = tokenArray[i];
           infixToken.tflag |= NO_DELAY; continue;
         }else if (infixOn) {
           infixOn = 0; status = executeToken(infixToken);
           if (status & STATUS_BREAK) break;
         }
   
     }      }
     if (ccflag) {      if (ccflag) {
       contextControl(CCPOP); ccflag = 0; /* recover the Current context. */        contextControl(CCPOP); ccflag = 0; /* recover the Current context. */
Line 1733  int executePrimitive(ob) 
Line 1838  int executePrimitive(ob) 
           for (i=0; i<size; i++) {            for (i=0; i<size; i++) {
                 token = tokenArray[i];                  token = tokenArray[i];
                 status = executeToken(token);                  status = executeToken(token);
                   if (status & STATUS_BREAK) break;
   
           if (status & STATUS_INFIX) {
             if (i == size-1) errorStackmachine("infix operator at the end(tlimit).\n");
             infixOn = 1; infixToken = tokenArray[i];
             infixToken.tflag |= NO_DELAY; continue;
           }else if (infixOn) {
             infixOn = 0; status = executeToken(infixToken);
             if (status & STATUS_BREAK) break;
           }
   
           }            }
           cancelAlarm();            cancelAlarm();
         }else{          }else{
Line 1741  int executePrimitive(ob) 
Line 1857  int executePrimitive(ob) 
           for (i=0; i<size; i++) {            for (i=0; i<size; i++) {
                 token = tokenArray[i];                  token = tokenArray[i];
                 status = executeToken(token);                  status = executeToken(token);
           if (status & STATUS_BREAK) break;
   
           if (status & STATUS_INFIX) {
             if (i == size-1) errorStackmachine("infix operator at the end(tlimit).\n");
             infixOn = 1; infixToken = tokenArray[i];
             infixToken.tflag |= NO_DELAY; continue;
           }else if (infixOn) {
             infixOn = 0; status = executeToken(infixToken);
             if (status & STATUS_BREAK) break;
           }
   
           }            }
       times(&after);        times(&after);
       after_real = time(&after_real);        after_real = time(&after_real);

Legend:
Removed from v.1.12  
changed lines
  Added in v.1.13

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>