// at least one of 'left' or 'right' is an enumeration constant (EnumConstant or SideEffectConstant or ...) // if 'left' is not an enumeration constant, create one from the type of 'right' Constant EnumLiftUp (ResolveContext ec, Constant left, Constant right, Location loc) { switch (oper) { case Operator.BitwiseOr: case Operator.BitwiseAnd: case Operator.ExclusiveOr: case Operator.Equality: case Operator.Inequality: case Operator.LessThan: case Operator.LessThanOrEqual: case Operator.GreaterThan: case Operator.GreaterThanOrEqual: if (TypeManager.IsEnumType (left.Type)) return left; if (left.IsZeroInteger) return left.TryReduce (ec, right.Type, loc); break; case Operator.Addition: case Operator.Subtraction: return left; case Operator.Multiply: case Operator.Division: case Operator.Modulus: case Operator.LeftShift: case Operator.RightShift: if (TypeManager.IsEnumType (right.Type) || TypeManager.IsEnumType (left.Type)) break; return left; } Error_OperatorCannotBeApplied (ec, this.left, this.right); return null; }