From 879c3f6db9a1e0670ae7bc382dc14c5c6bfbf1fc Mon Sep 17 00:00:00 2001 From: Pierre Gimalac Date: Mon, 17 Feb 2025 18:10:38 +0100 Subject: [PATCH] chore: add build tag to avoid disabling DCE --- cmp/internal/value/name.go | 40 ++++++++++--------- cmp/internal/value/name_interface.go | 9 +++++ .../value/name_interface_no_reflect.go | 9 +++++ 3 files changed, 40 insertions(+), 18 deletions(-) create mode 100644 cmp/internal/value/name_interface.go create mode 100644 cmp/internal/value/name_interface_no_reflect.go diff --git a/cmp/internal/value/name.go b/cmp/internal/value/name.go index 7b498bb..6b7132b 100644 --- a/cmp/internal/value/name.go +++ b/cmp/internal/value/name.go @@ -136,27 +136,31 @@ func appendTypeName(b []byte, t reflect.Type, qualified, elideFunc bool) []byte b = append(b, '*') b = appendTypeName(b, t.Elem(), qualified, false) case reflect.Interface: - b = append(b, "interface{ "...) - for i := 0; i < t.NumMethod(); i++ { - if i > 0 { - b = append(b, "; "...) + if interfaceStringNoReflect { + b = append(b, t.String()...) + } else { + b = append(b, "interface{ "...) + for i := 0; i < t.NumMethod(); i++ { + if i > 0 { + b = append(b, "; "...) + } + m := t.Method(i) + if qualified && m.PkgPath != "" { + b = append(b, '"') + b = append(b, m.PkgPath...) + b = append(b, '"') + b = append(b, '.') + } + b = append(b, m.Name...) + b = appendTypeName(b, m.Type, qualified, true) } - m := t.Method(i) - if qualified && m.PkgPath != "" { - b = append(b, '"') - b = append(b, m.PkgPath...) - b = append(b, '"') - b = append(b, '.') + if b[len(b)-1] == ' ' { + b = b[:len(b)-1] + } else { + b = append(b, ' ') } - b = append(b, m.Name...) - b = appendTypeName(b, m.Type, qualified, true) + b = append(b, '}') } - if b[len(b)-1] == ' ' { - b = b[:len(b)-1] - } else { - b = append(b, ' ') - } - b = append(b, '}') default: panic("invalid kind: " + k.String()) } diff --git a/cmp/internal/value/name_interface.go b/cmp/internal/value/name_interface.go new file mode 100644 index 0000000..fd9b493 --- /dev/null +++ b/cmp/internal/value/name_interface.go @@ -0,0 +1,9 @@ +// Copyright 2020, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !interface_string_no_reflect + +package value + +const interfaceStringNoReflect bool = false diff --git a/cmp/internal/value/name_interface_no_reflect.go b/cmp/internal/value/name_interface_no_reflect.go new file mode 100644 index 0000000..4e3f1f6 --- /dev/null +++ b/cmp/internal/value/name_interface_no_reflect.go @@ -0,0 +1,9 @@ +// Copyright 2020, The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build interface_string_no_reflect + +package value + +const interfaceStringNoReflect bool = true