in syntax/parse.go [433:477]
func (p *parser) parseParams() []Expr {
var params []Expr
for p.tok != RPAREN && p.tok != COLON && p.tok != EOF {
if len(params) > 0 {
p.consume(COMMA)
}
if p.tok == RPAREN {
break
}
// * or *args or **kwargs
if p.tok == STAR || p.tok == STARSTAR {
op := p.tok
pos := p.nextToken()
var x Expr
if op == STARSTAR || p.tok == IDENT {
x = p.parseIdent()
}
params = append(params, &UnaryExpr{
OpPos: pos,
Op: op,
X: x,
})
continue
}
// IDENT
// IDENT = test
id := p.parseIdent()
if p.tok == EQ { // default value
eq := p.nextToken()
dflt := p.parseTest()
params = append(params, &BinaryExpr{
X: id,
OpPos: eq,
Op: EQ,
Y: dflt,
})
continue
}
params = append(params, id)
}
return params
}