]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: convert externdecl to []*Node
authorDave Cheney <dave@cheney.net>
Thu, 10 Sep 2015 05:57:39 +0000 (15:57 +1000)
committerDave Cheney <dave@cheney.net>
Fri, 18 Sep 2015 07:15:52 +0000 (07:15 +0000)
This one of a set of changes to make the transition away from NodeList
easier by removing cases in which NodeList doesn't act semi-trivially like a
[]*Node.

This CL was originally prepared by Josh Bleecher Snyder <josharian@gmail.com>.

This change passes go build -toolexec 'toolstash -cmp' -a std.

Change-Id: Ifd73501e06e8ea5efd028b6d473b3e5d1b07a5ac
Reviewed-on: https://go-review.googlesource.com/14570
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/cmd/compile/internal/gc/dcl.go
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/lex.go
src/cmd/compile/internal/gc/obj.go
src/cmd/compile/internal/gc/reflect.go
src/cmd/compile/internal/gc/subr.go

index 92b09e62b3cd59fcb01e26bc9670a70a69c2f6a0..83cc3e4e20ff431a38ceed36a382f3418eff90b0 100644 (file)
@@ -182,7 +182,7 @@ func declare(n *Node, ctxt uint8) {
 
        gen := 0
        if ctxt == PEXTERN {
-               externdcl = list(externdcl, n)
+               externdcl = append(externdcl, n)
                if dflag() {
                        fmt.Printf("\t%v global decl %v %p\n", Ctxt.Line(int(lineno)), s, n)
                }
index 91c2d7695826e83f8d4c663f058a124fe4bb32cd..5d7c3d63f194daab148bd01a4c1086914b2bcb1c 100644 (file)
@@ -584,7 +584,7 @@ var maxfltval [NTYPE]*Mpflt
 
 var xtop *NodeList
 
-var externdcl *NodeList
+var externdcl []*Node
 
 var exportlist []*Node
 
index 2fe96b7980c7bedfdf845de246b0f9273c7ed6ac..3f27e6182337fdef86073166953c31771754413f 100644 (file)
@@ -464,9 +464,9 @@ func Main() {
        }
 
        // Phase 9: Check external declarations.
-       for l := externdcl; l != nil; l = l.Next {
-               if l.N.Op == ONAME {
-                       typecheck(&l.N, Erv)
+       for i, n := range externdcl {
+               if n.Op == ONAME {
+                       typecheck(&externdcl[i], Erv)
                }
        }
 
index 484c776b550491bfc84b5054f92e02b1c6048cd1..699ccdea05ea82a32088d75e4b0b85ac0ad499f6 100644 (file)
@@ -72,10 +72,7 @@ func dumpobj() {
 
        fmt.Fprintf(bout, "\n!\n")
 
-       var externs *NodeList
-       if externdcl != nil {
-               externs = externdcl.End
-       }
+       externs := len(externdcl)
 
        dumpglobls()
        dumptypestructs()
@@ -83,8 +80,8 @@ func dumpobj() {
        // Dump extra globals.
        tmp := externdcl
 
-       if externs != nil {
-               externdcl = externs.Next
+       if externdcl != nil {
+               externdcl = externdcl[externs:]
        }
        dumpglobls()
        externdcl = tmp
@@ -110,8 +107,7 @@ func dumpglobls() {
        var n *Node
 
        // add globals
-       for l := externdcl; l != nil; l = l.Next {
-               n = l.N
+       for _, n := range externdcl {
                if n.Op != ONAME {
                        continue
                }
@@ -126,7 +122,6 @@ func dumpglobls() {
                        continue
                }
                dowidth(n.Type)
-
                ggloblnod(n)
        }
 
index 3e690567376449a86a375257737904cd64470738..baac7f71cb182e8b86183c58794737f441d13d4f 100644 (file)
@@ -1317,8 +1317,7 @@ func dumptypestructs() {
        var n *Node
 
        // copy types from externdcl list to signatlist
-       for l := externdcl; l != nil; l = l.Next {
-               n = l.N
+       for _, n := range externdcl {
                if n.Op != OTYPE {
                        continue
                }
index 18ca5a336de1bbe612d85f5ef5d0aa95f3b3308d..d2d51a03667160dab6cba7fd71f53529da7a719f 100644 (file)
@@ -1584,33 +1584,32 @@ func Ptrto(t *Type) *Type {
 }
 
 func frame(context int) {
-       var l *NodeList
-
        if context != 0 {
                fmt.Printf("--- external frame ---\n")
-               l = externdcl
-       } else if Curfn != nil {
-               fmt.Printf("--- %v frame ---\n", Curfn.Func.Nname.Sym)
-               l = Curfn.Func.Dcl
-       } else {
+               for _, n := range externdcl {
+                       printframenode(n)
+               }
                return
        }
 
-       var n *Node
-       var w int64
-       for ; l != nil; l = l.Next {
-               n = l.N
-               w = -1
-               if n.Type != nil {
-                       w = n.Type.Width
+       if Curfn != nil {
+               fmt.Printf("--- %v frame ---\n", Curfn.Func.Nname.Sym)
+               for l := Curfn.Func.Dcl; l != nil; l = l.Next {
+                       printframenode(l.N)
                }
-               switch n.Op {
-               case ONAME:
-                       fmt.Printf("%v %v G%d %v width=%d\n", Oconv(int(n.Op), 0), n.Sym, n.Name.Vargen, n.Type, w)
+       }
+}
 
-               case OTYPE:
-                       fmt.Printf("%v %v width=%d\n", Oconv(int(n.Op), 0), n.Type, w)
-               }
+func printframenode(n *Node) {
+       w := int64(-1)
+       if n.Type != nil {
+               w = n.Type.Width
+       }
+       switch n.Op {
+       case ONAME:
+               fmt.Printf("%v %v G%d %v width=%d\n", Oconv(int(n.Op), 0), n.Sym, n.Name.Vargen, n.Type, w)
+       case OTYPE:
+               fmt.Printf("%v %v width=%d\n", Oconv(int(n.Op), 0), n.Type, w)
        }
 }