private dynamic Unary()

in src/extensions/template_extension/ExpressionCalculator.cs [400:452]


        private dynamic Unary()
        {
            var negate = false;
            var bitwiseNot = false;
            var logicalNot = false;
            if (_tokenType == TokenType.Minus)
            {
                NextToken();
                negate = true;
            }
            else if (_tokenType == TokenType.Plus)
            {
                NextToken();
                negate = false;
            }
            else if (_tokenType == TokenType.BitwiseNot)
            {
                NextToken();
                bitwiseNot = true;
            }
            else if (_tokenType == TokenType.LogicalNot)
            {
                NextToken();
                logicalNot = true;
            }
            var value = Exponent();
            if (negate)
            {
                value = value * -1.0;
            }
            if (logicalNot)
            {
                if (!(value is bool))
                {
                    throw new CalcException("Expected boolean", _position);
                }
                value = !(bool)value;
            }
            if (bitwiseNot)
            {
                if (value >= double.MinValue && value <= double.MaxValue)
                {
                    long l = (long)value;
                    l = ~l;
                    value = (double)l;
                }
                else
                {
                    throw new CalcException("Result to large. Bitwise operation impossible.", _position);
                }
            }
            return value;
        }