diff options
author | Matthew Dempsky <mdempsky@google.com> | 2018-04-18 23:22:26 -0700 |
---|---|---|
committer | Matthew Dempsky <mdempsky@google.com> | 2018-04-20 01:09:31 +0000 |
commit | 25824c96dc34c0634dffb3860c3e01c666628606 (patch) | |
tree | 0dbf480584af9ef85704af961a7170a69c492b05 /src/cmd/compile/internal/types/type.go | |
parent | 60e3ebb9cba900f7b2f559b472726cee47e823c0 (diff) | |
download | go-25824c96dc34c0634dffb3860c3e01c666628606.tar.gz go-25824c96dc34c0634dffb3860c3e01c666628606.zip |
cmd/compile: make generated function code more consistent
There are a bunch of places where we generate functions: equality and
hash functions; method expression and promoted method wrappers; and
print/delete wrappers for defer/go statements.
This CL brings them in sync by:
1) Always using dclfunc and funcbody. Most were already using this,
but makepartialcall needed some changes.
2) Removing duplicate types.Markdcl/types.Popdcl calls. These are
already handled by dclfunc and funcbody.
3) Using structargs (already used by genwrapper) to construct new
param/result lists from existing types.
4) Always accessing the parameter ONAME nodes through Field.Nname
instead of poking into the ODCLFIELD. Also, since creating a slice of
the entire parameter list is common, extract this out into a
paramNnames helper function.
5) Add a Type.IsVariadic method to simplify identifying variadic
function types.
Passes toolstash-check -gcflags=-dwarf=false. DWARF output changes
because using structargs in makepartialcall changes the generated
parameter names.
Change-Id: I6661d3699afdbe7852ad60db5a4ec6eeb2b696e4
Reviewed-on: https://go-review.googlesource.com/108216
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@golang.org>
Diffstat (limited to 'src/cmd/compile/internal/types/type.go')
-rw-r--r-- | src/cmd/compile/internal/types/type.go | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/cmd/compile/internal/types/type.go b/src/cmd/compile/internal/types/type.go index f5e9237b81..55d0930ceb 100644 --- a/src/cmd/compile/internal/types/type.go +++ b/src/cmd/compile/internal/types/type.go @@ -710,6 +710,12 @@ func (t *Type) NumRecvs() int { return t.FuncType().Receiver.NumFields() } func (t *Type) NumParams() int { return t.FuncType().Params.NumFields() } func (t *Type) NumResults() int { return t.FuncType().Results.NumFields() } +// IsVariadic reports whether function type t is variadic. +func (t *Type) IsVariadic() bool { + n := t.NumParams() + return n > 0 && t.Params().Field(n-1).Isddd() +} + // Recv returns the receiver of function type t, if any. func (t *Type) Recv() *Field { s := t.Recvs() |