func()

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
}