Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5275)

Unified Diff: chrome_linux/resources/inspector/ScriptFormatterWorker.js

Issue 7192017: Update reference builds to r89207. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/reference_builds/
Patch Set: '' Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome_linux/resources/inspector/ScriptFormatterWorker.js
===================================================================
--- chrome_linux/resources/inspector/ScriptFormatterWorker.js (revision 0)
+++ chrome_linux/resources/inspector/ScriptFormatterWorker.js (revision 0)
@@ -0,0 +1,3009 @@
+
+
+
+onmessage = function(event) {
+var result = {};
+if (event.data.mimeType === "text/html") {
+var formatter = new HTMLScriptFormatter();
+result = formatter.format(event.data.content);
+} else {
+result.mapping = { original: [0], formatted: [0] };
+result.content = formatScript(event.data.content, result.mapping, 0, 0);
+}
+postMessage(result);
+};
+
+function formatScript(content, mapping, offset, formattedOffset)
+{
+var formattedContent;
+try {
+var tokenizer = new Tokenizer(content);
+var builder = new FormattedContentBuilder(tokenizer.content(), mapping, offset, formattedOffset);
+var formatter = new JavaScriptFormatter(tokenizer, builder);
+formatter.format();
+formattedContent = builder.content();
+} catch (e) {
+formattedContent = content;
+}
+return formattedContent;
+}
+
+WebInspector = {};
+
+
+
+WebInspector.SourceTokenizer = function()
+{
+}
+
+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";
+}
+}
+
+
+WebInspector.SourceTokenizer.Registry = function() {
+this._tokenizers = {};
+this._tokenizerConstructors = {
+"text/css": "SourceCSSTokenizer",
+"text/html": "SourceHTMLTokenizer",
+"text/javascript": "SourceJavaScriptTokenizer"
+};
+}
+
+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;
+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; };
+}
+}
+}
+}
+
+}
+}
+}
+
+WebInspector.SourceHTMLTokenizer.prototype.__proto__ = WebInspector.SourceTokenizer.prototype;
+;
+
+HTMLScriptFormatter = function()
+{
+WebInspector.SourceHTMLTokenizer.call(this);
+}
+
+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);
+var formattedScriptContent = formatScript(scriptContent, this._mapping, this._position, this._formattedContent.length);
+
+this._formattedContent += formattedScriptContent;
+this._position = cursor;
+},
+
+styleSheetStarted: function(cursor)
+{
+},
+
+styleSheetEnded: function(cursor)
+{
+}
+}
+
+HTMLScriptFormatter.prototype.__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)
+{
+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._nestingLevelLevel = 0;
+}
+
+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._nestingLevelLevel += 1;
+},
+
+decreaseNestingLevel: function()
+{
+this._nestingLevelLevel -= 1;
+},
+
+content: function()
+{
+return this._formattedContent.join("");
+},
+
+mapping: function()
+{
+return { original: this._originalPositions, formatted: this._formattedPositions };
+},
+
+_addIndent: function()
+{
+for (var i = 0; i < this._nestingLevelLevel * 4; ++i)
+this.addSpace();
+},
+
+_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);
+}
+}
+;
« no previous file with comments | « chrome_linux/resources/inspector/Images/warningsErrors.png ('k') | chrome_linux/resources/inspector/devTools.css » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698