func constructConcreteType(cinfo *TypeInfo) (crv, irvSet reflect.Value) {
	// Construct new concrete type.
	if cinfo.PointerPreferred {
		cPtrRv := reflect.New(cinfo.Type)
		crv = cPtrRv.Elem()
		irvSet = cPtrRv
	} else {
		crv = reflect.New(cinfo.Type).Elem()
		irvSet = crv
	}
	return
}
func constructConcreteType(cinfo *TypeInfo) (crv, irvSet reflect.Value) {
	
	if cinfo.PointerPreferred {
		cPtrRv := reflect.New(cinfo.Type)
		crv = cPtrRv.Elem()
		irvSet = cPtrRv
	} else {
		crv = reflect.New(cinfo.Type).Elem()
		irvSet = crv
	}
	return
}
func constructConcreteType ( cinfo * TypeInfo ) ( crv , irvSet reflect . Value ) { // Construct new concrete type. if cinfo . PointerPreferred { cPtrRv := reflect . New ( cinfo . Type ) crv = cPtrRv . Elem ( ) irvSet = cPtrRv } else { crv = reflect . New ( cinfo . Type ) . Elem ( ) irvSet = crv } return }
// constructConcreteType creates the concrete value as
// well as the corresponding settable value for it.
// Return irvSet which should be set on caller's interface rv.
constructConcreteType creates the concrete value as well as the corresponding settable value for it . Return irvSet which should be set on caller s interface rv .