From 0cc710dca63b79ed2dd6ce9375502e76e5fc0484 Mon Sep 17 00:00:00 2001 From: David Crawshaw Date: Fri, 13 May 2016 12:33:27 -0400 Subject: [PATCH] reflect: fix method type string By picking up a spurious tFlagExtraStar, the method type was printing as unc instead of func. Updates #15673 Change-Id: I0c2c189b99bdd4caeb393693be7520b8e3f342bf Reviewed-on: https://go-review.googlesource.com/23103 Reviewed-by: Ian Lance Taylor Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot --- src/reflect/all_test.go | 21 +++++++++++++++++++++ src/reflect/type.go | 1 + 2 files changed, 22 insertions(+) diff --git a/src/reflect/all_test.go b/src/reflect/all_test.go index 5beec63273..9799fee357 100644 --- a/src/reflect/all_test.go +++ b/src/reflect/all_test.go @@ -5782,3 +5782,24 @@ func TestMethodPkgPathReadable(t *testing.T) { t.Errorf(`PkgPath=%q, want "reflect"`, m.PkgPath) } } + +func TestTypeStrings(t *testing.T) { + type stringTest struct { + typ Type + want string + } + stringTests := []stringTest{ + {TypeOf(func(int) {}), "func(int)"}, + {FuncOf([]Type{TypeOf(int(0))}, nil, false), "func(int)"}, + {TypeOf(XM{}), "reflect_test.XM"}, + {TypeOf(new(XM)), "*reflect_test.XM"}, + {TypeOf(new(XM).String), "func() string"}, + {TypeOf(new(XM)).Method(0).Type, "func(*reflect_test.XM) string"}, + } + + for i, test := range stringTests { + if got, want := test.typ.String(), test.want; got != want { + t.Errorf("type %d String()=%q, want %q", i, got, want) + } + } +} diff --git a/src/reflect/type.go b/src/reflect/type.go index 5c6e3d5500..3bfff4a7cc 100644 --- a/src/reflect/type.go +++ b/src/reflect/type.go @@ -1985,6 +1985,7 @@ func FuncOf(in, out []Type, variadic bool) Type { if len(args) > 50 { panic("reflect.FuncOf does not support more than 50 arguments") } + ft.tflag = 0 ft.hash = hash ft.inCount = uint16(len(in)) ft.outCount = uint16(len(out)) -- 2.48.1