| 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 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 165 bailout('Used in JS ${info.call}'); | 165 bailout('Used in JS ${info.call}'); |
| 166 } | 166 } |
| 167 } | 167 } |
| 168 | 168 |
| 169 visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) { | 169 visitDynamicCallSiteTypeInformation(DynamicCallSiteTypeInformation info) { |
| 170 super.visitDynamicCallSiteTypeInformation(info); | 170 super.visitDynamicCallSiteTypeInformation(info); |
| 171 Selector selector = info.selector; | 171 Selector selector = info.selector; |
| 172 String selectorName = selector.name; | 172 String selectorName = selector.name; |
| 173 if (currentUser == info.receiver) { | 173 if (currentUser == info.receiver) { |
| 174 if (!okListSelectorsSet.contains(selectorName)) { | 174 if (!okListSelectorsSet.contains(selectorName)) { |
| 175 if (selector.isCall()) { | 175 if (selector.isCall) { |
| 176 int positionalLength = info.arguments.positional.length; | 176 int positionalLength = info.arguments.positional.length; |
| 177 if (selectorName == 'add') { | 177 if (selectorName == 'add') { |
| 178 if (positionalLength == 1) { | 178 if (positionalLength == 1) { |
| 179 assignments.add(info.arguments.positional[0]); | 179 assignments.add(info.arguments.positional[0]); |
| 180 } | 180 } |
| 181 } else if (selectorName == 'insert') { | 181 } else if (selectorName == 'insert') { |
| 182 if (positionalLength == 2) { | 182 if (positionalLength == 2) { |
| 183 assignments.add(info.arguments.positional[1]); | 183 assignments.add(info.arguments.positional[1]); |
| 184 } | 184 } |
| 185 } else { | 185 } else { |
| 186 bailout('Used in a not-ok selector'); | 186 bailout('Used in a not-ok selector'); |
| 187 return; | 187 return; |
| 188 } | 188 } |
| 189 } else if (selector.isIndexSet()) { | 189 } else if (selector.isIndexSet) { |
| 190 assignments.add(info.arguments.positional[1]); | 190 assignments.add(info.arguments.positional[1]); |
| 191 } else if (!selector.isIndex()) { | 191 } else if (!selector.isIndex) { |
| 192 bailout('Used in a not-ok selector'); | 192 bailout('Used in a not-ok selector'); |
| 193 return; | 193 return; |
| 194 } | 194 } |
| 195 } | 195 } |
| 196 if (!doNotChangeLengthSelectorsSet.contains(selectorName)) { | 196 if (!doNotChangeLengthSelectorsSet.contains(selectorName)) { |
| 197 callsGrowableMethod = true; | 197 callsGrowableMethod = true; |
| 198 } | 198 } |
| 199 if (selectorName == 'length' && selector.isSetter()) { | 199 if (selectorName == 'length' && selector.isSetter) { |
| 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 |