func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
	if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) {
		return out, false, false
	}
	again := true
	for again {
		again = false
		if out.Kind() == reflect.Ptr {
			if out.IsNil() {
				out.Set(reflect.New(out.Type().Elem()))
			}
			out = out.Elem()
			again = true
		}
		if out.CanAddr() {
			if u, ok := out.Addr().Interface().(Unmarshaler); ok {
				good = d.callUnmarshaler(n, u)
				return out, true, good
			}
		}
	}
	return out, false, false
}
func (d *decoder) prepare(n *node, out reflect.Value) (newout reflect.Value, unmarshaled, good bool) {
	if n.tag == yaml_NULL_TAG || n.kind == scalarNode && n.tag == "" && (n.value == "null" || n.value == "~" || n.value == "" && n.implicit) {
		return out, false, false
	}
	again := true
	for again {
		again = false
		if out.Kind() == reflect.Ptr {
			if out.IsNil() {
				out.Set(reflect.New(out.Type().Elem()))
			}
			out = out.Elem()
			again = true
		}
		if out.CanAddr() {
			if u, ok := out.Addr().Interface().(Unmarshaler); ok {
				good = d.callUnmarshaler(n, u)
				return out, true, good
			}
		}
	}
	return out, false, false
}
func ( d * decoder ) prepare ( n * node , out reflect . Value ) ( newout reflect . Value , unmarshaled , good bool ) { if n . tag == yaml_NULL_TAG || n . kind == scalarNode && n . tag == " " && ( n . value == " " || n . value == " " || n . value == " " && n . implicit ) { return out , false , false } again := true for again { again = false if out . Kind ( ) == reflect . Ptr { if out . IsNil ( ) { out . Set ( reflect . New ( out . Type ( ) . Elem ( ) ) ) } out = out . Elem ( ) again = true } if out . CanAddr ( ) { if u , ok := out . Addr ( ) . Interface ( ) . ( Unmarshaler ) ; ok { good = d . callUnmarshaler ( n , u ) return out , true , good } } } return out , false , false }
// d.prepare initializes and dereferences pointers and calls UnmarshalYAML
// if a value is found to implement it.
// It returns the initialized and dereferenced out value, whether
// unmarshalling was already done by UnmarshalYAML, and if so whether
// its types unmarshalled appropriately.
//
// If n holds a null value, prepare returns before doing anything.
d . prepare initializes and dereferences pointers and calls UnmarshalYAML if a value is found to implement it . It returns the initialized and dereferenced out value whether unmarshalling was already done by UnmarshalYAML and if so whether its types unmarshalled appropriately . If n holds a null value prepare returns before doing anything .