Skip to content

Commit 9ca9e04

Browse files
committed
internal/core/eval: separate out dynamic fields
Change-Id: Ide3e5b04807c07ad969ea42617de748b7be31510 Reviewed-on: https://cue-review.googlesource.com/c/cue/+/7983 Reviewed-by: Marcel van Lohuizen <[email protected]>
1 parent 399ba76 commit 9ca9e04

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

internal/core/eval/closed.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -732,6 +732,13 @@ func (c *acceptor) verifySets(ctx *adt.OpContext, id adt.ID, f adt.Feature) (fou
732732
continue
733733
}
734734

735+
for _, b := range o.Dynamic {
736+
m := dynamicMatcher{b.Key}
737+
if m.Match(ctx, o.env, f) {
738+
return true, false
739+
}
740+
}
741+
735742
for _, b := range o.Bulk {
736743
if b.check.Match(ctx, o.env, f) {
737744
return true, false

internal/core/eval/optionals.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ type fieldSet struct {
3535
// Required Fields are marked as empty
3636
Fields []FieldInfo
3737

38+
Dynamic []*adt.DynamicField
39+
3840
// excluded are all literal fields that already exist.
3941
Bulk []bulkField
4042

@@ -49,12 +51,11 @@ func (o *fieldSet) OptionalTypes() (mask adt.OptionalType) {
4951
break
5052
}
5153
}
52-
for _, b := range o.Bulk {
53-
if b.expr == nil {
54-
mask |= adt.HasDynamic
55-
} else {
56-
mask |= adt.HasPattern
57-
}
54+
if len(o.Dynamic) > 0 {
55+
mask |= adt.HasDynamic
56+
}
57+
if len(o.Bulk) > 0 {
58+
mask |= adt.HasPattern
5859
}
5960
if o.Additional != nil {
6061
mask |= adt.HasAdditional
@@ -92,6 +93,12 @@ func (o *fieldSet) Accept(c *adt.OpContext, f adt.Feature) bool {
9293
if o.fieldIndex(f) >= 0 {
9394
return true
9495
}
96+
for _, d := range o.Dynamic {
97+
m := dynamicMatcher{d.Key}
98+
if m.Match(c, o.env, f) {
99+
return true
100+
}
101+
}
95102
for _, b := range o.Bulk {
96103
if b.check.Match(c, o.env, f) {
97104
return true
@@ -179,8 +186,7 @@ func (o *fieldSet) AddOptional(c *adt.OpContext, x *adt.OptionalField) {
179186
}
180187

181188
func (o *fieldSet) AddDynamic(c *adt.OpContext, x *adt.DynamicField) {
182-
// not in bulk: count as regular field?
183-
o.Bulk = append(o.Bulk, bulkField{dynamicMatcher{x.Key}, nil, false})
189+
o.Dynamic = append(o.Dynamic, x)
184190
}
185191

186192
func (o *fieldSet) AddBulk(c *adt.OpContext, x *adt.BulkOptionalField) {

0 commit comments

Comments
 (0)