@@ -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
181188func (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
186192func (o * fieldSet ) AddBulk (c * adt.OpContext , x * adt.BulkOptionalField ) {
0 commit comments