| Index: Source/devtools/front_end/JavaScriptFormatter.js | 
| diff --git a/Source/devtools/front_end/JavaScriptFormatter.js b/Source/devtools/front_end/JavaScriptFormatter.js | 
| index 9536289dd7376b40add3eb58fba400b490f3a8ad..ba5296731604d6513f2ad00e854a852e6159b833 100644 | 
| --- a/Source/devtools/front_end/JavaScriptFormatter.js | 
| +++ b/Source/devtools/front_end/JavaScriptFormatter.js | 
| @@ -28,207 +28,12 @@ | 
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 
| */ | 
|  | 
| -function FormattedContentBuilder(content, mapping, originalOffset, formattedOffset, indentString) | 
| -{ | 
| -    this._originalContent = content; | 
| -    this._originalOffset = originalOffset; | 
| -    this._lastOriginalPosition = 0; | 
| - | 
| -    this._formattedContent = []; | 
| -    this._formattedContentLength = 0; | 
| -    this._formattedOffset = formattedOffset; | 
| -    this._lastFormattedPosition = 0; | 
| - | 
| -    this._mapping = mapping; | 
| - | 
| -    this._lineNumber = 0; | 
| -    this._nestingLevel = 0; | 
| -    this._indentString = indentString; | 
| -    this._cachedIndents = {}; | 
| -} | 
| - | 
| -FormattedContentBuilder.prototype = { | 
| -    addToken: function(token) | 
| -    { | 
| -        for (var i = 0; i < token.comments_before.length; ++i) | 
| -            this._addComment(token.comments_before[i]); | 
| - | 
| -        while (this._lineNumber < token.line) { | 
| -            this._addText("\n"); | 
| -            this._addIndent(); | 
| -            this._needNewLine = false; | 
| -            this._lineNumber += 1; | 
| -        } | 
| - | 
| -        if (this._needNewLine) { | 
| -            this._addText("\n"); | 
| -            this._addIndent(); | 
| -            this._needNewLine = false; | 
| -        } | 
| - | 
| -        this._addMappingIfNeeded(token.pos); | 
| -        this._addText(this._originalContent.substring(token.pos, token.endPos)); | 
| -        this._lineNumber = token.endLine; | 
| -    }, | 
| - | 
| -    addSpace: function() | 
| -    { | 
| -        this._addText(" "); | 
| -    }, | 
| - | 
| -    addNewLine: function() | 
| -    { | 
| -        this._needNewLine = true; | 
| -    }, | 
| - | 
| -    increaseNestingLevel: function() | 
| -    { | 
| -        this._nestingLevel += 1; | 
| -    }, | 
| - | 
| -    decreaseNestingLevel: function() | 
| -    { | 
| -        this._nestingLevel -= 1; | 
| -    }, | 
| - | 
| -    content: function() | 
| -    { | 
| -        return this._formattedContent.join(""); | 
| -    }, | 
| - | 
| -    mapping: function() | 
| -    { | 
| -        return { original: this._originalPositions, formatted: this._formattedPositions }; | 
| -    }, | 
| - | 
| -    _addIndent: function() | 
| -    { | 
| -        if (this._cachedIndents[this._nestingLevel]) { | 
| -            this._addText(this._cachedIndents[this._nestingLevel]); | 
| -            return; | 
| -        } | 
| - | 
| -        var fullIndent = ""; | 
| -        for (var i = 0; i < this._nestingLevel; ++i) | 
| -            fullIndent += this._indentString; | 
| -        this._addText(fullIndent); | 
| - | 
| -        // Cache a maximum of 20 nesting level indents. | 
| -        if (this._nestingLevel <= 20) | 
| -            this._cachedIndents[this._nestingLevel] = fullIndent; | 
| -    }, | 
| - | 
| -    _addComment: function(comment) | 
| -    { | 
| -        if (this._lineNumber < comment.line) { | 
| -            for (var j = this._lineNumber; j < comment.line; ++j) | 
| -                this._addText("\n"); | 
| -            this._lineNumber = comment.line; | 
| -            this._needNewLine = false; | 
| -            this._addIndent(); | 
| -        } else | 
| -            this.addSpace(); | 
| - | 
| -        this._addMappingIfNeeded(comment.pos); | 
| -        if (comment.type === "comment1") | 
| -            this._addText("//"); | 
| -        else | 
| -            this._addText("/*"); | 
| - | 
| -        this._addText(comment.value); | 
| - | 
| -        if (comment.type !== "comment1") { | 
| -            this._addText("*/"); | 
| -            var position; | 
| -            while ((position = comment.value.indexOf("\n", position + 1)) !== -1) | 
| -                this._lineNumber += 1; | 
| -        } | 
| -    }, | 
| - | 
| -    _addText: function(text) | 
| -    { | 
| -        this._formattedContent.push(text); | 
| -        this._formattedContentLength += text.length; | 
| -    }, | 
| - | 
| -    _addMappingIfNeeded: function(originalPosition) | 
| -    { | 
| -        if (originalPosition - this._lastOriginalPosition === this._formattedContentLength - this._lastFormattedPosition) | 
| -            return; | 
| -        this._mapping.original.push(this._originalOffset + originalPosition); | 
| -        this._lastOriginalPosition = originalPosition; | 
| -        this._mapping.formatted.push(this._formattedOffset + this._formattedContentLength); | 
| -        this._lastFormattedPosition = this._formattedContentLength; | 
| -    } | 
| -} | 
| - | 
| -var tokens = [ | 
| -    ["EOS"], | 
| -    ["LPAREN", "("], ["RPAREN", ")"], ["LBRACK", "["], ["RBRACK", "]"], ["LBRACE", "{"], ["RBRACE", "}"], ["COLON", ":"], ["SEMICOLON", ";"], ["PERIOD", "."], ["CONDITIONAL", "?"], | 
| -    ["INC", "++"], ["DEC", "--"], | 
| -    ["ASSIGN", "="], ["ASSIGN_BIT_OR", "|="], ["ASSIGN_BIT_XOR", "^="], ["ASSIGN_BIT_AND", "&="], ["ASSIGN_SHL", "<<="], ["ASSIGN_SAR", ">>="], ["ASSIGN_SHR", ">>>="], | 
| -    ["ASSIGN_ADD", "+="], ["ASSIGN_SUB", "-="], ["ASSIGN_MUL", "*="], ["ASSIGN_DIV", "/="], ["ASSIGN_MOD", "%="], | 
| -    ["COMMA", ","], ["OR", "||"], ["AND", "&&"], ["BIT_OR", "|"], ["BIT_XOR", "^"], ["BIT_AND", "&"], ["SHL", "<<"], ["SAR", ">>"], ["SHR", ">>>"], | 
| -    ["ADD", "+"], ["SUB", "-"], ["MUL", "*"], ["DIV", "/"], ["MOD", "%"], | 
| -    ["EQ", "=="], ["NE", "!="], ["EQ_STRICT", "==="], ["NE_STRICT", "!=="], ["LT", "<"], ["GT", ">"], ["LTE", "<="], ["GTE", ">="], | 
| -    ["INSTANCEOF", "instanceof"], ["IN", "in"], ["NOT", "!"], ["BIT_NOT", "~"], ["DELETE", "delete"], ["TYPEOF", "typeof"], ["VOID", "void"], | 
| -    ["BREAK", "break"], ["CASE", "case"], ["CATCH", "catch"], ["CONTINUE", "continue"], ["DEBUGGER", "debugger"], ["DEFAULT", "default"], ["DO", "do"], ["ELSE", "else"], ["FINALLY", "finally"], | 
| -    ["FOR", "for"], ["FUNCTION", "function"], ["IF", "if"], ["NEW", "new"], ["RETURN", "return"], ["SWITCH", "switch"], ["THIS", "this"], ["THROW", "throw"], ["TRY", "try"], ["VAR", "var"], | 
| -    ["WHILE", "while"], ["WITH", "with"], ["NULL_LITERAL", "null"], ["TRUE_LITERAL", "true"], ["FALSE_LITERAL", "false"], ["NUMBER"], ["STRING"], ["IDENTIFIER"], ["CONST", "const"] | 
| -]; | 
| - | 
| -var Tokens = {}; | 
| -for (var i = 0; i < tokens.length; ++i) | 
| -    Tokens[tokens[i][0]] = i; | 
| - | 
| -var TokensByValue = {}; | 
| -for (var i = 0; i < tokens.length; ++i) { | 
| -    if (tokens[i][1]) | 
| -        TokensByValue[tokens[i][1]] = i; | 
| -} | 
| - | 
| -var TokensByType = { | 
| -    "eof": Tokens.EOS, | 
| -    "name": Tokens.IDENTIFIER, | 
| -    "num": Tokens.NUMBER, | 
| -    "regexp": Tokens.DIV, | 
| -    "string": Tokens.STRING | 
| -}; | 
| - | 
| -function Tokenizer(content) | 
| -{ | 
| -    this._readNextToken = parse.tokenizer(content); | 
| -    this._state = this._readNextToken.context(); | 
| -} | 
| - | 
| -Tokenizer.prototype = { | 
| -    content: function() | 
| -    { | 
| -        return this._state.text; | 
| -    }, | 
| - | 
| -    next: function(forceRegexp) | 
| -    { | 
| -        var uglifyToken = this._readNextToken(forceRegexp); | 
| -        uglifyToken.endPos = this._state.pos; | 
| -        uglifyToken.endLine = this._state.line; | 
| -        uglifyToken.token = this._convertUglifyToken(uglifyToken); | 
| -        return uglifyToken; | 
| -    }, | 
| - | 
| -    _convertUglifyToken: function(uglifyToken) | 
| -    { | 
| -        var token = TokensByType[uglifyToken.type]; | 
| -        if (typeof token === "number") | 
| -            return token; | 
| -        token = TokensByValue[uglifyToken.value]; | 
| -        if (typeof token === "number") | 
| -            return token; | 
| -        throw "Unknown token type " + uglifyToken.type; | 
| -    } | 
| -} | 
| - | 
| -function JavaScriptFormatter(tokenizer, builder) | 
| +/** | 
| + * @constructor | 
| + * @param {FormatterWorker.JavaScriptTokenizer} tokenizer | 
| + * @param {FormatterWorker.JavaScriptFormattedContentBuilder} builder | 
| + */ | 
| +FormatterWorker.JavaScriptFormatter = function(tokenizer, builder) | 
| { | 
| this._tokenizer = tokenizer; | 
| this._builder = builder; | 
| @@ -236,21 +41,27 @@ function JavaScriptFormatter(tokenizer, builder) | 
| this._nextToken = this._tokenizer.next(); | 
| } | 
|  | 
| -JavaScriptFormatter.prototype = { | 
| +FormatterWorker.JavaScriptFormatter.prototype = { | 
| format: function() | 
| { | 
| -        this._parseSourceElements(Tokens.EOS); | 
| -        this._consume(Tokens.EOS); | 
| +        this._parseSourceElements(FormatterWorker.JavaScriptTokens.EOS); | 
| +        this._consume(FormatterWorker.JavaScriptTokens.EOS); | 
| }, | 
|  | 
| +    /** | 
| +     * @return {string} | 
| +     */ | 
| _peek: function() | 
| { | 
| return this._nextToken.token; | 
| }, | 
|  | 
| +    /** | 
| +     * @return {string} | 
| +     */ | 
| _next: function() | 
| { | 
| -        if (this._token && this._token.token === Tokens.EOS) | 
| +        if (this._token && this._token.token === FormatterWorker.JavaScriptTokens.EOS) | 
| throw "Unexpected EOS token"; | 
|  | 
| this._builder.addToken(this._nextToken); | 
| @@ -260,6 +71,9 @@ JavaScriptFormatter.prototype = { | 
| return this._token.token; | 
| }, | 
|  | 
| +    /** | 
| +     * @param {string} token | 
| +     */ | 
| _consume: function(token) | 
| { | 
| var next = this._next(); | 
| @@ -267,6 +81,9 @@ JavaScriptFormatter.prototype = { | 
| throw "Unexpected token in consume: expected " + token + ", actual " + next; | 
| }, | 
|  | 
| +    /** | 
| +     * @param {string} token | 
| +     */ | 
| _expect: function(token) | 
| { | 
| var next = this._next(); | 
| @@ -276,15 +93,21 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _expectSemicolon: function() | 
| { | 
| -        if (this._peek() === Tokens.SEMICOLON) | 
| -            this._consume(Tokens.SEMICOLON); | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.SEMICOLON) | 
| +            this._consume(FormatterWorker.JavaScriptTokens.SEMICOLON); | 
| }, | 
|  | 
| +    /** | 
| +     * @return {boolean} | 
| +     */ | 
| _hasLineTerminatorBeforeNext: function() | 
| { | 
| return this._nextToken.nlb; | 
| }, | 
|  | 
| +    /** | 
| +     * @param {string} endToken | 
| +     */ | 
| _parseSourceElements: function(endToken) | 
| { | 
| while (this._peek() !== endToken) { | 
| @@ -295,7 +118,7 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseStatementOrBlock: function() | 
| { | 
| -        if (this._peek() === Tokens.LBRACE) { | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.LBRACE) { | 
| this._builder.addSpace(); | 
| this._parseBlock(); | 
| return true; | 
| @@ -310,38 +133,38 @@ JavaScriptFormatter.prototype = { | 
| _parseStatement: function() | 
| { | 
| switch (this._peek()) { | 
| -        case Tokens.LBRACE: | 
| +        case FormatterWorker.JavaScriptTokens.LBRACE: | 
| return this._parseBlock(); | 
| -        case Tokens.CONST: | 
| -        case Tokens.VAR: | 
| +        case FormatterWorker.JavaScriptTokens.CONST: | 
| +        case FormatterWorker.JavaScriptTokens.VAR: | 
| return this._parseVariableStatement(); | 
| -        case Tokens.SEMICOLON: | 
| +        case FormatterWorker.JavaScriptTokens.SEMICOLON: | 
| return this._next(); | 
| -        case Tokens.IF: | 
| +        case FormatterWorker.JavaScriptTokens.IF: | 
| return this._parseIfStatement(); | 
| -        case Tokens.DO: | 
| +        case FormatterWorker.JavaScriptTokens.DO: | 
| return this._parseDoWhileStatement(); | 
| -        case Tokens.WHILE: | 
| +        case FormatterWorker.JavaScriptTokens.WHILE: | 
| return this._parseWhileStatement(); | 
| -        case Tokens.FOR: | 
| +        case FormatterWorker.JavaScriptTokens.FOR: | 
| return this._parseForStatement(); | 
| -        case Tokens.CONTINUE: | 
| +        case FormatterWorker.JavaScriptTokens.CONTINUE: | 
| return this._parseContinueStatement(); | 
| -        case Tokens.BREAK: | 
| +        case FormatterWorker.JavaScriptTokens.BREAK: | 
| return this._parseBreakStatement(); | 
| -        case Tokens.RETURN: | 
| +        case FormatterWorker.JavaScriptTokens.RETURN: | 
| return this._parseReturnStatement(); | 
| -        case Tokens.WITH: | 
| +        case FormatterWorker.JavaScriptTokens.WITH: | 
| return this._parseWithStatement(); | 
| -        case Tokens.SWITCH: | 
| +        case FormatterWorker.JavaScriptTokens.SWITCH: | 
| return this._parseSwitchStatement(); | 
| -        case Tokens.THROW: | 
| +        case FormatterWorker.JavaScriptTokens.THROW: | 
| return this._parseThrowStatement(); | 
| -        case Tokens.TRY: | 
| +        case FormatterWorker.JavaScriptTokens.TRY: | 
| return this._parseTryStatement(); | 
| -        case Tokens.FUNCTION: | 
| +        case FormatterWorker.JavaScriptTokens.FUNCTION: | 
| return this._parseFunctionDeclaration(); | 
| -        case Tokens.DEBUGGER: | 
| +        case FormatterWorker.JavaScriptTokens.DEBUGGER: | 
| return this._parseDebuggerStatement(); | 
| default: | 
| return this._parseExpressionOrLabelledStatement(); | 
| @@ -350,23 +173,23 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseFunctionDeclaration: function() | 
| { | 
| -        this._expect(Tokens.FUNCTION); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.FUNCTION); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.IDENTIFIER); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| this._parseFunctionLiteral() | 
| }, | 
|  | 
| _parseBlock: function() | 
| { | 
| -        this._expect(Tokens.LBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LBRACE); | 
| this._builder.addNewLine(); | 
| this._builder.increaseNestingLevel(); | 
| -        while (this._peek() !== Tokens.RBRACE) { | 
| +        while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) { | 
| this._parseStatement(); | 
| this._builder.addNewLine(); | 
| } | 
| this._builder.decreaseNestingLevel(); | 
| -        this._expect(Tokens.RBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RBRACE); | 
| }, | 
|  | 
| _parseVariableStatement: function() | 
| @@ -377,34 +200,34 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseVariableDeclarations: function() | 
| { | 
| -        if (this._peek() === Tokens.VAR) | 
| -            this._consume(Tokens.VAR); | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.VAR) | 
| +            this._consume(FormatterWorker.JavaScriptTokens.VAR); | 
| else | 
| -            this._consume(Tokens.CONST) | 
| +            this._consume(FormatterWorker.JavaScriptTokens.CONST) | 
| this._builder.addSpace(); | 
|  | 
| var isFirstVariable = true; | 
| do { | 
| if (!isFirstVariable) { | 
| -                this._consume(Tokens.COMMA); | 
| +                this._consume(FormatterWorker.JavaScriptTokens.COMMA); | 
| this._builder.addSpace(); | 
| } | 
| isFirstVariable = false; | 
| -            this._expect(Tokens.IDENTIFIER); | 
| -            if (this._peek() === Tokens.ASSIGN) { | 
| +            this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| +            if (this._peek() === FormatterWorker.JavaScriptTokens.ASSIGN) { | 
| this._builder.addSpace(); | 
| -                this._consume(Tokens.ASSIGN); | 
| +                this._consume(FormatterWorker.JavaScriptTokens.ASSIGN); | 
| this._builder.addSpace(); | 
| this._parseAssignmentExpression(); | 
| } | 
| -        } while (this._peek() === Tokens.COMMA); | 
| +        } while (this._peek() === FormatterWorker.JavaScriptTokens.COMMA); | 
| }, | 
|  | 
| _parseExpressionOrLabelledStatement: function() | 
| { | 
| this._parseExpression(); | 
| -        if (this._peek() === Tokens.COLON) { | 
| -            this._expect(Tokens.COLON); | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.COLON) { | 
| +            this._expect(FormatterWorker.JavaScriptTokens.COLON); | 
| this._builder.addSpace(); | 
| this._parseStatement(); | 
| } | 
| @@ -413,21 +236,21 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseIfStatement: function() | 
| { | 
| -        this._expect(Tokens.IF); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.IF); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.LPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| this._parseExpression(); | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
|  | 
| var isBlock = this._parseStatementOrBlock(); | 
| -        if (this._peek() === Tokens.ELSE) { | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.ELSE) { | 
| if (isBlock) | 
| this._builder.addSpace(); | 
| else | 
| this._builder.addNewLine(); | 
| this._next(); | 
|  | 
| -            if (this._peek() === Tokens.IF) { | 
| +            if (this._peek() === FormatterWorker.JavaScriptTokens.IF) { | 
| this._builder.addSpace(); | 
| this._parseStatement(); | 
| } else | 
| @@ -437,31 +260,31 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseContinueStatement: function() | 
| { | 
| -        this._expect(Tokens.CONTINUE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.CONTINUE); | 
| var token = this._peek(); | 
| -        if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) { | 
| +        if (!this._hasLineTerminatorBeforeNext() && token !== FormatterWorker.JavaScriptTokens.SEMICOLON && token !== FormatterWorker.JavaScriptTokens.RBRACE && token !== FormatterWorker.JavaScriptTokens.EOS) { | 
| this._builder.addSpace(); | 
| -            this._expect(Tokens.IDENTIFIER); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| } | 
| this._expectSemicolon(); | 
| }, | 
|  | 
| _parseBreakStatement: function() | 
| { | 
| -        this._expect(Tokens.BREAK); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.BREAK); | 
| var token = this._peek(); | 
| -        if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) { | 
| +        if (!this._hasLineTerminatorBeforeNext() && token !== FormatterWorker.JavaScriptTokens.SEMICOLON && token !== FormatterWorker.JavaScriptTokens.RBRACE && token !== FormatterWorker.JavaScriptTokens.EOS) { | 
| this._builder.addSpace(); | 
| -            this._expect(Tokens.IDENTIFIER); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| } | 
| this._expectSemicolon(); | 
| }, | 
|  | 
| _parseReturnStatement: function() | 
| { | 
| -        this._expect(Tokens.RETURN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RETURN); | 
| var token = this._peek(); | 
| -        if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) { | 
| +        if (!this._hasLineTerminatorBeforeNext() && token !== FormatterWorker.JavaScriptTokens.SEMICOLON && token !== FormatterWorker.JavaScriptTokens.RBRACE && token !== FormatterWorker.JavaScriptTokens.EOS) { | 
| this._builder.addSpace(); | 
| this._parseExpression(); | 
| } | 
| @@ -470,27 +293,27 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseWithStatement: function() | 
| { | 
| -        this._expect(Tokens.WITH); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.WITH); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.LPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| this._parseExpression(); | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| this._parseStatementOrBlock(); | 
| }, | 
|  | 
| _parseCaseClause: function() | 
| { | 
| -        if (this._peek() === Tokens.CASE) { | 
| -            this._expect(Tokens.CASE); | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.CASE) { | 
| +            this._expect(FormatterWorker.JavaScriptTokens.CASE); | 
| this._builder.addSpace(); | 
| this._parseExpression(); | 
| } else | 
| -            this._expect(Tokens.DEFAULT); | 
| -        this._expect(Tokens.COLON); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.DEFAULT); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.COLON); | 
| this._builder.addNewLine(); | 
|  | 
| this._builder.increaseNestingLevel(); | 
| -        while (this._peek() !== Tokens.CASE && this._peek() !== Tokens.DEFAULT && this._peek() !== Tokens.RBRACE) { | 
| +        while (this._peek() !== FormatterWorker.JavaScriptTokens.CASE && this._peek() !== FormatterWorker.JavaScriptTokens.DEFAULT && this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) { | 
| this._parseStatement(); | 
| this._builder.addNewLine(); | 
| } | 
| @@ -499,25 +322,25 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseSwitchStatement: function() | 
| { | 
| -        this._expect(Tokens.SWITCH); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.SWITCH); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.LPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| this._parseExpression(); | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| this._builder.addSpace(); | 
|  | 
| -        this._expect(Tokens.LBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LBRACE); | 
| this._builder.addNewLine(); | 
| this._builder.increaseNestingLevel(); | 
| -        while (this._peek() !== Tokens.RBRACE) | 
| +        while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) | 
| this._parseCaseClause(); | 
| this._builder.decreaseNestingLevel(); | 
| -        this._expect(Tokens.RBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RBRACE); | 
| }, | 
|  | 
| _parseThrowStatement: function() | 
| { | 
| -        this._expect(Tokens.THROW); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.THROW); | 
| this._builder.addSpace(); | 
| this._parseExpression(); | 
| this._expectSemicolon(); | 
| @@ -525,25 +348,25 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseTryStatement: function() | 
| { | 
| -        this._expect(Tokens.TRY); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.TRY); | 
| this._builder.addSpace(); | 
| this._parseBlock(); | 
|  | 
| var token = this._peek(); | 
| -        if (token === Tokens.CATCH) { | 
| +        if (token === FormatterWorker.JavaScriptTokens.CATCH) { | 
| this._builder.addSpace(); | 
| -            this._consume(Tokens.CATCH); | 
| +            this._consume(FormatterWorker.JavaScriptTokens.CATCH); | 
| this._builder.addSpace(); | 
| -            this._expect(Tokens.LPAREN); | 
| -            this._expect(Tokens.IDENTIFIER); | 
| -            this._expect(Tokens.RPAREN); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| this._builder.addSpace(); | 
| this._parseBlock(); | 
| token = this._peek(); | 
| } | 
|  | 
| -        if (token === Tokens.FINALLY) { | 
| -            this._consume(Tokens.FINALLY); | 
| +        if (token === FormatterWorker.JavaScriptTokens.FINALLY) { | 
| +            this._consume(FormatterWorker.JavaScriptTokens.FINALLY); | 
| this._builder.addSpace(); | 
| this._parseBlock(); | 
| } | 
| @@ -551,41 +374,41 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseDoWhileStatement: function() | 
| { | 
| -        this._expect(Tokens.DO); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.DO); | 
| var isBlock = this._parseStatementOrBlock(); | 
| if (isBlock) | 
| this._builder.addSpace(); | 
| else | 
| this._builder.addNewLine(); | 
| -        this._expect(Tokens.WHILE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.WHILE); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.LPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| this._parseExpression(); | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| this._expectSemicolon(); | 
| }, | 
|  | 
| _parseWhileStatement: function() | 
| { | 
| -        this._expect(Tokens.WHILE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.WHILE); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.LPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| this._parseExpression(); | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| this._parseStatementOrBlock(); | 
| }, | 
|  | 
| _parseForStatement: function() | 
| { | 
| -        this._expect(Tokens.FOR); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.FOR); | 
| this._builder.addSpace(); | 
| -        this._expect(Tokens.LPAREN); | 
| -        if (this._peek() !== Tokens.SEMICOLON) { | 
| -            if (this._peek() === Tokens.VAR || this._peek() === Tokens.CONST) { | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| +        if (this._peek() !== FormatterWorker.JavaScriptTokens.SEMICOLON) { | 
| +            if (this._peek() === FormatterWorker.JavaScriptTokens.VAR || this._peek() === FormatterWorker.JavaScriptTokens.CONST) { | 
| this._parseVariableDeclarations(); | 
| -                if (this._peek() === Tokens.IN) { | 
| +                if (this._peek() === FormatterWorker.JavaScriptTokens.IN) { | 
| this._builder.addSpace(); | 
| -                    this._consume(Tokens.IN); | 
| +                    this._consume(FormatterWorker.JavaScriptTokens.IN); | 
| this._builder.addSpace(); | 
| this._parseExpression(); | 
| } | 
| @@ -593,17 +416,17 @@ JavaScriptFormatter.prototype = { | 
| this._parseExpression(); | 
| } | 
|  | 
| -        if (this._peek() !== Tokens.RPAREN) { | 
| -            this._expect(Tokens.SEMICOLON); | 
| +        if (this._peek() !== FormatterWorker.JavaScriptTokens.RPAREN) { | 
| +            this._expect(FormatterWorker.JavaScriptTokens.SEMICOLON); | 
| this._builder.addSpace(); | 
| -            if (this._peek() !== Tokens.SEMICOLON) | 
| +            if (this._peek() !== FormatterWorker.JavaScriptTokens.SEMICOLON) | 
| this._parseExpression(); | 
| -            this._expect(Tokens.SEMICOLON); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.SEMICOLON); | 
| this._builder.addSpace(); | 
| -            if (this._peek() !== Tokens.RPAREN) | 
| +            if (this._peek() !== FormatterWorker.JavaScriptTokens.RPAREN) | 
| this._parseExpression(); | 
| } | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
|  | 
| this._parseStatementOrBlock(); | 
| }, | 
| @@ -611,8 +434,8 @@ JavaScriptFormatter.prototype = { | 
| _parseExpression: function() | 
| { | 
| this._parseAssignmentExpression(); | 
| -        while (this._peek() === Tokens.COMMA) { | 
| -            this._expect(Tokens.COMMA); | 
| +        while (this._peek() === FormatterWorker.JavaScriptTokens.COMMA) { | 
| +            this._expect(FormatterWorker.JavaScriptTokens.COMMA); | 
| this._builder.addSpace(); | 
| this._parseAssignmentExpression(); | 
| } | 
| @@ -622,7 +445,7 @@ JavaScriptFormatter.prototype = { | 
| { | 
| this._parseConditionalExpression(); | 
| var token = this._peek(); | 
| -        if (Tokens.ASSIGN <= token && token <= Tokens.ASSIGN_MOD) { | 
| +        if (FormatterWorker.JavaScriptTokens.ASSIGN <= token && token <= FormatterWorker.JavaScriptTokens.ASSIGN_MOD) { | 
| this._builder.addSpace(); | 
| this._next(); | 
| this._builder.addSpace(); | 
| @@ -633,13 +456,13 @@ JavaScriptFormatter.prototype = { | 
| _parseConditionalExpression: function() | 
| { | 
| this._parseBinaryExpression(); | 
| -        if (this._peek() === Tokens.CONDITIONAL) { | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.CONDITIONAL) { | 
| this._builder.addSpace(); | 
| -            this._consume(Tokens.CONDITIONAL); | 
| +            this._consume(FormatterWorker.JavaScriptTokens.CONDITIONAL); | 
| this._builder.addSpace(); | 
| this._parseAssignmentExpression(); | 
| this._builder.addSpace(); | 
| -            this._expect(Tokens.COLON); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.COLON); | 
| this._builder.addSpace(); | 
| this._parseAssignmentExpression(); | 
| } | 
| @@ -649,7 +472,7 @@ JavaScriptFormatter.prototype = { | 
| { | 
| this._parseUnaryExpression(); | 
| var token = this._peek(); | 
| -        while (Tokens.OR <= token && token <= Tokens.IN) { | 
| +        while (FormatterWorker.JavaScriptTokens.OR <= token && token <= FormatterWorker.JavaScriptTokens.IN) { | 
| this._builder.addSpace(); | 
| this._next(); | 
| this._builder.addSpace(); | 
| @@ -661,9 +484,9 @@ JavaScriptFormatter.prototype = { | 
| _parseUnaryExpression: function() | 
| { | 
| var token = this._peek(); | 
| -        if ((Tokens.NOT <= token && token <= Tokens.VOID) || token === Tokens.ADD || token === Tokens.SUB || token ===  Tokens.INC || token === Tokens.DEC) { | 
| +        if ((FormatterWorker.JavaScriptTokens.NOT <= token && token <= FormatterWorker.JavaScriptTokens.VOID) || token === FormatterWorker.JavaScriptTokens.ADD || token === FormatterWorker.JavaScriptTokens.SUB || token ===  FormatterWorker.JavaScriptTokens.INC || token === FormatterWorker.JavaScriptTokens.DEC) { | 
| this._next(); | 
| -            if (token === Tokens.DELETE || token === Tokens.TYPEOF || token === Tokens.VOID) | 
| +            if (token === FormatterWorker.JavaScriptTokens.DELETE || token === FormatterWorker.JavaScriptTokens.TYPEOF || token === FormatterWorker.JavaScriptTokens.VOID) | 
| this._builder.addSpace(); | 
| this._parseUnaryExpression(); | 
| } else | 
| @@ -674,32 +497,32 @@ JavaScriptFormatter.prototype = { | 
| { | 
| this._parseLeftHandSideExpression(); | 
| var token = this._peek(); | 
| -        if (!this._hasLineTerminatorBeforeNext() && (token === Tokens.INC || token === Tokens.DEC)) | 
| +        if (!this._hasLineTerminatorBeforeNext() && (token === FormatterWorker.JavaScriptTokens.INC || token === FormatterWorker.JavaScriptTokens.DEC)) | 
| this._next(); | 
| }, | 
|  | 
| _parseLeftHandSideExpression: function() | 
| { | 
| -        if (this._peek() === Tokens.NEW) | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.NEW) | 
| this._parseNewExpression(); | 
| else | 
| this._parseMemberExpression(); | 
|  | 
| while (true) { | 
| switch (this._peek()) { | 
| -            case Tokens.LBRACK: | 
| -                this._consume(Tokens.LBRACK); | 
| +            case FormatterWorker.JavaScriptTokens.LBRACK: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.LBRACK); | 
| this._parseExpression(); | 
| -                this._expect(Tokens.RBRACK); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.RBRACK); | 
| break; | 
|  | 
| -            case Tokens.LPAREN: | 
| +            case FormatterWorker.JavaScriptTokens.LPAREN: | 
| this._parseArguments(); | 
| break; | 
|  | 
| -            case Tokens.PERIOD: | 
| -                this._consume(Tokens.PERIOD); | 
| -                this._expect(Tokens.IDENTIFIER); | 
| +            case FormatterWorker.JavaScriptTokens.PERIOD: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.PERIOD); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| break; | 
|  | 
| default: | 
| @@ -710,9 +533,9 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseNewExpression: function() | 
| { | 
| -        this._expect(Tokens.NEW); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.NEW); | 
| this._builder.addSpace(); | 
| -        if (this._peek() === Tokens.NEW) | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.NEW) | 
| this._parseNewExpression(); | 
| else | 
| this._parseMemberExpression(); | 
| @@ -720,11 +543,11 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseMemberExpression: function() | 
| { | 
| -        if (this._peek() === Tokens.FUNCTION) { | 
| -            this._expect(Tokens.FUNCTION); | 
| -            if (this._peek() === Tokens.IDENTIFIER) { | 
| +        if (this._peek() === FormatterWorker.JavaScriptTokens.FUNCTION) { | 
| +            this._expect(FormatterWorker.JavaScriptTokens.FUNCTION); | 
| +            if (this._peek() === FormatterWorker.JavaScriptTokens.IDENTIFIER) { | 
| this._builder.addSpace(); | 
| -                this._expect(Tokens.IDENTIFIER); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| } | 
| this._parseFunctionLiteral(); | 
| } else | 
| @@ -732,18 +555,18 @@ JavaScriptFormatter.prototype = { | 
|  | 
| while (true) { | 
| switch (this._peek()) { | 
| -            case Tokens.LBRACK: | 
| -                this._consume(Tokens.LBRACK); | 
| +            case FormatterWorker.JavaScriptTokens.LBRACK: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.LBRACK); | 
| this._parseExpression(); | 
| -                this._expect(Tokens.RBRACK); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.RBRACK); | 
| break; | 
|  | 
| -            case Tokens.PERIOD: | 
| -                this._consume(Tokens.PERIOD); | 
| -                this._expect(Tokens.IDENTIFIER); | 
| +            case FormatterWorker.JavaScriptTokens.PERIOD: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.PERIOD); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| break; | 
|  | 
| -            case Tokens.LPAREN: | 
| +            case FormatterWorker.JavaScriptTokens.LPAREN: | 
| this._parseArguments(); | 
| break; | 
|  | 
| @@ -755,39 +578,39 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseDebuggerStatement: function() | 
| { | 
| -        this._expect(Tokens.DEBUGGER); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.DEBUGGER); | 
| this._expectSemicolon(); | 
| }, | 
|  | 
| _parsePrimaryExpression: function() | 
| { | 
| switch (this._peek()) { | 
| -        case Tokens.THIS: | 
| -            return this._consume(Tokens.THIS); | 
| -        case Tokens.NULL_LITERAL: | 
| -            return this._consume(Tokens.NULL_LITERAL); | 
| -        case Tokens.TRUE_LITERAL: | 
| -            return this._consume(Tokens.TRUE_LITERAL); | 
| -        case Tokens.FALSE_LITERAL: | 
| -            return this._consume(Tokens.FALSE_LITERAL); | 
| -        case Tokens.IDENTIFIER: | 
| -            return this._consume(Tokens.IDENTIFIER); | 
| -        case Tokens.NUMBER: | 
| -            return this._consume(Tokens.NUMBER); | 
| -        case Tokens.STRING: | 
| -            return this._consume(Tokens.STRING); | 
| -        case Tokens.ASSIGN_DIV: | 
| +        case FormatterWorker.JavaScriptTokens.THIS: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.THIS); | 
| +        case FormatterWorker.JavaScriptTokens.NULL_LITERAL: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.NULL_LITERAL); | 
| +        case FormatterWorker.JavaScriptTokens.TRUE_LITERAL: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.TRUE_LITERAL); | 
| +        case FormatterWorker.JavaScriptTokens.FALSE_LITERAL: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.FALSE_LITERAL); | 
| +        case FormatterWorker.JavaScriptTokens.IDENTIFIER: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| +        case FormatterWorker.JavaScriptTokens.NUMBER: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.NUMBER); | 
| +        case FormatterWorker.JavaScriptTokens.STRING: | 
| +            return this._consume(FormatterWorker.JavaScriptTokens.STRING); | 
| +        case FormatterWorker.JavaScriptTokens.ASSIGN_DIV: | 
| return this._parseRegExpLiteral(); | 
| -        case Tokens.DIV: | 
| +        case FormatterWorker.JavaScriptTokens.DIV: | 
| return this._parseRegExpLiteral(); | 
| -        case Tokens.LBRACK: | 
| +        case FormatterWorker.JavaScriptTokens.LBRACK: | 
| return this._parseArrayLiteral(); | 
| -        case Tokens.LBRACE: | 
| +        case FormatterWorker.JavaScriptTokens.LBRACE: | 
| return this._parseObjectLiteral(); | 
| -        case Tokens.LPAREN: | 
| -            this._consume(Tokens.LPAREN); | 
| +        case FormatterWorker.JavaScriptTokens.LPAREN: | 
| +            this._consume(FormatterWorker.JavaScriptTokens.LPAREN); | 
| this._parseExpression(); | 
| -            this._expect(Tokens.RPAREN); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| return; | 
| default: | 
| return this._next(); | 
| @@ -796,26 +619,26 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseArrayLiteral: function() | 
| { | 
| -        this._expect(Tokens.LBRACK); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LBRACK); | 
| this._builder.increaseNestingLevel(); | 
| -        while (this._peek() !== Tokens.RBRACK) { | 
| -            if (this._peek() !== Tokens.COMMA) | 
| +        while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACK) { | 
| +            if (this._peek() !== FormatterWorker.JavaScriptTokens.COMMA) | 
| this._parseAssignmentExpression(); | 
| -            if (this._peek() !== Tokens.RBRACK) { | 
| -                this._expect(Tokens.COMMA); | 
| +            if (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACK) { | 
| +                this._expect(FormatterWorker.JavaScriptTokens.COMMA); | 
| this._builder.addSpace(); | 
| } | 
| } | 
| this._builder.decreaseNestingLevel(); | 
| -        this._expect(Tokens.RBRACK); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RBRACK); | 
| }, | 
|  | 
| _parseObjectLiteralGetSet: function() | 
| { | 
| var token = this._peek(); | 
| -        if (token === Tokens.IDENTIFIER || token === Tokens.NUMBER || token === Tokens.STRING || | 
| -            Tokens.DELETE <= token && token <= Tokens.FALSE_LITERAL || | 
| -            token === Tokens.INSTANCEOF || token === Tokens.IN || token === Tokens.CONST) { | 
| +        if (token === FormatterWorker.JavaScriptTokens.IDENTIFIER || token === FormatterWorker.JavaScriptTokens.NUMBER || token === FormatterWorker.JavaScriptTokens.STRING || | 
| +            FormatterWorker.JavaScriptTokens.DELETE <= token && token <= FormatterWorker.JavaScriptTokens.FALSE_LITERAL || | 
| +            token === FormatterWorker.JavaScriptTokens.INSTANCEOF || token === FormatterWorker.JavaScriptTokens.IN || token === FormatterWorker.JavaScriptTokens.CONST) { | 
| this._next(); | 
| this._parseFunctionLiteral(); | 
| } | 
| @@ -823,46 +646,46 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseObjectLiteral: function() | 
| { | 
| -        this._expect(Tokens.LBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LBRACE); | 
| this._builder.increaseNestingLevel(); | 
| -        while (this._peek() !== Tokens.RBRACE) { | 
| +        while (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) { | 
| var token = this._peek(); | 
| switch (token) { | 
| -            case Tokens.IDENTIFIER: | 
| -                this._consume(Tokens.IDENTIFIER); | 
| +            case FormatterWorker.JavaScriptTokens.IDENTIFIER: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| var name = this._token.value; | 
| -                if ((name === "get" || name === "set") && this._peek() !== Tokens.COLON) { | 
| +                if ((name === "get" || name === "set") && this._peek() !== FormatterWorker.JavaScriptTokens.COLON) { | 
| this._builder.addSpace(); | 
| this._parseObjectLiteralGetSet(); | 
| -                    if (this._peek() !== Tokens.RBRACE) { | 
| -                        this._expect(Tokens.COMMA); | 
| +                    if (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) { | 
| +                        this._expect(FormatterWorker.JavaScriptTokens.COMMA); | 
| } | 
| continue; | 
| } | 
| break; | 
|  | 
| -            case Tokens.STRING: | 
| -                this._consume(Tokens.STRING); | 
| +            case FormatterWorker.JavaScriptTokens.STRING: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.STRING); | 
| break; | 
|  | 
| -            case Tokens.NUMBER: | 
| -                this._consume(Tokens.NUMBER); | 
| +            case FormatterWorker.JavaScriptTokens.NUMBER: | 
| +                this._consume(FormatterWorker.JavaScriptTokens.NUMBER); | 
| break; | 
|  | 
| default: | 
| this._next(); | 
| } | 
|  | 
| -            this._expect(Tokens.COLON); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.COLON); | 
| this._builder.addSpace(); | 
| this._parseAssignmentExpression(); | 
| -            if (this._peek() !== Tokens.RBRACE) { | 
| -                this._expect(Tokens.COMMA); | 
| +            if (this._peek() !== FormatterWorker.JavaScriptTokens.RBRACE) { | 
| +                this._expect(FormatterWorker.JavaScriptTokens.COMMA); | 
| } | 
| } | 
| this._builder.decreaseNestingLevel(); | 
|  | 
| -        this._expect(Tokens.RBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RBRACE); | 
| }, | 
|  | 
| _parseRegExpLiteral: function() | 
| @@ -877,39 +700,325 @@ JavaScriptFormatter.prototype = { | 
|  | 
| _parseArguments: function() | 
| { | 
| -        this._expect(Tokens.LPAREN); | 
| -        var done = (this._peek() === Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| +        var done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN); | 
| while (!done) { | 
| this._parseAssignmentExpression(); | 
| -            done = (this._peek() === Tokens.RPAREN); | 
| +            done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN); | 
| if (!done) { | 
| -                this._expect(Tokens.COMMA); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.COMMA); | 
| this._builder.addSpace(); | 
| } | 
| } | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| }, | 
|  | 
| _parseFunctionLiteral: function() | 
| { | 
| -        this._expect(Tokens.LPAREN); | 
| -        var done = (this._peek() === Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LPAREN); | 
| +        var done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN); | 
| while (!done) { | 
| -            this._expect(Tokens.IDENTIFIER); | 
| -            done = (this._peek() === Tokens.RPAREN); | 
| +            this._expect(FormatterWorker.JavaScriptTokens.IDENTIFIER); | 
| +            done = (this._peek() === FormatterWorker.JavaScriptTokens.RPAREN); | 
| if (!done) { | 
| -                this._expect(Tokens.COMMA); | 
| +                this._expect(FormatterWorker.JavaScriptTokens.COMMA); | 
| this._builder.addSpace(); | 
| } | 
| } | 
| -        this._expect(Tokens.RPAREN); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RPAREN); | 
| this._builder.addSpace(); | 
|  | 
| -        this._expect(Tokens.LBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.LBRACE); | 
| this._builder.addNewLine(); | 
| this._builder.increaseNestingLevel(); | 
| -        this._parseSourceElements(Tokens.RBRACE); | 
| +        this._parseSourceElements(FormatterWorker.JavaScriptTokens.RBRACE); | 
| this._builder.decreaseNestingLevel(); | 
| -        this._expect(Tokens.RBRACE); | 
| +        this._expect(FormatterWorker.JavaScriptTokens.RBRACE); | 
| +    } | 
| +} | 
| + | 
| +/** | 
| + * @constructor | 
| + * @param {string} content | 
| + * @param {{original: Array.<number>, formatted: Array.<number>}} mapping | 
| + * @param {number} originalOffset | 
| + * @param {number} formattedOffset | 
| + * @param {string} indentString | 
| + */ | 
| +FormatterWorker.JavaScriptFormattedContentBuilder = function(content, mapping, originalOffset, formattedOffset, indentString) | 
| +{ | 
| +    this._originalContent = content; | 
| +    this._originalOffset = originalOffset; | 
| +    this._lastOriginalPosition = 0; | 
| + | 
| +    this._formattedContent = []; | 
| +    this._formattedContentLength = 0; | 
| +    this._formattedOffset = formattedOffset; | 
| +    this._lastFormattedPosition = 0; | 
| + | 
| +    this._mapping = mapping; | 
| + | 
| +    this._lineNumber = 0; | 
| +    this._nestingLevel = 0; | 
| +    this._indentString = indentString; | 
| +    this._cachedIndents = {}; | 
| +} | 
| + | 
| +FormatterWorker.JavaScriptFormattedContentBuilder.prototype = { | 
| +    /** | 
| +     * @param {{comments_before: Array.<string>, line: number, pos: number, endLine: number, nlb: boolean}} token | 
| +     */ | 
| +    addToken: function(token) | 
| +    { | 
| +        for (var i = 0; i < token.comments_before.length; ++i) | 
| +            this._addComment(token.comments_before[i]); | 
| + | 
| +        while (this._lineNumber < token.line) { | 
| +            this._addText("\n"); | 
| +            this._addIndent(); | 
| +            this._needNewLine = false; | 
| +            this._lineNumber += 1; | 
| +        } | 
| + | 
| +        if (this._needNewLine) { | 
| +            this._addText("\n"); | 
| +            this._addIndent(); | 
| +            this._needNewLine = false; | 
| +        } | 
| + | 
| +        this._addMappingIfNeeded(token.pos); | 
| +        this._addText(this._originalContent.substring(token.pos, token.endPos)); | 
| +        this._lineNumber = token.endLine; | 
| +    }, | 
| + | 
| +    addSpace: function() | 
| +    { | 
| +        this._addText(" "); | 
| +    }, | 
| + | 
| +    addNewLine: function() | 
| +    { | 
| +        this._needNewLine = true; | 
| +    }, | 
| + | 
| +    increaseNestingLevel: function() | 
| +    { | 
| +        this._nestingLevel += 1; | 
| +    }, | 
| + | 
| +    decreaseNestingLevel: function() | 
| +    { | 
| +        this._nestingLevel -= 1; | 
| +    }, | 
| + | 
| +    /** | 
| +     * @return {string} | 
| +     */ | 
| +    content: function() | 
| +    { | 
| +        return this._formattedContent.join(""); | 
| +    }, | 
| + | 
| +    _addIndent: function() | 
| +    { | 
| +        if (this._cachedIndents[this._nestingLevel]) { | 
| +            this._addText(this._cachedIndents[this._nestingLevel]); | 
| +            return; | 
| +        } | 
| + | 
| +        var fullIndent = ""; | 
| +        for (var i = 0; i < this._nestingLevel; ++i) | 
| +            fullIndent += this._indentString; | 
| +        this._addText(fullIndent); | 
| + | 
| +        // Cache a maximum of 20 nesting level indents. | 
| +        if (this._nestingLevel <= 20) | 
| +            this._cachedIndents[this._nestingLevel] = fullIndent; | 
| +    }, | 
| + | 
| +    _addComment: function(comment) | 
| +    { | 
| +        if (this._lineNumber < comment.line) { | 
| +            for (var j = this._lineNumber; j < comment.line; ++j) | 
| +                this._addText("\n"); | 
| +            this._lineNumber = comment.line; | 
| +            this._needNewLine = false; | 
| +            this._addIndent(); | 
| +        } else | 
| +            this.addSpace(); | 
| + | 
| +        this._addMappingIfNeeded(comment.pos); | 
| +        if (comment.type === "comment1") | 
| +            this._addText("//"); | 
| +        else | 
| +            this._addText("/*"); | 
| + | 
| +        this._addText(comment.value); | 
| + | 
| +        if (comment.type !== "comment1") { | 
| +            this._addText("*/"); | 
| +            var position; | 
| +            while ((position = comment.value.indexOf("\n", position + 1)) !== -1) | 
| +                this._lineNumber += 1; | 
| +        } | 
| +    }, | 
| + | 
| +    /** | 
| +     * @param {string} text | 
| +     */ | 
| +    _addText: function(text) | 
| +    { | 
| +        this._formattedContent.push(text); | 
| +        this._formattedContentLength += text.length; | 
| +    }, | 
| + | 
| +    /** | 
| +     * @param {number} originalPosition | 
| +     */ | 
| +    _addMappingIfNeeded: function(originalPosition) | 
| +    { | 
| +        if (originalPosition - this._lastOriginalPosition === this._formattedContentLength - this._lastFormattedPosition) | 
| +            return; | 
| +        this._mapping.original.push(this._originalOffset + originalPosition); | 
| +        this._lastOriginalPosition = originalPosition; | 
| +        this._mapping.formatted.push(this._formattedOffset + this._formattedContentLength); | 
| +        this._lastFormattedPosition = this._formattedContentLength; | 
| +    } | 
| +} | 
| + | 
| +FormatterWorker.JavaScriptTokens = {}; | 
| +FormatterWorker.JavaScriptTokensByValue = {}; | 
| + | 
| +FormatterWorker.JavaScriptTokens.EOS = 0; | 
| +FormatterWorker.JavaScriptTokens.LPAREN = FormatterWorker.JavaScriptTokensByValue["("] = 1; | 
| +FormatterWorker.JavaScriptTokens.RPAREN = FormatterWorker.JavaScriptTokensByValue[")"] = 2; | 
| +FormatterWorker.JavaScriptTokens.LBRACK = FormatterWorker.JavaScriptTokensByValue["["] = 3; | 
| +FormatterWorker.JavaScriptTokens.RBRACK = FormatterWorker.JavaScriptTokensByValue["]"] = 4; | 
| +FormatterWorker.JavaScriptTokens.LBRACE = FormatterWorker.JavaScriptTokensByValue["{"] = 5; | 
| +FormatterWorker.JavaScriptTokens.RBRACE = FormatterWorker.JavaScriptTokensByValue["}"] = 6; | 
| +FormatterWorker.JavaScriptTokens.COLON = FormatterWorker.JavaScriptTokensByValue[":"] = 7; | 
| +FormatterWorker.JavaScriptTokens.SEMICOLON = FormatterWorker.JavaScriptTokensByValue[";"] = 8; | 
| +FormatterWorker.JavaScriptTokens.PERIOD = FormatterWorker.JavaScriptTokensByValue["."] = 9; | 
| +FormatterWorker.JavaScriptTokens.CONDITIONAL = FormatterWorker.JavaScriptTokensByValue["?"] = 10; | 
| +FormatterWorker.JavaScriptTokens.INC = FormatterWorker.JavaScriptTokensByValue["++"] = 11; | 
| +FormatterWorker.JavaScriptTokens.DEC = FormatterWorker.JavaScriptTokensByValue["--"] = 12; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN = FormatterWorker.JavaScriptTokensByValue["="] = 13; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_BIT_OR = FormatterWorker.JavaScriptTokensByValue["|="] = 14; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_BIT_XOR = FormatterWorker.JavaScriptTokensByValue["^="] = 15; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_BIT_AND = FormatterWorker.JavaScriptTokensByValue["&="] = 16; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_SHL = FormatterWorker.JavaScriptTokensByValue["<<="] = 17; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_SAR = FormatterWorker.JavaScriptTokensByValue[">>="] = 18; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_SHR = FormatterWorker.JavaScriptTokensByValue[">>>="] = 19; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_ADD = FormatterWorker.JavaScriptTokensByValue["+="] = 20; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_SUB = FormatterWorker.JavaScriptTokensByValue["-="] = 21; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_MUL = FormatterWorker.JavaScriptTokensByValue["*="] = 22; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_DIV = FormatterWorker.JavaScriptTokensByValue["/="] = 23; | 
| +FormatterWorker.JavaScriptTokens.ASSIGN_MOD = FormatterWorker.JavaScriptTokensByValue["%="] = 24; | 
| +FormatterWorker.JavaScriptTokens.COMMA = FormatterWorker.JavaScriptTokensByValue[","] = 25; | 
| +FormatterWorker.JavaScriptTokens.OR = FormatterWorker.JavaScriptTokensByValue["||"] = 26; | 
| +FormatterWorker.JavaScriptTokens.AND = FormatterWorker.JavaScriptTokensByValue["&&"] = 27; | 
| +FormatterWorker.JavaScriptTokens.BIT_OR = FormatterWorker.JavaScriptTokensByValue["|"] = 28; | 
| +FormatterWorker.JavaScriptTokens.BIT_XOR = FormatterWorker.JavaScriptTokensByValue["^"] = 29; | 
| +FormatterWorker.JavaScriptTokens.BIT_AND = FormatterWorker.JavaScriptTokensByValue["&"] = 30; | 
| +FormatterWorker.JavaScriptTokens.SHL = FormatterWorker.JavaScriptTokensByValue["<<"] = 31; | 
| +FormatterWorker.JavaScriptTokens.SAR = FormatterWorker.JavaScriptTokensByValue[">>"] = 32; | 
| +FormatterWorker.JavaScriptTokens.SHR = FormatterWorker.JavaScriptTokensByValue[">>>"] = 33; | 
| +FormatterWorker.JavaScriptTokens.ADD = FormatterWorker.JavaScriptTokensByValue["+"] = 34; | 
| +FormatterWorker.JavaScriptTokens.SUB = FormatterWorker.JavaScriptTokensByValue["-"] = 35; | 
| +FormatterWorker.JavaScriptTokens.MUL = FormatterWorker.JavaScriptTokensByValue["*"] = 36; | 
| +FormatterWorker.JavaScriptTokens.DIV = FormatterWorker.JavaScriptTokensByValue["/"] = 37; | 
| +FormatterWorker.JavaScriptTokens.MOD = FormatterWorker.JavaScriptTokensByValue["%"] = 38; | 
| +FormatterWorker.JavaScriptTokens.EQ = FormatterWorker.JavaScriptTokensByValue["=="] = 39; | 
| +FormatterWorker.JavaScriptTokens.NE = FormatterWorker.JavaScriptTokensByValue["!="] = 40; | 
| +FormatterWorker.JavaScriptTokens.EQ_STRICT = FormatterWorker.JavaScriptTokensByValue["==="] = 41; | 
| +FormatterWorker.JavaScriptTokens.NE_STRICT = FormatterWorker.JavaScriptTokensByValue["!=="] = 42; | 
| +FormatterWorker.JavaScriptTokens.LT = FormatterWorker.JavaScriptTokensByValue["<"] = 43; | 
| +FormatterWorker.JavaScriptTokens.GT = FormatterWorker.JavaScriptTokensByValue[">"] = 44; | 
| +FormatterWorker.JavaScriptTokens.LTE = FormatterWorker.JavaScriptTokensByValue["<="] = 45; | 
| +FormatterWorker.JavaScriptTokens.GTE = FormatterWorker.JavaScriptTokensByValue[">="] = 46; | 
| +FormatterWorker.JavaScriptTokens.INSTANCEOF = FormatterWorker.JavaScriptTokensByValue["instanceof"] = 47; | 
| +FormatterWorker.JavaScriptTokens.IN = FormatterWorker.JavaScriptTokensByValue["in"] = 48; | 
| +FormatterWorker.JavaScriptTokens.NOT = FormatterWorker.JavaScriptTokensByValue["!"] = 49; | 
| +FormatterWorker.JavaScriptTokens.BIT_NOT = FormatterWorker.JavaScriptTokensByValue["~"] = 50; | 
| +FormatterWorker.JavaScriptTokens.DELETE = FormatterWorker.JavaScriptTokensByValue["delete"] = 51; | 
| +FormatterWorker.JavaScriptTokens.TYPEOF = FormatterWorker.JavaScriptTokensByValue["typeof"] = 52; | 
| +FormatterWorker.JavaScriptTokens.VOID = FormatterWorker.JavaScriptTokensByValue["void"] = 53; | 
| +FormatterWorker.JavaScriptTokens.BREAK = FormatterWorker.JavaScriptTokensByValue["break"] = 54; | 
| +FormatterWorker.JavaScriptTokens.CASE = FormatterWorker.JavaScriptTokensByValue["case"] = 55; | 
| +FormatterWorker.JavaScriptTokens.CATCH = FormatterWorker.JavaScriptTokensByValue["catch"] = 56; | 
| +FormatterWorker.JavaScriptTokens.CONTINUE = FormatterWorker.JavaScriptTokensByValue["continue"] = 57; | 
| +FormatterWorker.JavaScriptTokens.DEBUGGER = FormatterWorker.JavaScriptTokensByValue["debugger"] = 58; | 
| +FormatterWorker.JavaScriptTokens.DEFAULT = FormatterWorker.JavaScriptTokensByValue["default"] = 59; | 
| +FormatterWorker.JavaScriptTokens.DO = FormatterWorker.JavaScriptTokensByValue["do"] = 60; | 
| +FormatterWorker.JavaScriptTokens.ELSE = FormatterWorker.JavaScriptTokensByValue["else"] = 61; | 
| +FormatterWorker.JavaScriptTokens.FINALLY = FormatterWorker.JavaScriptTokensByValue["finally"] = 62; | 
| +FormatterWorker.JavaScriptTokens.FOR = FormatterWorker.JavaScriptTokensByValue["for"] = 63; | 
| +FormatterWorker.JavaScriptTokens.FUNCTION = FormatterWorker.JavaScriptTokensByValue["function"] = 64; | 
| +FormatterWorker.JavaScriptTokens.IF = FormatterWorker.JavaScriptTokensByValue["if"] = 65; | 
| +FormatterWorker.JavaScriptTokens.NEW = FormatterWorker.JavaScriptTokensByValue["new"] = 66; | 
| +FormatterWorker.JavaScriptTokens.RETURN = FormatterWorker.JavaScriptTokensByValue["return"] = 67; | 
| +FormatterWorker.JavaScriptTokens.SWITCH = FormatterWorker.JavaScriptTokensByValue["switch"] = 68; | 
| +FormatterWorker.JavaScriptTokens.THIS = FormatterWorker.JavaScriptTokensByValue["this"] = 69; | 
| +FormatterWorker.JavaScriptTokens.THROW = FormatterWorker.JavaScriptTokensByValue["throw"] = 70; | 
| +FormatterWorker.JavaScriptTokens.TRY = FormatterWorker.JavaScriptTokensByValue["try"] = 71; | 
| +FormatterWorker.JavaScriptTokens.VAR = FormatterWorker.JavaScriptTokensByValue["var"] = 72; | 
| +FormatterWorker.JavaScriptTokens.WHILE = FormatterWorker.JavaScriptTokensByValue["while"] = 73; | 
| +FormatterWorker.JavaScriptTokens.WITH = FormatterWorker.JavaScriptTokensByValue["with"] = 74; | 
| +FormatterWorker.JavaScriptTokens.NULL_LITERAL = FormatterWorker.JavaScriptTokensByValue["null"] = 75; | 
| +FormatterWorker.JavaScriptTokens.TRUE_LITERAL = FormatterWorker.JavaScriptTokensByValue["true"] = 76; | 
| +FormatterWorker.JavaScriptTokens.FALSE_LITERAL = FormatterWorker.JavaScriptTokensByValue["false"] = 77; | 
| +FormatterWorker.JavaScriptTokens.NUMBER = 78; | 
| +FormatterWorker.JavaScriptTokens.STRING = 79; | 
| +FormatterWorker.JavaScriptTokens.IDENTIFIER = 80; | 
| +FormatterWorker.JavaScriptTokens.CONST = FormatterWorker.JavaScriptTokensByValue["const"] = 81; | 
| + | 
| +FormatterWorker.JavaScriptTokensByType = { | 
| +    "eof": FormatterWorker.JavaScriptTokens.EOS, | 
| +    "name": FormatterWorker.JavaScriptTokens.IDENTIFIER, | 
| +    "num": FormatterWorker.JavaScriptTokens.NUMBER, | 
| +    "regexp": FormatterWorker.JavaScriptTokens.DIV, | 
| +    "string": FormatterWorker.JavaScriptTokens.STRING | 
| +}; | 
| + | 
| +/** | 
| + * @constructor | 
| + * @param {string} content | 
| + */ | 
| +FormatterWorker.JavaScriptTokenizer = function(content) | 
| +{ | 
| +    this._readNextToken = parse.tokenizer(content); | 
| +    this._state = this._readNextToken.context(); | 
| +} | 
| + | 
| +FormatterWorker.JavaScriptTokenizer.prototype = { | 
| +    /** | 
| +     * @return {string} | 
| +     */ | 
| +    content: function() | 
| +    { | 
| +        return this._state.text; | 
| +    }, | 
| + | 
| +    /** | 
| +     * @param {boolean=} forceRegexp | 
| +     */ | 
| +    next: function(forceRegexp) | 
| +    { | 
| +        var uglifyToken = this._readNextToken(forceRegexp); | 
| +        uglifyToken.endPos = this._state.pos; | 
| +        uglifyToken.endLine = this._state.line; | 
| +        uglifyToken.token = this._convertUglifyToken(uglifyToken); | 
| +        return uglifyToken; | 
| +    }, | 
| + | 
| +    _convertUglifyToken: function(uglifyToken) | 
| +    { | 
| +        var token = FormatterWorker.JavaScriptTokensByType[uglifyToken.type]; | 
| +        if (typeof token === "number") | 
| +            return token; | 
| +        token = FormatterWorker.JavaScriptTokensByValue[uglifyToken.value]; | 
| +        if (typeof token === "number") | 
| +            return token; | 
| +        throw "Unknown token type " + uglifyToken.type; | 
| } | 
| } | 
|  |