| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of js_ast; | 5 part of js_ast; |
| 6 | 6 |
| 7 abstract class NodeVisitor<T> { | 7 abstract class NodeVisitor<T> { |
| 8 T visitProgram(Program node); | 8 T visitProgram(Program node); |
| 9 | 9 |
| 10 T visitBlock(Block node); | 10 T visitBlock(Block node); |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 => visitInterpolatedNode(node); | 196 => visitInterpolatedNode(node); |
| 197 | 197 |
| 198 // Ignore comments by default. | 198 // Ignore comments by default. |
| 199 T visitComment(Comment node) => null; | 199 T visitComment(Comment node) => null; |
| 200 T visitCommentExpression(CommentExpression node) => null; | 200 T visitCommentExpression(CommentExpression node) => null; |
| 201 | 201 |
| 202 T visitAwait(Await node) => visitExpression(node); | 202 T visitAwait(Await node) => visitExpression(node); |
| 203 T visitDartYield(DartYield node) => visitStatement(node); | 203 T visitDartYield(DartYield node) => visitStatement(node); |
| 204 } | 204 } |
| 205 | 205 |
| 206 /// This tag interface has no behaviour but must be implemented by any class | |
| 207 /// that is to be stored on a [Node] as source information. | |
| 208 abstract class JavaScriptNodeSourceInformation {} | |
| 209 | |
| 210 abstract class Node { | 206 abstract class Node { |
| 211 JavaScriptNodeSourceInformation get sourceInformation => _sourceInformation; | 207 /// Sets the source location of this node. For performance reasons, we allow |
| 212 | 208 /// setting this after construction. |
| 213 JavaScriptNodeSourceInformation _sourceInformation; | 209 Object sourceInformation; |
| 214 | 210 |
| 215 accept(NodeVisitor visitor); | 211 accept(NodeVisitor visitor); |
| 216 void visitChildren(NodeVisitor visitor); | 212 void visitChildren(NodeVisitor visitor); |
| 217 | 213 |
| 218 // Shallow clone of node. Does not clone positions since the only use of this | 214 // Shallow clone of node. Does not clone positions since the only use of this |
| 219 // private method is create a copy with a new position. | 215 // private method is create a copy with a new position. |
| 220 Node _clone(); | 216 Node _clone(); |
| 221 | 217 |
| 222 // Returns a node equivalent to [this], but with new source position and end | 218 // Returns a node equivalent to [this], but with new source position and end |
| 223 // source position. | 219 // source position. |
| 224 Node withSourceInformation( | 220 Node withSourceInformation(sourceInformation) { |
| 225 JavaScriptNodeSourceInformation sourceInformation) { | 221 if (sourceInformation == this.sourceInformation) { |
| 226 if (sourceInformation == _sourceInformation) { | |
| 227 return this; | 222 return this; |
| 228 } | 223 } |
| 229 Node clone = _clone(); | 224 Node clone = _clone(); |
| 230 // TODO(sra): Should existing data be 'sticky' if we try to overwrite with | 225 // TODO(sra): Should existing data be 'sticky' if we try to overwrite with |
| 231 // `null`? | 226 // `null`? |
| 232 clone._sourceInformation = sourceInformation; | 227 clone.sourceInformation = sourceInformation; |
| 233 return clone; | 228 return clone; |
| 234 } | 229 } |
| 235 | 230 |
| 236 VariableUse asVariableUse() => null; | 231 VariableUse asVariableUse() => null; |
| 237 | 232 |
| 238 bool get isCommaOperator => false; | 233 bool get isCommaOperator => false; |
| 239 | 234 |
| 240 Statement toStatement() { | 235 Statement toStatement() { |
| 241 throw new UnsupportedError('toStatement'); | 236 throw new UnsupportedError('toStatement'); |
| 242 } | 237 } |
| (...skipping 1166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1409 final Expression expression; | 1404 final Expression expression; |
| 1410 | 1405 |
| 1411 CommentExpression(this.comment, this.expression); | 1406 CommentExpression(this.comment, this.expression); |
| 1412 | 1407 |
| 1413 int get precedenceLevel => PRIMARY; | 1408 int get precedenceLevel => PRIMARY; |
| 1414 accept(NodeVisitor visitor) => visitor.visitCommentExpression(this); | 1409 accept(NodeVisitor visitor) => visitor.visitCommentExpression(this); |
| 1415 CommentExpression _clone() => new CommentExpression(comment, expression); | 1410 CommentExpression _clone() => new CommentExpression(comment, expression); |
| 1416 | 1411 |
| 1417 void visitChildren(NodeVisitor visitor) => expression.accept(visitor); | 1412 void visitChildren(NodeVisitor visitor) => expression.accept(visitor); |
| 1418 } | 1413 } |
| OLD | NEW |