@@ -46,7 +46,7 @@ type resolver struct {
4646 in dyn.Value
4747 fn Lookup
4848
49- refs map [string ]ref
49+ refs map [string ]Ref
5050 resolved map [string ]dyn.Value
5151
5252 // Memoization for lookups.
@@ -73,11 +73,11 @@ func (r resolver) run() (out dyn.Value, err error) {
7373}
7474
7575func (r * resolver ) collectVariableReferences () (err error ) {
76- r .refs = make (map [string ]ref )
76+ r .refs = make (map [string ]Ref )
7777
7878 // First walk the input to gather all values with a variable reference.
7979 _ , err = dyn .Walk (r .in , func (p dyn.Path , v dyn.Value ) (dyn.Value , error ) {
80- ref , ok := newRef (v )
80+ ref , ok := NewRef (v )
8181 if ! ok {
8282 // Skip values without variable references.
8383 return v , nil
@@ -113,9 +113,9 @@ func (r *resolver) resolveVariableReferences() (err error) {
113113 return nil
114114}
115115
116- func (r * resolver ) resolveRef (ref ref , seen []string ) (dyn.Value , error ) {
116+ func (r * resolver ) resolveRef (ref Ref , seen []string ) (dyn.Value , error ) {
117117 // This is an unresolved variable reference.
118- deps := ref .references ()
118+ deps := ref .References ()
119119
120120 // Resolve each of the dependencies, then interpolate them in the ref.
121121 resolved := make ([]dyn.Value , len (deps ))
@@ -145,19 +145,19 @@ func (r *resolver) resolveRef(ref ref, seen []string) (dyn.Value, error) {
145145 }
146146
147147 // Interpolate the resolved values.
148- if ref .isPure () && complete {
148+ if ref .IsPure () && complete {
149149 // If the variable reference is pure, we can substitute it.
150150 // This is useful for interpolating values of non-string types.
151151 //
152152 // Note: we use the location of the variable reference to preserve the information
153153 // of where it is used. This also means that relative path resolution is done
154154 // relative to where a variable is used, not where it is defined.
155155 //
156- return dyn .NewValue (resolved [0 ].Value (), ref .value .Locations ()), nil
156+ return dyn .NewValue (resolved [0 ].Value (), ref .Value .Locations ()), nil
157157 }
158158
159159 // Not pure; perform string interpolation.
160- for j := range ref .matches {
160+ for j := range ref .Matches {
161161 // The value is invalid if resolution returned [ErrSkipResolution].
162162 // We must skip those and leave the original variable reference in place.
163163 if ! resolved [j ].IsValid () {
@@ -169,14 +169,14 @@ func (r *resolver) resolveRef(ref ref, seen []string) (dyn.Value, error) {
169169 if ! ok {
170170 return dyn .InvalidValue , fmt .Errorf (
171171 "cannot interpolate non-string value: %s" ,
172- ref .matches [j ][0 ],
172+ ref .Matches [j ][0 ],
173173 )
174174 }
175175
176- ref .str = strings .Replace (ref .str , ref .matches [j ][0 ], s , 1 )
176+ ref .Str = strings .Replace (ref .Str , ref .Matches [j ][0 ], s , 1 )
177177 }
178178
179- return dyn .NewValue (ref .str , ref .value .Locations ()), nil
179+ return dyn .NewValue (ref .Str , ref .Value .Locations ()), nil
180180}
181181
182182func (r * resolver ) resolveKey (key string , seen []string ) (dyn.Value , error ) {
@@ -204,7 +204,7 @@ func (r *resolver) resolveKey(key string, seen []string) (dyn.Value, error) {
204204 }
205205
206206 // If the returned value is a valid variable reference, resolve it.
207- ref , ok := newRef (v )
207+ ref , ok := NewRef (v )
208208 if ok {
209209 v , err = r .resolveRef (ref , seen )
210210 }
0 commit comments