/// <summary> /// Emits code for relation comparison: greater, less, etc. /// </summary> private void EmitRelation(Context ctx, Type left, Type right) { var gen = ctx.CurrentMethod.Generator; // string comparisons if (left == typeof(string)) { LeftOperand.Emit(ctx, true); RightOperand.Emit(ctx, true); var method = typeof(string).GetMethod("Compare", new[] { typeof(string), typeof(string) }); gen.EmitCall(method); if (Kind.IsAnyOf(ComparisonOperatorKind.Less, ComparisonOperatorKind.GreaterEquals)) { gen.EmitConstant(-1); gen.EmitCompareEqual(); if (Kind == ComparisonOperatorKind.GreaterEquals) { EmitInversion(gen); } } else { gen.EmitConstant(1); gen.EmitCompareEqual(); if (Kind == ComparisonOperatorKind.LessEquals) { EmitInversion(gen); } } } // numeric comparison LoadAndConvertNumerics(ctx); if (Kind.IsAnyOf(ComparisonOperatorKind.Less, ComparisonOperatorKind.GreaterEquals)) { gen.EmitCompareLess(); if (Kind == ComparisonOperatorKind.GreaterEquals) { EmitInversion(gen); } } else { gen.EmitCompareGreater(); if (Kind == ComparisonOperatorKind.LessEquals) { EmitInversion(gen); } } }