implements higher-order inline iterators and return type inference for iterators
This commit is contained in:
parent
2cbe46daff
commit
085b339b8b
9 changed files with 119 additions and 27 deletions
38
tests/iter/tchainediterators.nim
Normal file
38
tests/iter/tchainediterators.nim
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
discard """
|
||||
output: '''16
|
||||
32
|
||||
48
|
||||
64
|
||||
128
|
||||
192
|
||||
'''
|
||||
"""
|
||||
|
||||
iterator gaz(it: iterator{.inline.}): type(it) =
|
||||
for x in it:
|
||||
yield x*2
|
||||
|
||||
iterator baz(it: iterator{.inline.}): auto =
|
||||
for x in gaz(it):
|
||||
yield x*2
|
||||
|
||||
type T1 = auto
|
||||
|
||||
iterator bar(it: iterator: T1{.inline.}): T1 =
|
||||
for x in baz(it):
|
||||
yield x*2
|
||||
|
||||
iterator foo[T](x: iterator: T{.inline.}): T =
|
||||
for e in bar(x):
|
||||
yield e*2
|
||||
|
||||
var s = @[1, 2, 3]
|
||||
|
||||
# pass an interator several levels deep:
|
||||
for x in s.items.foo:
|
||||
echo x
|
||||
|
||||
# use some complex iterator as an input for another one:
|
||||
for x in s.items.baz.foo:
|
||||
echo x
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue