From cdb270cf0737a4752e5375b737eba83929f2b415 Mon Sep 17 00:00:00 2001 From: Joe Tsai Date: Tue, 23 Aug 2022 19:27:49 -0700 Subject: [PATCH] reflect: fix stale Value.kind documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The lowests fives bits are the kind, and the next five bits are attributes, not the other way around. Change-Id: I5e1d13b195b766e99f66bb1227cc7f84e85dc49d Reviewed-on: https://go-review.googlesource.com/c/go/+/425185 Reviewed-by: Ian Lance Taylor Reviewed-by: Keith Randall Reviewed-by: Daniel Martí Reviewed-by: Keith Randall Auto-Submit: Keith Randall --- src/reflect/value.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/reflect/value.go b/src/reflect/value.go index 5276af6fd6..6830057d61 100644 --- a/src/reflect/value.go +++ b/src/reflect/value.go @@ -45,17 +45,19 @@ type Value struct { 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