ElementOrSubrangeExpression.ceylon

import ceylon.ast.core {
    ElementOrSubrangeExpression,
    Primary,
    Subscript
}
import ceylon.ast.redhat {
    RedHatTransformer,
    elementOrSubrangeExpressionToCeylon,
    compileElementOrSubrangeExpression
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JIndexExpression=IndexExpression
    }
}

shared object elementOrSubrangeExpression satisfies ConcreteTest<ElementOrSubrangeExpression,JIndexExpression> {
    
    String->ElementOrSubrangeExpression construct(String->Primary primary, String->Subscript subscript)
            => "``primary.key``[``subscript.key``]"->ElementOrSubrangeExpression(primary.item, subscript.item);
    
    shared String->ElementOrSubrangeExpression textElementIExpression = construct(baseExpression.textExpression, keySubscript.iKeySubscript);
    shared String->ElementOrSubrangeExpression processArgumentsFirstSpanFrom2Expression = construct(qualifiedExpression.processArgumentsFirstExpression, spanFromSubscript.spanFrom2Subscript);
    
    compile = compileElementOrSubrangeExpression;
    fromCeylon = RedHatTransformer.transformElementOrSubrangeExpression;
    toCeylon = elementOrSubrangeExpressionToCeylon;
    codes = [textElementIExpression, processArgumentsFirstSpanFrom2Expression];
}