mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile/internal/syntax: factor out parsing of func bodies (cleanup)
Change-Id: If6481a5401940a923fc9a104981dfb90eed0d1ac Reviewed-on: https://go-review.googlesource.com/69750 Run-TryBot: Robert Griesemer <gri@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
c87fb208c5
commit
39edffb6b1
1 changed files with 18 additions and 13 deletions
|
|
@ -487,16 +487,28 @@ func (p *parser) funcDeclOrNil() *FuncDecl {
|
|||
f.Name = p.name()
|
||||
f.Type = p.funcType()
|
||||
if p.tok == _Lbrace {
|
||||
f.Body = p.blockStmt("")
|
||||
if p.mode&CheckBranches != 0 {
|
||||
checkBranches(f.Body, p.errh)
|
||||
}
|
||||
f.Body = p.funcBody()
|
||||
}
|
||||
f.Pragma = p.pragma
|
||||
|
||||
return f
|
||||
}
|
||||
|
||||
func (p *parser) funcBody() *BlockStmt {
|
||||
// TODO(gri) If we are in a function we should update p.fnest
|
||||
// accordingly. Currently p.fnest is always zero and thus not
|
||||
// used in error recovery.
|
||||
// Not enabled because it performs worse for some code without
|
||||
// more fine tuning (see example in #22164).
|
||||
// p.fnest++
|
||||
body := p.blockStmt("")
|
||||
// p.fnest--
|
||||
if p.mode&CheckBranches != 0 {
|
||||
checkBranches(body, p.errh)
|
||||
}
|
||||
return body
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Expressions
|
||||
|
||||
|
|
@ -712,10 +724,7 @@ func (p *parser) operand(keep_parens bool) Expr {
|
|||
f := new(FuncLit)
|
||||
f.pos = pos
|
||||
f.Type = t
|
||||
f.Body = p.blockStmt("")
|
||||
if p.mode&CheckBranches != 0 {
|
||||
checkBranches(f.Body, p.errh)
|
||||
}
|
||||
f.Body = p.funcBody()
|
||||
|
||||
p.xnest--
|
||||
return f
|
||||
|
|
@ -1635,16 +1644,12 @@ func (p *parser) labeledStmtOrNil(label *Name) Stmt {
|
|||
return nil // avoids follow-on errors (see e.g., fixedbugs/bug274.go)
|
||||
}
|
||||
|
||||
// context must be a non-empty string unless we know that p.tok == _Lbrace.
|
||||
func (p *parser) blockStmt(context string) *BlockStmt {
|
||||
if trace {
|
||||
defer p.trace("blockStmt")()
|
||||
}
|
||||
|
||||
// TODO(gri) If we are in a function we should update p.fnest
|
||||
// accordingly. Currently p.fnest is always zero and thus not
|
||||
// used in error recovery.
|
||||
// Not enabled for for because it performs worse for some code
|
||||
// without more fine tuning (see example in #22164).
|
||||
s := new(BlockStmt)
|
||||
s.pos = p.pos()
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue