]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/compile: remove Label.Link field and lastlabel global var
authorRobert Griesemer <gri@golang.org>
Fri, 11 Mar 2016 04:35:27 +0000 (20:35 -0800)
committerRobert Griesemer <gri@golang.org>
Fri, 11 Mar 2016 06:13:06 +0000 (06:13 +0000)
Change-Id: If2a174f482ecd56dee43f921d13fef98439872fc
Reviewed-on: https://go-review.googlesource.com/20559
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/cmd/compile/internal/gc/gen.go
src/cmd/compile/internal/gc/go.go

index 34d2f31d7ca8643ece1a2a6b5cadd0ce9d9d83e8..a23271ed7848b3ff32f674fcc9e6f62dab51827d 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Portable half of code generator; mainly statements and control flow.
+
 package gc
 
 import (
@@ -9,11 +11,8 @@ import (
        "fmt"
 )
 
-// portable half of code generator.
-// mainly statements and control flow.
-var labellist *Label
-
-var lastlabel *Label
+// TODO: labellist should become part of a "compilation state" for functions.
+var labellist []*Label
 
 func Sysfunc(name string) *Node {
        n := newname(Pkglookup(name, Runtimepkg))
@@ -106,12 +105,10 @@ func addrescapes(n *Node) {
 }
 
 func clearlabels() {
-       for l := labellist; l != nil; l = l.Link {
+       for _, l := range labellist {
                l.Sym.Label = nil
        }
-
-       labellist = nil
-       lastlabel = nil
+       labellist = labellist[:0]
 }
 
 func newlab(n *Node) *Label {
@@ -119,14 +116,9 @@ func newlab(n *Node) *Label {
        lab := s.Label
        if lab == nil {
                lab = new(Label)
-               if lastlabel == nil {
-                       labellist = lab
-               } else {
-                       lastlabel.Link = lab
-               }
-               lastlabel = lab
                lab.Sym = s
                s.Label = lab
+               labellist = append(labellist, lab)
        }
 
        if n.Op == OLABEL {
@@ -974,7 +966,7 @@ func CgenTemp(n *Node) *Node {
 }
 
 func checklabels() {
-       for lab := labellist; lab != nil; lab = lab.Link {
+       for _, lab := range labellist {
                if lab.Def == nil {
                        for _, n := range lab.Use {
                                yyerrorl(n.Lineno, "label %v not defined", lab.Sym)
index 4bf738540576a90ae4867b570045e7f75becc7f3..c98637c89371d86ccd5a30c7593a2440755cd467 100644 (file)
@@ -86,10 +86,9 @@ type Sym struct {
 }
 
 type Label struct {
-       Sym  *Sym
-       Def  *Node
-       Use  []*Node
-       Link *Label
+       Sym *Sym
+       Def *Node
+       Use []*Node
 
        // for use during gen
        Gotopc   *obj.Prog // pointer to unresolved gotos