From: Matthew Dempsky Date: Wed, 14 Mar 2018 23:53:30 +0000 (-0700) Subject: cmd/compile: extract common noding code from func{Decl,Lit} X-Git-Tag: go1.11beta1~1200 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=29517daff955b0188f0129b8da1578ae6201e851;p=gostls13.git cmd/compile: extract common noding code from func{Decl,Lit} Passes toolstash-check. Change-Id: I8290221d6169e077dfa4ea737d685c7fcecf6841 Reviewed-on: https://go-review.googlesource.com/100835 Run-TryBot: Matthew Dempsky TryBot-Result: Gobot Gobot Reviewed-by: Robert Griesemer --- diff --git a/src/cmd/compile/internal/gc/closure.go b/src/cmd/compile/internal/gc/closure.go index fd728fd7bf..113556e356 100644 --- a/src/cmd/compile/internal/gc/closure.go +++ b/src/cmd/compile/internal/gc/closure.go @@ -26,18 +26,7 @@ func (p *noder) funcLit(expr *syntax.FuncLit) *Node { xfunc.Func.Closure = clo clo.Func.Closure = xfunc - oldScope := p.funchdr(xfunc) - - body := p.stmts(expr.Body.List) - if body == nil { - body = []*Node{nod(OEMPTY, nil, nil)} - } - xfunc.Nbody.Set(body) - - lineno = p.makeXPos(expr.Body.Rbrace) - xfunc.Func.Endlineno = lineno - - p.funcbody(oldScope) + p.funcBody(xfunc, expr.Body) // closure-specific variables are hanging off the // ordinary ones in the symbol table; see oldname. diff --git a/src/cmd/compile/internal/gc/noder.go b/src/cmd/compile/internal/gc/noder.go index 1d491d2acc..e2f60c1a8d 100644 --- a/src/cmd/compile/internal/gc/noder.go +++ b/src/cmd/compile/internal/gc/noder.go @@ -136,16 +136,24 @@ type noder struct { lastCloseScopePos syntax.Pos } -func (p *noder) funchdr(n *Node) ScopeID { - old := p.scope +func (p *noder) funcBody(fn *Node, block *syntax.BlockStmt) { + oldScope := p.scope p.scope = 0 - funchdr(n) - return old -} + funchdr(fn) + + if block != nil { + body := p.stmts(block.List) + if body == nil { + body = []*Node{nod(OEMPTY, nil, nil)} + } + fn.Nbody.Set(body) + + lineno = p.makeXPos(block.Rbrace) + fn.Func.Endlineno = lineno + } -func (p *noder) funcbody(old ScopeID) { funcbody() - p.scope = old + p.scope = oldScope } func (p *noder) openScope(pos syntax.Pos) { @@ -459,28 +467,18 @@ func (p *noder) funcDecl(fun *syntax.FuncDecl) *Node { declare(f.Func.Nname, PFUNC) } - oldScope := p.funchdr(f) + p.funcBody(f, fun.Body) if fun.Body != nil { if f.Noescape() { yyerrorl(f.Pos, "can only use //go:noescape with external func implementations") } - - body := p.stmts(fun.Body.List) - if body == nil { - body = []*Node{p.nod(fun, OEMPTY, nil, nil)} - } - f.Nbody.Set(body) - - lineno = p.makeXPos(fun.Body.Rbrace) - f.Func.Endlineno = lineno } else { if pure_go || strings.HasPrefix(f.funcname(), "init.") { yyerrorl(f.Pos, "missing function body") } } - p.funcbody(oldScope) return f }