aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDaniel Martí <mvdan@mvdan.cc>2023-03-25 11:30:26 +0000
committerDaniel Martí <mvdan@mvdan.cc>2023-03-27 20:30:03 +0000
commitfc99c4b3f33226a429743a263934a237be3f71c8 (patch)
tree9df12ffddc26879527e7620de77838e5ff47a589 /src
parent524f820b7fc6b191820c1e3813ca60677c91052a (diff)
downloadgo-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.go18
-rw-r--r--src/cmd/compile/internal/ir/fmt.go40
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
- }
-}