diff options
author | Araq <rumpf_a@web.de> | 2015-09-23 23:30:09 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2015-09-23 23:30:09 +0200 |
commit | 10a4bb6f4e52256f66dcffce472e808354ddad88 (patch) | |
tree | ee389ca3e6b9d7854f4aede721187dc0a71f49ec | |
parent | 22100609657706b6e2be8258739c3ad7c90fd1b4 (diff) | |
download | Nim-10a4bb6f4e52256f66dcffce472e808354ddad88.tar.gz |
fixes 3354
-rw-r--r-- | compiler/lambdalifting.nim | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/compiler/lambdalifting.nim b/compiler/lambdalifting.nim index c669fc745..cccc94756 100644 --- a/compiler/lambdalifting.nim +++ b/compiler/lambdalifting.nim @@ -859,11 +859,17 @@ proc transformOuterProc(o: POuterContext, n: PNode; it: TIter): PNode = return indirectAccess(newSymNode(it.closureParam), local, n.info) if local.kind == skClosureIterator: + # bug #3354; allow for + #iterator iter(): int {.closure.}= + # s.add(iter) + # yield 1 + + #if local == o.fn or local == it.fn: + # message(n.info, errRecursiveDependencyX, local.name.s) + # consider: [i1, i2, i1] Since we merged the iterator's closure # with the captured owning variables, we need to generate the # closure generation code again: - if local == o.fn or local == it.fn: - message(n.info, errRecursiveDependencyX, local.name.s) # XXX why doesn't this work? var closure = PEnv(idTableGet(o.lambdasToEnv, local)) if closure.isNil: |