Commit 93369001 authored by Russ Cox's avatar Russ Cox

cmd/compile: delete Func.Outer

This was just storage for a linked list.

Change-Id: I850e8db1e1f5e72410f5c904be9409179b56a94a
Reviewed-on: https://go-review.googlesource.com/23484Reviewed-by: default avatarDavid Chase <drchase@google.com>
parent cedc7c8f
......@@ -505,10 +505,8 @@ func ifacedcl(n *Node) {
n.Func = new(Func)
n.Func.FCurfn = Curfn
dclcontext = PPARAM
markdcl()
Funcdepth++
n.Func.Outer = Curfn
Curfn = n
funcstart(n)
funcargs(n.Right)
// funcbody is normally called after the parser has
......@@ -535,11 +533,7 @@ func funchdr(n *Node) {
}
dclcontext = PAUTO
markdcl()
Funcdepth++
n.Func.Outer = Curfn
Curfn = n
funcstart(n)
if n.Func.Nname != nil {
funcargs(n.Func.Nname.Name.Param.Ntype)
......@@ -672,6 +666,19 @@ func funcargs2(t *Type) {
}
}
var funcstack []*Node // stack of previous values of Curfn
var Funcdepth int32 // len(funcstack) during parsing, but then forced to be the same later during compilation
// start the function.
// called before funcargs; undone at end of funcbody.
func funcstart(n *Node) {
markdcl()
funcstack = append(funcstack, Curfn)
Funcdepth++
Curfn = n
}
// finish the body.
// called in auto-declaration context.
// returns in extern-declaration context.
......@@ -681,9 +688,8 @@ func funcbody(n *Node) {
Fatalf("funcbody: unexpected dclcontext %d", dclcontext)
}
popdcl()
funcstack, Curfn = funcstack[:len(funcstack)-1], funcstack[len(funcstack)-1]
Funcdepth--
Curfn = n.Func.Outer
n.Func.Outer = nil
if Funcdepth == 0 {
dclcontext = PEXTERN
}
......
......@@ -259,8 +259,6 @@ var Widthreg int
var nblank *Node
var Funcdepth int32
var typecheckok bool
var compiling_runtime bool
......
......@@ -23,7 +23,7 @@ func TestSizeof(t *testing.T) {
_64bit uintptr // size on 64bit platforms
}{
{Flow{}, 52, 88},
{Func{}, 96, 168},
{Func{}, 92, 160},
{Name{}, 52, 80},
{Node{}, 92, 144},
{Sym{}, 60, 112},
......
......@@ -199,9 +199,8 @@ type Func struct {
Dcl []*Node // autodcl for this func/closure
Inldcl Nodes // copy of dcl for use in inlining
Closgen int
Outerfunc *Node
Outerfunc *Node // outer function (for closure)
FieldTrack map[*Sym]struct{}
Outer *Node // outer func for closure
Ntype *Node // signature
Top int // top context (Ecall, Eproc, etc)
Closure *Node // OCLOSURE <-> ODCLFUNC
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment