summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2015-09-23 23:30:09 +0200
committerAraq <rumpf_a@web.de>2015-09-23 23:30:09 +0200
commit10a4bb6f4e52256f66dcffce472e808354ddad88 (patch)
treeee389ca3e6b9d7854f4aede721187dc0a71f49ec
parent22100609657706b6e2be8258739c3ad7c90fd1b4 (diff)
downloadNim-10a4bb6f4e52256f66dcffce472e808354ddad88.tar.gz
fixes 3354
-rw-r--r--compiler/lambdalifting.nim10
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: