func asmKindForType(t types.Type, size int) asmKind { switch t := t.Underlying().(type) { case *types.Basic: switch t.Kind() { case types.String: return asmString case types.Complex64, types.Complex128: return asmComplex } return asmKind(size) case *types.Pointer, *types.Chan, *types.Map, *types.Signature: return asmKind(size) case *types.Struct: return asmStruct case *types.Interface: if t.Empty() { return asmEmptyInterface } return asmInterface case *types.Array: return asmArray case *types.Slice: return asmSlice } panic("unreachable") }