=================================================================== RCS file: /home/cvs/OpenXM/src/kan96xx/Kan/primitive.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -p -r1.12 -r1.13 --- OpenXM/src/kan96xx/Kan/primitive.c 2004/09/11 01:00:42 1.12 +++ OpenXM/src/kan96xx/Kan/primitive.c 2004/09/12 02:37:57 1.13 @@ -1,4 +1,4 @@ -/* $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 */ /* The functions in this module were in stackmachine.c */ @@ -424,6 +424,8 @@ int executePrimitive(ob) int size; int i,j,k,n; int status; + int infixOn; + struct tokens infixToken; struct tokens *tokenArray; struct tokens token; FILE *fp; @@ -442,6 +444,8 @@ int executePrimitive(ob) extern TimerOn; extern SecureMode; + infixOn = 0; + if (DebugStack >= 2) { fprintf(Fstack,"In execute %d\n",ob.lc.ival); printOperandStack(); } @@ -751,9 +755,18 @@ int executePrimitive(ob) i=0; } 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 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; @@ -793,9 +806,19 @@ int executePrimitive(ob) size = ob1.rc.ival; for (j=0; j i) errorStackmachine("The initial value must not be less than limit value (for).\n"); @@ -806,7 +829,17 @@ int executePrimitive(ob) size = ob1.rc.ival; for (j=0; j