/// <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())); }
/// <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)); }