2 // Author: Sergey Chaban (serge@wildwestsoftware.com)
\r
5 using System.Globalization;
\r
7 namespace Mono.ILASM {
\r
11 internal class NumberHelper : StringHelperBase {
\r
13 private ILToken result;
\r
17 /// <param name="host"></param>
\r
18 public NumberHelper (ILTokenizer host) : base (host)
\r
24 private void Reset ()
\r
26 result = ILToken.Invalid.Clone() as ILToken;
\r
31 /// <returns></returns>
\r
32 public override bool Start (char ch)
\r
34 bool res = (Char.IsDigit (ch) || ch == '-' || (ch == '.' && Char.IsDigit ((char) host.Reader.Peek ())));
\r
41 /// <returns></returns>
\r
42 public override string Build ()
\r
44 ILReader reader = host.Reader;
\r
45 reader.MarkLocation ();
\r
46 string num = reader.ReadToWhitespace ();
\r
48 NumberStyles nstyles = NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint;
\r
51 if (num.IndexOf ('.') != -1) {
\r
52 double d = Double.Parse (num, nstyles, NumberFormatInfo.InvariantInfo);
\r
53 result.token = Token.FLOAT64;
\r
56 long i = Int64.Parse (num, nstyles);
\r
57 if (i < Int32.MinValue || i > Int32.MaxValue) {
\r
58 result.token = Token.INT64;
\r
61 result.token = Token.INT32;
\r
62 result.val = (int) i;
\r
66 reader.Unread (num.ToCharArray ());
\r
67 reader.RestoreLocation ();
\r
70 throw new ILSyntaxError ("Bad number format!");
\r
78 public ILToken ResultToken {
\r