diff options
author | Matthew Dempsky <mdempsky@google.com> | 2020-12-23 02:16:17 -0800 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2020-12-23 11:59:23 +0000 |
commit | addade2cce83fb0019ad8394311c51466d4042cf (patch) | |
tree | 1eaa446b3032b608295e079efbc7d53b1f5beb75 /src/cmd/compile/internal/typecheck/dcl.go | |
parent | 18ebfb49e9114b98e5a66acae073f5514e383aba (diff) | |
download | go-addade2cce83fb0019ad8394311c51466d4042cf.tar.gz go-addade2cce83fb0019ad8394311c51466d4042cf.zip |
[dev.regabi] cmd/compile: prefer types constructors over typecheck
Similar to the earlier mkbuiltin cleanup, there's a bunch of code that
calls typecheck.NewFuncType or typecheck.NewStructType, which can now
just call types.NewSignature and types.NewStruct, respectively.
Passes toolstash -cmp.
Change-Id: Ie6e09f1a7efef84b9a2bb5daa7087a6879979668
Reviewed-on: https://go-review.googlesource.com/c/go/+/279955
Trust: Matthew Dempsky <mdempsky@google.com>
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com>
Diffstat (limited to 'src/cmd/compile/internal/typecheck/dcl.go')
-rw-r--r-- | src/cmd/compile/internal/typecheck/dcl.go | 34 |
1 files changed, 15 insertions, 19 deletions
diff --git a/src/cmd/compile/internal/typecheck/dcl.go b/src/cmd/compile/internal/typecheck/dcl.go index 9f66d0fa17..bfdd76ba10 100644 --- a/src/cmd/compile/internal/typecheck/dcl.go +++ b/src/cmd/compile/internal/typecheck/dcl.go @@ -676,30 +676,26 @@ func autotmpname(n int) string { // f is method type, with receiver. // return function type, receiver as first argument (or not). -func NewMethodType(f *types.Type, receiver *types.Type) *types.Type { - inLen := f.Params().Fields().Len() - if receiver != nil { - inLen++ +func NewMethodType(sig *types.Type, recv *types.Type) *types.Type { + nrecvs := 0 + if recv != nil { + nrecvs++ } - in := make([]*ir.Field, 0, inLen) - if receiver != nil { - d := ir.NewField(base.Pos, nil, nil, receiver) - in = append(in, d) + params := make([]*types.Field, nrecvs+sig.Params().Fields().Len()) + if recv != nil { + params[0] = types.NewField(base.Pos, nil, recv) } - - for _, t := range f.Params().Fields().Slice() { - d := ir.NewField(base.Pos, nil, nil, t.Type) - d.IsDDD = t.IsDDD() - in = append(in, d) + for i, param := range sig.Params().Fields().Slice() { + d := types.NewField(base.Pos, nil, param.Type) + d.SetIsDDD(param.IsDDD()) + params[nrecvs+i] = d } - outLen := f.Results().Fields().Len() - out := make([]*ir.Field, 0, outLen) - for _, t := range f.Results().Fields().Slice() { - d := ir.NewField(base.Pos, nil, nil, t.Type) - out = append(out, d) + results := make([]*types.Field, sig.Results().Fields().Len()) + for i, t := range sig.Results().Fields().Slice() { + results[i] = types.NewField(base.Pos, nil, t.Type) } - return NewFuncType(nil, in, out) + return types.NewSignature(types.LocalPkg, nil, params, results) } |