in gotype/fold_reflect.go [251:281]
func buildFieldFoldInline(
C *foldContext,
t reflect.Type,
idx int,
) (reFoldFn, error) {
var (
st = t.Field(idx)
N, bt = baseType(st.Type)
baseVisitor reFoldFn
err error
)
f := C.reg.findInline(st.Type)
if f != nil {
return makeFieldInlineFold(idx, f), nil
}
baseVisitor = C.reg.findInline(bt)
if baseVisitor == nil {
baseVisitor, err = fieldFoldGenInline(C, bt)
if err != nil {
return nil, err
}
C.reg.setInline(bt, baseVisitor)
}
f = makePointerFold(N, baseVisitor)
C.reg.setInline(st.Type, f)
return makeFieldInlineFold(idx, f), nil
}