BinaryOperation.ceylon
import ceylon.ast.core {
BinaryOperation,
Node
}
import com.redhat.ceylon.compiler.typechecker.tree {
JNode=Node,
Tree {
JArithmeticOp=ArithmeticOp,
JAssignmentOp=AssignmentOp,
JBinaryOperatorExpression=BinaryOperatorExpression,
JBitwiseOp=BitwiseOp,
JCompareOp=CompareOp,
JComparisonOp=ComparisonOp,
JDefaultOp=DefaultOp,
JEntryOp=EntryOp,
JEqualityOp=EqualityOp,
JIdenticalOp=IdenticalOp,
JInOp=InOp,
JLogicalOp=LogicalOp,
JRangeOp=RangeOp,
JScaleOp=ScaleOp,
JSegmentOp=SegmentOp,
JThenOp=ThenOp
}
}
"Converts a RedHat AST [[BinaryOperatorExpression|JBinaryOperatorExpression]] to a `ceylon.ast` [[BinaryOperation]]."
shared BinaryOperation binaryOperationToCeylon(JBinaryOperatorExpression binaryOperation, Anything(JNode,Node) update = noop) {
assert (is JArithmeticOp|JBitwiseOp|JScaleOp|JRangeOp|JSegmentOp|JEntryOp|JInOp|JComparisonOp|JCompareOp|JEqualityOp|JIdenticalOp|JLogicalOp|JThenOp|JDefaultOp|JAssignmentOp binaryOperation);
switch (binaryOperation)
case (is JArithmeticOp) { return arithmeticOperationToCeylon(binaryOperation, update); }
case (is JBitwiseOp) { return setOperationToCeylon(binaryOperation, update); }
case (is JScaleOp) { return scaleOperationToCeylon(binaryOperation, update); }
case (is JRangeOp) { return spanOperationToCeylon(binaryOperation, update); }
case (is JSegmentOp) { return measureOperationToCeylon(binaryOperation, update); }
case (is JEntryOp) { return entryOperationToCeylon(binaryOperation, update); }
case (is JInOp) { return inOperationToCeylon(binaryOperation, update); }
case (is JComparisonOp) { return comparisonOperationToCeylon(binaryOperation, update); }
case (is JCompareOp) { return compareOperationToCeylon(binaryOperation, update); }
case (is JEqualityOp|JIdenticalOp) { return equalityOperationToCeylon(binaryOperation, update); }
case (is JLogicalOp) { return logicalOperationToCeylon(binaryOperation, update); }
case (is JThenOp) { return thenOperationToCeylon(binaryOperation, update); }
case (is JDefaultOp) { return elseOperationToCeylon(binaryOperation, update); }
case (is JAssignmentOp) { return assignmentOperationToCeylon(binaryOperation, update); }
}
"Compiles the given [[code]] for a Binary Operation
into a [[BinaryOperation]] using the Ceylon compiler
(more specifically, the rule for an `assignmentExpression`)."
shared BinaryOperation? compileBinaryOperation(String code, Anything(JNode,Node) update = noop) {
if (is JBinaryOperatorExpression jBinaryOperation = createParser(code).assignmentExpression()) {
return binaryOperationToCeylon(jBinaryOperation, update);
} else {
return null;
}
}