AndOperation.ceylon

import ceylon.ast.core {
    AndOperation,
    NegatingExpression,
    ConjoiningExpression
}
import ceylon.ast.redhat {
    RedHatTransformer,
    andOperationToCeylon,
    compileAndOperation
}
import com.redhat.ceylon.compiler.typechecker.tree {
    Tree {
        JAndOp=AndOp
    }
}

shared object andOperation satisfies ConcreteTest<AndOperation,JAndOp> {
    
    String->AndOperation construct(String->ConjoiningExpression left, String->NegatingExpression right)
            => "``left.key``&&``right.key``"->AndOperation(left.item, right.item);
    
    shared String->AndOperation aAndBExpression = construct(baseExpression.aExpression, baseExpression.bExpression);
    
    compile = compileAndOperation;
    fromCeylon = RedHatTransformer.transformAndOperation;
    toCeylon = andOperationToCeylon;
    codes = [aAndBExpression];
}