private Arg[] FinishArgumentList(Arg first) {
const TokenKind terminator = TokenKind.RightParenthesis;
List<Arg> l = new List<Arg>();
if (first != null) {
l.Add(first);
}
// Parse remaining arguments
while (true) {
if (MaybeEat(terminator)) {
break;
}
var start = GetStart();
Arg a;
if (MaybeEat(TokenKind.Multiply)) {
Expression t = ParseExpression();
a = new Arg("*", t);
} else if (MaybeEat(TokenKind.Power)) {
Expression t = ParseExpression();
a = new Arg("**", t);
} else {
Expression e = ParseExpression();
if (MaybeEat(TokenKind.Assign)) {
a = FinishKeywordArgument(e);
CheckUniqueArgument(l, a);
} else {
a = new Arg(e);
}
}
a.SetLoc(_globalParent, start, GetEnd());
l.Add(a);
if (MaybeEat(TokenKind.Comma)) {
if (_sink != null) {
_sink.NextParameter(GetSourceSpan());
}
} else {
Eat(terminator);
break;
}
}
if (_sink != null) {
_sink.EndParameters(GetSourceSpan());
}
Arg[] ret = l.ToArray();
return ret;
}