aboutsummaryrefslogtreecommitdiff
path: root/src/cmd
diff options
context:
space:
mode:
authorDave Cheney <dave@cheney.net>2015-09-07 09:59:43 +1000
committerDave Cheney <dave@cheney.net>2015-09-10 05:37:22 +0000
commitbab01a0b4b40c6c634fa5b3ab5e461838eb7efb4 (patch)
tree2fc479a17f631a9cb3f1f8837007211b971c4490 /src/cmd
parent1cf05ee61267b8f98494ac1ca0b75e831c53f32e (diff)
downloadgo-bab01a0b4b40c6c634fa5b3ab5e461838eb7efb4.tar.xz
cmd/compile: convert typecheckdefstack to []*Node
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: Ie02d2cf35f1e8438c6e9dc1d5fba51e8adde1bc0 Reviewed-on: https://go-review.googlesource.com/14480 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/cmd')
-rw-r--r--src/cmd/compile/internal/gc/typecheck.go20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/cmd/compile/internal/gc/typecheck.go b/src/cmd/compile/internal/gc/typecheck.go
index 48abcbaec9..8989371e91 100644
--- a/src/cmd/compile/internal/gc/typecheck.go
+++ b/src/cmd/compile/internal/gc/typecheck.go
@@ -18,7 +18,7 @@ import (
* marks variables that escape the local frame.
* rewrites n->op to be more specific in some cases.
*/
-var typecheckdefstack *NodeList
+var typecheckdefstack []*Node
/*
* resolve ONONAME to definition, if any.
@@ -3679,16 +3679,13 @@ func typecheckdef(n *Node) *Node {
return n
}
- l := new(NodeList)
- l.N = n
- l.Next = typecheckdefstack
- typecheckdefstack = l
-
+ typecheckdefstack = append(typecheckdefstack, n)
if n.Walkdef == 2 {
Flusherrors()
fmt.Printf("typecheckdef loop:")
- for l := typecheckdefstack; l != nil; l = l.Next {
- fmt.Printf(" %v", l.N.Sym)
+ for i := len(typecheckdefstack) - 1; i >= 0; i-- {
+ n := typecheckdefstack[i]
+ fmt.Printf(" %v", n.Sym)
}
fmt.Printf("\n")
Fatalf("typecheckdef loop")
@@ -3824,11 +3821,12 @@ ret:
if n.Op != OLITERAL && n.Type != nil && isideal(n.Type) {
Fatalf("got %v for %v", n.Type, n)
}
- if typecheckdefstack.N != n {
+ last := len(typecheckdefstack) - 1
+ if typecheckdefstack[last] != n {
Fatalf("typecheckdefstack mismatch")
}
- l = typecheckdefstack
- typecheckdefstack = l.Next
+ typecheckdefstack[last] = nil
+ typecheckdefstack = typecheckdefstack[:last]
lineno = int32(lno)
n.Walkdef = 1