public virtual T Visit(ComparisonBinaryExpression node) { Visit((BinaryExpression)node); traverse(node.left); traverse(node.right); return(DefaultReturnValue()); }
public override bool Visit(ComparisonBinaryExpression node) { Visit((BinaryExpression)node); TraversePrint(node.left); TraversePrint(node.right); return(true); }
public override bool Visit(ComparisonBinaryExpression node) { Visit(node.left); Visit(node.right); if (node.left.Value == null || node.right == null) { return(false); } // resulting value is always bool if (node.Type is IntegerType) { node.Value = new IntegralValue(Fold <long>(node)); } if (node.Type is CharType) { node.Value = new IntegralValue(Fold <char>(node)); } if (node.Type is BoolType) { node.Value = new IntegralValue(Fold <bool>(node)); } else if (node.Type is RealType) { node.Value = new IntegralValue(Fold <double>(node)); } else if (node.Type is RealType) { node.Value = new IntegralValue(Fold <double>(node)); } return(true); }
public override Value Visit(ComparisonBinaryExpression node) { Visit((BinaryExpression)node); Value l = traverse(node.left); Value r = traverse(node.right); if (l.IsNull || r.IsNull) { return(Value.Null); } // LogicalBinaryOp values for comparison operands match LLVMIntPredicate values return(builder.BuildICmp(l, (LLVMIntPredicate)node.op, r)); }
bool Fold <T>(ComparisonBinaryExpression n) where T : struct { T vleft = n.left.Value.Val <T>(); T vright = n.right.Value.Val <T>(); switch (n.op) { case ComparisonBinaryOp.EQ: return(Operator.Equal(vleft, vright)); case ComparisonBinaryOp.GE: return(Operator.GreaterThanOrEqual(vleft, vright)); case ComparisonBinaryOp.GT: return(Operator.GreaterThan(vleft, vright)); case ComparisonBinaryOp.LE: return(Operator.LessThanOrEqual(vleft, vright)); case ComparisonBinaryOp.LT: return(Operator.LessThan(vleft, vright)); case ComparisonBinaryOp.NE: return(Operator.NotEqual(vleft, vright)); // TODO case ComparisonBinaryOp.SGE: return(Operator.GreaterThanOrEqual(vleft, vright)); case ComparisonBinaryOp.SGT: return(Operator.GreaterThan(vleft, vright)); case ComparisonBinaryOp.SLE: return(Operator.LessThanOrEqual(vleft, vright)); case ComparisonBinaryOp.SLT: return(Operator.LessThan(vleft, vright)); default: throw new SemanticException("Invalid operator " + n.op + " in comparison binary expr"); } }