fixes #4220
This commit is contained in:
parent
5c5e54d3a9
commit
45437eb113
2 changed files with 28 additions and 2 deletions
|
|
@ -2005,7 +2005,13 @@ iterator countdown*[T](a, b: T, step = 1): T {.inline.} =
|
||||||
## step count. `T` may be any ordinal type, `step` may only
|
## step count. `T` may be any ordinal type, `step` may only
|
||||||
## be positive. **Note**: This fails to count to ``low(int)`` if T = int for
|
## be positive. **Note**: This fails to count to ``low(int)`` if T = int for
|
||||||
## efficiency reasons.
|
## efficiency reasons.
|
||||||
when T is IntLikeForCount:
|
when T is (uint|uint64):
|
||||||
|
var res = a
|
||||||
|
while res >= b:
|
||||||
|
yield res
|
||||||
|
if res == b: break
|
||||||
|
dec(res, step)
|
||||||
|
elif T is IntLikeForCount:
|
||||||
var res = int(a)
|
var res = int(a)
|
||||||
while res >= int(b):
|
while res >= int(b):
|
||||||
yield T(res)
|
yield T(res)
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,15 @@
|
||||||
discard """
|
discard """
|
||||||
output: '''true
|
output: '''true
|
||||||
true
|
true
|
||||||
true'''
|
true
|
||||||
|
5
|
||||||
|
4
|
||||||
|
3
|
||||||
|
2
|
||||||
|
1
|
||||||
|
0
|
||||||
|
it should stop now
|
||||||
|
'''
|
||||||
"""
|
"""
|
||||||
|
|
||||||
# bug 1420
|
# bug 1420
|
||||||
|
|
@ -11,3 +19,15 @@ echo x > y # works
|
||||||
|
|
||||||
echo((40'i32) > (30'i32))
|
echo((40'i32) > (30'i32))
|
||||||
echo((40'u32) > (30'u32)) # Error: ordinal type expected
|
echo((40'u32) > (30'u32)) # Error: ordinal type expected
|
||||||
|
|
||||||
|
# bug #4220
|
||||||
|
|
||||||
|
const count: uint = 5
|
||||||
|
var stop_me = false
|
||||||
|
|
||||||
|
for i in countdown(count, 0):
|
||||||
|
echo i
|
||||||
|
if stop_me: break
|
||||||
|
if i == 0:
|
||||||
|
echo "it should stop now"
|
||||||
|
stop_me = true
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue