in gotype/fold_reflect.go [283:304]
func fieldFoldGenInline(C *foldContext, t reflect.Type) (reFoldFn, error) {
if C.userReg != nil {
if f := C.userReg[t]; f != nil {
f = embeddObjReFold(C, f)
}
}
if implementsFolder(t) || implementsPtrFolder(t) {
return embeddObjReFold(C, reFoldFolderIfc), nil
}
switch t.Kind() {
case reflect.Struct:
return getReflectFoldStruct(C, t, true)
case reflect.Map:
return getReflectFoldMapKeys(C, t)
case reflect.Interface:
return getReflectFoldInlineInterface(C, t)
}
return nil, errSquashNeedObject
}