ICSharpCode.NRefactory.CSharp.Resolver.CSharpResolver.HandleEnumSubtraction C# (CSharp) Method

HandleEnumSubtraction() private method

Handle the case where an enum value is subtracted from another enum value U operator –(E x, E y);
private HandleEnumSubtraction ( bool isNullable, IType enumType, ResolveResult lhs, ResolveResult rhs ) : ResolveResult
isNullable bool
enumType IType
lhs ResolveResult
rhs ResolveResult
return ResolveResult
		ResolveResult HandleEnumSubtraction(bool isNullable, IType enumType, ResolveResult lhs, ResolveResult rhs)
		{
			// evaluate as (U)((U)x – (U)y)
			IType elementType = GetEnumUnderlyingType(enumType);
			if (lhs.IsCompileTimeConstant && rhs.IsCompileTimeConstant && !isNullable && elementType.Kind != TypeKind.Enum) {
				var rr = ResolveBinaryOperator(BinaryOperatorType.Subtract, ResolveCast(elementType, lhs), ResolveCast(elementType, rhs));
				rr = WithCheckForOverflow(false).ResolveCast(elementType, rr);
				if (rr.IsCompileTimeConstant)
					return rr;
			}
			IType resultType = MakeNullable(elementType, isNullable);
			return BinaryOperatorResolveResult(resultType, lhs, BinaryOperatorType.Subtract, rhs, isNullable);
		}
		
CSharpResolver