| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 type_graph_inferrer; | 5 part of type_graph_inferrer; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * A set of selector names that [List] implements, that we know do not | 8 * A set of selector names that [List] implements, that we know do not |
| 9 * change the element type of the list, or let the list escape to code | 9 * change the element type of the list, or let the list escape to code |
| 10 * that might change the element type. | 10 * that might change the element type. |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 'sublist', | 119 'sublist', |
| 120 'getRange', | 120 'getRange', |
| 121 'asMap', | 121 'asMap', |
| 122 | 122 |
| 123 // From JSArray. | 123 // From JSArray. |
| 124 'checkMutable', | 124 'checkMutable', |
| 125 'checkGrowable', | 125 'checkGrowable', |
| 126 ]); | 126 ]); |
| 127 | 127 |
| 128 | 128 |
| 129 class ListTracerVisitor extends TracerVisitor { | 129 class ListTracerVisitor extends TracerVisitor<ListTypeInformation> { |
| 130 // The [List] of found assignments to the list. | 130 // The [List] of found assignments to the list. |
| 131 List<TypeInformation> assignments = <TypeInformation>[]; | 131 List<TypeInformation> assignments = <TypeInformation>[]; |
| 132 bool callsGrowableMethod = false; | 132 bool callsGrowableMethod = false; |
| 133 | 133 |
| 134 ListTracerVisitor(tracedType, inferrer) : super(tracedType, inferrer); | 134 ListTracerVisitor(tracedType, inferrer) : super(tracedType, inferrer); |
| 135 | 135 |
| 136 /** | 136 /** |
| 137 * Returns [true] if the analysis completed successfully, [false] if it | 137 * Returns [true] if the analysis completed successfully, [false] if it |
| 138 * bailed out. In the former case, [assignments] holds a list of | 138 * bailed out. In the former case, [assignments] holds a list of |
| 139 * [TypeInformation] nodes that flow into the element type of this list. | 139 * [TypeInformation] nodes that flow into the element type of this list. |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 200 callsGrowableMethod = true; | 200 callsGrowableMethod = true; |
| 201 assignments.add(inferrer.types.nullType); | 201 assignments.add(inferrer.types.nullType); |
| 202 } | 202 } |
| 203 } else if (selector.isCall() && | 203 } else if (selector.isCall() && |
| 204 !info.targets.every((element) => element.isFunction())) { | 204 !info.targets.every((element) => element.isFunction())) { |
| 205 bailout('Passed to a closure'); | 205 bailout('Passed to a closure'); |
| 206 return; | 206 return; |
| 207 } | 207 } |
| 208 } | 208 } |
| 209 } | 209 } |
| OLD | NEW |