ptr unsafe.Pointer
// flag holds metadata about the value.
- // The lowest bits are flag bits:
+ //
+ // The lowest five bits give the Kind of the value, mirroring typ.Kind().
+ //
+ // The next set of bits are flag bits:
// - flagStickyRO: obtained via unexported not embedded field, so read-only
// - flagEmbedRO: obtained via unexported embedded field, so read-only
// - flagIndir: val holds a pointer to the data
- // - flagAddr: v.CanAddr is true (implies flagIndir)
+ // - flagAddr: v.CanAddr is true (implies flagIndir and ptr is non-nil)
// - flagMethod: v is a method value.
- // The next five bits give the Kind of the value.
- // This repeats typ.Kind() except for method values.
- // The remaining 23+ bits give a method number for method values.
- // If flag.kind() != Func, code can assume that flagMethod is unset.
// If ifaceIndir(typ), code can assume that flagIndir is set.
+ //
+ // The remaining 22+ bits give a method number for method values.
+ // If flag.kind() != Func, code can assume that flagMethod is unset.
flag
// A method value represents a curried method invocation