Changeset 503 for trunk/thune/thune.c
- Timestamp:
- 01/21/08 16:21:29 (10 months ago)
- Files:
-
- 1 modified
-
trunk/thune/thune.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/thune/thune.c
r502 r503 601 601 break; 602 602 603 case OP_ITER: // (series blk -- )603 case OP_ITER: // (series blk [skip] -- ) 604 604 case OP_EACH: 605 if( ur_is(UR_TOS, UT_BLOCK) && 606 (ur_itLen( ut, ur_s_prev(UR_TOS) ) > 0) ) 607 { 608 int itype = (ur_opcode(val) == OP_ITER) ? 605 { 606 int itype; 607 int skip; 608 609 if( ur_is(UR_TOS, UT_INT) ) 610 { 611 skip = ur_int(UR_TOS); 612 UR_S_DROP; 613 } 614 else 615 { 616 skip = ur_sel(val); 617 } 618 619 if( ! ur_is(UR_TOS, UT_BLOCK) ) 620 { 621 ur_throwErr( UR_ERR_DATATYPE, 622 "iter/each expected block! for body" ); 623 goto throw_cc; 624 } 625 626 if( ur_itLen( ut, ur_s_prev(UR_TOS) ) > 0 ) 627 { 628 itype = (ur_opcode(val) == OP_ITER) ? 609 629 CC_ITER : CC_EACH; 610 int skip = ur_sel(val);611 if( skip == 0 )612 skip = 1;613 630 614 631 PUSHC_EVAL( blkN, start, pc ); … … 620 637 //ur_copyCell( ut->toc, UR_TOS ); 621 638 UR_TOC->iter.code = itype; 622 UR_TOC->iter.skip = skip ;639 UR_TOC->iter.skip = skip ? skip : 1; 623 640 ut->toc->series.n = UR_TOS->series.n; 624 641 ut->toc->series.it = UR_TOS->series.it; … … 634 651 UR_S_DROPN(2); 635 652 } 653 } 636 654 break; 637 655
