SwitchCaseElseExpression.ceylon

import ceylon.ast.core {
    CaseExpression,
    DisjoiningExpression,
    IfElseExpression,
    LetExpression,
    SwitchCaseElseExpression,
    SwitchClause
}
import ceylon.ast.redhat {
    RedHatTransformer,
    switchCaseElseExpressionToCeylon,
    compileSwitchCaseElseExpression
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JSwitchExpression=SwitchExpression
    }
}

shared object switchCaseElseExpression satisfies ConcreteTest<SwitchCaseElseExpression,JSwitchExpression> {
    
    String->SwitchCaseElseExpression construct(String->SwitchClause clause, [<String->CaseExpression>+] caseExpressions, <String->DisjoiningExpression|IfElseExpression|LetExpression>? elseExpression = null)
            => "``clause.key`` ``" ".join(caseExpressions*.key)`` ``(if (exists elseExpression) then "else ``elseExpression.key``" else "")``"->SwitchCaseElseExpression(clause.item, caseExpressions*.item, elseExpression?.item);
    
    shared String->SwitchCaseElseExpression switchCaseElseExpression = construct(switchClause.switchIClause, ["case (0 | 1) i"->CaseExpression(matchCase.matchZeroOrOneCase.item, baseExpression.iExpression.item)], baseExpression.nullExpression);
    
    compile = compileSwitchCaseElseExpression;
    fromCeylon = RedHatTransformer.transformSwitchCaseElseExpression;
    toCeylon = switchCaseElseExpressionToCeylon;
    codes = [switchCaseElseExpression];
}