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

HandleEnumOperator() private method

Handle the following enum operators: E operator +(E x, U y); E operator +(U x, E y); E operator –(E x, U y); E operator &(E x, E y); E operator |(E x, E y); E operator ^(E x, E y);
private HandleEnumOperator ( bool isNullable, IType enumType, BinaryOperatorType op, ResolveResult lhs, ResolveResult rhs ) : ResolveResult
isNullable bool
enumType IType
op BinaryOperatorType
lhs ResolveResult
rhs ResolveResult
return ResolveResult
		ResolveResult HandleEnumOperator(bool isNullable, IType enumType, BinaryOperatorType op, ResolveResult lhs, ResolveResult rhs)
		{
			// evaluate as (E)((U)x op (U)y)
			if (lhs.IsCompileTimeConstant && rhs.IsCompileTimeConstant && !isNullable) {
				IType elementType = GetEnumUnderlyingType(enumType);
				if (elementType.Kind != TypeKind.Enum) {
					var rr = ResolveBinaryOperator(op, ResolveCast(elementType, lhs), ResolveCast(elementType, rhs));
					rr = WithCheckForOverflow(false).ResolveCast(enumType, rr);
					if (rr.IsCompileTimeConstant) // only report result if it's a constant; use the regular OperatorResolveResult codepath otherwise
						return rr;
				}
			}
			IType resultType = MakeNullable(enumType, isNullable);
			return BinaryOperatorResolveResult(resultType, lhs, op, rhs, isNullable);
		}
		
CSharpResolver