Changeset 497 for trunk/thune/thune.c
- Timestamp:
- 11/14/07 04:27:55 (12 months ago)
- Files:
-
- 1 modified
-
trunk/thune/thune.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/thune/thune.c
r490 r497 609 609 610 610 case OP_ITER: // (series blk -- ) 611 if( ur_is(UR_TOS, UT_BLOCK) && 612 (ur_itLen( ut, ur_s_prev(UR_TOS) ) > 0) ) 611 if( ur_is(UR_TOS, UT_BLOCK) ) 613 612 { 613 int skip = ur_sel(val); 614 if( skip == 0 ) 615 skip = 1; 616 if( skip > 0 ) 617 { 618 if( ur_itLen( ut, ur_s_prev(UR_TOS) ) < 1 ) 619 goto no_iter; 620 } 621 else 622 { 623 if( ur_s_prev(UR_TOS)->series.it < 1 ) 624 goto no_iter; 625 } 614 626 PUSHC_EVAL( blkN, start, pc ); 615 627 SET_BLK_PC( UR_TOS->series.n, 616 628 UR_TOS->series.it ); 617 PUSHC_ITER( blkN, pc, end, 618 (ur_sel(val) > 1) ? ur_sel(val) : 1 ); 629 PUSHC_ITER( blkN, pc, end, skip ); 619 630 620 631 // Loop code must drop TOS. … … 623 634 else 624 635 { 636 no_iter: 625 637 UR_S_DROPN(2); 626 638 } … … 1063 1075 1064 1076 case CC_ITER: 1065 UR_TOS->series.it += UR_TOC->iter.skip; 1066 if( ur_itLen(ut, UR_TOS) > 0 ) 1077 { 1078 int skip = UR_TOC->iter.skip; 1079 UR_TOS->series.it += skip; 1080 if( ((skip > 0) ? ur_itLen(ut, UR_TOS) : UR_TOS->series.it + 1) 1081 > 0 ) 1067 1082 { 1068 1083 RESET_ITER( pc, end ); … … 1072 1087 UR_C_DEC; 1073 1088 UR_S_DROP; // Pop iterator value. 1089 } 1074 1090 goto control; 1075 1091
