in variables.go [109:143]
func (r *reference) resolveRef(cfg *Config, opts *options) (value, error) {
env := opts.env
if ok := opts.activeFields.AddNew(r.Path.String()); !ok {
return nil, raiseCyclicErr(r.Path.String())
}
var err Error
for {
var v value
cfg = cfgRoot(cfg)
if cfg == nil {
return nil, ErrMissing
}
v, err = r.Path.GetValue(cfg, opts)
if err == nil {
if v == nil {
break
}
return v, nil
}
if len(env) == 0 {
break
}
cfg = env[len(env)-1]
env = env[:len(env)-1]
}
return nil, err
}