Boo.Lang.Compiler.Steps.EmitAssembly.EmitUnaryNegation C# (CSharp) Метод

EmitUnaryNegation() приватный Метод

private EmitUnaryNegation ( UnaryExpression node ) : void
node Boo.Lang.Compiler.Ast.UnaryExpression
Результат void
        private void EmitUnaryNegation(UnaryExpression node)
        {
            var operandType = GetExpressionType(node.Operand);
            if (IsCheckedIntegerOperand(operandType))
            {
                _il.Emit(OpCodes.Ldc_I4_0);
                if (IsLong(operandType) || operandType == TypeSystemServices.ULongType)
                    _il.Emit(OpCodes.Conv_I8);
                node.Operand.Accept(this);
                _il.Emit(TypeSystemServices.IsSignedNumber(operandType)
                         	? OpCodes.Sub_Ovf
                         	: OpCodes.Sub_Ovf_Un);
                if (!IsLong(operandType) && operandType != TypeSystemServices.ULongType)
                    EmitCastIfNeeded(operandType, TypeSystemServices.IntType);
            }
            else
            {
                //a single/double unary negation never overflow
                node.Operand.Accept(this);
                _il.Emit(OpCodes.Neg);
            }
        }
EmitAssembly