void EmitBitwiseOperator(BinaryExpression node)
{
var type = node.ExpressionType;
LoadExpressionWithType(type, node.Left);
LoadExpressionWithType(GetExpectedTypeForBitwiseRightOperand(node), node.Right);
switch (node.Operator)
{
case BinaryOperatorType.BitwiseOr:
{
_il.Emit(OpCodes.Or);
break;
}
case BinaryOperatorType.BitwiseAnd:
{
_il.Emit(OpCodes.And);
break;
}
case BinaryOperatorType.ExclusiveOr:
{
_il.Emit(OpCodes.Xor);
break;
}
case BinaryOperatorType.ShiftLeft:
{
_il.Emit(OpCodes.Shl);
break;
}
case BinaryOperatorType.ShiftRight:
{
_il.Emit(TypeSystemServices.IsSignedNumber(type) ? OpCodes.Shr : OpCodes.Shr_Un);
break;
}
}
PushType(type);
}