OLD | NEW |
1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * @constructor | 6 * @constructor |
7 * @param {function(!ESTree.Node)} beforeVisit | 7 * @param {function(!ESTree.Node)} beforeVisit |
8 * @param {function(!ESTree.Node)} afterVisit | 8 * @param {function(!ESTree.Node)} afterVisit |
9 */ | 9 */ |
10 FormatterWorker.ESTreeWalker = function(beforeVisit, afterVisit) | 10 FormatterWorker.ESTreeWalker = function(beforeVisit, afterVisit) |
(...skipping 22 matching lines...) Expand all Loading... |
33 node.parent = parent; | 33 node.parent = parent; |
34 | 34 |
35 this._beforeVisit.call(null, node); | 35 this._beforeVisit.call(null, node); |
36 | 36 |
37 var walkOrder = FormatterWorker.ESTreeWalker._walkOrder[node.type]; | 37 var walkOrder = FormatterWorker.ESTreeWalker._walkOrder[node.type]; |
38 if (!walkOrder) { | 38 if (!walkOrder) { |
39 console.error("Walk order not defined for " + node.type); | 39 console.error("Walk order not defined for " + node.type); |
40 return; | 40 return; |
41 } | 41 } |
42 | 42 |
43 for (var i = 0; i < walkOrder.length; ++i) { | 43 if (node.type === "TemplateLiteral") { |
44 var entity = node[walkOrder[i]]; | 44 var templateLiteral = /** @type {!ESTree.TemplateLiteralNode} */ (no
de); |
45 if (Array.isArray(entity)) | 45 var expressionsLength = templateLiteral.expressions.length; |
46 this._walkArray(entity, node); | 46 for (var i = 0; i < expressionsLength; ++i) { |
47 else | 47 this._innerWalk(templateLiteral.quasis[i], templateLiteral); |
48 this._innerWalk(entity, node); | 48 this._innerWalk(templateLiteral.expressions[i], templateLiteral)
; |
| 49 } |
| 50 this._innerWalk(templateLiteral.quasis[expressionsLength], templateL
iteral); |
| 51 } else { |
| 52 for (var i = 0; i < walkOrder.length; ++i) { |
| 53 var entity = node[walkOrder[i]]; |
| 54 if (Array.isArray(entity)) |
| 55 this._walkArray(entity, node); |
| 56 else |
| 57 this._innerWalk(entity, node); |
| 58 } |
49 } | 59 } |
50 | 60 |
51 this._afterVisit.call(null, node); | 61 this._afterVisit.call(null, node); |
52 }, | 62 }, |
53 | 63 |
54 /** | 64 /** |
55 * @param {!Array.<!ESTree.Node>} nodeArray | 65 * @param {!Array.<!ESTree.Node>} nodeArray |
56 * @param {?ESTree.Node} parentNode | 66 * @param {?ESTree.Node} parentNode |
57 */ | 67 */ |
58 _walkArray: function(nodeArray, parentNode) | 68 _walkArray: function(nodeArray, parentNode) |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
93 "MethodDefinition": ["key", "value"], | 103 "MethodDefinition": ["key", "value"], |
94 "NewExpression": ["callee", "arguments"], | 104 "NewExpression": ["callee", "arguments"], |
95 "ObjectExpression": ["properties"], | 105 "ObjectExpression": ["properties"], |
96 "Program": ["body"], | 106 "Program": ["body"], |
97 "Property": ["key", "value"], | 107 "Property": ["key", "value"], |
98 "ReturnStatement": ["argument"], | 108 "ReturnStatement": ["argument"], |
99 "SequenceExpression": ["expressions"], | 109 "SequenceExpression": ["expressions"], |
100 "Super": [], | 110 "Super": [], |
101 "SwitchCase": ["test", "consequent"], | 111 "SwitchCase": ["test", "consequent"], |
102 "SwitchStatement": ["discriminant", "cases"], | 112 "SwitchStatement": ["discriminant", "cases"], |
| 113 "TaggedTemplateExpression": ["tag", "quasi"], |
| 114 "TemplateElement": [], |
| 115 "TemplateLiteral": ["quasis", "expressions"], |
103 "ThisExpression": [], | 116 "ThisExpression": [], |
104 "ThrowStatement": ["argument"], | 117 "ThrowStatement": ["argument"], |
105 "TryStatement": ["block", "handler", "finalizer"], | 118 "TryStatement": ["block", "handler", "finalizer"], |
106 "UnaryExpression": ["argument"], | 119 "UnaryExpression": ["argument"], |
107 "UpdateExpression": ["argument"], | 120 "UpdateExpression": ["argument"], |
108 "VariableDeclaration": ["declarations"], | 121 "VariableDeclaration": ["declarations"], |
109 "VariableDeclarator": ["id", "init"], | 122 "VariableDeclarator": ["id", "init"], |
110 "WhileStatement": ["test", "body"], | 123 "WhileStatement": ["test", "body"], |
111 "WithStatement": ["object", "body"], | 124 "WithStatement": ["object", "body"], |
112 "YieldExpression": ["argument"] | 125 "YieldExpression": ["argument"] |
113 } | 126 } |
OLD | NEW |