aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/compile/internal/types/type.go
diff options
context:
space:
mode:
authorMatthew Dempsky <mdempsky@google.com>2018-04-18 23:22:26 -0700
committerMatthew Dempsky <mdempsky@google.com>2018-04-20 01:09:31 +0000
commit25824c96dc34c0634dffb3860c3e01c666628606 (patch)
tree0dbf480584af9ef85704af961a7170a69c492b05 /src/cmd/compile/internal/types/type.go
parent60e3ebb9cba900f7b2f559b472726cee47e823c0 (diff)
downloadgo-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.go6
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()