diff options
| author | Daniel Martí <mvdan@mvdan.cc> | 2023-03-25 11:30:26 +0000 |
|---|---|---|
| committer | Daniel Martí <mvdan@mvdan.cc> | 2023-03-27 20:30:03 +0000 |
| commit | fc99c4b3f33226a429743a263934a237be3f71c8 (patch) | |
| tree | 9df12ffddc26879527e7620de77838e5ff47a589 /src | |
| parent | 524f820b7fc6b191820c1e3813ca60677c91052a (diff) | |
| download | go-fc99c4b3f33226a429743a263934a237be3f71c8.tar.xz | |
cmd/compile: start using reflect.Value.IsZero
We now require Go 1.17.13 to bootstrap via make.bash,
and since reflect.Value.IsZero was added in Go 1.13,
we can now use it directly to save a bit of copy pasting.
Change-Id: I77eef782cbbf86c72a4505c8b4866c9658914a24
Reviewed-on: https://go-review.googlesource.com/c/go/+/479395
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Keith Randall <khr@golang.org>
Reviewed-by: Keith Randall <khr@google.com>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
Diffstat (limited to 'src')
| -rw-r--r-- | src/cmd/compile/internal/ir/dump.go | 18 | ||||
| -rw-r--r-- | src/cmd/compile/internal/ir/fmt.go | 40 |
2 files changed, 2 insertions, 56 deletions
diff --git a/src/cmd/compile/internal/ir/dump.go b/src/cmd/compile/internal/ir/dump.go index 59914baa5c..4c218682ea 100644 --- a/src/cmd/compile/internal/ir/dump.go +++ b/src/cmd/compile/internal/ir/dump.go @@ -218,7 +218,7 @@ func (p *dumper) dump(x reflect.Value, depth int) { continue // Op field already printed for Nodes } x := x.Field(i) - if isZeroVal(x) { + if x.IsZero() { omitted = true continue // exclude zero-valued fields } @@ -248,22 +248,6 @@ func (p *dumper) dump(x reflect.Value, depth int) { } } -func isZeroVal(x reflect.Value) bool { - switch x.Kind() { - case reflect.Bool: - return !x.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return x.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return x.Uint() == 0 - case reflect.String: - return x.String() == "" - case reflect.Interface, reflect.Ptr, reflect.Slice: - return x.IsNil() - } - return false -} - func commonPrefixLen(a, b string) (i int) { for i < len(a) && i < len(b) && a[i] == b[i] { i++ diff --git a/src/cmd/compile/internal/ir/fmt.go b/src/cmd/compile/internal/ir/fmt.go index 83f4523425..dcb8988b66 100644 --- a/src/cmd/compile/internal/ir/fmt.go +++ b/src/cmd/compile/internal/ir/fmt.go @@ -9,7 +9,6 @@ import ( "fmt" "go/constant" "io" - "math" "os" "path/filepath" "reflect" @@ -1022,7 +1021,7 @@ func dumpNodeHeader(w io.Writer, n Node) { name := strings.TrimSuffix(tf.Name, "_") vf := v.Field(i) vfi := vf.Interface() - if name == "Offset" && vfi == types.BADWIDTH || name != "Offset" && isZero(vf) { + if name == "Offset" && vfi == types.BADWIDTH || name != "Offset" && vf.IsZero() { continue } if vfi == true { @@ -1261,40 +1260,3 @@ func dumpNodes(w io.Writer, list Nodes, depth int) { dumpNode(w, n, depth) } } - -// reflect.IsZero is not available in Go 1.4 (added in Go 1.13), so we use this copy instead. -func isZero(v reflect.Value) bool { - switch v.Kind() { - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return math.Float64bits(v.Float()) == 0 - case reflect.Complex64, reflect.Complex128: - c := v.Complex() - return math.Float64bits(real(c)) == 0 && math.Float64bits(imag(c)) == 0 - case reflect.Array: - for i := 0; i < v.Len(); i++ { - if !isZero(v.Index(i)) { - return false - } - } - return true - case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer: - return v.IsNil() - case reflect.String: - return v.Len() == 0 - case reflect.Struct: - for i := 0; i < v.NumField(); i++ { - if !isZero(v.Field(i)) { - return false - } - } - return true - default: - return false - } -} |
