public void Visit(NeqExpr neqExpr, object[] args) { neqExpr.FirstOp.Accept(this); neqExpr.SecondOp.Accept(this); RightValue v1 = readRightValue(neqExpr.FirstOp); RightValue v2 = readRightValue(neqExpr.SecondOp); DataType resultType = readAlgoOperand(v1, v2, neqExpr.Location); BoolConst result = new BoolConst(); if (resultType == DataType.Int) { result.Value = Convert.ToInt32(v1.GetValueObject()) != Convert.ToInt32(v2.GetValueObject()); } else if (resultType == DataType.Float) { kernel.IssueWarning(new Error(ErrorType.EqualOnFloat, neqExpr.Location)); result.Value = Convert.ToDouble(v1.GetValueObject()) != Convert.ToDouble(v2.GetValueObject()); } else { throw new Exception(); } neqExpr.RightValue = result; }
public override BaseLogicalExpression ToExpression() { BaseLogicalExpression expr = null; // Check if we need to change value type object parsedValue = Value; if (int.TryParse((string)parsedValue, out int intValue)) { parsedValue = intValue; } else { // Strip single quotes from value parsedValue = Value.Replace("'", ""); } switch (RelationalOperator) { case RelationalOperator.EQUAL: expr = new EqExpr(SimpleAttribute.value, parsedValue); break; case RelationalOperator.NOT_EQUAL: expr = new NeqExpr(SimpleAttribute.value, parsedValue); break; case RelationalOperator.GREATER_EQUAL: expr = new GteExpr(SimpleAttribute.value, parsedValue); break; case RelationalOperator.LESS_EQUAL: expr = new LteExpr(SimpleAttribute.value, parsedValue); break; case RelationalOperator.GREATER: expr = new GtExpr(SimpleAttribute.value, parsedValue); break; case RelationalOperator.LESS: expr = new LtExpr(SimpleAttribute.value, parsedValue); break; case RelationalOperator.LIKE: case RelationalOperator.IS: throw new NotSupportedException("Operation not supported"); } return(expr); }