Skip to content

Commit

Permalink
fixes nim-lang#14165, fixes nim-lang#18739, fix the second example of n…
Browse files Browse the repository at this point in the history
  • Loading branch information
Araq authored and PMunch committed Mar 28, 2022
1 parent 9749cb6 commit 42ebbae
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 4 deletions.
11 changes: 7 additions & 4 deletions compiler/transf.nim
Original file line number Diff line number Diff line change
Expand Up @@ -738,7 +738,7 @@ proc transformFor(c: PTransf, n: PNode): PNode =
pushInfoContext(c.graph.config, n.info)
inc(c.inlining)
stmtList.add(transform(c, body))
#findWrongOwners(c, stmtList.pnode)
#findWrongOwners(c, stmtList.PNode)
dec(c.inlining)
popInfoContext(c.graph.config)
popTransCon(c)
Expand Down Expand Up @@ -1019,10 +1019,11 @@ proc transform(c: PTransf, n: PNode): PNode =
of nkAsgn:
result = transformAsgn(c, n)
of nkIdentDefs, nkConstDef:
result = n
result = newTransNode(n)
result[0] = transform(c, n[0])
# Skip the second son since it only contains an unsemanticized copy of the
# variable type used by docgen
result[1] = n[1]
result[2] = transform(c, n[2])
# XXX comment handling really sucks:
if importantComments(c.graph.config):
Expand All @@ -1033,8 +1034,10 @@ proc transform(c: PTransf, n: PNode): PNode =
# (bug #2604). We need to patch this environment here too:
let a = n[1]
if a.kind == nkSym:
n[1] = transformSymAux(c, a)
return n
result = copyTree(n)
result[1] = transformSymAux(c, a)
else:
result = n
of nkExceptBranch:
result = transformExceptBranch(c, n)
of nkCheckedFieldExpr:
Expand Down
50 changes: 50 additions & 0 deletions tests/iter/titer.nim
Original file line number Diff line number Diff line change
Expand Up @@ -62,3 +62,53 @@ 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]

0 comments on commit 42ebbae

Please sign in to comment.