|
164 | 164 | Iterables: { |
165 | 165 | range(start, end) { |
166 | 166 | const advance = n => n + (start < end ? 1 : -1); |
| 167 | + const finished = n => start < end ? (n >= end + 1) : (n <= end - 1) |
167 | 168 | return new IteratorType({kind: "Range", args: [start, end]}, |
168 | 169 | {curr: start}, function*(state){ |
169 | 170 | const {curr} = state; |
170 | | - if(curr == advance(end)) return divIterator.Done() |
| 171 | + if(finished(curr)) return divIterator.Done() |
171 | 172 | state.curr = advance(curr); |
172 | 173 | return divIterator.Item(curr) |
173 | 174 | }); |
|
627 | 628 | }, |
628 | 629 | ...divIterator.Block |
629 | 630 | }, |
630 | | - { |
631 | | - opcode: 'iterCollectTo', |
632 | | - text: '[ITER] finally collect to [TYPE]', |
633 | | - arguments: { |
634 | | - ITER: divIterator.Argument, |
635 | | - TYPE: { |
636 | | - type: Scratch.ArgumentType.STRING, |
637 | | - menu: "fromIter", |
638 | | - defaultValue: "Array" |
639 | | - } |
640 | | - }, |
641 | | - disableMonitor: true, |
642 | | - blockType: BlockType.REPORTER, |
643 | | - blockShape: BlockShape.ROUND, |
644 | | - allowDropAnywhere: true, |
645 | | - }, |
646 | 631 |
|
647 | 632 | '---', |
648 | 633 | { |
|
818 | 803 | blockType: BlockType.LABEL, |
819 | 804 | text: 'Iterator Terminators' |
820 | 805 | }, |
| 806 | + { |
| 807 | + opcode: 'iterCollectTo', |
| 808 | + text: '[ITER] finally collect to [TYPE]', |
| 809 | + arguments: { |
| 810 | + ITER: divIterator.Argument, |
| 811 | + TYPE: { |
| 812 | + type: Scratch.ArgumentType.STRING, |
| 813 | + menu: "fromIter", |
| 814 | + defaultValue: "Array" |
| 815 | + } |
| 816 | + }, |
| 817 | + disableMonitor: true, |
| 818 | + blockType: BlockType.REPORTER, |
| 819 | + blockShape: BlockShape.ROUND, |
| 820 | + allowDropAnywhere: true, |
| 821 | + }, |
821 | 822 | { |
822 | 823 | opcode: 'iterTermCount', |
823 | 824 | text: '[ITER] finally count items', |
|
0 commit comments