IfElseExpression.ceylon
import ceylon.ast.core {
Conditions,
DisjoiningExpression,
IfElseExpression,
LetExpression
}
import ceylon.ast.redhat {
RedHatTransformer,
ifElseExpressionToCeylon,
compileIfElseExpression
}
import com.redhat.ceylon.compiler.typechecker.tree {
Tree {
JIfExpression=IfExpression
}
}
shared object ifElseExpression satisfies ConcreteTest<IfElseExpression,JIfExpression> {
String->IfElseExpression construct(String->Conditions conditions, String->DisjoiningExpression|IfElseExpression|LetExpression thenExpression, String->DisjoiningExpression|IfElseExpression|LetExpression elseExpression)
=> "if ``conditions.key`` then ``thenExpression.key`` else ``elseExpression.key``"->IfElseExpression(conditions.item, thenExpression.item, elseExpression.item);
shared String->IfElseExpression ifThenAElseBExpression = construct(conditions.trueCommaAAndBConditions, baseExpression.aExpression, baseExpression.bExpression);
shared String->IfElseExpression ifThenLetElseIfExpression => construct(conditions.trueConditions, letExpression.distLetExpression, ifThenAElseBExpression);
shared String->IfElseExpression ifThenIfElseLetExpression => construct(conditions.trueConditions, ifThenLetElseIfExpression, letExpression.letIfExpression);
// not tested directly, but used by other tests
shared String->IfElseExpression ifThen1Else1Expression = construct(conditions.trueConditions, integerLiteral.oneIntegerLiteral, integerLiteral.oneIntegerLiteral);
compile = compileIfElseExpression;
fromCeylon = RedHatTransformer.transformIfElseExpression;
toCeylon = ifElseExpressionToCeylon;
codes => [ifThenAElseBExpression, ifThenLetElseIfExpression, ifThenIfElseLetExpression];
}