Exemple #1
0
        private int GarbageCollector()
        {
            int c = this.Reader.Read();

            this.LastLineStart = this.Reader.Line;
            this.Lines.Add(this.Reader.Line);

            if (EcmaChar.IsWhiteSpace(c))
            {
                return(GarbageCollector());
            }
            if (EcmaChar.IsLineTerminator(c))
            {
                return(GarbageCollector());
            }

            if (c == '/')
            {
                int b = this.Reader.Peek();
                if (b == '/')
                {
                    while (!EcmaChar.IsLineTerminator(this.Reader.Read()))
                    {
                        ;
                    }
                    return(GarbageCollector());
                }

                if (b == '*')
                {
                    this.Reader.Read();
                    while (!(this.Reader.Read() == '*' && this.Reader.Peek() == '/'))
                    {
                        ;
                    }
                    this.Reader.Read();
                    return(GarbageCollector());
                }
            }

            return(c);
        }
Exemple #2
0
        private TokenBuffer GetString(int stop)
        {
            int           c;
            StringBuilder str = new StringBuilder();

            while (true)
            {
                c = this.Reader.Read();
                if (EcmaChar.IsLineTerminator(c))
                {
                    throw new EcmaRuntimeException("A string cant containe a line terminator. Use \\n instance");
                }

                if (c == stop)
                {
                    return(new TokenBuffer(TokenType.String, str.ToString(), this.LastLineStart));
                }


                if (c == '\\')
                {
                    c = this.Reader.Read();
                    switch (c)
                    {
                    case '\'':
                        str.Append("'");
                        break;

                    case '"':
                        str.Append("\"");
                        break;

                    case '\\':
                        str.Append('\\');
                        break;

                    case 'b':
                        str.Append('\u0008');
                        break;

                    case 't':
                        str.Append('\u0009');
                        break;

                    case 'n':
                        str.Append('\u000A');
                        break;

                    case 'f':
                        str.Append("\u000C");
                        break;

                    case 'r':
                        str.Append('\u000D');
                        break;

                    case 'x':
                        str.Append(GetStringHex());
                        break;

                    case 'u':
                        str.Append(GetStringUnicode());
                        break;

                    default:
                        if (EcmaChar.IsOctalDigit(c))
                        {
                            str.Append(GetStringOctal(c));
                        }
                        str.Append((char)c);
                        break;
                    }
                    continue;
                }

                str.Append((char)c);
            }
        }