ComparisonOperation.ceylon

import ceylon.ast.core {
    ComparisonOperation,
    Node
}
import com.redhat.ceylon.compiler.typechecker.tree {
    JNode=Node,
    Tree {
        JComparisonOp=ComparisonOp,
        JLargeAsOp=LargeAsOp,
        JLargerOp=LargerOp,
        JSmallAsOp=SmallAsOp,
        JSmallerOp=SmallerOp
    }
}

"Converts a RedHat AST [[ComparisonOp|JComparisonOp]] to a `ceylon.ast` [[ComparisonOperation]]."
shared ComparisonOperation comparisonOperationToCeylon(JComparisonOp comparisonOperation, Anything(JNode,Node) update = noop) {
    assert (is JLargerOp|JSmallerOp|JLargeAsOp|JSmallAsOp comparisonOperation);
    switch (comparisonOperation)
    case (is JLargerOp) { return largerOperationToCeylon(comparisonOperation, update); }
    case (is JSmallerOp) { return smallerOperationToCeylon(comparisonOperation, update); }
    case (is JLargeAsOp) { return largeAsOperationToCeylon(comparisonOperation, update); }
    case (is JSmallAsOp) { return smallAsOperationToCeylon(comparisonOperation, update); }
}

"Compiles the given [[code]] for a Comparison Operation
 into a [[ComparisonOperation]] using the Ceylon compiler
 (more specifically, the rule for a `comparisonExpression`)."
shared ComparisonOperation? compileComparisonOperation(String code, Anything(JNode,Node) update = noop) {
    if (is JComparisonOp jComparisonExpression = createParser(code).comparisonExpression()) {
        return comparisonOperationToCeylon(jComparisonExpression, update);
    } else {
        return null;
    }
}