private static string GetCompareOperatorName(LogicalCompareOperation op) { switch (op) { case LogicalCompareOperation.Equal: return("Equality"); case LogicalCompareOperation.NotEqual: return("Inequality"); case LogicalCompareOperation.GreaterThan: return("GreaterThan"); case LogicalCompareOperation.LessThan: return("LessThan"); case LogicalCompareOperation.GreaterThanOrEqual: return("GreaterThanOrEqual"); case LogicalCompareOperation.LessThanOrEqual: return("LessThanOrEqual"); default: Debug.Assert(false, "unknown compare type"); return(null); } }
private static void EmitStringEquality(FleeILGenerator ilg, LogicalCompareOperation op, IServiceProvider services) { // Get the StringComparison from the options ExpressionOptions options = (ExpressionOptions)services.GetService(typeof(ExpressionOptions)); Int32LiteralElement ic = new Int32LiteralElement((int)options.StringComparison); ic.Emit(ilg, services); // and emit the method call System.Reflection.MethodInfo mi = typeof(string).GetMethod("Equals", new Type[] { typeof(string), typeof(string), typeof(StringComparison) }, null); ilg.Emit(OpCodes.Call, mi); if (op == LogicalCompareOperation.NotEqual) { ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); } }
private static void EmitStringEquality(YaleIlGenerator ilg, LogicalCompareOperation op, ExpressionContext context) { // Get the StringComparison from the options var options = context.BuilderOptions; var int32LiteralElement = new Int32LiteralElement((int)options.StringComparison); int32LiteralElement.Emit(ilg, context); // and emit the method call var methodInfo = typeof(string).GetMethod("Equals", new[] { typeof(string), typeof(string), typeof(StringComparison) }, null); ilg.Emit(OpCodes.Call, methodInfo); if (op == LogicalCompareOperation.NotEqual) { ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); } }
/// <summary> /// Emit the actual compare /// </summary> /// <param name="ilg"></param> /// <param name="op"></param> private void EmitCompareOperation(FleeILGenerator ilg, LogicalCompareOperation op) { OpCode ltOpcode = this.GetCompareGTLTOpcode(false); OpCode gtOpcode = this.GetCompareGTLTOpcode(true); switch (op) { case LogicalCompareOperation.Equal: ilg.Emit(OpCodes.Ceq); break; case LogicalCompareOperation.LessThan: ilg.Emit(ltOpcode); break; case LogicalCompareOperation.GreaterThan: ilg.Emit(gtOpcode); break; case LogicalCompareOperation.NotEqual: ilg.Emit(OpCodes.Ceq); ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); break; case LogicalCompareOperation.LessThanOrEqual: ilg.Emit(gtOpcode); ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); break; case LogicalCompareOperation.GreaterThanOrEqual: ilg.Emit(ltOpcode); ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); break; default: Debug.Fail("Unknown op type"); break; } }
private static void EmitStringEquality(FleeIlGenerator ilg, LogicalCompareOperation op, IServiceProvider services) { var options = (ExpressionOptions)services.GetService(typeof(ExpressionOptions)); var ic = new Int32LiteralElement((int)options.StringComparison); ic.Emit(ilg, services); var mi = typeof(string).GetMethod("Equals", BindingFlags.Static | BindingFlags.Public, null, new[] { typeof(string), typeof(string), typeof(StringComparison) }, null); ilg.Emit(OpCodes.Call, mi); var flag = op == LogicalCompareOperation.NotEqual; if (flag) { ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); } }
private static string GetCompareOperatorName(LogicalCompareOperation op) { string getCompareOperatorName = null; switch (op) { case LogicalCompareOperation.LessThan: getCompareOperatorName = "LessThan"; break; case LogicalCompareOperation.GreaterThan: getCompareOperatorName = "GreaterThan"; break; case LogicalCompareOperation.Equal: getCompareOperatorName = "Equality"; break; case LogicalCompareOperation.NotEqual: getCompareOperatorName = "Inequality"; break; case LogicalCompareOperation.LessThanOrEqual: getCompareOperatorName = "LessThanOrEqual"; break; case LogicalCompareOperation.GreaterThanOrEqual: getCompareOperatorName = "GreaterThanOrEqual"; break; default: Debug.Assert(false, "unknown compare type"); break; } return(getCompareOperatorName); }
protected override void GetOperation(object operation) { _myOperation = (LogicalCompareOperation)operation; }
public void Initialize(ExpressionElement leftChild, ExpressionElement rightChild, LogicalCompareOperation op) { MyLeftChild = leftChild; MyRightChild = rightChild; _myOperation = op; }
private static bool IsOpTypeEqualOrNotEqual(LogicalCompareOperation op) { return(op == LogicalCompareOperation.Equal | op == LogicalCompareOperation.NotEqual); }
protected override void GetOperation(object operation) { MyOperation = (LogicalCompareOperation)operation; }
public void Initialize(ExpressionElement leftChild, ExpressionElement rightChild, LogicalCompareOperation op) { MyLeftChild = leftChild; MyRightChild = rightChild; MyOperation = op; }
// Emit the actual compare private void EmitCompareOperation(FleeILGenerator ilg, LogicalCompareOperation op) { var ltOpcode = this.GetCompareGTLTOpcode(false); var gtOpcode = this.GetCompareGTLTOpcode(true); switch (op) { case LogicalCompareOperation.Equal: ilg.Emit(OpCodes.Ceq); break; case LogicalCompareOperation.LessThan: ilg.Emit(ltOpcode); break; case LogicalCompareOperation.GreaterThan: ilg.Emit(gtOpcode); break; case LogicalCompareOperation.NotEqual: ilg.Emit(OpCodes.Ceq); ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); break; case LogicalCompareOperation.LessThanOrEqual: ilg.Emit(gtOpcode); ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); break; case LogicalCompareOperation.GreaterThanOrEqual: ilg.Emit(ltOpcode); ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); break; default: Debug.Fail("Unknown op type"); break; } }
private static bool IsOpTypeEqualOrNotEqual(LogicalCompareOperation op) { return op == LogicalCompareOperation.Equal | op == LogicalCompareOperation.NotEqual; }
private static string GetCompareOperatorName(LogicalCompareOperation op) { switch (op) { case LogicalCompareOperation.Equal: return "Equality"; case LogicalCompareOperation.NotEqual: return "Inequality"; case LogicalCompareOperation.GreaterThan: return "GreaterThan"; case LogicalCompareOperation.LessThan: return "LessThan"; case LogicalCompareOperation.GreaterThanOrEqual: return "GreaterThanOrEqual"; case LogicalCompareOperation.LessThanOrEqual: return "LessThanOrEqual"; default: Debug.Assert(false, "unknown compare type"); return null; } }
private static void EmitStringEquality(FleeILGenerator ilg, LogicalCompareOperation op, IServiceProvider services) { // Get the StringComparison from the options var options = (ExpressionOptions)services.GetService(typeof(ExpressionOptions)); var ic = new Int32LiteralElement((int)options.StringComparison); ic.Emit(ilg, services); // and emit the method call var mi = typeof(string).GetMethod("Equals", System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static, null, new Type[] { typeof(string), typeof(string), typeof(StringComparison) }, null); ilg.Emit(OpCodes.Call, mi); if (op == LogicalCompareOperation.NotEqual) { ilg.Emit(OpCodes.Ldc_I4_0); ilg.Emit(OpCodes.Ceq); } }
public void Initialize(BaseExpressionElement leftChild, BaseExpressionElement rightChild, LogicalCompareOperation operation) { this.operation = operation; LeftChild = leftChild; RightChild = (Int32LiteralElement)rightChild; }