Skip to content

Commit f42b369

Browse files
committed
internal/core/adt: rearrange newNodeContext
This ensures previously allocated buffers of a scheduler can be reused. It also provides an easier path to execute initialization code on both allocated and reused nodes. Issue #2850 Signed-off-by: Marcel van Lohuizen <[email protected]> Change-Id: Ie28986b120f54a98bda253c3725a46a6743b7bf1 Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/1218177 TryBot-Result: CUEcueckoo <[email protected]> Unity-Result: CUE porcuepine <[email protected]> Reviewed-by: Daniel Martí <[email protected]>
1 parent b7d9b69 commit f42b369

File tree

1 file changed

+16
-14
lines changed

1 file changed

+16
-14
lines changed

internal/core/adt/eval.go

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1333,12 +1333,16 @@ func (n *nodeContext) clone() *nodeContext {
13331333
}
13341334

13351335
func (c *OpContext) newNodeContext(node *Vertex) *nodeContext {
1336-
if n := c.freeListNode; n != nil {
1336+
var n *nodeContext
1337+
if n = c.freeListNode; n != nil {
13371338
c.stats.Reused++
13381339
c.freeListNode = n.nextFree
13391340

1341+
n.scheduler.clear()
1342+
n.scheduler.ctx = c
1343+
13401344
*n = nodeContext{
1341-
scheduler: scheduler{ctx: c},
1345+
scheduler: n.scheduler,
13421346
node: node,
13431347
nodeContextState: nodeContextState{
13441348
kind: TopKind,
@@ -1367,21 +1371,19 @@ func (c *OpContext) newNodeContext(node *Vertex) *nodeContext {
13671371
buffer: n.buffer[:0],
13681372
}
13691373
n.scheduler.clear()
1370-
n.scheduler.node = n
1371-
n.underlying = node
1372-
1373-
return n
1374-
}
1375-
c.stats.Allocs++
1374+
} else {
1375+
c.stats.Allocs++
13761376

1377-
n := &nodeContext{
1378-
scheduler: scheduler{
1379-
ctx: c,
1380-
},
1381-
node: node,
1377+
n = &nodeContext{
1378+
scheduler: scheduler{
1379+
ctx: c,
1380+
},
1381+
node: node,
13821382

1383-
nodeContextState: nodeContextState{kind: TopKind},
1383+
nodeContextState: nodeContextState{kind: TopKind},
1384+
}
13841385
}
1386+
13851387
n.scheduler.node = n
13861388
n.underlying = node
13871389
return n

0 commit comments

Comments
 (0)