private TokenBuffer GetNumber(int c) { if (c == '0') { int buf = this.Reader.Peek(); if (buf == 'x' || buf == 'X') { this.Reader.Read(); if (!EcmaChar.IsHexDigit(this.Reader.Peek())) { throw new EcmaRuntimeException("After 0X there must be a hex digit"); } return(new TokenBuffer(TokenType.Number, Convert.ToUInt32(((char)this.Reader.Read()).ToString(), 16).ToString(), this.LastLineStart)); } } StringBuilder builder = new StringBuilder(); builder.Append((char)c); GetInt(builder); if (this.Reader.Peek() == '.') { this.Reader.Read(); builder.Append("."); this.GetInt(builder); } if (this.Reader.Peek() == 'e' || this.Reader.Peek() == 'E') { builder.Append((char)this.Reader.Read()); } return(new TokenBuffer(TokenType.Number, builder.ToString(), this.LastLineStart)); }
private char GetStringUnicode() { StringBuilder builder = new StringBuilder(); if (!EcmaChar.IsHexDigit(this.Reader.Peek())) { throw new EcmaRuntimeException("After \\u there must be a hex digit"); } builder.Append((char)this.Reader.Read()); if (!EcmaChar.IsHexDigit(this.Reader.Peek())) { throw new EcmaRuntimeException("After \\u[hex] there must be a hex digit"); } builder.Append((char)this.Reader.Read()); if (!EcmaChar.IsHexDigit(this.Reader.Peek())) { throw new EcmaRuntimeException("After \\u[hex][hex] there must be a hex digit"); } builder.Append((char)this.Reader.Read()); if (!EcmaChar.IsHexDigit(this.Reader.Peek())) { throw new EcmaRuntimeException("After \\u[hex][hex][hex] there must be a hex digit"); } builder.Append((char)this.Reader.Read()); return((char)Convert.ToUInt32(builder.ToString(), 16)); }