PositionalArguments.ceylon
import ceylon.ast.core {
ArgumentList,
Comprehension,
Expression,
PositionalArguments,
SpreadArgument
}
shared alias PositionalArgumentIsh => Expression|SpreadArgument|Comprehension;
"""A utility function to create [[PositionalArguments]] directly from a list of
expressions, spread arguments and comprehensions, without having to use
[[ArgumentList]] and having to wrap the [[listed arguments|ArgumentList.listedArguments]]
in a sequence.
Usage examples:
positionalArguments()
positionalArguments(thisInstance, SpreadArgument(baseExpression("others")))"""
shared PositionalArguments positionalArguments(PositionalArgumentIsh* arguments) {
Expression assertIsExpression(PositionalArgumentIsh argument) {
"Intermediate argument must be expression"
assert (is Expression argument);
return argument;
}
if (is SpreadArgument|Comprehension sequenceArgument = arguments.last) {
Expression[] listedArguments = arguments[... arguments.size - 2].collect(assertIsExpression);
return PositionalArguments(ArgumentList(listedArguments, sequenceArgument));
} else {
Expression[] listedArguments = arguments.collect(assertIsExpression);
return PositionalArguments(ArgumentList(listedArguments));
}
}