]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: encapsulate reads of gc.Type.Funarg
authorJosh Bleecher Snyder <josharian@gmail.com>
Tue, 5 Apr 2016 23:44:07 +0000 (16:44 -0700)
committerJosh Bleecher Snyder <josharian@gmail.com>
Wed, 6 Apr 2016 02:49:18 +0000 (02:49 +0000)
Changes generated with eg and then manually
checked and in some cases simplified.

Passes toolstash -cmp.

Change-Id: I2119f37f003368ce1884d2863b406d6ffbfe38c7
Reviewed-on: https://go-review.googlesource.com/21563
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/align.go
src/cmd/compile/internal/gc/bexport.go
src/cmd/compile/internal/gc/esc.go
src/cmd/compile/internal/gc/export.go
src/cmd/compile/internal/gc/fmt.go
src/cmd/compile/internal/gc/gsubr.go
src/cmd/compile/internal/gc/order.go
src/cmd/compile/internal/gc/type.go
src/cmd/compile/internal/gc/typecheck.go
src/cmd/compile/internal/gc/walk.go

index b7ed9f19b92ab50de8662a07c73959c15c5016b7..9d5c3a550c4e91a4a444ffa50771bbaee819b9ad 100644 (file)
@@ -263,7 +263,7 @@ func dowidth(t *Type) {
                }
 
        case TSTRUCT:
-               if t.Funarg {
+               if t.IsFuncArgStruct() {
                        Fatalf("dowidth fn struct %v", t)
                }
                w = widstruct(t, t, 0, 1)
@@ -335,7 +335,7 @@ func checkwidth(t *Type) {
 
        // function arg structs should not be checked
        // outside of the enclosing function.
-       if t.Funarg {
+       if t.IsFuncArgStruct() {
                Fatalf("checkwidth %v", t)
        }
 
index 8968ce8924dc0ab4204139828fb1605e3c2d0f77..f88afd24884c59925ebc0053c27b71708f6f40c2 100644 (file)
@@ -742,7 +742,7 @@ func basetypeName(t *Type) string {
 }
 
 func (p *exporter) paramList(params *Type, numbered bool) {
-       if !params.IsStruct() || !params.Funarg {
+       if !params.IsFuncArgStruct() {
                Fatalf("exporter: parameter list expected")
        }
 
index 9b8f134178ab24c1a680c1547925c19611b9a926..d7a63668a67fdcda8e240182cd1f66d7c0d37b7a 100644 (file)
@@ -1435,7 +1435,7 @@ func esccall(e *EscState, n *Node, up *Node) {
        ll := n.List
        if n.List.Len() == 1 {
                a := n.List.First()
-               if a.Type.IsStruct() && a.Type.Funarg { // f(g()).
+               if a.Type.IsFuncArgStruct() { // f(g())
                        ll = e.nodeEscState(a).Escretval
                }
        }
index 9fc6e5627508a8458f40545b5143524266ff6986..6de7da0667bfe657d8216670d8172a3176afa767 100644 (file)
@@ -592,7 +592,7 @@ func dumpasmhdr() {
 
                case OTYPE:
                        t := n.Type
-                       if !t.IsStruct() || t.Map != nil || t.Funarg {
+                       if !t.IsStruct() || t.Map != nil || t.IsFuncArgStruct() {
                                break
                        }
                        fmt.Fprintf(b, "#define %s__size %d\n", t.Sym.Name, int(t.Width))
index ab9bad3c2a6eaf422602519e120d01644f7821f7..27ccdfbdcf66b6d3c7097313695a9149e4837b44 100644 (file)
@@ -690,7 +690,7 @@ func typefmt(t *Type, flag FmtFlag) string {
                }
 
                var buf bytes.Buffer
-               if t.Funarg {
+               if t.IsFuncArgStruct() {
                        buf.WriteString("(")
                        var flag1 FmtFlag
                        if fmtmode == FTypeId || fmtmode == FErr { // no argument names on function signature, and no "noescape"/"nosplit" tags
index 353d90f59348645e62788dbcdce6bd004b1709cc..a2fa5f8b317e7d9b0978449ea743014afc10ba01 100644 (file)
@@ -541,7 +541,7 @@ func nodarg(t interface{}, fp int) *Node {
        switch t := t.(type) {
        case *Type:
                // entire argument struct, not just one arg
-               if !t.IsStruct() || !t.Funarg {
+               if !t.IsFuncArgStruct() {
                        Fatalf("nodarg: bad type %v", t)
                }
                n = Nod(ONAME, nil, nil)
index 8410a236cd6626bbe92377f31e36a227c8161cd2..3b83e3bcc0b83205a60d6a166834383899a32517 100644 (file)
@@ -324,7 +324,7 @@ func ismulticall(l Nodes) bool {
 // Copyret emits t1, t2, ... = n, where n is a function call,
 // and then returns the list t1, t2, ....
 func copyret(n *Node, order *Order) []*Node {
-       if !n.Type.IsStruct() || !n.Type.Funarg {
+       if !n.Type.IsFuncArgStruct() {
                Fatalf("copyret %v %d", n.Type, n.Left.Type.Results().NumFields())
        }
 
index 05e30df2715b30ed002a5e3bdeb1fc18f634921c..e04cfcda638d22483c7fb4cbac11d749160ca31e 100644 (file)
@@ -127,7 +127,7 @@ type Type struct {
        Chan        ChanDir
        Trecur      uint8 // to detect loops
        Printed     bool
-       Funarg      bool // on TSTRUCT and TFIELD
+       Funarg      bool // TSTRUCT only: whether this struct represents function parameters
        Local       bool // created in this file
        Deferwidth  bool
        Broke       bool // broken type definition.
@@ -566,6 +566,11 @@ func (t *Type) SetNname(n *Node) {
        t.nname = n
 }
 
+// IsFuncArgStruct reports whether t is a struct representing function parameters.
+func (t *Type) IsFuncArgStruct() bool {
+       return t.Etype == TSTRUCT && t.Funarg
+}
+
 func (t *Type) Methods() *Fields {
        // TODO(mdempsky): Validate t?
        return &t.methods
index d21552d180bde02889e600c922b8cd301af85ef1..db74a0d246cc441d312ee246e291ab7183bf15c4 100644 (file)
@@ -1607,7 +1607,7 @@ OpSwitch:
 
                // Unpack multiple-return result before type-checking.
                var funarg *Type
-               if t.IsStruct() && t.Funarg {
+               if t.IsFuncArgStruct() {
                        funarg = t
                        t = t.Field(0).Type
                }
@@ -2159,7 +2159,7 @@ OpSwitch:
        }
 
        t := n.Type
-       if t != nil && !t.Funarg && n.Op != OTYPE {
+       if t != nil && !t.IsFuncArgStruct() && n.Op != OTYPE {
                switch t.Etype {
                case TFUNC, // might have TANY; wait until its called
                        TANY,
@@ -2611,7 +2611,7 @@ func typecheckaste(op Op, call *Node, isddd bool, tstruct *Type, nl Nodes, desc
        if nl.Len() == 1 {
                n = nl.First()
                if n.Type != nil {
-                       if n.Type.IsStruct() && n.Type.Funarg {
+                       if n.Type.IsFuncArgStruct() {
                                if !hasddd(tstruct) {
                                        n1 := tstruct.NumFields()
                                        n2 := n.Type.NumFields()
@@ -3359,7 +3359,7 @@ func typecheckas2(n *Node) {
                }
                switch r.Op {
                case OCALLMETH, OCALLINTER, OCALLFUNC:
-                       if !r.Type.IsStruct() || !r.Type.Funarg {
+                       if !r.Type.IsFuncArgStruct() {
                                break
                        }
                        cr = r.Type.NumFields()
index b7edae5af48b8c32554ff39657313ae6bfbdceff..392dae0fa905cbeb491b5ca75d612d25a070f4a6 100644 (file)
@@ -1783,7 +1783,7 @@ func ascompatte(op Op, call *Node, isddd bool, nl *Type, lr []*Node, fp int, ini
        var nn []*Node
 
        // f(g()) where g has multiple return values
-       if r != nil && len(lr) <= 1 && r.Type.IsStruct() && r.Type.Funarg {
+       if r != nil && len(lr) <= 1 && r.Type.IsFuncArgStruct() {
                // optimization - can do block copy
                if eqtypenoname(r.Type, nl) {
                        arg := nodarg(nl, fp)