Exemple #1
0
func parseParaList(p *parser) *ast.ParaList {
	ret := new(ast.ParaList)
	ret.Lparen = p.ExpectOp("(")
	if p.InError() {
		return nil
	}

	if p.SeeOp(")") {
		// empty parameter list
		ret.Rparen = p.Shift()
		return ret
	}

	for !p.See(lex8.EOF) {
		para := parsePara(p)
		if p.InError() {
			return nil
		}

		ret.Paras = append(ret.Paras, para)
		if p.SeeOp(",") {
			ret.Commas = append(ret.Commas, p.Shift())
		} else if !p.SeeOp(")") {
			p.ExpectOp(",")
			return nil
		}

		if p.SeeOp(")") {
			break
		}
	}

	ret.Rparen = p.ExpectOp(")")
	return ret
}