ArgumentList.ceylon
import ceylon.ast.core {
ArgumentList,
Comprehension,
Expression,
SpreadArgument
}
import ceylon.ast.redhat {
RedHatTransformer,
argumentListToCeylon,
compileArgumentList
}
import com.redhat.ceylon.compiler.typechecker.tree {
Tree {
JSequencedArgument=SequencedArgument
}
}
shared object argumentList satisfies ConcreteTest<ArgumentList,JSequencedArgument> {
String->ArgumentList construct(<String->Expression>[] listedArguments = [], <String->SpreadArgument|Comprehension>? sequenceArgument = null) {
if (exists sequenceArgument) {
if (nonempty listedArguments) {
return "``",".join(listedArguments.collect(Entry<String,Expression>.key))``,``sequenceArgument.key``"->ArgumentList(listedArguments.collect(Entry<String,Expression>.item), sequenceArgument.item);
} else {
return sequenceArgument.key->ArgumentList([], sequenceArgument.item);
}
} else {
return "``",".join(listedArguments.collect(Entry<String,Expression>.key))``"->ArgumentList(listedArguments.collect(Entry<String,Expression>.item));
}
}
shared String->ArgumentList emptyArgumentList = construct();
shared String->ArgumentList abcArgumentList = construct([baseExpression.aExpression, baseExpression.bExpression, baseExpression.cExpression]);
shared String->ArgumentList spreadTextArgumentList = construct([], spreadArgument.spreadTextArgument);
shared String->ArgumentList comprehensionArgumentList = construct([], comprehension.forPersonInPeopleComprehension);
// not tested directly, but used by other tests
shared String->ArgumentList helloWorldArgumentList = construct([sumOperation.helloPlusNameElseWorldPlusBangExpression]);
shared String->ArgumentList lucasArgumentList = construct([stringLiteral.lucasStringLiteral]);
shared String->ArgumentList keyItemArgumentList = construct([baseExpression.keyExpression, baseExpression.itemExpression]);
shared String->ArgumentList personNameArgumentList = construct([qualifiedExpression.personNameQualifiedExpression]);
shared String->ArgumentList xySquaredSumArgumentList = construct([sumOperation.xySquaredSumExpression]);
shared String->ArgumentList yxArgumentList = construct([baseExpression.yExpression, baseExpression.xExpression]);
shared String->ArgumentList phiArgumentList = construct([baseExpression.phiExpression]);
compile = compileArgumentList;
fromCeylon = RedHatTransformer.transformArgumentList;
toCeylon = argumentListToCeylon;
codes = [emptyArgumentList, abcArgumentList, spreadTextArgumentList, comprehensionArgumentList];
}