fixes #23536; Stack trace with wrong line number when the proc called inside for loop (#23540)

fixes #23536

(cherry picked from commit 0b0f185bd1)
This commit is contained in:
ringabout
2024-04-26 22:02:02 +08:00
committed by narimiran
parent df589bcce1
commit 4e977767a7
2 changed files with 34 additions and 6 deletions

View File

@@ -452,6 +452,14 @@ proc transformYield(c: PTransf, n: PNode): PNode =
let rhs = transform(c, e)
result.add(asgnTo(lhs, rhs))
# bug #23536; note that the info of forLoopBody should't change
for idx in 0 ..< result.len:
var changeNode = result[idx]
changeNode.info = c.transCon.forStmt.info
for i, child in changeNode:
child.info = changeNode.info
inc(c.transCon.yieldStmts)
if c.transCon.yieldStmts <= 1:
# common case
@@ -462,12 +470,6 @@ proc transformYield(c: PTransf, n: PNode): PNode =
result.add(introduceNewLocalVars(c, c.transCon.forLoopBody))
c.isIntroducingNewLocalVars = false
for idx in 0 ..< result.len:
var changeNode = result[idx]
changeNode.info = c.transCon.forStmt.info
for i, child in changeNode:
child.info = changeNode.info
proc transformAddrDeref(c: PTransf, n: PNode, kinds: TNodeKinds): PNode =
result = transformSons(c, n)
if c.graph.config.backend == backendCpp or sfCompileToCpp in c.module.flags: return