| |
| |
| |
| onmessage = function(event) { |
| if (!event.data.method) |
| return; |
| |
| self[event.data.method](event.data.params); |
| }; |
| |
| function format(params) |
| { |
| |
| var indentString = params.indentString || " "; |
| var result = {}; |
| |
| if (params.mimeType === "text/html") { |
| var formatter = new HTMLScriptFormatter(indentString); |
| result = formatter.format(params.content); |
| } else { |
| result.mapping = { original: [0], formatted: [0] }; |
| result.content = formatScript(params.content, result.mapping, 0, 0, indentString); |
| } |
| postMessage(result); |
| } |
| |
| function getChunkCount(totalLength, chunkSize) |
| { |
| if (totalLength <= chunkSize) |
| return 1; |
| |
| var remainder = totalLength % chunkSize; |
| var partialLength = totalLength - remainder; |
| return (partialLength / chunkSize) + (remainder ? 1 : 0); |
| } |
| |
| function outline(params) |
| { |
| const chunkSize = 100000; |
| const totalLength = params.content.length; |
| const lines = params.content.split("\n"); |
| const chunkCount = getChunkCount(totalLength, chunkSize); |
| var outlineChunk = []; |
| var previousIdentifier = null; |
| var previousToken = null; |
| var previousTokenType = null; |
| var currentChunk = 1; |
| var processedChunkCharacters = 0; |
| var addedFunction = false; |
| var isReadingArguments = false; |
| var argumentsText = ""; |
| var currentFunction = null; |
| var scriptTokenizer = new WebInspector.SourceJavaScriptTokenizer(); |
| scriptTokenizer.condition = scriptTokenizer.createInitialCondition(); |
| |
| for (var i = 0; i < lines.length; ++i) { |
| var line = lines[i]; |
| var column = 0; |
| scriptTokenizer.line = line; |
| do { |
| var newColumn = scriptTokenizer.nextToken(column); |
| var tokenType = scriptTokenizer.tokenType; |
| var tokenValue = line.substring(column, newColumn); |
| if (tokenType === "javascript-ident") { |
| previousIdentifier = tokenValue; |
| if (tokenValue && previousToken === "function") { |
| |
| currentFunction = { line: i, name: tokenValue }; |
| addedFunction = true; |
| previousIdentifier = null; |
| } |
| } else if (tokenType === "javascript-keyword") { |
| if (tokenValue === "function") { |
| if (previousIdentifier && (previousToken === "=" || previousToken === ":")) { |
| |
| |
| currentFunction = { line: i, name: previousIdentifier }; |
| addedFunction = true; |
| previousIdentifier = null; |
| } |
| } |
| } else if (tokenValue === "." && previousTokenType === "javascript-ident") |
| previousIdentifier += "."; |
| else if (tokenValue === "(" && addedFunction) |
| isReadingArguments = true; |
| if (isReadingArguments && tokenValue) |
| argumentsText += tokenValue; |
| |
| if (tokenValue === ")" && isReadingArguments) { |
| addedFunction = false; |
| isReadingArguments = false; |
| currentFunction.arguments = argumentsText.replace(/,[\r\n\s]*/g, ", ").replace(/([^,])[\r\n\s]+/g, "$1"); |
| argumentsText = ""; |
| outlineChunk.push(currentFunction); |
| } |
| |
| if (tokenValue.trim().length) { |
| |
| previousToken = tokenValue; |
| previousTokenType = tokenType; |
| } |
| processedChunkCharacters += newColumn - column; |
| column = newColumn; |
| |
| if (processedChunkCharacters >= chunkSize) { |
| postMessage({ chunk: outlineChunk, total: chunkCount, index: currentChunk++ }); |
| outlineChunk = []; |
| processedChunkCharacters = 0; |
| } |
| } while (column < line.length); |
| } |
| postMessage({ chunk: outlineChunk, total: chunkCount, index: chunkCount }); |
| } |
| |
| function formatScript(content, mapping, offset, formattedOffset, indentString) |
| { |
| var formattedContent; |
| try { |
| var tokenizer = new Tokenizer(content); |
| var builder = new FormattedContentBuilder(tokenizer.content(), mapping, offset, formattedOffset, indentString); |
| var formatter = new JavaScriptFormatter(tokenizer, builder); |
| formatter.format(); |
| formattedContent = builder.content(); |
| } catch (e) { |
| formattedContent = content; |
| } |
| return formattedContent; |
| } |
| |
| WebInspector = {}; |
| |
| Array.prototype.keySet = function() |
| { |
| var keys = {}; |
| for (var i = 0; i < this.length; ++i) |
| keys[this[i]] = true; |
| return keys; |
| }; |
| |
| |
| |
| |
| |
| WebInspector.SourceTokenizer = function() |
| { |
| |
| this.tokenType = null; |
| } |
| |
| WebInspector.SourceTokenizer.prototype = { |
| set line(line) { |
| this._line = line; |
| }, |
| |
| set condition(condition) |
| { |
| this._condition = condition; |
| }, |
| |
| get condition() |
| { |
| return this._condition; |
| }, |
| |
| getLexCondition: function() |
| { |
| return this.condition.lexCondition; |
| }, |
| |
| setLexCondition: function(lexCondition) |
| { |
| this.condition.lexCondition = lexCondition; |
| }, |
| |
| |
| _charAt: function(cursor) |
| { |
| return cursor < this._line.length ? this._line.charAt(cursor) : "\n"; |
| }, |
| |
| createInitialCondition: function() |
| { |
| }, |
| |
| |
| nextToken: function(cursor) |
| { |
| } |
| } |
| |
| |
| WebInspector.SourceTokenizer.Registry = function() { |
| this._tokenizers = {}; |
| this._tokenizerConstructors = { |
| "text/css": "SourceCSSTokenizer", |
| "text/html": "SourceHTMLTokenizer", |
| "text/javascript": "SourceJavaScriptTokenizer", |
| "text/x-scss": "SourceCSSTokenizer" |
| }; |
| } |
| |
| |
| WebInspector.SourceTokenizer.Registry.getInstance = function() |
| { |
| if (!WebInspector.SourceTokenizer.Registry._instance) |
| WebInspector.SourceTokenizer.Registry._instance = new WebInspector.SourceTokenizer.Registry(); |
| return WebInspector.SourceTokenizer.Registry._instance; |
| } |
| |
| WebInspector.SourceTokenizer.Registry.prototype = { |
| |
| getTokenizer: function(mimeType) |
| { |
| if (!this._tokenizerConstructors[mimeType]) |
| return null; |
| var tokenizerClass = this._tokenizerConstructors[mimeType]; |
| var tokenizer = this._tokenizers[tokenizerClass]; |
| if (!tokenizer) { |
| tokenizer = new WebInspector[tokenizerClass](); |
| this._tokenizers[tokenizerClass] = tokenizer; |
| } |
| return tokenizer; |
| } |
| } |
| ; |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| WebInspector.SourceHTMLTokenizer = function() |
| { |
| WebInspector.SourceTokenizer.call(this); |
| |
| |
| this._lexConditions = { |
| INITIAL: 0, |
| COMMENT: 1, |
| DOCTYPE: 2, |
| TAG: 3, |
| DSTRING: 4, |
| SSTRING: 5 |
| }; |
| this.case_INITIAL = 1000; |
| this.case_COMMENT = 1001; |
| this.case_DOCTYPE = 1002; |
| this.case_TAG = 1003; |
| this.case_DSTRING = 1004; |
| this.case_SSTRING = 1005; |
| |
| this._parseConditions = { |
| INITIAL: 0, |
| ATTRIBUTE: 1, |
| ATTRIBUTE_VALUE: 2, |
| LINKIFY: 4, |
| A_NODE: 8, |
| SCRIPT: 16, |
| STYLE: 32 |
| }; |
| |
| this.condition = this.createInitialCondition(); |
| } |
| |
| WebInspector.SourceHTMLTokenizer.prototype = { |
| createInitialCondition: function() |
| { |
| return { lexCondition: this._lexConditions.INITIAL, parseCondition: this._parseConditions.INITIAL }; |
| }, |
| |
| set line(line) { |
| if (this._condition.internalJavaScriptTokenizerCondition) { |
| var match = /<\/script/i.exec(line); |
| if (match) { |
| this._internalJavaScriptTokenizer.line = line.substring(0, match.index); |
| } else |
| this._internalJavaScriptTokenizer.line = line; |
| } else if (this._condition.internalCSSTokenizerCondition) { |
| var match = /<\/style/i.exec(line); |
| if (match) { |
| this._internalCSSTokenizer.line = line.substring(0, match.index); |
| } else |
| this._internalCSSTokenizer.line = line; |
| } |
| this._line = line; |
| }, |
| |
| _isExpectingAttribute: function() |
| { |
| return this._condition.parseCondition & this._parseConditions.ATTRIBUTE; |
| }, |
| |
| _isExpectingAttributeValue: function() |
| { |
| return this._condition.parseCondition & this._parseConditions.ATTRIBUTE_VALUE; |
| }, |
| |
| _setExpectingAttribute: function() |
| { |
| if (this._isExpectingAttributeValue()) |
| this._condition.parseCondition ^= this._parseConditions.ATTRIBUTE_VALUE; |
| this._condition.parseCondition |= this._parseConditions.ATTRIBUTE; |
| }, |
| |
| _setExpectingAttributeValue: function() |
| { |
| if (this._isExpectingAttribute()) |
| this._condition.parseCondition ^= this._parseConditions.ATTRIBUTE; |
| this._condition.parseCondition |= this._parseConditions.ATTRIBUTE_VALUE; |
| }, |
| |
| |
| _stringToken: function(cursor, stringEnds) |
| { |
| if (!this._isExpectingAttributeValue()) { |
| this.tokenType = null; |
| return cursor; |
| } |
| this.tokenType = this._attrValueTokenType(); |
| if (stringEnds) |
| this._setExpectingAttribute(); |
| return cursor; |
| }, |
| |
| _attrValueTokenType: function() |
| { |
| if (this._condition.parseCondition & this._parseConditions.LINKIFY) { |
| if (this._condition.parseCondition & this._parseConditions.A_NODE) |
| return "html-external-link"; |
| return "html-resource-link"; |
| } |
| return "html-attribute-value"; |
| }, |
| |
| get _internalJavaScriptTokenizer() |
| { |
| return WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/javascript"); |
| }, |
| |
| get _internalCSSTokenizer() |
| { |
| return WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer("text/css"); |
| }, |
| |
| scriptStarted: function(cursor) |
| { |
| this._condition.internalJavaScriptTokenizerCondition = this._internalJavaScriptTokenizer.createInitialCondition(); |
| }, |
| |
| scriptEnded: function(cursor) |
| { |
| }, |
| |
| styleSheetStarted: function(cursor) |
| { |
| this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.createInitialCondition(); |
| }, |
| |
| styleSheetEnded: function(cursor) |
| { |
| }, |
| |
| nextToken: function(cursor) |
| { |
| if (this._condition.internalJavaScriptTokenizerCondition) { |
| |
| this.line = this._line; |
| if (cursor !== this._internalJavaScriptTokenizer._line.length) { |
| |
| this._internalJavaScriptTokenizer.condition = this._condition.internalJavaScriptTokenizerCondition; |
| var result = this._internalJavaScriptTokenizer.nextToken(cursor); |
| this.tokenType = this._internalJavaScriptTokenizer.tokenType; |
| this._condition.internalJavaScriptTokenizerCondition = this._internalJavaScriptTokenizer.condition; |
| return result; |
| } else if (cursor !== this._line.length) |
| delete this._condition.internalJavaScriptTokenizerCondition; |
| } else if (this._condition.internalCSSTokenizerCondition) { |
| |
| this.line = this._line; |
| if (cursor !== this._internalCSSTokenizer._line.length) { |
| |
| this._internalCSSTokenizer.condition = this._condition.internalCSSTokenizerCondition; |
| var result = this._internalCSSTokenizer.nextToken(cursor); |
| this.tokenType = this._internalCSSTokenizer.tokenType; |
| this._condition.internalCSSTokenizerCondition = this._internalCSSTokenizer.condition; |
| return result; |
| } else if (cursor !== this._line.length) |
| delete this._condition.internalCSSTokenizerCondition; |
| } |
| |
| var cursorOnEnter = cursor; |
| var gotoCase = 1; |
| var YYMARKER; |
| while (1) { |
| switch (gotoCase) |
| |
| |
| { |
| case 1: var yych; |
| var yyaccept = 0; |
| if (this.getLexCondition() < 3) { |
| if (this.getLexCondition() < 1) { |
| { gotoCase = this.case_INITIAL; continue; }; |
| } else { |
| if (this.getLexCondition() < 2) { |
| { gotoCase = this.case_COMMENT; continue; }; |
| } else { |
| { gotoCase = this.case_DOCTYPE; continue; }; |
| } |
| } |
| } else { |
| if (this.getLexCondition() < 4) { |
| { gotoCase = this.case_TAG; continue; }; |
| } else { |
| if (this.getLexCondition() < 5) { |
| { gotoCase = this.case_DSTRING; continue; }; |
| } else { |
| { gotoCase = this.case_SSTRING; continue; }; |
| } |
| } |
| } |
| |
| case this.case_COMMENT: |
| |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 4; continue; }; |
| { gotoCase = 3; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 4; continue; }; |
| if (yych == '-') { gotoCase = 6; continue; }; |
| { gotoCase = 3; continue; }; |
| } |
| case 2: |
| { this.tokenType = "html-comment"; return cursor; } |
| case 3: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 9; continue; }; |
| case 4: |
| ++cursor; |
| case 5: |
| { this.tokenType = null; return cursor; } |
| case 6: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych != '-') { gotoCase = 5; continue; }; |
| case 7: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '>') { gotoCase = 10; continue; }; |
| case 8: |
| yyaccept = 0; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 9: |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 2; continue; }; |
| { gotoCase = 8; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 2; continue; }; |
| if (yych == '-') { gotoCase = 12; continue; }; |
| { gotoCase = 8; continue; }; |
| } |
| case 10: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.INITIAL); |
| { this.tokenType = "html-comment"; return cursor; } |
| case 12: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '-') { gotoCase = 7; continue; }; |
| cursor = YYMARKER; |
| if (yyaccept <= 0) { |
| { gotoCase = 2; continue; }; |
| } else { |
| { gotoCase = 5; continue; }; |
| } |
| |
| case this.case_DOCTYPE: |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 18; continue; }; |
| { gotoCase = 17; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 18; continue; }; |
| if (yych == '>') { gotoCase = 20; continue; }; |
| { gotoCase = 17; continue; }; |
| } |
| case 16: |
| { this.tokenType = "html-doctype"; return cursor; } |
| case 17: |
| yych = this._charAt(++cursor); |
| { gotoCase = 23; continue; }; |
| case 18: |
| ++cursor; |
| { this.tokenType = null; return cursor; } |
| case 20: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.INITIAL); |
| { this.tokenType = "html-doctype"; return cursor; } |
| case 22: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 23: |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 16; continue; }; |
| { gotoCase = 22; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 16; continue; }; |
| if (yych == '>') { gotoCase = 16; continue; }; |
| { gotoCase = 22; continue; }; |
| } |
| |
| case this.case_DSTRING: |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 28; continue; }; |
| { gotoCase = 27; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 28; continue; }; |
| if (yych == '"') { gotoCase = 30; continue; }; |
| { gotoCase = 27; continue; }; |
| } |
| case 26: |
| { return this._stringToken(cursor); } |
| case 27: |
| yych = this._charAt(++cursor); |
| { gotoCase = 34; continue; }; |
| case 28: |
| ++cursor; |
| { this.tokenType = null; return cursor; } |
| case 30: |
| ++cursor; |
| case 31: |
| this.setLexCondition(this._lexConditions.TAG); |
| { return this._stringToken(cursor, true); } |
| case 32: |
| yych = this._charAt(++cursor); |
| { gotoCase = 31; continue; }; |
| case 33: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 34: |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 26; continue; }; |
| { gotoCase = 33; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 26; continue; }; |
| if (yych == '"') { gotoCase = 32; continue; }; |
| { gotoCase = 33; continue; }; |
| } |
| |
| case this.case_INITIAL: |
| yych = this._charAt(cursor); |
| if (yych == '<') { gotoCase = 39; continue; }; |
| ++cursor; |
| { this.tokenType = null; return cursor; } |
| case 39: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= '/') { |
| if (yych == '!') { gotoCase = 44; continue; }; |
| if (yych >= '/') { gotoCase = 41; continue; }; |
| } else { |
| if (yych <= 'S') { |
| if (yych >= 'S') { gotoCase = 42; continue; }; |
| } else { |
| if (yych == 's') { gotoCase = 42; continue; }; |
| } |
| } |
| case 40: |
| this.setLexCondition(this._lexConditions.TAG); |
| { |
| if (this._condition.parseCondition & (this._parseConditions.SCRIPT | this._parseConditions.STYLE)) { |
| |
| this.setLexCondition(this._lexConditions.INITIAL); |
| this.tokenType = null; |
| return cursor; |
| } |
| |
| this._condition.parseCondition = this._parseConditions.INITIAL; |
| this.tokenType = "html-tag"; |
| return cursor; |
| } |
| case 41: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == 'S') { gotoCase = 73; continue; }; |
| if (yych == 's') { gotoCase = 73; continue; }; |
| { gotoCase = 40; continue; }; |
| case 42: |
| yych = this._charAt(++cursor); |
| if (yych <= 'T') { |
| if (yych == 'C') { gotoCase = 62; continue; }; |
| if (yych >= 'T') { gotoCase = 63; continue; }; |
| } else { |
| if (yych <= 'c') { |
| if (yych >= 'c') { gotoCase = 62; continue; }; |
| } else { |
| if (yych == 't') { gotoCase = 63; continue; }; |
| } |
| } |
| case 43: |
| cursor = YYMARKER; |
| { gotoCase = 40; continue; }; |
| case 44: |
| yych = this._charAt(++cursor); |
| if (yych <= 'C') { |
| if (yych != '-') { gotoCase = 43; continue; }; |
| } else { |
| if (yych <= 'D') { gotoCase = 46; continue; }; |
| if (yych == 'd') { gotoCase = 46; continue; }; |
| { gotoCase = 43; continue; }; |
| } |
| yych = this._charAt(++cursor); |
| if (yych == '-') { gotoCase = 54; continue; }; |
| { gotoCase = 43; continue; }; |
| case 46: |
| yych = this._charAt(++cursor); |
| if (yych == 'O') { gotoCase = 47; continue; }; |
| if (yych != 'o') { gotoCase = 43; continue; }; |
| case 47: |
| yych = this._charAt(++cursor); |
| if (yych == 'C') { gotoCase = 48; continue; }; |
| if (yych != 'c') { gotoCase = 43; continue; }; |
| case 48: |
| yych = this._charAt(++cursor); |
| if (yych == 'T') { gotoCase = 49; continue; }; |
| if (yych != 't') { gotoCase = 43; continue; }; |
| case 49: |
| yych = this._charAt(++cursor); |
| if (yych == 'Y') { gotoCase = 50; continue; }; |
| if (yych != 'y') { gotoCase = 43; continue; }; |
| case 50: |
| yych = this._charAt(++cursor); |
| if (yych == 'P') { gotoCase = 51; continue; }; |
| if (yych != 'p') { gotoCase = 43; continue; }; |
| case 51: |
| yych = this._charAt(++cursor); |
| if (yych == 'E') { gotoCase = 52; continue; }; |
| if (yych != 'e') { gotoCase = 43; continue; }; |
| case 52: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.DOCTYPE); |
| { this.tokenType = "html-doctype"; return cursor; } |
| case 54: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 57; continue; }; |
| { gotoCase = 54; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 57; continue; }; |
| if (yych != '-') { gotoCase = 54; continue; }; |
| } |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '-') { gotoCase = 59; continue; }; |
| { gotoCase = 43; continue; }; |
| case 57: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.COMMENT); |
| { this.tokenType = "html-comment"; return cursor; } |
| case 59: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych != '>') { gotoCase = 54; continue; }; |
| ++cursor; |
| { this.tokenType = "html-comment"; return cursor; } |
| case 62: |
| yych = this._charAt(++cursor); |
| if (yych == 'R') { gotoCase = 68; continue; }; |
| if (yych == 'r') { gotoCase = 68; continue; }; |
| { gotoCase = 43; continue; }; |
| case 63: |
| yych = this._charAt(++cursor); |
| if (yych == 'Y') { gotoCase = 64; continue; }; |
| if (yych != 'y') { gotoCase = 43; continue; }; |
| case 64: |
| yych = this._charAt(++cursor); |
| if (yych == 'L') { gotoCase = 65; continue; }; |
| if (yych != 'l') { gotoCase = 43; continue; }; |
| case 65: |
| yych = this._charAt(++cursor); |
| if (yych == 'E') { gotoCase = 66; continue; }; |
| if (yych != 'e') { gotoCase = 43; continue; }; |
| case 66: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.TAG); |
| { |
| if (this._condition.parseCondition & this._parseConditions.STYLE) { |
| |
| this.setLexCondition(this._lexConditions.INITIAL); |
| this.tokenType = null; |
| return cursor; |
| } |
| this.tokenType = "html-tag"; |
| this._condition.parseCondition = this._parseConditions.STYLE; |
| this._setExpectingAttribute(); |
| return cursor; |
| } |
| case 68: |
| yych = this._charAt(++cursor); |
| if (yych == 'I') { gotoCase = 69; continue; }; |
| if (yych != 'i') { gotoCase = 43; continue; }; |
| case 69: |
| yych = this._charAt(++cursor); |
| if (yych == 'P') { gotoCase = 70; continue; }; |
| if (yych != 'p') { gotoCase = 43; continue; }; |
| case 70: |
| yych = this._charAt(++cursor); |
| if (yych == 'T') { gotoCase = 71; continue; }; |
| if (yych != 't') { gotoCase = 43; continue; }; |
| case 71: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.TAG); |
| { |
| if (this._condition.parseCondition & this._parseConditions.SCRIPT) { |
| |
| this.setLexCondition(this._lexConditions.INITIAL); |
| this.tokenType = null; |
| return cursor; |
| } |
| this.tokenType = "html-tag"; |
| this._condition.parseCondition = this._parseConditions.SCRIPT; |
| this._setExpectingAttribute(); |
| return cursor; |
| } |
| case 73: |
| yych = this._charAt(++cursor); |
| if (yych <= 'T') { |
| if (yych == 'C') { gotoCase = 75; continue; }; |
| if (yych <= 'S') { gotoCase = 43; continue; }; |
| } else { |
| if (yych <= 'c') { |
| if (yych <= 'b') { gotoCase = 43; continue; }; |
| { gotoCase = 75; continue; }; |
| } else { |
| if (yych != 't') { gotoCase = 43; continue; }; |
| } |
| } |
| yych = this._charAt(++cursor); |
| if (yych == 'Y') { gotoCase = 81; continue; }; |
| if (yych == 'y') { gotoCase = 81; continue; }; |
| { gotoCase = 43; continue; }; |
| case 75: |
| yych = this._charAt(++cursor); |
| if (yych == 'R') { gotoCase = 76; continue; }; |
| if (yych != 'r') { gotoCase = 43; continue; }; |
| case 76: |
| yych = this._charAt(++cursor); |
| if (yych == 'I') { gotoCase = 77; continue; }; |
| if (yych != 'i') { gotoCase = 43; continue; }; |
| case 77: |
| yych = this._charAt(++cursor); |
| if (yych == 'P') { gotoCase = 78; continue; }; |
| if (yych != 'p') { gotoCase = 43; continue; }; |
| case 78: |
| yych = this._charAt(++cursor); |
| if (yych == 'T') { gotoCase = 79; continue; }; |
| if (yych != 't') { gotoCase = 43; continue; }; |
| case 79: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.TAG); |
| { |
| this.tokenType = "html-tag"; |
| this._condition.parseCondition = this._parseConditions.INITIAL; |
| this.scriptEnded(cursor - 8); |
| return cursor; |
| } |
| case 81: |
| yych = this._charAt(++cursor); |
| if (yych == 'L') { gotoCase = 82; continue; }; |
| if (yych != 'l') { gotoCase = 43; continue; }; |
| case 82: |
| yych = this._charAt(++cursor); |
| if (yych == 'E') { gotoCase = 83; continue; }; |
| if (yych != 'e') { gotoCase = 43; continue; }; |
| case 83: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.TAG); |
| { |
| this.tokenType = "html-tag"; |
| this._condition.parseCondition = this._parseConditions.INITIAL; |
| this.styleSheetEnded(cursor - 7); |
| return cursor; |
| } |
| |
| case this.case_SSTRING: |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 89; continue; }; |
| { gotoCase = 88; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 89; continue; }; |
| if (yych == '\'') { gotoCase = 91; continue; }; |
| { gotoCase = 88; continue; }; |
| } |
| case 87: |
| { return this._stringToken(cursor); } |
| case 88: |
| yych = this._charAt(++cursor); |
| { gotoCase = 95; continue; }; |
| case 89: |
| ++cursor; |
| { this.tokenType = null; return cursor; } |
| case 91: |
| ++cursor; |
| case 92: |
| this.setLexCondition(this._lexConditions.TAG); |
| { return this._stringToken(cursor, true); } |
| case 93: |
| yych = this._charAt(++cursor); |
| { gotoCase = 92; continue; }; |
| case 94: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 95: |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 87; continue; }; |
| { gotoCase = 94; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 87; continue; }; |
| if (yych == '\'') { gotoCase = 93; continue; }; |
| { gotoCase = 94; continue; }; |
| } |
| |
| case this.case_TAG: |
| yych = this._charAt(cursor); |
| if (yych <= '&') { |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 100; continue; }; |
| if (yych >= '\r') { gotoCase = 100; continue; }; |
| } else { |
| if (yych <= ' ') { |
| if (yych >= ' ') { gotoCase = 100; continue; }; |
| } else { |
| if (yych == '"') { gotoCase = 102; continue; }; |
| } |
| } |
| } else { |
| if (yych <= '>') { |
| if (yych <= ';') { |
| if (yych <= '\'') { gotoCase = 103; continue; }; |
| } else { |
| if (yych <= '<') { gotoCase = 100; continue; }; |
| if (yych <= '=') { gotoCase = 104; continue; }; |
| { gotoCase = 106; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych >= '[') { gotoCase = 100; continue; }; |
| } else { |
| if (yych == ']') { gotoCase = 100; continue; }; |
| } |
| } |
| } |
| ++cursor; |
| yych = this._charAt(cursor); |
| { gotoCase = 119; continue; }; |
| case 99: |
| { |
| if (this._condition.parseCondition === this._parseConditions.SCRIPT || this._condition.parseCondition === this._parseConditions.STYLE) { |
| |
| this.tokenType = null; |
| return cursor; |
| } |
| |
| if (this._condition.parseCondition === this._parseConditions.INITIAL) { |
| this.tokenType = "html-tag"; |
| this._setExpectingAttribute(); |
| var token = this._line.substring(cursorOnEnter, cursor); |
| if (token === "a") |
| this._condition.parseCondition |= this._parseConditions.A_NODE; |
| else if (this._condition.parseCondition & this._parseConditions.A_NODE) |
| this._condition.parseCondition ^= this._parseConditions.A_NODE; |
| } else if (this._isExpectingAttribute()) { |
| var token = this._line.substring(cursorOnEnter, cursor); |
| if (token === "href" || token === "src") |
| this._condition.parseCondition |= this._parseConditions.LINKIFY; |
| else if (this._condition.parseCondition |= this._parseConditions.LINKIFY) |
| this._condition.parseCondition ^= this._parseConditions.LINKIFY; |
| this.tokenType = "html-attribute-name"; |
| } else if (this._isExpectingAttributeValue()) |
| this.tokenType = this._attrValueTokenType(); |
| else |
| this.tokenType = null; |
| return cursor; |
| } |
| case 100: |
| ++cursor; |
| { this.tokenType = null; return cursor; } |
| case 102: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 115; continue; }; |
| case 103: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 109; continue; }; |
| case 104: |
| ++cursor; |
| { |
| if (this._isExpectingAttribute()) |
| this._setExpectingAttributeValue(); |
| this.tokenType = null; |
| return cursor; |
| } |
| case 106: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.INITIAL); |
| { |
| this.tokenType = "html-tag"; |
| if (this._condition.parseCondition & this._parseConditions.SCRIPT) { |
| this.scriptStarted(cursor); |
| |
| return cursor; |
| } |
| |
| if (this._condition.parseCondition & this._parseConditions.STYLE) { |
| this.styleSheetStarted(cursor); |
| |
| return cursor; |
| } |
| |
| this._condition.parseCondition = this._parseConditions.INITIAL; |
| return cursor; |
| } |
| case 108: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 109: |
| if (yych <= '\f') { |
| if (yych != '\n') { gotoCase = 108; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 110; continue; }; |
| if (yych == '\'') { gotoCase = 112; continue; }; |
| { gotoCase = 108; continue; }; |
| } |
| case 110: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.SSTRING); |
| { return this._stringToken(cursor); } |
| case 112: |
| ++cursor; |
| { return this._stringToken(cursor, true); } |
| case 114: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 115: |
| if (yych <= '\f') { |
| if (yych != '\n') { gotoCase = 114; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 116; continue; }; |
| if (yych == '"') { gotoCase = 112; continue; }; |
| { gotoCase = 114; continue; }; |
| } |
| case 116: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.DSTRING); |
| { return this._stringToken(cursor); } |
| case 118: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 119: |
| if (yych <= '"') { |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 99; continue; }; |
| if (yych <= '\f') { gotoCase = 118; continue; }; |
| { gotoCase = 99; continue; }; |
| } else { |
| if (yych == ' ') { gotoCase = 99; continue; }; |
| if (yych <= '!') { gotoCase = 118; continue; }; |
| { gotoCase = 99; continue; }; |
| } |
| } else { |
| if (yych <= '>') { |
| if (yych == '\'') { gotoCase = 99; continue; }; |
| if (yych <= ';') { gotoCase = 118; continue; }; |
| { gotoCase = 99; continue; }; |
| } else { |
| if (yych <= '[') { |
| if (yych <= 'Z') { gotoCase = 118; continue; }; |
| { gotoCase = 99; continue; }; |
| } else { |
| if (yych == ']') { gotoCase = 99; continue; }; |
| { gotoCase = 118; continue; }; |
| } |
| } |
| } |
| } |
| |
| } |
| }, |
| |
| __proto__: WebInspector.SourceTokenizer.prototype |
| } |
| ; |
| |
| |
| |
| |
| |
| |
| WebInspector.SourceJavaScriptTokenizer = function() |
| { |
| WebInspector.SourceTokenizer.call(this); |
| |
| this._lexConditions = { |
| DIV: 0, |
| NODIV: 1, |
| COMMENT: 2, |
| DSTRING: 3, |
| SSTRING: 4, |
| REGEX: 5 |
| }; |
| |
| this.case_DIV = 1000; |
| this.case_NODIV = 1001; |
| this.case_COMMENT = 1002; |
| this.case_DSTRING = 1003; |
| this.case_SSTRING = 1004; |
| this.case_REGEX = 1005; |
| |
| this.condition = this.createInitialCondition(); |
| } |
| |
| WebInspector.SourceJavaScriptTokenizer.Keywords = [ |
| "null", "true", "false", "break", "case", "catch", "const", "default", "finally", "for", |
| "instanceof", "new", "var", "continue", "function", "return", "void", "delete", "if", |
| "this", "do", "while", "else", "in", "switch", "throw", "try", "typeof", "debugger", |
| "class", "enum", "export", "extends", "import", "super", "get", "set", "with" |
| ].keySet(); |
| |
| WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties = { |
| "NaN": "javascript-nan", |
| "undefined": "javascript-undef", |
| "Infinity": "javascript-inf" |
| }; |
| |
| WebInspector.SourceJavaScriptTokenizer.prototype = { |
| createInitialCondition: function() |
| { |
| return { lexCondition: this._lexConditions.NODIV }; |
| }, |
| |
| nextToken: function(cursor) |
| { |
| var cursorOnEnter = cursor; |
| var gotoCase = 1; |
| var YYMARKER; |
| while (1) { |
| switch (gotoCase) |
| |
| |
| { |
| case 1: var yych; |
| var yyaccept = 0; |
| if (this.getLexCondition() < 3) { |
| if (this.getLexCondition() < 1) { |
| { gotoCase = this.case_DIV; continue; }; |
| } else { |
| if (this.getLexCondition() < 2) { |
| { gotoCase = this.case_NODIV; continue; }; |
| } else { |
| { gotoCase = this.case_COMMENT; continue; }; |
| } |
| } |
| } else { |
| if (this.getLexCondition() < 4) { |
| { gotoCase = this.case_DSTRING; continue; }; |
| } else { |
| if (this.getLexCondition() < 5) { |
| { gotoCase = this.case_SSTRING; continue; }; |
| } else { |
| { gotoCase = this.case_REGEX; continue; }; |
| } |
| } |
| } |
| |
| case this.case_COMMENT: |
| |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 4; continue; }; |
| { gotoCase = 3; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 4; continue; }; |
| if (yych == '*') { gotoCase = 6; continue; }; |
| { gotoCase = 3; continue; }; |
| } |
| case 2: |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 3: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 12; continue; }; |
| case 4: |
| ++cursor; |
| { this.tokenType = null; return cursor; } |
| case 6: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == '*') { gotoCase = 9; continue; }; |
| if (yych != '/') { gotoCase = 11; continue; }; |
| case 7: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.NODIV); |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 9: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '*') { gotoCase = 9; continue; }; |
| if (yych == '/') { gotoCase = 7; continue; }; |
| case 11: |
| yyaccept = 0; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 12: |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 2; continue; }; |
| { gotoCase = 11; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 2; continue; }; |
| if (yych == '*') { gotoCase = 9; continue; }; |
| { gotoCase = 11; continue; }; |
| } |
| |
| case this.case_DIV: |
| yych = this._charAt(cursor); |
| if (yych <= '9') { |
| if (yych <= '\'') { |
| if (yych <= '"') { |
| if (yych <= String.fromCharCode(0x1F)) { gotoCase = 15; continue; }; |
| if (yych <= ' ') { gotoCase = 17; continue; }; |
| if (yych <= '!') { gotoCase = 19; continue; }; |
| { gotoCase = 21; continue; }; |
| } else { |
| if (yych <= '$') { |
| if (yych >= '$') { gotoCase = 22; continue; }; |
| } else { |
| if (yych <= '%') { gotoCase = 24; continue; }; |
| if (yych <= '&') { gotoCase = 25; continue; }; |
| { gotoCase = 26; continue; }; |
| } |
| } |
| } else { |
| if (yych <= ',') { |
| if (yych <= ')') { |
| if (yych <= '(') { gotoCase = 27; continue; }; |
| { gotoCase = 28; continue; }; |
| } else { |
| if (yych <= '*') { gotoCase = 30; continue; }; |
| if (yych <= '+') { gotoCase = 31; continue; }; |
| { gotoCase = 27; continue; }; |
| } |
| } else { |
| if (yych <= '.') { |
| if (yych <= '-') { gotoCase = 32; continue; }; |
| { gotoCase = 33; continue; }; |
| } else { |
| if (yych <= '/') { gotoCase = 34; continue; }; |
| if (yych <= '0') { gotoCase = 36; continue; }; |
| { gotoCase = 38; continue; }; |
| } |
| } |
| } |
| } else { |
| if (yych <= '\\') { |
| if (yych <= '>') { |
| if (yych <= ';') { gotoCase = 27; continue; }; |
| if (yych <= '<') { gotoCase = 39; continue; }; |
| if (yych <= '=') { gotoCase = 40; continue; }; |
| { gotoCase = 41; continue; }; |
| } else { |
| if (yych <= '@') { |
| if (yych <= '?') { gotoCase = 27; continue; }; |
| } else { |
| if (yych <= 'Z') { gotoCase = 22; continue; }; |
| if (yych <= '[') { gotoCase = 27; continue; }; |
| { gotoCase = 42; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'z') { |
| if (yych <= '^') { |
| if (yych <= ']') { gotoCase = 27; continue; }; |
| { gotoCase = 43; continue; }; |
| } else { |
| if (yych != '`') { gotoCase = 22; continue; }; |
| } |
| } else { |
| if (yych <= '|') { |
| if (yych <= '{') { gotoCase = 27; continue; }; |
| { gotoCase = 44; continue; }; |
| } else { |
| if (yych <= '~') { gotoCase = 27; continue; }; |
| if (yych >= 0x80) { gotoCase = 22; continue; }; |
| } |
| } |
| } |
| } |
| case 15: |
| ++cursor; |
| case 16: |
| { this.tokenType = null; return cursor; } |
| case 17: |
| ++cursor; |
| yych = this._charAt(cursor); |
| { gotoCase = 119; continue; }; |
| case 18: |
| {this.tokenType = "whitespace"; return cursor; } |
| case 19: |
| ++cursor; |
| if ((yych = this._charAt(cursor)) == '=') { gotoCase = 117; continue; }; |
| case 20: |
| this.setLexCondition(this._lexConditions.NODIV); |
| { |
| var token = this._line.charAt(cursorOnEnter); |
| if (token === "{") |
| this.tokenType = "block-start"; |
| else if (token === "}") |
| this.tokenType = "block-end"; |
| else if (token === "(") |
| this.tokenType = "brace-start"; |
| else this.tokenType = null; |
| return cursor; |
| } |
| case 21: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == '\n') { gotoCase = 16; continue; }; |
| if (yych == '\r') { gotoCase = 16; continue; }; |
| { gotoCase = 109; continue; }; |
| case 22: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 52; continue; }; |
| case 23: |
| { |
| var token = this._line.substring(cursorOnEnter, cursor); |
| if (WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties.hasOwnProperty(token)) |
| this.tokenType = WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties[token]; |
| else if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__") |
| this.tokenType = "javascript-keyword"; |
| else |
| this.tokenType = "javascript-ident"; |
| return cursor; |
| } |
| case 24: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 25: |
| yych = this._charAt(++cursor); |
| if (yych == '&') { gotoCase = 45; continue; }; |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 26: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == '\n') { gotoCase = 16; continue; }; |
| if (yych == '\r') { gotoCase = 16; continue; }; |
| { gotoCase = 98; continue; }; |
| case 27: |
| yych = this._charAt(++cursor); |
| { gotoCase = 20; continue; }; |
| case 28: |
| ++cursor; |
| { this.tokenType = "brace-end"; return cursor; } |
| case 30: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 31: |
| yych = this._charAt(++cursor); |
| if (yych == '+') { gotoCase = 45; continue; }; |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 32: |
| yych = this._charAt(++cursor); |
| if (yych == '-') { gotoCase = 45; continue; }; |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 33: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 20; continue; }; |
| if (yych <= '9') { gotoCase = 91; continue; }; |
| { gotoCase = 20; continue; }; |
| case 34: |
| yyaccept = 2; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= '.') { |
| if (yych == '*') { gotoCase = 80; continue; }; |
| } else { |
| if (yych <= '/') { gotoCase = 82; continue; }; |
| if (yych == '=') { gotoCase = 79; continue; }; |
| } |
| case 35: |
| this.setLexCondition(this._lexConditions.NODIV); |
| { this.tokenType = null; return cursor; } |
| case 36: |
| yyaccept = 3; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= 'E') { |
| if (yych <= '/') { |
| if (yych == '.') { gotoCase = 65; continue; }; |
| } else { |
| if (yych <= '7') { gotoCase = 74; continue; }; |
| if (yych >= 'E') { gotoCase = 64; continue; }; |
| } |
| } else { |
| if (yych <= 'd') { |
| if (yych == 'X') { gotoCase = 76; continue; }; |
| } else { |
| if (yych <= 'e') { gotoCase = 64; continue; }; |
| if (yych == 'x') { gotoCase = 76; continue; }; |
| } |
| } |
| case 37: |
| { this.tokenType = "javascript-number"; return cursor; } |
| case 38: |
| yyaccept = 3; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= '9') { |
| if (yych == '.') { gotoCase = 65; continue; }; |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| { gotoCase = 62; continue; }; |
| } else { |
| if (yych <= 'E') { |
| if (yych <= 'D') { gotoCase = 37; continue; }; |
| { gotoCase = 64; continue; }; |
| } else { |
| if (yych == 'e') { gotoCase = 64; continue; }; |
| { gotoCase = 37; continue; }; |
| } |
| } |
| case 39: |
| yych = this._charAt(++cursor); |
| if (yych <= ';') { gotoCase = 20; continue; }; |
| if (yych <= '<') { gotoCase = 61; continue; }; |
| if (yych <= '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 40: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 60; continue; }; |
| { gotoCase = 20; continue; }; |
| case 41: |
| yych = this._charAt(++cursor); |
| if (yych <= '<') { gotoCase = 20; continue; }; |
| if (yych <= '=') { gotoCase = 45; continue; }; |
| if (yych <= '>') { gotoCase = 58; continue; }; |
| { gotoCase = 20; continue; }; |
| case 42: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == 'u') { gotoCase = 46; continue; }; |
| { gotoCase = 16; continue; }; |
| case 43: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 44: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| if (yych != '|') { gotoCase = 20; continue; }; |
| case 45: |
| yych = this._charAt(++cursor); |
| { gotoCase = 20; continue; }; |
| case 46: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 48; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 48; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych <= 'f') { gotoCase = 48; continue; }; |
| } |
| case 47: |
| cursor = YYMARKER; |
| if (yyaccept <= 1) { |
| if (yyaccept <= 0) { |
| { gotoCase = 16; continue; }; |
| } else { |
| { gotoCase = 23; continue; }; |
| } |
| } else { |
| if (yyaccept <= 2) { |
| { gotoCase = 35; continue; }; |
| } else { |
| { gotoCase = 37; continue; }; |
| } |
| } |
| case 48: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 49; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 49: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 50; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 50: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 51; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 51: |
| yyaccept = 1; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 52: |
| if (yych <= '[') { |
| if (yych <= '/') { |
| if (yych == '$') { gotoCase = 51; continue; }; |
| { gotoCase = 23; continue; }; |
| } else { |
| if (yych <= '9') { gotoCase = 51; continue; }; |
| if (yych <= '@') { gotoCase = 23; continue; }; |
| if (yych <= 'Z') { gotoCase = 51; continue; }; |
| { gotoCase = 23; continue; }; |
| } |
| } else { |
| if (yych <= '_') { |
| if (yych <= '\\') { gotoCase = 53; continue; }; |
| if (yych <= '^') { gotoCase = 23; continue; }; |
| { gotoCase = 51; continue; }; |
| } else { |
| if (yych <= '`') { gotoCase = 23; continue; }; |
| if (yych <= 'z') { gotoCase = 51; continue; }; |
| if (yych <= String.fromCharCode(0x7F)) { gotoCase = 23; continue; }; |
| { gotoCase = 51; continue; }; |
| } |
| } |
| case 53: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych != 'u') { gotoCase = 47; continue; }; |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 55; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 55: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 56; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 56: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 57; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 57: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 51; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 51; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych <= 'f') { gotoCase = 51; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 58: |
| yych = this._charAt(++cursor); |
| if (yych <= '<') { gotoCase = 20; continue; }; |
| if (yych <= '=') { gotoCase = 45; continue; }; |
| if (yych >= '?') { gotoCase = 20; continue; }; |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 60: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 61: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 62: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '9') { |
| if (yych == '.') { gotoCase = 65; continue; }; |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| { gotoCase = 62; continue; }; |
| } else { |
| if (yych <= 'E') { |
| if (yych <= 'D') { gotoCase = 37; continue; }; |
| } else { |
| if (yych != 'e') { gotoCase = 37; continue; }; |
| } |
| } |
| case 64: |
| yych = this._charAt(++cursor); |
| if (yych <= ',') { |
| if (yych == '+') { gotoCase = 71; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= '-') { gotoCase = 71; continue; }; |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 72; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 65: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'D') { |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '9') { gotoCase = 65; continue; }; |
| { gotoCase = 37; continue; }; |
| } else { |
| if (yych <= 'E') { gotoCase = 67; continue; }; |
| if (yych != 'e') { gotoCase = 37; continue; }; |
| } |
| case 67: |
| yych = this._charAt(++cursor); |
| if (yych <= ',') { |
| if (yych != '+') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= '-') { gotoCase = 68; continue; }; |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 69; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 68: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| case 69: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '9') { gotoCase = 69; continue; }; |
| { gotoCase = 37; continue; }; |
| case 71: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| case 72: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '9') { gotoCase = 72; continue; }; |
| { gotoCase = 37; continue; }; |
| case 74: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '7') { gotoCase = 74; continue; }; |
| { gotoCase = 37; continue; }; |
| case 76: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 77; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 77: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '9') { gotoCase = 77; continue; }; |
| { gotoCase = 37; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 77; continue; }; |
| if (yych <= '`') { gotoCase = 37; continue; }; |
| if (yych <= 'f') { gotoCase = 77; continue; }; |
| { gotoCase = 37; continue; }; |
| } |
| case 79: |
| yych = this._charAt(++cursor); |
| { gotoCase = 35; continue; }; |
| case 80: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 87; continue; }; |
| { gotoCase = 80; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 87; continue; }; |
| if (yych == '*') { gotoCase = 85; continue; }; |
| { gotoCase = 80; continue; }; |
| } |
| case 82: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 84; continue; }; |
| if (yych != '\r') { gotoCase = 82; continue; }; |
| case 84: |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 85: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '*') { gotoCase = 85; continue; }; |
| if (yych == '/') { gotoCase = 89; continue; }; |
| { gotoCase = 80; continue; }; |
| case 87: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.COMMENT); |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 89: |
| ++cursor; |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 91: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'D') { |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '9') { gotoCase = 91; continue; }; |
| { gotoCase = 37; continue; }; |
| } else { |
| if (yych <= 'E') { gotoCase = 93; continue; }; |
| if (yych != 'e') { gotoCase = 37; continue; }; |
| } |
| case 93: |
| yych = this._charAt(++cursor); |
| if (yych <= ',') { |
| if (yych != '+') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= '-') { gotoCase = 94; continue; }; |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 95; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 94: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| case 95: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 37; continue; }; |
| if (yych <= '9') { gotoCase = 95; continue; }; |
| { gotoCase = 37; continue; }; |
| case 97: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 98: |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 47; continue; }; |
| if (yych <= '\f') { gotoCase = 97; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '&') { gotoCase = 97; continue; }; |
| { gotoCase = 100; continue; }; |
| } else { |
| if (yych != '\\') { gotoCase = 97; continue; }; |
| } |
| } |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'a') { |
| if (yych <= '!') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 47; continue; }; |
| { gotoCase = 103; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 103; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '"') { gotoCase = 97; continue; }; |
| if (yych <= '&') { gotoCase = 47; continue; }; |
| { gotoCase = 97; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 97; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'q') { |
| if (yych <= 'f') { |
| if (yych <= 'b') { gotoCase = 97; continue; }; |
| if (yych <= 'e') { gotoCase = 47; continue; }; |
| { gotoCase = 97; continue; }; |
| } else { |
| if (yych == 'n') { gotoCase = 97; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych == 's') { gotoCase = 47; continue; }; |
| { gotoCase = 97; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 102; continue; }; |
| if (yych <= 'v') { gotoCase = 97; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } |
| } |
| case 100: |
| ++cursor; |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 102: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 105; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 105; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych <= 'f') { gotoCase = 105; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 103: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.SSTRING); |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 105: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 106; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 106: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 107; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 107: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 97; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 97; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych <= 'f') { gotoCase = 97; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 108: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 109: |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 47; continue; }; |
| if (yych <= '\f') { gotoCase = 108; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= '"') { |
| if (yych <= '!') { gotoCase = 108; continue; }; |
| { gotoCase = 100; continue; }; |
| } else { |
| if (yych != '\\') { gotoCase = 108; continue; }; |
| } |
| } |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'a') { |
| if (yych <= '!') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 47; continue; }; |
| { gotoCase = 112; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 112; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '"') { gotoCase = 108; continue; }; |
| if (yych <= '&') { gotoCase = 47; continue; }; |
| { gotoCase = 108; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 108; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'q') { |
| if (yych <= 'f') { |
| if (yych <= 'b') { gotoCase = 108; continue; }; |
| if (yych <= 'e') { gotoCase = 47; continue; }; |
| { gotoCase = 108; continue; }; |
| } else { |
| if (yych == 'n') { gotoCase = 108; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych == 's') { gotoCase = 47; continue; }; |
| { gotoCase = 108; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 111; continue; }; |
| if (yych <= 'v') { gotoCase = 108; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| } |
| } |
| case 111: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 114; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 114; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych <= 'f') { gotoCase = 114; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 112: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.DSTRING); |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 114: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 115; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 115: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych >= ':') { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 116; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych >= 'g') { gotoCase = 47; continue; }; |
| } |
| case 116: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 47; continue; }; |
| if (yych <= '9') { gotoCase = 108; continue; }; |
| { gotoCase = 47; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 108; continue; }; |
| if (yych <= '`') { gotoCase = 47; continue; }; |
| if (yych <= 'f') { gotoCase = 108; continue; }; |
| { gotoCase = 47; continue; }; |
| } |
| case 117: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 45; continue; }; |
| { gotoCase = 20; continue; }; |
| case 118: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 119: |
| if (yych == ' ') { gotoCase = 118; continue; }; |
| { gotoCase = 18; continue; }; |
| |
| case this.case_DSTRING: |
| yych = this._charAt(cursor); |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 124; continue; }; |
| if (yych <= '\f') { gotoCase = 123; continue; }; |
| { gotoCase = 124; continue; }; |
| } else { |
| if (yych <= '"') { |
| if (yych <= '!') { gotoCase = 123; continue; }; |
| { gotoCase = 126; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 128; continue; }; |
| { gotoCase = 123; continue; }; |
| } |
| } |
| case 122: |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 123: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 130; continue; }; |
| case 124: |
| ++cursor; |
| case 125: |
| { this.tokenType = null; return cursor; } |
| case 126: |
| ++cursor; |
| case 127: |
| this.setLexCondition(this._lexConditions.NODIV); |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 128: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= 'e') { |
| if (yych <= '\'') { |
| if (yych == '"') { gotoCase = 129; continue; }; |
| if (yych <= '&') { gotoCase = 125; continue; }; |
| } else { |
| if (yych <= '\\') { |
| if (yych <= '[') { gotoCase = 125; continue; }; |
| } else { |
| if (yych != 'b') { gotoCase = 125; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'r') { |
| if (yych <= 'm') { |
| if (yych >= 'g') { gotoCase = 125; continue; }; |
| } else { |
| if (yych <= 'n') { gotoCase = 129; continue; }; |
| if (yych <= 'q') { gotoCase = 125; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych <= 's') { gotoCase = 125; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 131; continue; }; |
| if (yych >= 'w') { gotoCase = 125; continue; }; |
| } |
| } |
| } |
| case 129: |
| yyaccept = 0; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 130: |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 122; continue; }; |
| if (yych <= '\f') { gotoCase = 129; continue; }; |
| { gotoCase = 122; continue; }; |
| } else { |
| if (yych <= '"') { |
| if (yych <= '!') { gotoCase = 129; continue; }; |
| { gotoCase = 137; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 136; continue; }; |
| { gotoCase = 129; continue; }; |
| } |
| } |
| case 131: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 132; continue; }; |
| if (yych <= '9') { gotoCase = 133; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 133; continue; }; |
| if (yych <= '`') { gotoCase = 132; continue; }; |
| if (yych <= 'f') { gotoCase = 133; continue; }; |
| } |
| case 132: |
| cursor = YYMARKER; |
| if (yyaccept <= 0) { |
| { gotoCase = 122; continue; }; |
| } else { |
| { gotoCase = 125; continue; }; |
| } |
| case 133: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 132; continue; }; |
| if (yych >= ':') { gotoCase = 132; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 134; continue; }; |
| if (yych <= '`') { gotoCase = 132; continue; }; |
| if (yych >= 'g') { gotoCase = 132; continue; }; |
| } |
| case 134: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 132; continue; }; |
| if (yych >= ':') { gotoCase = 132; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 135; continue; }; |
| if (yych <= '`') { gotoCase = 132; continue; }; |
| if (yych >= 'g') { gotoCase = 132; continue; }; |
| } |
| case 135: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 132; continue; }; |
| if (yych <= '9') { gotoCase = 129; continue; }; |
| { gotoCase = 132; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 129; continue; }; |
| if (yych <= '`') { gotoCase = 132; continue; }; |
| if (yych <= 'f') { gotoCase = 129; continue; }; |
| { gotoCase = 132; continue; }; |
| } |
| case 136: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'e') { |
| if (yych <= '\'') { |
| if (yych == '"') { gotoCase = 129; continue; }; |
| if (yych <= '&') { gotoCase = 132; continue; }; |
| { gotoCase = 129; continue; }; |
| } else { |
| if (yych <= '\\') { |
| if (yych <= '[') { gotoCase = 132; continue; }; |
| { gotoCase = 129; continue; }; |
| } else { |
| if (yych == 'b') { gotoCase = 129; continue; }; |
| { gotoCase = 132; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'r') { |
| if (yych <= 'm') { |
| if (yych <= 'f') { gotoCase = 129; continue; }; |
| { gotoCase = 132; continue; }; |
| } else { |
| if (yych <= 'n') { gotoCase = 129; continue; }; |
| if (yych <= 'q') { gotoCase = 132; continue; }; |
| { gotoCase = 129; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych <= 's') { gotoCase = 132; continue; }; |
| { gotoCase = 129; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 131; continue; }; |
| if (yych <= 'v') { gotoCase = 129; continue; }; |
| { gotoCase = 132; continue; }; |
| } |
| } |
| } |
| case 137: |
| ++cursor; |
| yych = this._charAt(cursor); |
| { gotoCase = 127; continue; }; |
| |
| case this.case_NODIV: |
| yych = this._charAt(cursor); |
| if (yych <= '9') { |
| if (yych <= '\'') { |
| if (yych <= '"') { |
| if (yych <= String.fromCharCode(0x1F)) { gotoCase = 140; continue; }; |
| if (yych <= ' ') { gotoCase = 142; continue; }; |
| if (yych <= '!') { gotoCase = 144; continue; }; |
| { gotoCase = 146; continue; }; |
| } else { |
| if (yych <= '$') { |
| if (yych >= '$') { gotoCase = 147; continue; }; |
| } else { |
| if (yych <= '%') { gotoCase = 149; continue; }; |
| if (yych <= '&') { gotoCase = 150; continue; }; |
| { gotoCase = 151; continue; }; |
| } |
| } |
| } else { |
| if (yych <= ',') { |
| if (yych <= ')') { |
| if (yych <= '(') { gotoCase = 152; continue; }; |
| { gotoCase = 153; continue; }; |
| } else { |
| if (yych <= '*') { gotoCase = 155; continue; }; |
| if (yych <= '+') { gotoCase = 156; continue; }; |
| { gotoCase = 152; continue; }; |
| } |
| } else { |
| if (yych <= '.') { |
| if (yych <= '-') { gotoCase = 157; continue; }; |
| { gotoCase = 158; continue; }; |
| } else { |
| if (yych <= '/') { gotoCase = 159; continue; }; |
| if (yych <= '0') { gotoCase = 160; continue; }; |
| { gotoCase = 162; continue; }; |
| } |
| } |
| } |
| } else { |
| if (yych <= '\\') { |
| if (yych <= '>') { |
| if (yych <= ';') { gotoCase = 152; continue; }; |
| if (yych <= '<') { gotoCase = 163; continue; }; |
| if (yych <= '=') { gotoCase = 164; continue; }; |
| { gotoCase = 165; continue; }; |
| } else { |
| if (yych <= '@') { |
| if (yych <= '?') { gotoCase = 152; continue; }; |
| } else { |
| if (yych <= 'Z') { gotoCase = 147; continue; }; |
| if (yych <= '[') { gotoCase = 152; continue; }; |
| { gotoCase = 166; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'z') { |
| if (yych <= '^') { |
| if (yych <= ']') { gotoCase = 152; continue; }; |
| { gotoCase = 167; continue; }; |
| } else { |
| if (yych != '`') { gotoCase = 147; continue; }; |
| } |
| } else { |
| if (yych <= '|') { |
| if (yych <= '{') { gotoCase = 152; continue; }; |
| { gotoCase = 168; continue; }; |
| } else { |
| if (yych <= '~') { gotoCase = 152; continue; }; |
| if (yych >= 0x80) { gotoCase = 147; continue; }; |
| } |
| } |
| } |
| } |
| case 140: |
| ++cursor; |
| case 141: |
| { this.tokenType = null; return cursor; } |
| case 142: |
| ++cursor; |
| yych = this._charAt(cursor); |
| { gotoCase = 268; continue; }; |
| case 143: |
| {this.tokenType = "whitespace"; return cursor; } |
| case 144: |
| ++cursor; |
| if ((yych = this._charAt(cursor)) == '=') { gotoCase = 266; continue; }; |
| case 145: |
| { |
| var token = this._line.charAt(cursorOnEnter); |
| if (token === "{") |
| this.tokenType = "block-start"; |
| else if (token === "}") |
| this.tokenType = "block-end"; |
| else if (token === "(") |
| this.tokenType = "brace-start"; |
| else this.tokenType = null; |
| return cursor; |
| } |
| case 146: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == '\n') { gotoCase = 141; continue; }; |
| if (yych == '\r') { gotoCase = 141; continue; }; |
| { gotoCase = 258; continue; }; |
| case 147: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 176; continue; }; |
| case 148: |
| this.setLexCondition(this._lexConditions.DIV); |
| { |
| var token = this._line.substring(cursorOnEnter, cursor); |
| if (WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties.hasOwnProperty(token)) |
| this.tokenType = WebInspector.SourceJavaScriptTokenizer.GlobalObjectValueProperties[token]; |
| else if (WebInspector.SourceJavaScriptTokenizer.Keywords[token] === true && token !== "__proto__") |
| this.tokenType = "javascript-keyword"; |
| else |
| this.tokenType = "javascript-ident"; |
| return cursor; |
| } |
| case 149: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 150: |
| yych = this._charAt(++cursor); |
| if (yych == '&') { gotoCase = 169; continue; }; |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 151: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == '\n') { gotoCase = 141; continue; }; |
| if (yych == '\r') { gotoCase = 141; continue; }; |
| { gotoCase = 247; continue; }; |
| case 152: |
| yych = this._charAt(++cursor); |
| { gotoCase = 145; continue; }; |
| case 153: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.DIV); |
| { this.tokenType = "brace-end"; return cursor; } |
| case 155: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 156: |
| yych = this._charAt(++cursor); |
| if (yych == '+') { gotoCase = 169; continue; }; |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 157: |
| yych = this._charAt(++cursor); |
| if (yych == '-') { gotoCase = 169; continue; }; |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 158: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 145; continue; }; |
| if (yych <= '9') { gotoCase = 240; continue; }; |
| { gotoCase = 145; continue; }; |
| case 159: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 141; continue; }; |
| { gotoCase = 203; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 141; continue; }; |
| if (yych <= ')') { gotoCase = 203; continue; }; |
| { gotoCase = 208; continue; }; |
| } |
| } else { |
| if (yych <= 'Z') { |
| if (yych == '/') { gotoCase = 210; continue; }; |
| { gotoCase = 203; continue; }; |
| } else { |
| if (yych <= '[') { gotoCase = 206; continue; }; |
| if (yych <= '\\') { gotoCase = 205; continue; }; |
| if (yych <= ']') { gotoCase = 141; continue; }; |
| { gotoCase = 203; continue; }; |
| } |
| } |
| case 160: |
| yyaccept = 2; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= 'E') { |
| if (yych <= '/') { |
| if (yych == '.') { gotoCase = 189; continue; }; |
| } else { |
| if (yych <= '7') { gotoCase = 198; continue; }; |
| if (yych >= 'E') { gotoCase = 188; continue; }; |
| } |
| } else { |
| if (yych <= 'd') { |
| if (yych == 'X') { gotoCase = 200; continue; }; |
| } else { |
| if (yych <= 'e') { gotoCase = 188; continue; }; |
| if (yych == 'x') { gotoCase = 200; continue; }; |
| } |
| } |
| case 161: |
| this.setLexCondition(this._lexConditions.DIV); |
| { this.tokenType = "javascript-number"; return cursor; } |
| case 162: |
| yyaccept = 2; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= '9') { |
| if (yych == '.') { gotoCase = 189; continue; }; |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| { gotoCase = 186; continue; }; |
| } else { |
| if (yych <= 'E') { |
| if (yych <= 'D') { gotoCase = 161; continue; }; |
| { gotoCase = 188; continue; }; |
| } else { |
| if (yych == 'e') { gotoCase = 188; continue; }; |
| { gotoCase = 161; continue; }; |
| } |
| } |
| case 163: |
| yych = this._charAt(++cursor); |
| if (yych <= ';') { gotoCase = 145; continue; }; |
| if (yych <= '<') { gotoCase = 185; continue; }; |
| if (yych <= '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 164: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 184; continue; }; |
| { gotoCase = 145; continue; }; |
| case 165: |
| yych = this._charAt(++cursor); |
| if (yych <= '<') { gotoCase = 145; continue; }; |
| if (yych <= '=') { gotoCase = 169; continue; }; |
| if (yych <= '>') { gotoCase = 182; continue; }; |
| { gotoCase = 145; continue; }; |
| case 166: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych == 'u') { gotoCase = 170; continue; }; |
| { gotoCase = 141; continue; }; |
| case 167: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 168: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| if (yych != '|') { gotoCase = 145; continue; }; |
| case 169: |
| yych = this._charAt(++cursor); |
| { gotoCase = 145; continue; }; |
| case 170: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 172; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 172; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych <= 'f') { gotoCase = 172; continue; }; |
| } |
| case 171: |
| cursor = YYMARKER; |
| if (yyaccept <= 1) { |
| if (yyaccept <= 0) { |
| { gotoCase = 141; continue; }; |
| } else { |
| { gotoCase = 148; continue; }; |
| } |
| } else { |
| if (yyaccept <= 2) { |
| { gotoCase = 161; continue; }; |
| } else { |
| { gotoCase = 223; continue; }; |
| } |
| } |
| case 172: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 173; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 173: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 174; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 174: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 175; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 175: |
| yyaccept = 1; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 176: |
| if (yych <= '[') { |
| if (yych <= '/') { |
| if (yych == '$') { gotoCase = 175; continue; }; |
| { gotoCase = 148; continue; }; |
| } else { |
| if (yych <= '9') { gotoCase = 175; continue; }; |
| if (yych <= '@') { gotoCase = 148; continue; }; |
| if (yych <= 'Z') { gotoCase = 175; continue; }; |
| { gotoCase = 148; continue; }; |
| } |
| } else { |
| if (yych <= '_') { |
| if (yych <= '\\') { gotoCase = 177; continue; }; |
| if (yych <= '^') { gotoCase = 148; continue; }; |
| { gotoCase = 175; continue; }; |
| } else { |
| if (yych <= '`') { gotoCase = 148; continue; }; |
| if (yych <= 'z') { gotoCase = 175; continue; }; |
| if (yych <= String.fromCharCode(0x7F)) { gotoCase = 148; continue; }; |
| { gotoCase = 175; continue; }; |
| } |
| } |
| case 177: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych != 'u') { gotoCase = 171; continue; }; |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 179; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 179: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 180; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 180: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 181; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 181: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 175; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 175; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych <= 'f') { gotoCase = 175; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 182: |
| yych = this._charAt(++cursor); |
| if (yych <= '<') { gotoCase = 145; continue; }; |
| if (yych <= '=') { gotoCase = 169; continue; }; |
| if (yych >= '?') { gotoCase = 145; continue; }; |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 184: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 185: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 186: |
| yyaccept = 2; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '9') { |
| if (yych == '.') { gotoCase = 189; continue; }; |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| { gotoCase = 186; continue; }; |
| } else { |
| if (yych <= 'E') { |
| if (yych <= 'D') { gotoCase = 161; continue; }; |
| } else { |
| if (yych != 'e') { gotoCase = 161; continue; }; |
| } |
| } |
| case 188: |
| yych = this._charAt(++cursor); |
| if (yych <= ',') { |
| if (yych == '+') { gotoCase = 195; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= '-') { gotoCase = 195; continue; }; |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 196; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 189: |
| yyaccept = 2; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'D') { |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '9') { gotoCase = 189; continue; }; |
| { gotoCase = 161; continue; }; |
| } else { |
| if (yych <= 'E') { gotoCase = 191; continue; }; |
| if (yych != 'e') { gotoCase = 161; continue; }; |
| } |
| case 191: |
| yych = this._charAt(++cursor); |
| if (yych <= ',') { |
| if (yych != '+') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= '-') { gotoCase = 192; continue; }; |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 193; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 192: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| case 193: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '9') { gotoCase = 193; continue; }; |
| { gotoCase = 161; continue; }; |
| case 195: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| case 196: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '9') { gotoCase = 196; continue; }; |
| { gotoCase = 161; continue; }; |
| case 198: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '7') { gotoCase = 198; continue; }; |
| { gotoCase = 161; continue; }; |
| case 200: |
| yych = this._charAt(++cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 201; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 201: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '9') { gotoCase = 201; continue; }; |
| { gotoCase = 161; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 201; continue; }; |
| if (yych <= '`') { gotoCase = 161; continue; }; |
| if (yych <= 'f') { gotoCase = 201; continue; }; |
| { gotoCase = 161; continue; }; |
| } |
| case 203: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '.') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 203; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 171; continue; }; |
| { gotoCase = 203; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych <= '/') { gotoCase = 226; continue; }; |
| if (yych <= 'Z') { gotoCase = 203; continue; }; |
| { gotoCase = 234; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 233; continue; }; |
| if (yych <= ']') { gotoCase = 171; continue; }; |
| { gotoCase = 203; continue; }; |
| } |
| } |
| case 205: |
| yych = this._charAt(++cursor); |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| if (yych == '\r') { gotoCase = 171; continue; }; |
| { gotoCase = 203; continue; }; |
| case 206: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| { gotoCase = 206; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 171; continue; }; |
| if (yych <= ')') { gotoCase = 206; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych == '/') { gotoCase = 171; continue; }; |
| { gotoCase = 206; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 221; continue; }; |
| if (yych <= ']') { gotoCase = 219; continue; }; |
| { gotoCase = 206; continue; }; |
| } |
| } |
| case 208: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 215; continue; }; |
| { gotoCase = 208; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 215; continue; }; |
| if (yych == '*') { gotoCase = 213; continue; }; |
| { gotoCase = 208; continue; }; |
| } |
| case 210: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 212; continue; }; |
| if (yych != '\r') { gotoCase = 210; continue; }; |
| case 212: |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 213: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '*') { gotoCase = 213; continue; }; |
| if (yych == '/') { gotoCase = 217; continue; }; |
| { gotoCase = 208; continue; }; |
| case 215: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.COMMENT); |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 217: |
| ++cursor; |
| { this.tokenType = "javascript-comment"; return cursor; } |
| case 219: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| { gotoCase = 219; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 171; continue; }; |
| if (yych <= ')') { gotoCase = 219; continue; }; |
| { gotoCase = 203; continue; }; |
| } |
| } else { |
| if (yych <= 'Z') { |
| if (yych == '/') { gotoCase = 226; continue; }; |
| { gotoCase = 219; continue; }; |
| } else { |
| if (yych <= '[') { gotoCase = 224; continue; }; |
| if (yych <= '\\') { gotoCase = 222; continue; }; |
| { gotoCase = 219; continue; }; |
| } |
| } |
| case 221: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| if (yych == '\r') { gotoCase = 171; continue; }; |
| { gotoCase = 206; continue; }; |
| case 222: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 223; continue; }; |
| if (yych != '\r') { gotoCase = 219; continue; }; |
| case 223: |
| this.setLexCondition(this._lexConditions.REGEX); |
| { this.tokenType = "javascript-regexp"; return cursor; } |
| case 224: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| { gotoCase = 224; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 171; continue; }; |
| if (yych <= ')') { gotoCase = 224; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych == '/') { gotoCase = 171; continue; }; |
| { gotoCase = 224; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 231; continue; }; |
| if (yych <= ']') { gotoCase = 229; continue; }; |
| { gotoCase = 224; continue; }; |
| } |
| } |
| case 226: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'h') { |
| if (yych == 'g') { gotoCase = 226; continue; }; |
| } else { |
| if (yych <= 'i') { gotoCase = 226; continue; }; |
| if (yych == 'm') { gotoCase = 226; continue; }; |
| } |
| { this.tokenType = "javascript-regexp"; return cursor; } |
| case 229: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| { gotoCase = 229; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 171; continue; }; |
| if (yych <= ')') { gotoCase = 229; continue; }; |
| { gotoCase = 203; continue; }; |
| } |
| } else { |
| if (yych <= 'Z') { |
| if (yych == '/') { gotoCase = 226; continue; }; |
| { gotoCase = 229; continue; }; |
| } else { |
| if (yych <= '[') { gotoCase = 224; continue; }; |
| if (yych <= '\\') { gotoCase = 232; continue; }; |
| { gotoCase = 229; continue; }; |
| } |
| } |
| case 231: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| if (yych == '\r') { gotoCase = 171; continue; }; |
| { gotoCase = 224; continue; }; |
| case 232: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 223; continue; }; |
| if (yych == '\r') { gotoCase = 223; continue; }; |
| { gotoCase = 229; continue; }; |
| case 233: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 223; continue; }; |
| if (yych == '\r') { gotoCase = 223; continue; }; |
| { gotoCase = 203; continue; }; |
| case 234: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| { gotoCase = 234; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 171; continue; }; |
| if (yych <= ')') { gotoCase = 234; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych == '/') { gotoCase = 171; continue; }; |
| { gotoCase = 234; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 238; continue; }; |
| if (yych >= '^') { gotoCase = 234; continue; }; |
| } |
| } |
| case 236: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| { gotoCase = 236; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 171; continue; }; |
| if (yych <= ')') { gotoCase = 236; continue; }; |
| { gotoCase = 203; continue; }; |
| } |
| } else { |
| if (yych <= 'Z') { |
| if (yych == '/') { gotoCase = 226; continue; }; |
| { gotoCase = 236; continue; }; |
| } else { |
| if (yych <= '[') { gotoCase = 234; continue; }; |
| if (yych <= '\\') { gotoCase = 239; continue; }; |
| { gotoCase = 236; continue; }; |
| } |
| } |
| case 238: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| if (yych == '\r') { gotoCase = 171; continue; }; |
| { gotoCase = 234; continue; }; |
| case 239: |
| yyaccept = 3; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 223; continue; }; |
| if (yych == '\r') { gotoCase = 223; continue; }; |
| { gotoCase = 236; continue; }; |
| case 240: |
| yyaccept = 2; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'D') { |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '9') { gotoCase = 240; continue; }; |
| { gotoCase = 161; continue; }; |
| } else { |
| if (yych <= 'E') { gotoCase = 242; continue; }; |
| if (yych != 'e') { gotoCase = 161; continue; }; |
| } |
| case 242: |
| yych = this._charAt(++cursor); |
| if (yych <= ',') { |
| if (yych != '+') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= '-') { gotoCase = 243; continue; }; |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 244; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 243: |
| yych = this._charAt(++cursor); |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| case 244: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '/') { gotoCase = 161; continue; }; |
| if (yych <= '9') { gotoCase = 244; continue; }; |
| { gotoCase = 161; continue; }; |
| case 246: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 247: |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| if (yych <= '\f') { gotoCase = 246; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '&') { gotoCase = 246; continue; }; |
| { gotoCase = 249; continue; }; |
| } else { |
| if (yych != '\\') { gotoCase = 246; continue; }; |
| } |
| } |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'a') { |
| if (yych <= '!') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 171; continue; }; |
| { gotoCase = 252; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 252; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '"') { gotoCase = 246; continue; }; |
| if (yych <= '&') { gotoCase = 171; continue; }; |
| { gotoCase = 246; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 246; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'q') { |
| if (yych <= 'f') { |
| if (yych <= 'b') { gotoCase = 246; continue; }; |
| if (yych <= 'e') { gotoCase = 171; continue; }; |
| { gotoCase = 246; continue; }; |
| } else { |
| if (yych == 'n') { gotoCase = 246; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych == 's') { gotoCase = 171; continue; }; |
| { gotoCase = 246; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 251; continue; }; |
| if (yych <= 'v') { gotoCase = 246; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } |
| } |
| case 249: |
| ++cursor; |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 251: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 254; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 254; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych <= 'f') { gotoCase = 254; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 252: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.SSTRING); |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 254: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 255; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 255: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 256; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 256: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 246; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 246; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych <= 'f') { gotoCase = 246; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 257: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 258: |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 171; continue; }; |
| if (yych <= '\f') { gotoCase = 257; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= '"') { |
| if (yych <= '!') { gotoCase = 257; continue; }; |
| { gotoCase = 249; continue; }; |
| } else { |
| if (yych != '\\') { gotoCase = 257; continue; }; |
| } |
| } |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'a') { |
| if (yych <= '!') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 171; continue; }; |
| { gotoCase = 261; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 261; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '"') { gotoCase = 257; continue; }; |
| if (yych <= '&') { gotoCase = 171; continue; }; |
| { gotoCase = 257; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 257; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'q') { |
| if (yych <= 'f') { |
| if (yych <= 'b') { gotoCase = 257; continue; }; |
| if (yych <= 'e') { gotoCase = 171; continue; }; |
| { gotoCase = 257; continue; }; |
| } else { |
| if (yych == 'n') { gotoCase = 257; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych == 's') { gotoCase = 171; continue; }; |
| { gotoCase = 257; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 260; continue; }; |
| if (yych <= 'v') { gotoCase = 257; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| } |
| } |
| case 260: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 263; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 263; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych <= 'f') { gotoCase = 263; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 261: |
| ++cursor; |
| this.setLexCondition(this._lexConditions.DSTRING); |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 263: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 264; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 264: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych >= ':') { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 265; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych >= 'g') { gotoCase = 171; continue; }; |
| } |
| case 265: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 171; continue; }; |
| if (yych <= '9') { gotoCase = 257; continue; }; |
| { gotoCase = 171; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 257; continue; }; |
| if (yych <= '`') { gotoCase = 171; continue; }; |
| if (yych <= 'f') { gotoCase = 257; continue; }; |
| { gotoCase = 171; continue; }; |
| } |
| case 266: |
| yych = this._charAt(++cursor); |
| if (yych == '=') { gotoCase = 169; continue; }; |
| { gotoCase = 145; continue; }; |
| case 267: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 268: |
| if (yych == ' ') { gotoCase = 267; continue; }; |
| { gotoCase = 143; continue; }; |
| |
| case this.case_REGEX: |
| yych = this._charAt(cursor); |
| if (yych <= '.') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 272; continue; }; |
| { gotoCase = 273; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 273; continue; }; |
| { gotoCase = 272; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych <= '/') { gotoCase = 275; continue; }; |
| if (yych <= 'Z') { gotoCase = 272; continue; }; |
| { gotoCase = 277; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 278; continue; }; |
| if (yych <= ']') { gotoCase = 273; continue; }; |
| { gotoCase = 272; continue; }; |
| } |
| } |
| case 271: |
| { this.tokenType = "javascript-regexp"; return cursor; } |
| case 272: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 280; continue; }; |
| case 273: |
| ++cursor; |
| case 274: |
| { this.tokenType = null; return cursor; } |
| case 275: |
| ++cursor; |
| yych = this._charAt(cursor); |
| { gotoCase = 286; continue; }; |
| case 276: |
| this.setLexCondition(this._lexConditions.NODIV); |
| { this.tokenType = "javascript-regexp"; return cursor; } |
| case 277: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 274; continue; }; |
| if (yych <= '\f') { gotoCase = 284; continue; }; |
| { gotoCase = 274; continue; }; |
| } else { |
| if (yych <= '*') { |
| if (yych <= ')') { gotoCase = 284; continue; }; |
| { gotoCase = 274; continue; }; |
| } else { |
| if (yych == '/') { gotoCase = 274; continue; }; |
| { gotoCase = 284; continue; }; |
| } |
| } |
| case 278: |
| yych = this._charAt(++cursor); |
| if (yych == '\n') { gotoCase = 274; continue; }; |
| if (yych == '\r') { gotoCase = 274; continue; }; |
| case 279: |
| yyaccept = 0; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 280: |
| if (yych <= '.') { |
| if (yych <= '\n') { |
| if (yych <= '\t') { gotoCase = 279; continue; }; |
| { gotoCase = 271; continue; }; |
| } else { |
| if (yych == '\r') { gotoCase = 271; continue; }; |
| { gotoCase = 279; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych <= '/') { gotoCase = 285; continue; }; |
| if (yych <= 'Z') { gotoCase = 279; continue; }; |
| { gotoCase = 283; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 281; continue; }; |
| if (yych <= ']') { gotoCase = 271; continue; }; |
| { gotoCase = 279; continue; }; |
| } |
| } |
| case 281: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 282; continue; }; |
| if (yych != '\r') { gotoCase = 279; continue; }; |
| case 282: |
| cursor = YYMARKER; |
| if (yyaccept <= 0) { |
| { gotoCase = 271; continue; }; |
| } else { |
| { gotoCase = 274; continue; }; |
| } |
| case 283: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 284: |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 282; continue; }; |
| { gotoCase = 283; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 282; continue; }; |
| if (yych <= ')') { gotoCase = 283; continue; }; |
| { gotoCase = 282; continue; }; |
| } |
| } else { |
| if (yych <= '[') { |
| if (yych == '/') { gotoCase = 282; continue; }; |
| { gotoCase = 283; continue; }; |
| } else { |
| if (yych <= '\\') { gotoCase = 289; continue; }; |
| if (yych <= ']') { gotoCase = 287; continue; }; |
| { gotoCase = 283; continue; }; |
| } |
| } |
| case 285: |
| ++cursor; |
| yych = this._charAt(cursor); |
| case 286: |
| if (yych <= 'h') { |
| if (yych == 'g') { gotoCase = 285; continue; }; |
| { gotoCase = 276; continue; }; |
| } else { |
| if (yych <= 'i') { gotoCase = 285; continue; }; |
| if (yych == 'm') { gotoCase = 285; continue; }; |
| { gotoCase = 276; continue; }; |
| } |
| case 287: |
| yyaccept = 0; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '*') { |
| if (yych <= '\f') { |
| if (yych == '\n') { gotoCase = 271; continue; }; |
| { gotoCase = 287; continue; }; |
| } else { |
| if (yych <= '\r') { gotoCase = 271; continue; }; |
| if (yych <= ')') { gotoCase = 287; continue; }; |
| { gotoCase = 279; continue; }; |
| } |
| } else { |
| if (yych <= 'Z') { |
| if (yych == '/') { gotoCase = 285; continue; }; |
| { gotoCase = 287; continue; }; |
| } else { |
| if (yych <= '[') { gotoCase = 283; continue; }; |
| if (yych <= '\\') { gotoCase = 290; continue; }; |
| { gotoCase = 287; continue; }; |
| } |
| } |
| case 289: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 282; continue; }; |
| if (yych == '\r') { gotoCase = 282; continue; }; |
| { gotoCase = 283; continue; }; |
| case 290: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych == '\n') { gotoCase = 282; continue; }; |
| if (yych == '\r') { gotoCase = 282; continue; }; |
| { gotoCase = 287; continue; }; |
| |
| case this.case_SSTRING: |
| yych = this._charAt(cursor); |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 295; continue; }; |
| if (yych <= '\f') { gotoCase = 294; continue; }; |
| { gotoCase = 295; continue; }; |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '&') { gotoCase = 294; continue; }; |
| { gotoCase = 297; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 299; continue; }; |
| { gotoCase = 294; continue; }; |
| } |
| } |
| case 293: |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 294: |
| yyaccept = 0; |
| yych = this._charAt(YYMARKER = ++cursor); |
| { gotoCase = 301; continue; }; |
| case 295: |
| ++cursor; |
| case 296: |
| { this.tokenType = null; return cursor; } |
| case 297: |
| ++cursor; |
| case 298: |
| this.setLexCondition(this._lexConditions.NODIV); |
| { this.tokenType = "javascript-string"; return cursor; } |
| case 299: |
| yyaccept = 1; |
| yych = this._charAt(YYMARKER = ++cursor); |
| if (yych <= 'e') { |
| if (yych <= '\'') { |
| if (yych == '"') { gotoCase = 300; continue; }; |
| if (yych <= '&') { gotoCase = 296; continue; }; |
| } else { |
| if (yych <= '\\') { |
| if (yych <= '[') { gotoCase = 296; continue; }; |
| } else { |
| if (yych != 'b') { gotoCase = 296; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'r') { |
| if (yych <= 'm') { |
| if (yych >= 'g') { gotoCase = 296; continue; }; |
| } else { |
| if (yych <= 'n') { gotoCase = 300; continue; }; |
| if (yych <= 'q') { gotoCase = 296; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych <= 's') { gotoCase = 296; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 302; continue; }; |
| if (yych >= 'w') { gotoCase = 296; continue; }; |
| } |
| } |
| } |
| case 300: |
| yyaccept = 0; |
| YYMARKER = ++cursor; |
| yych = this._charAt(cursor); |
| case 301: |
| if (yych <= '\r') { |
| if (yych == '\n') { gotoCase = 293; continue; }; |
| if (yych <= '\f') { gotoCase = 300; continue; }; |
| { gotoCase = 293; continue; }; |
| } else { |
| if (yych <= '\'') { |
| if (yych <= '&') { gotoCase = 300; continue; }; |
| { gotoCase = 308; continue; }; |
| } else { |
| if (yych == '\\') { gotoCase = 307; continue; }; |
| { gotoCase = 300; continue; }; |
| } |
| } |
| case 302: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 303; continue; }; |
| if (yych <= '9') { gotoCase = 304; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 304; continue; }; |
| if (yych <= '`') { gotoCase = 303; continue; }; |
| if (yych <= 'f') { gotoCase = 304; continue; }; |
| } |
| case 303: |
| cursor = YYMARKER; |
| if (yyaccept <= 0) { |
| { gotoCase = 293; continue; }; |
| } else { |
| { gotoCase = 296; continue; }; |
| } |
| case 304: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 303; continue; }; |
| if (yych >= ':') { gotoCase = 303; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 305; continue; }; |
| if (yych <= '`') { gotoCase = 303; continue; }; |
| if (yych >= 'g') { gotoCase = 303; continue; }; |
| } |
| case 305: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 303; continue; }; |
| if (yych >= ':') { gotoCase = 303; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 306; continue; }; |
| if (yych <= '`') { gotoCase = 303; continue; }; |
| if (yych >= 'g') { gotoCase = 303; continue; }; |
| } |
| case 306: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= '@') { |
| if (yych <= '/') { gotoCase = 303; continue; }; |
| if (yych <= '9') { gotoCase = 300; continue; }; |
| { gotoCase = 303; continue; }; |
| } else { |
| if (yych <= 'F') { gotoCase = 300; continue; }; |
| if (yych <= '`') { gotoCase = 303; continue; }; |
| if (yych <= 'f') { gotoCase = 300; continue; }; |
| { gotoCase = 303; continue; }; |
| } |
| case 307: |
| ++cursor; |
| yych = this._charAt(cursor); |
| if (yych <= 'e') { |
| if (yych <= '\'') { |
| if (yych == '"') { gotoCase = 300; continue; }; |
| if (yych <= '&') { gotoCase = 303; continue; }; |
| { gotoCase = 300; continue; }; |
| } else { |
| if (yych <= '\\') { |
| if (yych <= '[') { gotoCase = 303; continue; }; |
| { gotoCase = 300; continue; }; |
| } else { |
| if (yych == 'b') { gotoCase = 300; continue; }; |
| { gotoCase = 303; continue; }; |
| } |
| } |
| } else { |
| if (yych <= 'r') { |
| if (yych <= 'm') { |
| if (yych <= 'f') { gotoCase = 300; continue; }; |
| { gotoCase = 303; continue; }; |
| } else { |
| if (yych <= 'n') { gotoCase = 300; continue; }; |
| if (yych <= 'q') { gotoCase = 303; continue; }; |
| { gotoCase = 300; continue; }; |
| } |
| } else { |
| if (yych <= 't') { |
| if (yych <= 's') { gotoCase = 303; continue; }; |
| { gotoCase = 300; continue; }; |
| } else { |
| if (yych <= 'u') { gotoCase = 302; continue; }; |
| if (yych <= 'v') { gotoCase = 300; continue; }; |
| { gotoCase = 303; continue; }; |
| } |
| } |
| } |
| case 308: |
| ++cursor; |
| yych = this._charAt(cursor); |
| { gotoCase = 298; continue; }; |
| } |
| |
| } |
| }, |
| |
| __proto__: WebInspector.SourceTokenizer.prototype |
| } |
| ; |
| |
| HTMLScriptFormatter = function(indentString) |
| { |
| WebInspector.SourceHTMLTokenizer.call(this); |
| this._indentString = indentString; |
| } |
| |
| HTMLScriptFormatter.prototype = { |
| format: function(content) |
| { |
| this.line = content; |
| this._content = content; |
| this._formattedContent = ""; |
| this._mapping = { original: [0], formatted: [0] }; |
| this._position = 0; |
| |
| var cursor = 0; |
| while (cursor < this._content.length) |
| cursor = this.nextToken(cursor); |
| |
| this._formattedContent += this._content.substring(this._position); |
| return { content: this._formattedContent, mapping: this._mapping }; |
| }, |
| |
| scriptStarted: function(cursor) |
| { |
| this._formattedContent += this._content.substring(this._position, cursor); |
| this._formattedContent += "\n"; |
| this._position = cursor; |
| }, |
| |
| scriptEnded: function(cursor) |
| { |
| if (cursor === this._position) |
| return; |
| |
| var scriptContent = this._content.substring(this._position, cursor); |
| this._mapping.original.push(this._position); |
| this._mapping.formatted.push(this._formattedContent.length); |
| var formattedScriptContent = formatScript(scriptContent, this._mapping, this._position, this._formattedContent.length, this._indentString); |
| |
| this._formattedContent += formattedScriptContent; |
| this._position = cursor; |
| }, |
| |
| styleSheetStarted: function(cursor) |
| { |
| }, |
| |
| styleSheetEnded: function(cursor) |
| { |
| }, |
| |
| __proto__: WebInspector.SourceHTMLTokenizer.prototype |
| } |
| |
| function require() |
| { |
| return parse; |
| } |
| |
| var exports = {}; |
| |
| |
| |
| |
| var KEYWORDS = array_to_hash([ |
| "break", |
| "case", |
| "catch", |
| "const", |
| "continue", |
| "default", |
| "delete", |
| "do", |
| "else", |
| "finally", |
| "for", |
| "function", |
| "if", |
| "in", |
| "instanceof", |
| "new", |
| "return", |
| "switch", |
| "throw", |
| "try", |
| "typeof", |
| "var", |
| "void", |
| "while", |
| "with" |
| ]); |
| |
| var RESERVED_WORDS = array_to_hash([ |
| "abstract", |
| "boolean", |
| "byte", |
| "char", |
| "class", |
| "debugger", |
| "double", |
| "enum", |
| "export", |
| "extends", |
| "final", |
| "float", |
| "goto", |
| "implements", |
| "import", |
| "int", |
| "interface", |
| "long", |
| "native", |
| "package", |
| "private", |
| "protected", |
| "public", |
| "short", |
| "static", |
| "super", |
| "synchronized", |
| "throws", |
| "transient", |
| "volatile" |
| ]); |
| |
| var KEYWORDS_BEFORE_EXPRESSION = array_to_hash([ |
| "return", |
| "new", |
| "delete", |
| "throw", |
| "else", |
| "case" |
| ]); |
| |
| var KEYWORDS_ATOM = array_to_hash([ |
| "false", |
| "null", |
| "true", |
| "undefined" |
| ]); |
| |
| var OPERATOR_CHARS = array_to_hash(characters("+-*&%=<>!?|~^")); |
| |
| var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i; |
| var RE_OCT_NUMBER = /^0[0-7]+$/; |
| var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i; |
| |
| var OPERATORS = array_to_hash([ |
| "in", |
| "instanceof", |
| "typeof", |
| "new", |
| "void", |
| "delete", |
| "++", |
| "--", |
| "+", |
| "-", |
| "!", |
| "~", |
| "&", |
| "|", |
| "^", |
| "*", |
| "/", |
| "%", |
| ">>", |
| "<<", |
| ">>>", |
| "<", |
| ">", |
| "<=", |
| ">=", |
| "==", |
| "===", |
| "!=", |
| "!==", |
| "?", |
| "=", |
| "+=", |
| "-=", |
| "/=", |
| "*=", |
| "%=", |
| ">>=", |
| "<<=", |
| ">>>=", |
| "%=", |
| "|=", |
| "^=", |
| "&=", |
| "&&", |
| "||" |
| ]); |
| |
| var WHITESPACE_CHARS = array_to_hash(characters(" \n\r\t")); |
| |
| var PUNC_BEFORE_EXPRESSION = array_to_hash(characters("[{}(,.;:")); |
| |
| var PUNC_CHARS = array_to_hash(characters("[]{}(),;:")); |
| |
| var REGEXP_MODIFIERS = array_to_hash(characters("gmsiy")); |
| |
| |
| |
| function is_alphanumeric_char(ch) { |
| ch = ch.charCodeAt(0); |
| return (ch >= 48 && ch <= 57) || |
| (ch >= 65 && ch <= 90) || |
| (ch >= 97 && ch <= 122); |
| }; |
| |
| function is_identifier_char(ch) { |
| return is_alphanumeric_char(ch) || ch == "$" || ch == "_"; |
| }; |
| |
| function is_digit(ch) { |
| ch = ch.charCodeAt(0); |
| return ch >= 48 && ch <= 57; |
| }; |
| |
| function parse_js_number(num) { |
| if (RE_HEX_NUMBER.test(num)) { |
| return parseInt(num.substr(2), 16); |
| } else if (RE_OCT_NUMBER.test(num)) { |
| return parseInt(num.substr(1), 8); |
| } else if (RE_DEC_NUMBER.test(num)) { |
| return parseFloat(num); |
| } |
| }; |
| |
| function JS_Parse_Error(message, line, col, pos) { |
| this.message = message; |
| this.line = line; |
| this.col = col; |
| this.pos = pos; |
| try { |
| ({})(); |
| } catch(ex) { |
| this.stack = ex.stack; |
| }; |
| }; |
| |
| JS_Parse_Error.prototype.toString = function() { |
| return this.message + " (line: " + this.line + ", col: " + this.col + ", pos: " + this.pos + ")" + "\n\n" + this.stack; |
| }; |
| |
| function js_error(message, line, col, pos) { |
| throw new JS_Parse_Error(message, line, col, pos); |
| }; |
| |
| function is_token(token, type, val) { |
| return token.type == type && (val == null || token.value == val); |
| }; |
| |
| var EX_EOF = {}; |
| |
| function tokenizer($TEXT) { |
| |
| var S = { |
| text : $TEXT.replace(/\r\n?|[\n\u2028\u2029]/g, "\n").replace(/^\uFEFF/, ''), |
| pos : 0, |
| tokpos : 0, |
| line : 0, |
| tokline : 0, |
| col : 0, |
| tokcol : 0, |
| newline_before : false, |
| regex_allowed : false, |
| comments_before : [] |
| }; |
| |
| function peek() { return S.text.charAt(S.pos); }; |
| |
| function next(signal_eof) { |
| var ch = S.text.charAt(S.pos++); |
| if (signal_eof && !ch) |
| throw EX_EOF; |
| if (ch == "\n") { |
| S.newline_before = true; |
| ++S.line; |
| S.col = 0; |
| } else { |
| ++S.col; |
| } |
| return ch; |
| }; |
| |
| function eof() { |
| return !S.peek(); |
| }; |
| |
| function find(what, signal_eof) { |
| var pos = S.text.indexOf(what, S.pos); |
| if (signal_eof && pos == -1) throw EX_EOF; |
| return pos; |
| }; |
| |
| function start_token() { |
| S.tokline = S.line; |
| S.tokcol = S.col; |
| S.tokpos = S.pos; |
| }; |
| |
| function token(type, value, is_comment) { |
| S.regex_allowed = ((type == "operator" && !HOP(UNARY_POSTFIX, value)) || |
| (type == "keyword" && HOP(KEYWORDS_BEFORE_EXPRESSION, value)) || |
| (type == "punc" && HOP(PUNC_BEFORE_EXPRESSION, value))); |
| var ret = { |
| type : type, |
| value : value, |
| line : S.tokline, |
| col : S.tokcol, |
| pos : S.tokpos, |
| nlb : S.newline_before |
| }; |
| if (!is_comment) { |
| ret.comments_before = S.comments_before; |
| S.comments_before = []; |
| } |
| S.newline_before = false; |
| return ret; |
| }; |
| |
| function skip_whitespace() { |
| while (HOP(WHITESPACE_CHARS, peek())) |
| next(); |
| }; |
| |
| function read_while(pred) { |
| var ret = "", ch = peek(), i = 0; |
| while (ch && pred(ch, i++)) { |
| ret += next(); |
| ch = peek(); |
| } |
| return ret; |
| }; |
| |
| function parse_error(err) { |
| js_error(err, S.tokline, S.tokcol, S.tokpos); |
| }; |
| |
| function read_num(prefix) { |
| var has_e = false, after_e = false, has_x = false, has_dot = prefix == "."; |
| var num = read_while(function(ch, i){ |
| if (ch == "x" || ch == "X") { |
| if (has_x) return false; |
| return has_x = true; |
| } |
| if (!has_x && (ch == "E" || ch == "e")) { |
| if (has_e) return false; |
| return has_e = after_e = true; |
| } |
| if (ch == "-") { |
| if (after_e || (i == 0 && !prefix)) return true; |
| return false; |
| } |
| if (ch == "+") return after_e; |
| after_e = false; |
| if (ch == ".") { |
| if (!has_dot) |
| return has_dot = true; |
| return false; |
| } |
| return is_alphanumeric_char(ch); |
| }); |
| if (prefix) |
| num = prefix + num; |
| var valid = parse_js_number(num); |
| if (!isNaN(valid)) { |
| return token("num", valid); |
| } else { |
| parse_error("Invalid syntax: " + num); |
| } |
| }; |
| |
| function read_escaped_char() { |
| var ch = next(true); |
| switch (ch) { |
| case "n" : return "\n"; |
| case "r" : return "\r"; |
| case "t" : return "\t"; |
| case "b" : return "\b"; |
| case "v" : return "\v"; |
| case "f" : return "\f"; |
| case "0" : return "\0"; |
| case "x" : return String.fromCharCode(hex_bytes(2)); |
| case "u" : return String.fromCharCode(hex_bytes(4)); |
| default : return ch; |
| } |
| }; |
| |
| function hex_bytes(n) { |
| var num = 0; |
| for (; n > 0; --n) { |
| var digit = parseInt(next(true), 16); |
| if (isNaN(digit)) |
| parse_error("Invalid hex-character pattern in string"); |
| num = (num << 4) | digit; |
| } |
| return num; |
| }; |
| |
| function read_string() { |
| return with_eof_error("Unterminated string constant", function(){ |
| var quote = next(), ret = ""; |
| for (;;) { |
| var ch = next(true); |
| if (ch == "\\") ch = read_escaped_char(); |
| else if (ch == quote) break; |
| ret += ch; |
| } |
| return token("string", ret); |
| }); |
| }; |
| |
| function read_line_comment() { |
| next(); |
| var i = find("\n"), ret; |
| if (i == -1) { |
| ret = S.text.substr(S.pos); |
| S.pos = S.text.length; |
| } else { |
| ret = S.text.substring(S.pos, i); |
| S.pos = i; |
| } |
| return token("comment1", ret, true); |
| }; |
| |
| function read_multiline_comment() { |
| next(); |
| return with_eof_error("Unterminated multiline comment", function(){ |
| var i = find("*/", true), |
| text = S.text.substring(S.pos, i), |
| tok = token("comment2", text, true); |
| S.pos = i + 2; |
| S.line += text.split("\n").length - 1; |
| S.newline_before = text.indexOf("\n") >= 0; |
| return tok; |
| }); |
| }; |
| |
| function read_regexp() { |
| return with_eof_error("Unterminated regular expression", function(){ |
| var prev_backslash = false, regexp = "", ch, in_class = false; |
| while ((ch = next(true))) if (prev_backslash) { |
| regexp += "\\" + ch; |
| prev_backslash = false; |
| } else if (ch == "[") { |
| in_class = true; |
| regexp += ch; |
| } else if (ch == "]" && in_class) { |
| in_class = false; |
| regexp += ch; |
| } else if (ch == "/" && !in_class) { |
| break; |
| } else if (ch == "\\") { |
| prev_backslash = true; |
| } else { |
| regexp += ch; |
| } |
| var mods = read_while(function(ch){ |
| return HOP(REGEXP_MODIFIERS, ch); |
| }); |
| return token("regexp", [ regexp, mods ]); |
| }); |
| }; |
| |
| function read_operator(prefix) { |
| function grow(op) { |
| if (!peek()) return op; |
| var bigger = op + peek(); |
| if (HOP(OPERATORS, bigger)) { |
| next(); |
| return grow(bigger); |
| } else { |
| return op; |
| } |
| }; |
| return token("operator", grow(prefix || next())); |
| }; |
| |
| function handle_slash() { |
| next(); |
| var regex_allowed = S.regex_allowed; |
| switch (peek()) { |
| case "/": |
| S.comments_before.push(read_line_comment()); |
| S.regex_allowed = regex_allowed; |
| return next_token(); |
| case "*": |
| S.comments_before.push(read_multiline_comment()); |
| S.regex_allowed = regex_allowed; |
| return next_token(); |
| } |
| return S.regex_allowed ? read_regexp() : read_operator("/"); |
| }; |
| |
| function handle_dot() { |
| next(); |
| return is_digit(peek()) |
| ? read_num(".") |
| : token("punc", "."); |
| }; |
| |
| function read_word() { |
| var word = read_while(is_identifier_char); |
| return !HOP(KEYWORDS, word) |
| ? token("name", word) |
| : HOP(OPERATORS, word) |
| ? token("operator", word) |
| : HOP(KEYWORDS_ATOM, word) |
| ? token("atom", word) |
| : token("keyword", word); |
| }; |
| |
| function with_eof_error(eof_error, cont) { |
| try { |
| return cont(); |
| } catch(ex) { |
| if (ex === EX_EOF) parse_error(eof_error); |
| else throw ex; |
| } |
| }; |
| |
| function next_token(force_regexp) { |
| if (force_regexp) |
| return read_regexp(); |
| skip_whitespace(); |
| start_token(); |
| var ch = peek(); |
| if (!ch) return token("eof"); |
| if (is_digit(ch)) return read_num(); |
| if (ch == '"' || ch == "'") return read_string(); |
| if (HOP(PUNC_CHARS, ch)) return token("punc", next()); |
| if (ch == ".") return handle_dot(); |
| if (ch == "/") return handle_slash(); |
| if (HOP(OPERATOR_CHARS, ch)) return read_operator(); |
| if (is_identifier_char(ch)) return read_word(); |
| parse_error("Unexpected character '" + ch + "'"); |
| }; |
| |
| next_token.context = function(nc) { |
| if (nc) S = nc; |
| return S; |
| }; |
| |
| return next_token; |
| |
| }; |
| |
| |
| |
| var UNARY_PREFIX = array_to_hash([ |
| "typeof", |
| "void", |
| "delete", |
| "--", |
| "++", |
| "!", |
| "~", |
| "-", |
| "+" |
| ]); |
| |
| var UNARY_POSTFIX = array_to_hash([ "--", "++" ]); |
| |
| var ASSIGNMENT = (function(a, ret, i){ |
| while (i < a.length) { |
| ret[a[i]] = a[i].substr(0, a[i].length - 1); |
| i++; |
| } |
| return ret; |
| })( |
| ["+=", "-=", "/=", "*=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&="], |
| { "=": true }, |
| 0 |
| ); |
| |
| var PRECEDENCE = (function(a, ret){ |
| for (var i = 0, n = 1; i < a.length; ++i, ++n) { |
| var b = a[i]; |
| for (var j = 0; j < b.length; ++j) { |
| ret[b[j]] = n; |
| } |
| } |
| return ret; |
| })( |
| [ |
| ["||"], |
| ["&&"], |
| ["|"], |
| ["^"], |
| ["&"], |
| ["==", "===", "!=", "!=="], |
| ["<", ">", "<=", ">=", "in", "instanceof"], |
| [">>", "<<", ">>>"], |
| ["+", "-"], |
| ["*", "/", "%"] |
| ], |
| {} |
| ); |
| |
| var STATEMENTS_WITH_LABELS = array_to_hash([ "for", "do", "while", "switch" ]); |
| |
| var ATOMIC_START_TOKEN = array_to_hash([ "atom", "num", "string", "regexp", "name" ]); |
| |
| |
| |
| function NodeWithToken(str, start, end) { |
| this.name = str; |
| this.start = start; |
| this.end = end; |
| }; |
| |
| NodeWithToken.prototype.toString = function() { return this.name; }; |
| |
| function parse($TEXT, strict_mode, embed_tokens) { |
| |
| var S = { |
| input : typeof $TEXT == "string" ? tokenizer($TEXT, true) : $TEXT, |
| token : null, |
| prev : null, |
| peeked : null, |
| in_function : 0, |
| in_loop : 0, |
| labels : [] |
| }; |
| |
| S.token = next(); |
| |
| function is(type, value) { |
| return is_token(S.token, type, value); |
| }; |
| |
| function peek() { return S.peeked || (S.peeked = S.input()); }; |
| |
| function next() { |
| S.prev = S.token; |
| if (S.peeked) { |
| S.token = S.peeked; |
| S.peeked = null; |
| } else { |
| S.token = S.input(); |
| } |
| return S.token; |
| }; |
| |
| function prev() { |
| return S.prev; |
| }; |
| |
| function croak(msg, line, col, pos) { |
| var ctx = S.input.context(); |
| js_error(msg, |
| line != null ? line : ctx.tokline, |
| col != null ? col : ctx.tokcol, |
| pos != null ? pos : ctx.tokpos); |
| }; |
| |
| function token_error(token, msg) { |
| croak(msg, token.line, token.col); |
| }; |
| |
| function unexpected(token) { |
| if (token == null) |
| token = S.token; |
| token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")"); |
| }; |
| |
| function expect_token(type, val) { |
| if (is(type, val)) { |
| return next(); |
| } |
| token_error(S.token, "Unexpected token " + S.token.type + ", expected " + type); |
| }; |
| |
| function expect(punc) { return expect_token("punc", punc); }; |
| |
| function can_insert_semicolon() { |
| return !strict_mode && ( |
| S.token.nlb || is("eof") || is("punc", "}") |
| ); |
| }; |
| |
| function semicolon() { |
| if (is("punc", ";")) next(); |
| else if (!can_insert_semicolon()) unexpected(); |
| }; |
| |
| function as() { |
| return slice(arguments); |
| }; |
| |
| function parenthesised() { |
| expect("("); |
| var ex = expression(); |
| expect(")"); |
| return ex; |
| }; |
| |
| function add_tokens(str, start, end) { |
| return new NodeWithToken(str, start, end); |
| }; |
| |
| var statement = embed_tokens ? function() { |
| var start = S.token; |
| var stmt = $statement(); |
| stmt[0] = add_tokens(stmt[0], start, prev()); |
| return stmt; |
| } : $statement; |
| |
| function $statement() { |
| if (is("operator", "/")) { |
| S.peeked = null; |
| S.token = S.input(true); |
| } |
| switch (S.token.type) { |
| case "num": |
| case "string": |
| case "regexp": |
| case "operator": |
| case "atom": |
| return simple_statement(); |
| |
| case "name": |
| return is_token(peek(), "punc", ":") |
| ? labeled_statement(prog1(S.token.value, next, next)) |
| : simple_statement(); |
| |
| case "punc": |
| switch (S.token.value) { |
| case "{": |
| return as("block", block_()); |
| case "[": |
| case "(": |
| return simple_statement(); |
| case ";": |
| next(); |
| return as("block"); |
| default: |
| unexpected(); |
| } |
| |
| case "keyword": |
| switch (prog1(S.token.value, next)) { |
| case "break": |
| return break_cont("break"); |
| |
| case "continue": |
| return break_cont("continue"); |
| |
| case "debugger": |
| semicolon(); |
| return as("debugger"); |
| |
| case "do": |
| return (function(body){ |
| expect_token("keyword", "while"); |
| return as("do", prog1(parenthesised, semicolon), body); |
| })(in_loop(statement)); |
| |
| case "for": |
| return for_(); |
| |
| case "function": |
| return function_(true); |
| |
| case "if": |
| return if_(); |
| |
| case "return": |
| if (S.in_function == 0) |
| croak("'return' outside of function"); |
| return as("return", |
| is("punc", ";") |
| ? (next(), null) |
| : can_insert_semicolon() |
| ? null |
| : prog1(expression, semicolon)); |
| |
| case "switch": |
| return as("switch", parenthesised(), switch_block_()); |
| |
| case "throw": |
| return as("throw", prog1(expression, semicolon)); |
| |
| case "try": |
| return try_(); |
| |
| case "var": |
| return prog1(var_, semicolon); |
| |
| case "const": |
| return prog1(const_, semicolon); |
| |
| case "while": |
| return as("while", parenthesised(), in_loop(statement)); |
| |
| case "with": |
| return as("with", parenthesised(), statement()); |
| |
| default: |
| unexpected(); |
| } |
| } |
| }; |
| |
| function labeled_statement(label) { |
| S.labels.push(label); |
| var start = S.token, stat = statement(); |
| if (strict_mode && !HOP(STATEMENTS_WITH_LABELS, stat[0])) |
| unexpected(start); |
| S.labels.pop(); |
| return as("label", label, stat); |
| }; |
| |
| function simple_statement() { |
| return as("stat", prog1(expression, semicolon)); |
| }; |
| |
| function break_cont(type) { |
| var name = is("name") ? S.token.value : null; |
| if (name != null) { |
| next(); |
| if (!member(name, S.labels)) |
| croak("Label " + name + " without matching loop or statement"); |
| } |
| else if (S.in_loop == 0) |
| croak(type + " not inside a loop or switch"); |
| semicolon(); |
| return as(type, name); |
| }; |
| |
| function for_() { |
| expect("("); |
| var has_var = is("keyword", "var"); |
| if (has_var) |
| next(); |
| if (is("name") && is_token(peek(), "operator", "in")) { |
| |
| var name = S.token.value; |
| next(); next(); |
| var obj = expression(); |
| expect(")"); |
| return as("for-in", has_var, name, obj, in_loop(statement)); |
| } else { |
| |
| var init = is("punc", ";") ? null : has_var ? var_() : expression(); |
| expect(";"); |
| var test = is("punc", ";") ? null : expression(); |
| expect(";"); |
| var step = is("punc", ")") ? null : expression(); |
| expect(")"); |
| return as("for", init, test, step, in_loop(statement)); |
| } |
| }; |
| |
| function function_(in_statement) { |
| var name = is("name") ? prog1(S.token.value, next) : null; |
| if (in_statement && !name) |
| unexpected(); |
| expect("("); |
| return as(in_statement ? "defun" : "function", |
| name, |
| |
| (function(first, a){ |
| while (!is("punc", ")")) { |
| if (first) first = false; else expect(","); |
| if (!is("name")) unexpected(); |
| a.push(S.token.value); |
| next(); |
| } |
| next(); |
| return a; |
| })(true, []), |
| |
| (function(){ |
| ++S.in_function; |
| var loop = S.in_loop; |
| S.in_loop = 0; |
| var a = block_(); |
| --S.in_function; |
| S.in_loop = loop; |
| return a; |
| })()); |
| }; |
| |
| function if_() { |
| var cond = parenthesised(), body = statement(), belse; |
| if (is("keyword", "else")) { |
| next(); |
| belse = statement(); |
| } |
| return as("if", cond, body, belse); |
| }; |
| |
| function block_() { |
| expect("{"); |
| var a = []; |
| while (!is("punc", "}")) { |
| if (is("eof")) unexpected(); |
| a.push(statement()); |
| } |
| next(); |
| return a; |
| }; |
| |
| var switch_block_ = curry(in_loop, function(){ |
| expect("{"); |
| var a = [], cur = null; |
| while (!is("punc", "}")) { |
| if (is("eof")) unexpected(); |
| if (is("keyword", "case")) { |
| next(); |
| cur = []; |
| a.push([ expression(), cur ]); |
| expect(":"); |
| } |
| else if (is("keyword", "default")) { |
| next(); |
| expect(":"); |
| cur = []; |
| a.push([ null, cur ]); |
| } |
| else { |
| if (!cur) unexpected(); |
| cur.push(statement()); |
| } |
| } |
| next(); |
| return a; |
| }); |
| |
| function try_() { |
| var body = block_(), bcatch, bfinally; |
| if (is("keyword", "catch")) { |
| next(); |
| expect("("); |
| if (!is("name")) |
| croak("Name expected"); |
| var name = S.token.value; |
| next(); |
| expect(")"); |
| bcatch = [ name, block_() ]; |
| } |
| if (is("keyword", "finally")) { |
| next(); |
| bfinally = block_(); |
| } |
| if (!bcatch && !bfinally) |
| croak("Missing catch/finally blocks"); |
| return as("try", body, bcatch, bfinally); |
| }; |
| |
| function vardefs() { |
| var a = []; |
| for (;;) { |
| if (!is("name")) |
| unexpected(); |
| var name = S.token.value; |
| next(); |
| if (is("operator", "=")) { |
| next(); |
| a.push([ name, expression(false) ]); |
| } else { |
| a.push([ name ]); |
| } |
| if (!is("punc", ",")) |
| break; |
| next(); |
| } |
| return a; |
| }; |
| |
| function var_() { |
| return as("var", vardefs()); |
| }; |
| |
| function const_() { |
| return as("const", vardefs()); |
| }; |
| |
| function new_() { |
| var newexp = expr_atom(false), args; |
| if (is("punc", "(")) { |
| next(); |
| args = expr_list(")"); |
| } else { |
| args = []; |
| } |
| return subscripts(as("new", newexp, args), true); |
| }; |
| |
| function expr_atom(allow_calls) { |
| if (is("operator", "new")) { |
| next(); |
| return new_(); |
| } |
| if (is("operator") && HOP(UNARY_PREFIX, S.token.value)) { |
| return make_unary("unary-prefix", |
| prog1(S.token.value, next), |
| expr_atom(allow_calls)); |
| } |
| if (is("punc")) { |
| switch (S.token.value) { |
| case "(": |
| next(); |
| return subscripts(prog1(expression, curry(expect, ")")), allow_calls); |
| case "[": |
| next(); |
| return subscripts(array_(), allow_calls); |
| case "{": |
| next(); |
| return subscripts(object_(), allow_calls); |
| } |
| unexpected(); |
| } |
| if (is("keyword", "function")) { |
| next(); |
| return subscripts(function_(false), allow_calls); |
| } |
| if (HOP(ATOMIC_START_TOKEN, S.token.type)) { |
| var atom = S.token.type == "regexp" |
| ? as("regexp", S.token.value[0], S.token.value[1]) |
| : as(S.token.type, S.token.value); |
| return subscripts(prog1(atom, next), allow_calls); |
| } |
| unexpected(); |
| }; |
| |
| function expr_list(closing, allow_trailing_comma, allow_empty) { |
| var first = true, a = []; |
| while (!is("punc", closing)) { |
| if (first) first = false; else expect(","); |
| if (allow_trailing_comma && is("punc", closing)) break; |
| if (is("punc", ",") && allow_empty) { |
| a.push([ "atom", "undefined" ]); |
| } else { |
| a.push(expression(false)); |
| } |
| } |
| next(); |
| return a; |
| }; |
| |
| function array_() { |
| return as("array", expr_list("]", !strict_mode, true)); |
| }; |
| |
| function object_() { |
| var first = true, a = []; |
| while (!is("punc", "}")) { |
| if (first) first = false; else expect(","); |
| if (!strict_mode && is("punc", "}")) |
| |
| break; |
| var type = S.token.type; |
| var name = as_property_name(); |
| if (type == "name" && (name == "get" || name == "set") && !is("punc", ":")) { |
| a.push([ as_name(), function_(false), name ]); |
| } else { |
| expect(":"); |
| a.push([ name, expression(false) ]); |
| } |
| } |
| next(); |
| return as("object", a); |
| }; |
| |
| function as_property_name() { |
| switch (S.token.type) { |
| case "num": |
| case "string": |
| return prog1(S.token.value, next); |
| } |
| return as_name(); |
| }; |
| |
| function as_name() { |
| switch (S.token.type) { |
| case "name": |
| case "operator": |
| case "keyword": |
| case "atom": |
| return prog1(S.token.value, next); |
| default: |
| unexpected(); |
| } |
| }; |
| |
| function subscripts(expr, allow_calls) { |
| if (is("punc", ".")) { |
| next(); |
| return subscripts(as("dot", expr, as_name()), allow_calls); |
| } |
| if (is("punc", "[")) { |
| next(); |
| return subscripts(as("sub", expr, prog1(expression, curry(expect, "]"))), allow_calls); |
| } |
| if (allow_calls && is("punc", "(")) { |
| next(); |
| return subscripts(as("call", expr, expr_list(")")), true); |
| } |
| if (allow_calls && is("operator") && HOP(UNARY_POSTFIX, S.token.value)) { |
| return prog1(curry(make_unary, "unary-postfix", S.token.value, expr), |
| next); |
| } |
| return expr; |
| }; |
| |
| function make_unary(tag, op, expr) { |
| if ((op == "++" || op == "--") && !is_assignable(expr)) |
| croak("Invalid use of " + op + " operator"); |
| return as(tag, op, expr); |
| }; |
| |
| function expr_op(left, min_prec) { |
| var op = is("operator") ? S.token.value : null; |
| var prec = op != null ? PRECEDENCE[op] : null; |
| if (prec != null && prec > min_prec) { |
| next(); |
| var right = expr_op(expr_atom(true), prec); |
| return expr_op(as("binary", op, left, right), min_prec); |
| } |
| return left; |
| }; |
| |
| function expr_ops() { |
| return expr_op(expr_atom(true), 0); |
| }; |
| |
| function maybe_conditional() { |
| var expr = expr_ops(); |
| if (is("operator", "?")) { |
| next(); |
| var yes = expression(false); |
| expect(":"); |
| return as("conditional", expr, yes, expression(false)); |
| } |
| return expr; |
| }; |
| |
| function is_assignable(expr) { |
| switch (expr[0]) { |
| case "dot": |
| case "sub": |
| return true; |
| case "name": |
| return expr[1] != "this"; |
| } |
| }; |
| |
| function maybe_assign() { |
| var left = maybe_conditional(), val = S.token.value; |
| if (is("operator") && HOP(ASSIGNMENT, val)) { |
| if (is_assignable(left)) { |
| next(); |
| return as("assign", ASSIGNMENT[val], left, maybe_assign()); |
| } |
| croak("Invalid assignment"); |
| } |
| return left; |
| }; |
| |
| function expression(commas) { |
| if (arguments.length == 0) |
| commas = true; |
| var expr = maybe_assign(); |
| if (commas && is("punc", ",")) { |
| next(); |
| return as("seq", expr, expression()); |
| } |
| return expr; |
| }; |
| |
| function in_loop(cont) { |
| try { |
| ++S.in_loop; |
| return cont(); |
| } finally { |
| --S.in_loop; |
| } |
| }; |
| |
| return as("toplevel", (function(a){ |
| while (!is("eof")) |
| a.push(statement()); |
| return a; |
| })([])); |
| |
| }; |
| |
| |
| |
| function curry(f) { |
| var args = slice(arguments, 1); |
| return function() { return f.apply(this, args.concat(slice(arguments))); }; |
| }; |
| |
| function prog1(ret) { |
| if (ret instanceof Function) |
| ret = ret(); |
| for (var i = 1, n = arguments.length; --n > 0; ++i) |
| arguments[i](); |
| return ret; |
| }; |
| |
| function array_to_hash(a) { |
| var ret = {}; |
| for (var i = 0; i < a.length; ++i) |
| ret[a[i]] = true; |
| return ret; |
| }; |
| |
| function slice(a, start) { |
| return Array.prototype.slice.call(a, start == null ? 0 : start); |
| }; |
| |
| function characters(str) { |
| return str.split(""); |
| }; |
| |
| function member(name, array) { |
| for (var i = array.length; --i >= 0;) |
| if (array[i] === name) |
| return true; |
| return false; |
| }; |
| |
| function HOP(obj, prop) { |
| return Object.prototype.hasOwnProperty.call(obj, prop); |
| }; |
| |
| |
| |
| exports.tokenizer = tokenizer; |
| exports.parse = parse; |
| exports.slice = slice; |
| exports.curry = curry; |
| exports.member = member; |
| exports.array_to_hash = array_to_hash; |
| exports.PRECEDENCE = PRECEDENCE; |
| exports.KEYWORDS_ATOM = KEYWORDS_ATOM; |
| exports.RESERVED_WORDS = RESERVED_WORDS; |
| exports.KEYWORDS = KEYWORDS; |
| exports.ATOMIC_START_TOKEN = ATOMIC_START_TOKEN; |
| exports.OPERATORS = OPERATORS; |
| exports.is_alphanumeric_char = is_alphanumeric_char; |
| exports.is_identifier_char = is_identifier_char; |
| ; |
| var parse = exports; |
| |
| |
| |
| 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); |
| |
| |
| 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) |
| { |
| this._tokenizer = tokenizer; |
| this._builder = builder; |
| this._token = null; |
| this._nextToken = this._tokenizer.next(); |
| } |
| |
| JavaScriptFormatter.prototype = { |
| format: function() |
| { |
| this._parseSourceElements(Tokens.EOS); |
| this._consume(Tokens.EOS); |
| }, |
| |
| _peek: function() |
| { |
| return this._nextToken.token; |
| }, |
| |
| _next: function() |
| { |
| if (this._token && this._token.token === Tokens.EOS) |
| throw "Unexpected EOS token"; |
| |
| this._builder.addToken(this._nextToken); |
| this._token = this._nextToken; |
| this._nextToken = this._tokenizer.next(this._forceRegexp); |
| this._forceRegexp = false; |
| return this._token.token; |
| }, |
| |
| _consume: function(token) |
| { |
| var next = this._next(); |
| if (next !== token) |
| throw "Unexpected token in consume: expected " + token + ", actual " + next; |
| }, |
| |
| _expect: function(token) |
| { |
| var next = this._next(); |
| if (next !== token) |
| throw "Unexpected token: expected " + token + ", actual " + next; |
| }, |
| |
| _expectSemicolon: function() |
| { |
| if (this._peek() === Tokens.SEMICOLON) |
| this._consume(Tokens.SEMICOLON); |
| }, |
| |
| _hasLineTerminatorBeforeNext: function() |
| { |
| return this._nextToken.nlb; |
| }, |
| |
| _parseSourceElements: function(endToken) |
| { |
| while (this._peek() !== endToken) { |
| this._parseStatement(); |
| this._builder.addNewLine(); |
| } |
| }, |
| |
| _parseStatementOrBlock: function() |
| { |
| if (this._peek() === Tokens.LBRACE) { |
| this._builder.addSpace(); |
| this._parseBlock(); |
| return true; |
| } |
| |
| this._builder.addNewLine(); |
| this._builder.increaseNestingLevel(); |
| this._parseStatement(); |
| this._builder.decreaseNestingLevel(); |
| }, |
| |
| _parseStatement: function() |
| { |
| switch (this._peek()) { |
| case Tokens.LBRACE: |
| return this._parseBlock(); |
| case Tokens.CONST: |
| case Tokens.VAR: |
| return this._parseVariableStatement(); |
| case Tokens.SEMICOLON: |
| return this._next(); |
| case Tokens.IF: |
| return this._parseIfStatement(); |
| case Tokens.DO: |
| return this._parseDoWhileStatement(); |
| case Tokens.WHILE: |
| return this._parseWhileStatement(); |
| case Tokens.FOR: |
| return this._parseForStatement(); |
| case Tokens.CONTINUE: |
| return this._parseContinueStatement(); |
| case Tokens.BREAK: |
| return this._parseBreakStatement(); |
| case Tokens.RETURN: |
| return this._parseReturnStatement(); |
| case Tokens.WITH: |
| return this._parseWithStatement(); |
| case Tokens.SWITCH: |
| return this._parseSwitchStatement(); |
| case Tokens.THROW: |
| return this._parseThrowStatement(); |
| case Tokens.TRY: |
| return this._parseTryStatement(); |
| case Tokens.FUNCTION: |
| return this._parseFunctionDeclaration(); |
| case Tokens.DEBUGGER: |
| return this._parseDebuggerStatement(); |
| default: |
| return this._parseExpressionOrLabelledStatement(); |
| } |
| }, |
| |
| _parseFunctionDeclaration: function() |
| { |
| this._expect(Tokens.FUNCTION); |
| this._builder.addSpace(); |
| this._expect(Tokens.IDENTIFIER); |
| this._parseFunctionLiteral() |
| }, |
| |
| _parseBlock: function() |
| { |
| this._expect(Tokens.LBRACE); |
| this._builder.addNewLine(); |
| this._builder.increaseNestingLevel(); |
| while (this._peek() !== Tokens.RBRACE) { |
| this._parseStatement(); |
| this._builder.addNewLine(); |
| } |
| this._builder.decreaseNestingLevel(); |
| this._expect(Tokens.RBRACE); |
| }, |
| |
| _parseVariableStatement: function() |
| { |
| this._parseVariableDeclarations(); |
| this._expectSemicolon(); |
| }, |
| |
| _parseVariableDeclarations: function() |
| { |
| if (this._peek() === Tokens.VAR) |
| this._consume(Tokens.VAR); |
| else |
| this._consume(Tokens.CONST) |
| this._builder.addSpace(); |
| |
| var isFirstVariable = true; |
| do { |
| if (!isFirstVariable) { |
| this._consume(Tokens.COMMA); |
| this._builder.addSpace(); |
| } |
| isFirstVariable = false; |
| this._expect(Tokens.IDENTIFIER); |
| if (this._peek() === Tokens.ASSIGN) { |
| this._builder.addSpace(); |
| this._consume(Tokens.ASSIGN); |
| this._builder.addSpace(); |
| this._parseAssignmentExpression(); |
| } |
| } while (this._peek() === Tokens.COMMA); |
| }, |
| |
| _parseExpressionOrLabelledStatement: function() |
| { |
| this._parseExpression(); |
| if (this._peek() === Tokens.COLON) { |
| this._expect(Tokens.COLON); |
| this._builder.addSpace(); |
| this._parseStatement(); |
| } |
| this._expectSemicolon(); |
| }, |
| |
| _parseIfStatement: function() |
| { |
| this._expect(Tokens.IF); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| this._parseExpression(); |
| this._expect(Tokens.RPAREN); |
| |
| var isBlock = this._parseStatementOrBlock(); |
| if (this._peek() === Tokens.ELSE) { |
| if (isBlock) |
| this._builder.addSpace(); |
| else |
| this._builder.addNewLine(); |
| this._next(); |
| |
| if (this._peek() === Tokens.IF) { |
| this._builder.addSpace(); |
| this._parseStatement(); |
| } else |
| this._parseStatementOrBlock(); |
| } |
| }, |
| |
| _parseContinueStatement: function() |
| { |
| this._expect(Tokens.CONTINUE); |
| var token = this._peek(); |
| if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) { |
| this._builder.addSpace(); |
| this._expect(Tokens.IDENTIFIER); |
| } |
| this._expectSemicolon(); |
| }, |
| |
| _parseBreakStatement: function() |
| { |
| this._expect(Tokens.BREAK); |
| var token = this._peek(); |
| if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) { |
| this._builder.addSpace(); |
| this._expect(Tokens.IDENTIFIER); |
| } |
| this._expectSemicolon(); |
| }, |
| |
| _parseReturnStatement: function() |
| { |
| this._expect(Tokens.RETURN); |
| var token = this._peek(); |
| if (!this._hasLineTerminatorBeforeNext() && token !== Tokens.SEMICOLON && token !== Tokens.RBRACE && token !== Tokens.EOS) { |
| this._builder.addSpace(); |
| this._parseExpression(); |
| } |
| this._expectSemicolon(); |
| }, |
| |
| _parseWithStatement: function() |
| { |
| this._expect(Tokens.WITH); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| this._parseExpression(); |
| this._expect(Tokens.RPAREN); |
| this._parseStatementOrBlock(); |
| }, |
| |
| _parseCaseClause: function() |
| { |
| if (this._peek() === Tokens.CASE) { |
| this._expect(Tokens.CASE); |
| this._builder.addSpace(); |
| this._parseExpression(); |
| } else |
| this._expect(Tokens.DEFAULT); |
| this._expect(Tokens.COLON); |
| this._builder.addNewLine(); |
| |
| this._builder.increaseNestingLevel(); |
| while (this._peek() !== Tokens.CASE && this._peek() !== Tokens.DEFAULT && this._peek() !== Tokens.RBRACE) { |
| this._parseStatement(); |
| this._builder.addNewLine(); |
| } |
| this._builder.decreaseNestingLevel(); |
| }, |
| |
| _parseSwitchStatement: function() |
| { |
| this._expect(Tokens.SWITCH); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| this._parseExpression(); |
| this._expect(Tokens.RPAREN); |
| this._builder.addSpace(); |
| |
| this._expect(Tokens.LBRACE); |
| this._builder.addNewLine(); |
| this._builder.increaseNestingLevel(); |
| while (this._peek() !== Tokens.RBRACE) |
| this._parseCaseClause(); |
| this._builder.decreaseNestingLevel(); |
| this._expect(Tokens.RBRACE); |
| }, |
| |
| _parseThrowStatement: function() |
| { |
| this._expect(Tokens.THROW); |
| this._builder.addSpace(); |
| this._parseExpression(); |
| this._expectSemicolon(); |
| }, |
| |
| _parseTryStatement: function() |
| { |
| this._expect(Tokens.TRY); |
| this._builder.addSpace(); |
| this._parseBlock(); |
| |
| var token = this._peek(); |
| if (token === Tokens.CATCH) { |
| this._builder.addSpace(); |
| this._consume(Tokens.CATCH); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| this._expect(Tokens.IDENTIFIER); |
| this._expect(Tokens.RPAREN); |
| this._builder.addSpace(); |
| this._parseBlock(); |
| token = this._peek(); |
| } |
| |
| if (token === Tokens.FINALLY) { |
| this._consume(Tokens.FINALLY); |
| this._builder.addSpace(); |
| this._parseBlock(); |
| } |
| }, |
| |
| _parseDoWhileStatement: function() |
| { |
| this._expect(Tokens.DO); |
| var isBlock = this._parseStatementOrBlock(); |
| if (isBlock) |
| this._builder.addSpace(); |
| else |
| this._builder.addNewLine(); |
| this._expect(Tokens.WHILE); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| this._parseExpression(); |
| this._expect(Tokens.RPAREN); |
| this._expectSemicolon(); |
| }, |
| |
| _parseWhileStatement: function() |
| { |
| this._expect(Tokens.WHILE); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| this._parseExpression(); |
| this._expect(Tokens.RPAREN); |
| this._parseStatementOrBlock(); |
| }, |
| |
| _parseForStatement: function() |
| { |
| this._expect(Tokens.FOR); |
| this._builder.addSpace(); |
| this._expect(Tokens.LPAREN); |
| if (this._peek() !== Tokens.SEMICOLON) { |
| if (this._peek() === Tokens.VAR || this._peek() === Tokens.CONST) { |
| this._parseVariableDeclarations(); |
| if (this._peek() === Tokens.IN) { |
| this._builder.addSpace(); |
| this._consume(Tokens.IN); |
| this._builder.addSpace(); |
| this._parseExpression(); |
| } |
| } else |
| this._parseExpression(); |
| } |
| |
| if (this._peek() !== Tokens.RPAREN) { |
| this._expect(Tokens.SEMICOLON); |
| this._builder.addSpace(); |
| if (this._peek() !== Tokens.SEMICOLON) |
| this._parseExpression(); |
| this._expect(Tokens.SEMICOLON); |
| this._builder.addSpace(); |
| if (this._peek() !== Tokens.RPAREN) |
| this._parseExpression(); |
| } |
| this._expect(Tokens.RPAREN); |
| |
| this._parseStatementOrBlock(); |
| }, |
| |
| _parseExpression: function() |
| { |
| this._parseAssignmentExpression(); |
| while (this._peek() === Tokens.COMMA) { |
| this._expect(Tokens.COMMA); |
| this._builder.addSpace(); |
| this._parseAssignmentExpression(); |
| } |
| }, |
| |
| _parseAssignmentExpression: function() |
| { |
| this._parseConditionalExpression(); |
| var token = this._peek(); |
| if (Tokens.ASSIGN <= token && token <= Tokens.ASSIGN_MOD) { |
| this._builder.addSpace(); |
| this._next(); |
| this._builder.addSpace(); |
| this._parseAssignmentExpression(); |
| } |
| }, |
| |
| _parseConditionalExpression: function() |
| { |
| this._parseBinaryExpression(); |
| if (this._peek() === Tokens.CONDITIONAL) { |
| this._builder.addSpace(); |
| this._consume(Tokens.CONDITIONAL); |
| this._builder.addSpace(); |
| this._parseAssignmentExpression(); |
| this._builder.addSpace(); |
| this._expect(Tokens.COLON); |
| this._builder.addSpace(); |
| this._parseAssignmentExpression(); |
| } |
| }, |
| |
| _parseBinaryExpression: function() |
| { |
| this._parseUnaryExpression(); |
| var token = this._peek(); |
| while (Tokens.OR <= token && token <= Tokens.IN) { |
| this._builder.addSpace(); |
| this._next(); |
| this._builder.addSpace(); |
| this._parseBinaryExpression(); |
| token = this._peek(); |
| } |
| }, |
| |
| _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) { |
| this._next(); |
| if (token === Tokens.DELETE || token === Tokens.TYPEOF || token === Tokens.VOID) |
| this._builder.addSpace(); |
| this._parseUnaryExpression(); |
| } else |
| return this._parsePostfixExpression(); |
| }, |
| |
| _parsePostfixExpression: function() |
| { |
| this._parseLeftHandSideExpression(); |
| var token = this._peek(); |
| if (!this._hasLineTerminatorBeforeNext() && (token === Tokens.INC || token === Tokens.DEC)) |
| this._next(); |
| }, |
| |
| _parseLeftHandSideExpression: function() |
| { |
| if (this._peek() === Tokens.NEW) |
| this._parseNewExpression(); |
| else |
| this._parseMemberExpression(); |
| |
| while (true) { |
| switch (this._peek()) { |
| case Tokens.LBRACK: |
| this._consume(Tokens.LBRACK); |
| this._parseExpression(); |
| this._expect(Tokens.RBRACK); |
| break; |
| |
| case Tokens.LPAREN: |
| this._parseArguments(); |
| break; |
| |
| case Tokens.PERIOD: |
| this._consume(Tokens.PERIOD); |
| this._expect(Tokens.IDENTIFIER); |
| break; |
| |
| default: |
| return; |
| } |
| } |
| }, |
| |
| _parseNewExpression: function() |
| { |
| this._expect(Tokens.NEW); |
| this._builder.addSpace(); |
| if (this._peek() === Tokens.NEW) |
| this._parseNewExpression(); |
| else |
| this._parseMemberExpression(); |
| }, |
| |
| _parseMemberExpression: function() |
| { |
| if (this._peek() === Tokens.FUNCTION) { |
| this._expect(Tokens.FUNCTION); |
| if (this._peek() === Tokens.IDENTIFIER) { |
| this._builder.addSpace(); |
| this._expect(Tokens.IDENTIFIER); |
| } |
| this._parseFunctionLiteral(); |
| } else |
| this._parsePrimaryExpression(); |
| |
| while (true) { |
| switch (this._peek()) { |
| case Tokens.LBRACK: |
| this._consume(Tokens.LBRACK); |
| this._parseExpression(); |
| this._expect(Tokens.RBRACK); |
| break; |
| |
| case Tokens.PERIOD: |
| this._consume(Tokens.PERIOD); |
| this._expect(Tokens.IDENTIFIER); |
| break; |
| |
| case Tokens.LPAREN: |
| this._parseArguments(); |
| break; |
| |
| default: |
| return; |
| } |
| } |
| }, |
| |
| _parseDebuggerStatement: function() |
| { |
| this._expect(Tokens.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: |
| return this._parseRegExpLiteral(); |
| case Tokens.DIV: |
| return this._parseRegExpLiteral(); |
| case Tokens.LBRACK: |
| return this._parseArrayLiteral(); |
| case Tokens.LBRACE: |
| return this._parseObjectLiteral(); |
| case Tokens.LPAREN: |
| this._consume(Tokens.LPAREN); |
| this._parseExpression(); |
| this._expect(Tokens.RPAREN); |
| return; |
| default: |
| return this._next(); |
| } |
| }, |
| |
| _parseArrayLiteral: function() |
| { |
| this._expect(Tokens.LBRACK); |
| this._builder.increaseNestingLevel(); |
| while (this._peek() !== Tokens.RBRACK) { |
| if (this._peek() !== Tokens.COMMA) |
| this._parseAssignmentExpression(); |
| if (this._peek() !== Tokens.RBRACK) { |
| this._expect(Tokens.COMMA); |
| this._builder.addSpace(); |
| } |
| } |
| this._builder.decreaseNestingLevel(); |
| this._expect(Tokens.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) { |
| this._next(); |
| this._parseFunctionLiteral(); |
| } |
| }, |
| |
| _parseObjectLiteral: function() |
| { |
| this._expect(Tokens.LBRACE); |
| this._builder.increaseNestingLevel(); |
| while (this._peek() !== Tokens.RBRACE) { |
| var token = this._peek(); |
| switch (token) { |
| case Tokens.IDENTIFIER: |
| this._consume(Tokens.IDENTIFIER); |
| var name = this._token.value; |
| if ((name === "get" || name === "set") && this._peek() !== Tokens.COLON) { |
| this._builder.addSpace(); |
| this._parseObjectLiteralGetSet(); |
| if (this._peek() !== Tokens.RBRACE) { |
| this._expect(Tokens.COMMA); |
| } |
| continue; |
| } |
| break; |
| |
| case Tokens.STRING: |
| this._consume(Tokens.STRING); |
| break; |
| |
| case Tokens.NUMBER: |
| this._consume(Tokens.NUMBER); |
| break; |
| |
| default: |
| this._next(); |
| } |
| |
| this._expect(Tokens.COLON); |
| this._builder.addSpace(); |
| this._parseAssignmentExpression(); |
| if (this._peek() !== Tokens.RBRACE) { |
| this._expect(Tokens.COMMA); |
| } |
| } |
| this._builder.decreaseNestingLevel(); |
| |
| this._expect(Tokens.RBRACE); |
| }, |
| |
| _parseRegExpLiteral: function() |
| { |
| if (this._nextToken.type === "regexp") |
| this._next(); |
| else { |
| this._forceRegexp = true; |
| this._next(); |
| } |
| }, |
| |
| _parseArguments: function() |
| { |
| this._expect(Tokens.LPAREN); |
| var done = (this._peek() === Tokens.RPAREN); |
| while (!done) { |
| this._parseAssignmentExpression(); |
| done = (this._peek() === Tokens.RPAREN); |
| if (!done) { |
| this._expect(Tokens.COMMA); |
| this._builder.addSpace(); |
| } |
| } |
| this._expect(Tokens.RPAREN); |
| }, |
| |
| _parseFunctionLiteral: function() |
| { |
| this._expect(Tokens.LPAREN); |
| var done = (this._peek() === Tokens.RPAREN); |
| while (!done) { |
| this._expect(Tokens.IDENTIFIER); |
| done = (this._peek() === Tokens.RPAREN); |
| if (!done) { |
| this._expect(Tokens.COMMA); |
| this._builder.addSpace(); |
| } |
| } |
| this._expect(Tokens.RPAREN); |
| this._builder.addSpace(); |
| |
| this._expect(Tokens.LBRACE); |
| this._builder.addNewLine(); |
| this._builder.increaseNestingLevel(); |
| this._parseSourceElements(Tokens.RBRACE); |
| this._builder.decreaseNestingLevel(); |
| this._expect(Tokens.RBRACE); |
| } |
| } |
| ; |