| 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 abstract class Visitor<R> { | 5 abstract class Visitor<R> { |
| 6 const Visitor(); | 6 const Visitor(); |
| 7 | 7 |
| 8 abstract R visitNode(Node node); | 8 abstract R visitNode(Node node); |
| 9 | 9 |
| 10 R visitBlock(Block node) => visitStatement(node); | 10 R visitBlock(Block node) => visitStatement(node); |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 102 * | 102 * |
| 103 * The abstract part of "abstract syntax tree" is invalidated when | 103 * The abstract part of "abstract syntax tree" is invalidated when |
| 104 * supporting tools such as code formatting. These tools need concrete | 104 * supporting tools such as code formatting. These tools need concrete |
| 105 * syntax such as parentheses and no constant folding. | 105 * syntax such as parentheses and no constant folding. |
| 106 * | 106 * |
| 107 * We support these tools by storing additional references back to the | 107 * We support these tools by storing additional references back to the |
| 108 * token stream. These references are stored in fields ending with | 108 * token stream. These references are stored in fields ending with |
| 109 * "Token". | 109 * "Token". |
| 110 */ | 110 */ |
| 111 abstract class Node implements Spannable { | 111 abstract class Node implements Spannable { |
| 112 final int _hashCode; | 112 final int hashCode; |
| 113 static int _HASH_COUNTER = 0; | 113 static int _HASH_COUNTER = 0; |
| 114 | 114 |
| 115 Node() : _hashCode = ++_HASH_COUNTER; | 115 Node() : hashCode = ++_HASH_COUNTER; |
| 116 | |
| 117 hashCode() => _hashCode; | |
| 118 | 116 |
| 119 abstract accept(Visitor visitor); | 117 abstract accept(Visitor visitor); |
| 120 | 118 |
| 121 abstract visitChildren(Visitor visitor); | 119 abstract visitChildren(Visitor visitor); |
| 122 | 120 |
| 123 /** | 121 /** |
| 124 * Returns this node unparsed to Dart source string. | 122 * Returns this node unparsed to Dart source string. |
| 125 */ | 123 */ |
| 126 toString() => unparse(this); | 124 toString() => unparse(this); |
| 127 | 125 |
| (...skipping 1889 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2017 * argument). | 2015 * argument). |
| 2018 * | 2016 * |
| 2019 * TODO(ahe): This method is controversial, the team needs to discuss | 2017 * TODO(ahe): This method is controversial, the team needs to discuss |
| 2020 * if top-level methods are acceptable and what naming conventions to | 2018 * if top-level methods are acceptable and what naming conventions to |
| 2021 * use. | 2019 * use. |
| 2022 */ | 2020 */ |
| 2023 initializerDo(Node node, f(Node node)) { | 2021 initializerDo(Node node, f(Node node)) { |
| 2024 SendSet send = node.asSendSet(); | 2022 SendSet send = node.asSendSet(); |
| 2025 if (send != null) return f(send.arguments.head); | 2023 if (send != null) return f(send.arguments.head); |
| 2026 } | 2024 } |
| OLD | NEW |