Index: third_party/WebKit/Source/devtools/front_end/formatter_worker/RelaxedJSONParser.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/formatter_worker/RelaxedJSONParser.js b/third_party/WebKit/Source/devtools/front_end/formatter_worker/RelaxedJSONParser.js |
index c09700ad56ecd2f252293f36ebc65dee1cbf8ad0..7312f45aff5a3373ab9a9ae7fc38a34177b373c1 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/formatter_worker/RelaxedJSONParser.js |
+++ b/third_party/WebKit/Source/devtools/front_end/formatter_worker/RelaxedJSONParser.js |
@@ -1,198 +1,178 @@ |
// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
WebInspector.RelaxedJSONParser = {}; |
/** @enum {string} */ |
WebInspector.RelaxedJSONParser.States = { |
- ExpectKey: "ExpectKey", |
- ExpectValue: "ExpectValue" |
+ ExpectKey: 'ExpectKey', |
+ ExpectValue: 'ExpectValue' |
}; |
/** @enum {*} */ |
WebInspector.RelaxedJSONParser.Keywords = { |
- "NaN": NaN, |
- "true": true, |
- "false": false, |
- "Infinity": Infinity, |
- "undefined": undefined, |
- "null": null |
+ 'NaN': NaN, |
+ 'true': true, |
+ 'false': false, |
+ 'Infinity': Infinity, |
+ 'undefined': undefined, |
+ 'null': null |
}; |
/** |
* @param {string} content |
* @return {*} |
*/ |
-WebInspector.RelaxedJSONParser.parse = function(content) |
-{ |
- var Keywords = WebInspector.RelaxedJSONParser.Keywords; |
- var States = WebInspector.RelaxedJSONParser.States; |
- content = "(" + content + ")"; |
- |
- try { |
- var root = acorn.parse(content, {}); |
- } catch (e) { |
- return null; |
- } |
- |
- var walker = new WebInspector.ESTreeWalker(beforeVisit, afterVisit); |
- |
- var rootTip = []; |
- |
- /** @type {!Array.<!WebInspector.RelaxedJSONParser.Context>} */ |
- var stack = []; |
- |
- var stackData = /** @type {!WebInspector.RelaxedJSONParser.Context} */ ({ |
- key: 0, |
- tip: rootTip, |
- state: States.ExpectValue, |
- parentIsArray: true |
- }); |
- |
- walker.setWalkNulls(true); |
- var hasExpression = false; |
- |
- walker.walk(root); |
- |
- if (hasExpression) |
- return null; |
- return rootTip.length ? rootTip[0] : null; |
- |
- /** |
- * @param {!WebInspector.RelaxedJSONParser.Context} newStack |
- */ |
- function pushStack(newStack) |
- { |
- stack.push(stackData); |
- stackData = newStack; |
- } |
- |
- function popStack() |
- { |
- stackData = stack.pop(); |
- } |
- |
- /** |
- * @param {*} value |
- */ |
- function applyValue(value) |
- { |
- stackData.tip[stackData.key] = value; |
- if (stackData.parentIsArray) |
- stackData.key++; |
- else |
- stackData.state = null; |
- } |
- |
- /** |
- * @param {!ESTree.Node} node |
- * @return {!Object|undefined} |
- */ |
- function beforeVisit(node) |
- { |
- switch (node.type) { |
- case "ObjectExpression": |
- var newTip = {}; |
- applyValue(newTip); |
- |
- pushStack(/** @type {!WebInspector.RelaxedJSONParser.Context} */ ({ |
- key: null, |
- tip: newTip, |
- state: null, |
- parentIsArray: false |
- })); |
- break; |
- case "ArrayExpression": |
- var newTip = []; |
- applyValue(newTip); |
- |
- pushStack(/** @type {!WebInspector.RelaxedJSONParser.Context} */ ({ |
- key: 0, |
- tip: newTip, |
- state: States.ExpectValue, |
- parentIsArray: true |
- })); |
- break; |
- case "Property": |
- stackData.state = States.ExpectKey; |
- break; |
- case "Literal": |
- if (stackData.state === States.ExpectKey) { |
- stackData.key = node.value; |
- stackData.state = States.ExpectValue; |
- } else if (stackData.state === States.ExpectValue) { |
- applyValue(extractValue(node)); |
- return WebInspector.ESTreeWalker.SkipSubtree; |
- } |
- break; |
- case "Identifier": |
- if (stackData.state === States.ExpectKey) { |
- stackData.key = /** @type {string} */ (node.name); |
- stackData.state = States.ExpectValue; |
- } else if (stackData.state === States.ExpectValue) { |
- applyValue(extractValue(node)); |
- return WebInspector.ESTreeWalker.SkipSubtree; |
- } |
- break; |
- case "UnaryExpression": |
- if (stackData.state === States.ExpectValue) { |
- applyValue(extractValue(node)); |
- return WebInspector.ESTreeWalker.SkipSubtree; |
- } |
- break; |
- case "Program": |
- case "ExpressionStatement": |
- break; |
- default: |
- if (stackData.state === States.ExpectValue) |
- applyValue(extractValue(node)); |
- return WebInspector.ESTreeWalker.SkipSubtree; |
+WebInspector.RelaxedJSONParser.parse = function(content) { |
+ var Keywords = WebInspector.RelaxedJSONParser.Keywords; |
+ var States = WebInspector.RelaxedJSONParser.States; |
+ content = '(' + content + ')'; |
+ |
+ try { |
+ var root = acorn.parse(content, {}); |
+ } catch (e) { |
+ return null; |
+ } |
+ |
+ var walker = new WebInspector.ESTreeWalker(beforeVisit, afterVisit); |
+ |
+ var rootTip = []; |
+ |
+ /** @type {!Array.<!WebInspector.RelaxedJSONParser.Context>} */ |
+ var stack = []; |
+ |
+ var stackData = /** @type {!WebInspector.RelaxedJSONParser.Context} */ ( |
+ {key: 0, tip: rootTip, state: States.ExpectValue, parentIsArray: true}); |
+ |
+ walker.setWalkNulls(true); |
+ var hasExpression = false; |
+ |
+ walker.walk(root); |
+ |
+ if (hasExpression) |
+ return null; |
+ return rootTip.length ? rootTip[0] : null; |
+ |
+ /** |
+ * @param {!WebInspector.RelaxedJSONParser.Context} newStack |
+ */ |
+ function pushStack(newStack) { |
+ stack.push(stackData); |
+ stackData = newStack; |
+ } |
+ |
+ function popStack() { |
+ stackData = stack.pop(); |
+ } |
+ |
+ /** |
+ * @param {*} value |
+ */ |
+ function applyValue(value) { |
+ stackData.tip[stackData.key] = value; |
+ if (stackData.parentIsArray) |
+ stackData.key++; |
+ else |
+ stackData.state = null; |
+ } |
+ |
+ /** |
+ * @param {!ESTree.Node} node |
+ * @return {!Object|undefined} |
+ */ |
+ function beforeVisit(node) { |
+ switch (node.type) { |
+ case 'ObjectExpression': |
+ var newTip = {}; |
+ applyValue(newTip); |
+ |
+ pushStack(/** @type {!WebInspector.RelaxedJSONParser.Context} */ ( |
+ {key: null, tip: newTip, state: null, parentIsArray: false})); |
+ break; |
+ case 'ArrayExpression': |
+ var newTip = []; |
+ applyValue(newTip); |
+ |
+ pushStack(/** @type {!WebInspector.RelaxedJSONParser.Context} */ ( |
+ {key: 0, tip: newTip, state: States.ExpectValue, parentIsArray: true})); |
+ break; |
+ case 'Property': |
+ stackData.state = States.ExpectKey; |
+ break; |
+ case 'Literal': |
+ if (stackData.state === States.ExpectKey) { |
+ stackData.key = node.value; |
+ stackData.state = States.ExpectValue; |
+ } else if (stackData.state === States.ExpectValue) { |
+ applyValue(extractValue(node)); |
+ return WebInspector.ESTreeWalker.SkipSubtree; |
+ } |
+ break; |
+ case 'Identifier': |
+ if (stackData.state === States.ExpectKey) { |
+ stackData.key = /** @type {string} */ (node.name); |
+ stackData.state = States.ExpectValue; |
+ } else if (stackData.state === States.ExpectValue) { |
+ applyValue(extractValue(node)); |
+ return WebInspector.ESTreeWalker.SkipSubtree; |
+ } |
+ break; |
+ case 'UnaryExpression': |
+ if (stackData.state === States.ExpectValue) { |
+ applyValue(extractValue(node)); |
+ return WebInspector.ESTreeWalker.SkipSubtree; |
} |
+ break; |
+ case 'Program': |
+ case 'ExpressionStatement': |
+ break; |
+ default: |
+ if (stackData.state === States.ExpectValue) |
+ applyValue(extractValue(node)); |
+ return WebInspector.ESTreeWalker.SkipSubtree; |
} |
- |
- /** |
- * @param {!ESTree.Node} node |
- */ |
- function afterVisit(node) |
- { |
- if (node.type === "ObjectExpression" || node.type === "ArrayExpression") |
- popStack(); |
+ } |
+ |
+ /** |
+ * @param {!ESTree.Node} node |
+ */ |
+ function afterVisit(node) { |
+ if (node.type === 'ObjectExpression' || node.type === 'ArrayExpression') |
+ popStack(); |
+ } |
+ |
+ /** |
+ * @param {!ESTree.Node} node |
+ * @return {*} |
+ */ |
+ function extractValue(node) { |
+ var isNegative = false; |
+ var originalNode = node; |
+ var value; |
+ if (node.type === 'UnaryExpression' && (node.operator === '-' || node.operator === '+')) { |
+ if (node.operator === '-') |
+ isNegative = true; |
+ node = /** @type {!ESTree.Node} */ (node.argument); |
} |
- /** |
- * @param {!ESTree.Node} node |
- * @return {*} |
- */ |
- function extractValue(node) |
- { |
- var isNegative = false; |
- var originalNode = node; |
- var value; |
- if (node.type === "UnaryExpression" && (node.operator === "-" || node.operator === "+")) { |
- if (node.operator === "-") |
- isNegative = true; |
- node = /** @type {!ESTree.Node} */ (node.argument); |
- } |
- |
- if (node.type === "Literal") { |
- value = node.value; |
- } else if (node.type === "Identifier" && Keywords.hasOwnProperty(node.name)) { |
- value = Keywords[node.name]; |
- } else { |
- hasExpression = true; |
- return content.substring(originalNode.start, originalNode.end); |
- } |
+ if (node.type === 'Literal') { |
+ value = node.value; |
+ } else if (node.type === 'Identifier' && Keywords.hasOwnProperty(node.name)) { |
+ value = Keywords[node.name]; |
+ } else { |
+ hasExpression = true; |
+ return content.substring(originalNode.start, originalNode.end); |
+ } |
- if (isNegative) { |
- if (typeof value !== "number") { |
- hasExpression = true; |
- return content.substring(originalNode.start, originalNode.end); |
- } |
- value = -(value); |
- } |
- return value; |
+ if (isNegative) { |
+ if (typeof value !== 'number') { |
+ hasExpression = true; |
+ return content.substring(originalNode.start, originalNode.end); |
+ } |
+ value = -(value); |
} |
+ return value; |
+ } |
}; |
/** |