fixes yet another regression
This commit is contained in:
parent
6fbde1f4fb
commit
9097033b4e
2 changed files with 32 additions and 3 deletions
|
|
@ -730,13 +730,17 @@ proc liftCapturedVars(n: PNode; owner: PSym; d: DetectionPass;
|
||||||
# ------------------ old stuff -------------------------------------------
|
# ------------------ old stuff -------------------------------------------
|
||||||
|
|
||||||
proc semCaptureSym*(s, owner: PSym) =
|
proc semCaptureSym*(s, owner: PSym) =
|
||||||
if interestingVar(s) and owner.id != s.owner.id and s.kind != skResult:
|
if interestingVar(s) and s.kind != skResult:
|
||||||
if owner.typ != nil and not isGenericRoutine(owner):
|
if owner.typ != nil and not isGenericRoutine(owner):
|
||||||
# XXX: is this really safe?
|
# XXX: is this really safe?
|
||||||
# if we capture a var from another generic routine,
|
# if we capture a var from another generic routine,
|
||||||
# it won't be consider captured.
|
# it won't be consider captured.
|
||||||
|
var o = owner.skipGenericOwner
|
||||||
|
while o.kind != skModule and o != nil:
|
||||||
|
if s.owner == o:
|
||||||
owner.typ.callConv = ccClosure
|
owner.typ.callConv = ccClosure
|
||||||
#echo "semCaptureSym ", owner.name.s, owner.id, " ", s.name.s, s.id
|
#echo "computing .closure for ", owner.name.s, " ", owner.info, " because of ", s.name.s
|
||||||
|
o = o.skipGenericOwner
|
||||||
# since the analysis is not entirely correct, we don't set 'tfCapturesEnv'
|
# since the analysis is not entirely correct, we don't set 'tfCapturesEnv'
|
||||||
# here
|
# here
|
||||||
|
|
||||||
|
|
|
||||||
25
tests/closure/tnoclosure.nim
Normal file
25
tests/closure/tnoclosure.nim
Normal file
|
|
@ -0,0 +1,25 @@
|
||||||
|
discard """
|
||||||
|
output: '''@[1]
|
||||||
|
@[1, 1]
|
||||||
|
@[1, 2, 1]
|
||||||
|
@[1, 3, 3, 1]
|
||||||
|
@[1, 4, 6, 4, 1]
|
||||||
|
@[1, 5, 10, 10, 5, 1]
|
||||||
|
@[1, 6, 15, 20, 15, 6, 1]
|
||||||
|
@[1, 7, 21, 35, 35, 21, 7, 1]
|
||||||
|
@[1, 8, 28, 56, 70, 56, 28, 8, 1]
|
||||||
|
@[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]'''
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sequtils
|
||||||
|
|
||||||
|
proc pascal(n: int) =
|
||||||
|
var row = @[1]
|
||||||
|
for r in 1..n:
|
||||||
|
echo row
|
||||||
|
row = zip(row & @[0], @[0] & row).mapIt(it[0] + it[1])
|
||||||
|
|
||||||
|
pascal(10)
|
||||||
|
|
||||||
|
# bug #3499 last snippet fixed
|
||||||
|
# bug 705 last snippet fixed
|
||||||
Loading…
Add table
Add a link
Reference in a new issue