mirror of
https://github.com/golang/go
synced 2024-09-30 06:14:31 -06:00
cmd/compile: cleanup in parser.go
Inlined non_dcl_stmt in stmt since it was called only from there. Change-Id: I616c41332cfd86bbf3493d0ce7b1256384215220 Reviewed-on: https://go-review.googlesource.com/16893 Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Chris Manghane <cmang@golang.org>
This commit is contained in:
parent
c8bc7f1abd
commit
18160e0740
@ -2550,31 +2550,6 @@ func (p *parser) stmt() *Node {
|
|||||||
case LVAR, LCONST, LTYPE:
|
case LVAR, LCONST, LTYPE:
|
||||||
return liststmt(p.common_dcl())
|
return liststmt(p.common_dcl())
|
||||||
|
|
||||||
case LNAME, '@', '?', LLITERAL, LFUNC, '(', // operands
|
|
||||||
'[', LSTRUCT, LMAP, LCHAN, LINTERFACE, // composite types
|
|
||||||
'+', '-', '*', '&', '^', '~', LCOMM, '!': // unary operators
|
|
||||||
// simple_stmt
|
|
||||||
fallthrough
|
|
||||||
|
|
||||||
case LFOR, LSWITCH, LSELECT, LIF, LFALL, LBREAK, LCONTINUE, LGO, LDEFER, LGOTO, LRETURN:
|
|
||||||
return p.non_dcl_stmt()
|
|
||||||
|
|
||||||
case ';':
|
|
||||||
return nil
|
|
||||||
|
|
||||||
default:
|
|
||||||
return missing_stmt
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO(gri) inline non_dcl_stmt into stmt
|
|
||||||
// go.y:non_dcl_stmt
|
|
||||||
func (p *parser) non_dcl_stmt() *Node {
|
|
||||||
if trace && Debug['x'] != 0 {
|
|
||||||
defer p.trace("non_dcl_stmt")()
|
|
||||||
}
|
|
||||||
|
|
||||||
switch p.tok {
|
|
||||||
case LNAME, '@', '?', LLITERAL, LFUNC, '(', // operands
|
case LNAME, '@', '?', LLITERAL, LFUNC, '(', // operands
|
||||||
'[', LSTRUCT, LMAP, LCHAN, LINTERFACE, // composite types
|
'[', LSTRUCT, LMAP, LCHAN, LINTERFACE, // composite types
|
||||||
'+', '-', '*', '&', '^', '~', LCOMM, '!': // unary operators
|
'+', '-', '*', '&', '^', '~', LCOMM, '!': // unary operators
|
||||||
@ -2594,57 +2569,44 @@ func (p *parser) non_dcl_stmt() *Node {
|
|||||||
|
|
||||||
case LFALL:
|
case LFALL:
|
||||||
p.next()
|
p.next()
|
||||||
|
|
||||||
// will be converted to OFALL
|
// will be converted to OFALL
|
||||||
ss := Nod(OXFALL, nil, nil)
|
stmt := Nod(OXFALL, nil, nil)
|
||||||
ss.Xoffset = int64(block)
|
stmt.Xoffset = int64(block)
|
||||||
return ss
|
return stmt
|
||||||
|
|
||||||
case LBREAK:
|
case LBREAK:
|
||||||
p.next()
|
p.next()
|
||||||
s2 := p.onew_name()
|
return Nod(OBREAK, p.onew_name(), nil)
|
||||||
|
|
||||||
return Nod(OBREAK, s2, nil)
|
|
||||||
|
|
||||||
case LCONTINUE:
|
case LCONTINUE:
|
||||||
p.next()
|
p.next()
|
||||||
s2 := p.onew_name()
|
return Nod(OCONTINUE, p.onew_name(), nil)
|
||||||
|
|
||||||
return Nod(OCONTINUE, s2, nil)
|
|
||||||
|
|
||||||
case LGO:
|
case LGO:
|
||||||
p.next()
|
p.next()
|
||||||
s2 := p.pseudocall()
|
return Nod(OPROC, p.pseudocall(), nil)
|
||||||
|
|
||||||
return Nod(OPROC, s2, nil)
|
|
||||||
|
|
||||||
case LDEFER:
|
case LDEFER:
|
||||||
p.next()
|
p.next()
|
||||||
s2 := p.pseudocall()
|
return Nod(ODEFER, p.pseudocall(), nil)
|
||||||
|
|
||||||
return Nod(ODEFER, s2, nil)
|
|
||||||
|
|
||||||
case LGOTO:
|
case LGOTO:
|
||||||
p.next()
|
p.next()
|
||||||
s2 := p.new_name(p.sym())
|
stmt := Nod(OGOTO, p.new_name(p.sym()), nil)
|
||||||
|
stmt.Sym = dclstack // context, for goto restrictions
|
||||||
ss := Nod(OGOTO, s2, nil)
|
return stmt
|
||||||
ss.Sym = dclstack // context, for goto restrictions
|
|
||||||
return ss
|
|
||||||
|
|
||||||
case LRETURN:
|
case LRETURN:
|
||||||
p.next()
|
p.next()
|
||||||
var s2 *NodeList
|
var results *NodeList
|
||||||
if p.tok != ';' && p.tok != '}' {
|
if p.tok != ';' && p.tok != '}' {
|
||||||
s2 = p.expr_list()
|
results = p.expr_list()
|
||||||
}
|
}
|
||||||
|
|
||||||
ss := Nod(ORETURN, nil, nil)
|
stmt := Nod(ORETURN, nil, nil)
|
||||||
ss.List = s2
|
stmt.List = results
|
||||||
if ss.List == nil && Curfn != nil {
|
if stmt.List == nil && Curfn != nil {
|
||||||
var l *NodeList
|
for l := Curfn.Func.Dcl; l != nil; l = l.Next {
|
||||||
|
|
||||||
for l = Curfn.Func.Dcl; l != nil; l = l.Next {
|
|
||||||
if l.N.Class == PPARAM {
|
if l.N.Class == PPARAM {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
@ -2657,10 +2619,13 @@ func (p *parser) non_dcl_stmt() *Node {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return ss
|
return stmt
|
||||||
|
|
||||||
|
case ';':
|
||||||
|
return nil
|
||||||
|
|
||||||
default:
|
default:
|
||||||
panic("unreachable")
|
return missing_stmt
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user