/* Perform either case-sensitive or case-insensitive field lookup. */ func (this *Field) Apply(context Context, first, second value.Value) (value.Value, error) { switch second.Type() { case value.STRING: s := second.Actual().(string) v, ok := first.Field(s) if !ok && this.caseInsensitive { s = strings.ToLower(s) fields := first.Fields() for f, val := range fields { if s == strings.ToLower(f) { return value.NewValue(val), nil } } } return v, nil case value.MISSING: return value.MISSING_VALUE, nil default: if first.Type() == value.MISSING { return value.MISSING_VALUE, nil } else { return value.NULL_VALUE, nil } } }