1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
|
discard """
output: '''
testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest2!test3?hi
what's
your
name
hi
what's
your
name
'''
"""
# Test the new iterators
iterator xrange(fromm, to: int, step = 1): int =
var a = fromm
while a <= to:
yield a
inc(a, step)
iterator interval[T](a, b: T): T =
var x = a
while x <= b:
yield x
inc(x)
#
#iterator lines(filename: string): (line: string) =
# var
# f: tTextfile
# shouldClose = open(f, filename)
# if shouldClose:
# setSpace(line, 256)
# while readTextLine(f, line):
# yield line
# finally:
# if shouldClose: close(f)
#
for i in xrange(0, 5):
for k in xrange(1, 7):
write(stdout, "test")
for j in interval(45, 45):
write(stdout, "test2!")
write(stdout, "test3?")
for x in items(["hi", "what's", "your", "name"]):
echo(x)
const
stringArray = ["hi", "what's", "your", "name"]
for i in 0..len(stringArray)-1:
echo(stringArray[i])
# bug #15360
type Rule[T] = (int, T)
var t: seq[Rule[int]]
for (c, t) in t:
discard
import std/sugar
# bug #14165
iterator log_nodups_hamming(): int {.inline.} =
let lb3 = 1
let lb4 = 123
proc mul3(): int = lb3 + lb4
yield mul3()
for h in log_nodups_hamming():
break
for h in log_nodups_hamming():
break
for h in log_nodups_hamming():
break
# bug #18536
iterator envPairs*(): int =
var foo: seq[int]
proc fun() =
foo = @[]
fun()
yield 3
proc main() =
for a in envPairs():
discard
for a in envPairs():
discard
static: main()
main()
# bug #6269
iterator makeFn(outer_val: int): proc(a: int): int =
for i in 0..1:
yield proc(a:int): int =
return a + i.int
let v1 = 42
let res = collect:
for fn1 in makeFn(v1):
let v2 = fn1(v1)
for fn2 in makeFn(v2):
fn2(v2)
doAssert res == @[42, 43, 43, 44]
block: # bug #21110
iterator p(): int =
when nimvm:
yield 0
else:
yield 0
template foo =
for k in p():
let m = ""
proc e() = discard m & ""
e()
static: foo()
foo()
# bug #15924
iterator walk(): (int, int) {.closure.} =
yield (10,11)
for (i,j) in walk():
doAssert i == 10
proc main123() =
let x = false
iterator it(): (bool, bool) {.closure.} = # normally {.closure.} here makes #21476 work
discard x
for (_, _) in it():
discard
main123()
|