/// <summary>
        ///     Determines whether the integer literal node is a literal value that overflows/underflows a 32 bit integer.
        /// </summary>
        /// <param name="node">The integer literal node to test.</param>
        /// <param name="negated">Whether or not the node is negated.</param>
        /// <returns><see cref="LSLLiteralOverflowType"/>.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="node"/> is <c>null</c>.</exception>
        public static LSLLiteralOverflowType CheckForOverflow(this ILSLIntegerLiteralNode node, bool negated)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            long val;

            try
            {
                val = Convert.ToInt64(node.RawText);
            }
            catch (OverflowException)
            {
                return(LSLLiteralOverflowType.Overflow);
            }

            if (negated && val > 2147483648)
            {
                return(LSLLiteralOverflowType.Underflow);
            }
            if (!negated && val > 2147483647)
            {
                return(LSLLiteralOverflowType.Overflow);
            }

            return(LSLLiteralOverflowType.None);
        }
        /// <summary>
        ///     Determines whether the integer literal node is a literal value that overflows/underflows a 32 bit integer. <para/>
        ///     Whether or not the node is negated is determined with <see cref="LSLExprNodeExtensions.IsNegated"/>.
        /// </summary>
        /// <param name="node">The integer literal node to test.</param>
        /// <returns><see cref="LSLLiteralOverflowType"/>.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="node"/> is <c>null</c>.</exception>
        public static LSLLiteralOverflowType CheckForOverflow(this ILSLIntegerLiteralNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            return(CheckForOverflow(node, node.IsNegated()));
        }
Пример #3
0
 /// <summary>
 ///     Visits an integer literal token node during a syntax tree traversal.
 /// </summary>
 /// <param name="node">The Syntax Tree Node.</param>
 /// <returns>An object of type (T) from the visitor implementation of this function.</returns>
 public virtual T VisitIntegerLiteral(ILSLIntegerLiteralNode node)
 {
     return(default(T));
 }