Skip to content

Commit b2d9e16

Browse files
committed
internal/core/adt: merge if and for comprehension lists
Separating them is unnecessary. Signed-off-by: Marcel van Lohuizen <mpvl@golang.org> Change-Id: I47b69c2666d6606356c524875ae8841b9322b8d4 Signed-off-by: Marcel van Lohuizen <mpvl@golang.org> Reviewed-on: https://review.gerrithub.io/c/cue-lang/cue/+/529514 Reviewed-by: Paul Jolly <paul@myitcv.io>
1 parent 569fcbd commit b2d9e16

File tree

1 file changed

+30
-45
lines changed

1 file changed

+30
-45
lines changed

internal/core/adt/eval.go

Lines changed: 30 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -588,10 +588,7 @@ func (n *nodeContext) incompleteErrors() *Bottom {
588588
for _, d := range n.dynamicFields {
589589
err = CombineErrors(nil, err, d.err)
590590
}
591-
for _, c := range n.forClauses {
592-
err = CombineErrors(nil, err, c.err)
593-
}
594-
for _, c := range n.ifClauses {
591+
for _, c := range n.comprehensions {
595592
err = CombineErrors(nil, err, c.err)
596593
}
597594
for _, x := range n.exprs {
@@ -799,11 +796,10 @@ type nodeContext struct {
799796
notify []*Vertex
800797

801798
// Struct information
802-
dynamicFields []envDynamic
803-
ifClauses []envYield
804-
forClauses []envYield
805-
aStruct Expr
806-
aStructID CloseInfo
799+
dynamicFields []envDynamic
800+
comprehensions []envYield
801+
aStruct Expr
802+
aStructID CloseInfo
807803

808804
// Expression conjuncts
809805
lists []envList
@@ -875,8 +871,7 @@ func (n *nodeContext) clone() *nodeContext {
875871
d.notify = append(d.notify, n.notify...)
876872
d.checks = append(d.checks, n.checks...)
877873
d.dynamicFields = append(d.dynamicFields, n.dynamicFields...)
878-
d.ifClauses = append(d.ifClauses, n.ifClauses...)
879-
d.forClauses = append(d.forClauses, n.forClauses...)
874+
d.comprehensions = append(d.comprehensions, n.comprehensions...)
880875
d.lists = append(d.lists, n.lists...)
881876
d.vLists = append(d.vLists, n.vLists...)
882877
d.exprs = append(d.exprs, n.exprs...)
@@ -893,24 +888,23 @@ func (c *OpContext) newNodeContext(node *Vertex) *nodeContext {
893888
c.freeListNode = n.nextFree
894889

895890
*n = nodeContext{
896-
ctx: c,
897-
node: node,
898-
kind: TopKind,
899-
usedArcs: n.usedArcs[:0],
900-
arcMap: n.arcMap[:0],
901-
notify: n.notify[:0],
902-
checks: n.checks[:0],
903-
dynamicFields: n.dynamicFields[:0],
904-
ifClauses: n.ifClauses[:0],
905-
forClauses: n.forClauses[:0],
906-
lists: n.lists[:0],
907-
vLists: n.vLists[:0],
908-
exprs: n.exprs[:0],
909-
disjunctions: n.disjunctions[:0],
910-
usedDefault: n.usedDefault[:0],
911-
disjunctErrs: n.disjunctErrs[:0],
912-
disjuncts: n.disjuncts[:0],
913-
buffer: n.buffer[:0],
891+
ctx: c,
892+
node: node,
893+
kind: TopKind,
894+
usedArcs: n.usedArcs[:0],
895+
arcMap: n.arcMap[:0],
896+
notify: n.notify[:0],
897+
checks: n.checks[:0],
898+
dynamicFields: n.dynamicFields[:0],
899+
comprehensions: n.comprehensions[:0],
900+
lists: n.lists[:0],
901+
vLists: n.vLists[:0],
902+
exprs: n.exprs[:0],
903+
disjunctions: n.disjunctions[:0],
904+
usedDefault: n.usedDefault[:0],
905+
disjunctErrs: n.disjunctErrs[:0],
906+
disjuncts: n.disjuncts[:0],
907+
buffer: n.buffer[:0],
914908
}
915909

916910
return n
@@ -1034,8 +1028,7 @@ func (n *nodeContext) updateNodeType(k Kind, v Expr, id CloseInfo) bool {
10341028

10351029
func (n *nodeContext) done() bool {
10361030
return len(n.dynamicFields) == 0 &&
1037-
len(n.ifClauses) == 0 &&
1038-
len(n.forClauses) == 0 &&
1031+
len(n.comprehensions) == 0 &&
10391032
len(n.exprs) == 0
10401033
}
10411034

@@ -1047,9 +1040,7 @@ func (n *nodeContext) finalDone() bool {
10471040
return false
10481041
}
10491042
}
1050-
return len(n.dynamicFields) == 0 &&
1051-
len(n.ifClauses) == 0 &&
1052-
len(n.forClauses) == 0
1043+
return len(n.dynamicFields) == 0 && len(n.comprehensions) == 0
10531044
}
10541045

10551046
// hasErr is used to determine if an evaluation path, for instance a single
@@ -1752,11 +1743,11 @@ func (n *nodeContext) addStruct(
17521743

17531744
case *ForClause:
17541745
// Why is this not an embedding?
1755-
n.forClauses = append(n.forClauses, envYield{childEnv, x, closeInfo, nil})
1746+
n.comprehensions = append(n.comprehensions, envYield{childEnv, x, closeInfo, nil})
17561747

17571748
case Yielder:
17581749
// Why is this not an embedding?
1759-
n.ifClauses = append(n.ifClauses, envYield{childEnv, x, closeInfo, nil})
1750+
n.comprehensions = append(n.comprehensions, envYield{childEnv, x, closeInfo, nil})
17601751

17611752
case Expr:
17621753
// add embedding to optional
@@ -1869,11 +1860,7 @@ func (n *nodeContext) expandOne() (done bool) {
18691860
return true
18701861
}
18711862

1872-
if progress = n.injectEmbedded(&(n.ifClauses)); progress {
1873-
return true
1874-
}
1875-
1876-
if progress = n.injectEmbedded(&(n.forClauses)); progress {
1863+
if progress = n.injectComprehensions(&(n.comprehensions)); progress {
18771864
return true
18781865
}
18791866

@@ -1927,10 +1914,8 @@ func (n *nodeContext) injectDynamic() (progress bool) {
19271914
return progress
19281915
}
19291916

1930-
// injectEmbedded evaluates and inserts embeddings. It first evaluates all
1931-
// embeddings before inserting the results to ensure that the order of
1932-
// evaluation does not matter.
1933-
func (n *nodeContext) injectEmbedded(all *[]envYield) (progress bool) {
1917+
// injectComprehensions evaluates and inserts comprehensions.
1918+
func (n *nodeContext) injectComprehensions(all *[]envYield) (progress bool) {
19341919
ctx := n.ctx
19351920
type envStruct struct {
19361921
env *Environment

0 commit comments

Comments
 (0)