| 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 class CancelTypeInferenceException { | 5 class CancelTypeInferenceException { |
| 6 final Node node; | 6 final Node node; |
| 7 final String reason; | 7 final String reason; |
| 8 | 8 |
| 9 CancelTypeInferenceException(this.node, this.reason); | 9 CancelTypeInferenceException(this.node, this.reason); |
| 10 } | 10 } |
| (...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 208 if (concreteTypes.isEmpty()) { | 208 if (concreteTypes.isEmpty()) { |
| 209 size = 0; | 209 size = 0; |
| 210 return; | 210 return; |
| 211 } | 211 } |
| 212 for (final e in concreteTypes.getKeys()) { | 212 for (final e in concreteTypes.getKeys()) { |
| 213 final baseTypes = concreteTypes[e].baseTypes; | 213 final baseTypes = concreteTypes[e].baseTypes; |
| 214 size *= baseTypes.length; | 214 size *= baseTypes.length; |
| 215 } | 215 } |
| 216 } | 216 } |
| 217 | 217 |
| 218 bool hasNext() { | 218 bool get hasNext { |
| 219 return counter < size; | 219 return counter < size; |
| 220 } | 220 } |
| 221 | 221 |
| 222 ConcreteTypesEnvironment takeSnapshot() { | 222 ConcreteTypesEnvironment takeSnapshot() { |
| 223 Map<Element, ConcreteType> result = new Map<Element, ConcreteType>(); | 223 Map<Element, ConcreteType> result = new Map<Element, ConcreteType>(); |
| 224 nextValues.forEach((k, v) { result[k] = new ConcreteType.singleton(v); }); | 224 nextValues.forEach((k, v) { result[k] = new ConcreteType.singleton(v); }); |
| 225 return new ConcreteTypesEnvironment.of(result, baseTypeOfThis); | 225 return new ConcreteTypesEnvironment.of(result, baseTypeOfThis); |
| 226 } | 226 } |
| 227 | 227 |
| 228 ConcreteTypesEnvironment next() { | 228 ConcreteTypesEnvironment next() { |
| 229 if (!hasNext()) throw new NoMoreElementsException(); | 229 if (!hasNext) throw new NoMoreElementsException(); |
| 230 Element keyToIncrement = null; | 230 Element keyToIncrement = null; |
| 231 for (final key in concreteTypes.getKeys()) { | 231 for (final key in concreteTypes.getKeys()) { |
| 232 final iterator = state[key]; | 232 final iterator = state[key]; |
| 233 if (iterator != null && iterator.hasNext()) { | 233 if (iterator != null && iterator.hasNext) { |
| 234 nextValues[key] = state[key].next(); | 234 nextValues[key] = state[key].next(); |
| 235 break; | 235 break; |
| 236 } | 236 } |
| 237 Iterator newIterator = concreteTypes[key].baseTypes.iterator(); | 237 Iterator newIterator = concreteTypes[key].baseTypes.iterator(); |
| 238 state[key] = newIterator; | 238 state[key] = newIterator; |
| 239 nextValues[key] = newIterator.next(); | 239 nextValues[key] = newIterator.next(); |
| 240 } | 240 } |
| 241 counter++; | 241 counter++; |
| 242 return takeSnapshot(); | 242 return takeSnapshot(); |
| 243 } | 243 } |
| (...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 for (Link<Element> requiredParameters = signature.requiredParameters; | 570 for (Link<Element> requiredParameters = signature.requiredParameters; |
| 571 !requiredParameters.isEmpty(); | 571 !requiredParameters.isEmpty(); |
| 572 requiredParameters = requiredParameters.tail) { | 572 requiredParameters = requiredParameters.tail) { |
| 573 final Element requiredParameter = requiredParameters.head; | 573 final Element requiredParameter = requiredParameters.head; |
| 574 // we know next() is defined because of the guard above | 574 // we know next() is defined because of the guard above |
| 575 result[requiredParameter] = remainingPositionalArguments.next(); | 575 result[requiredParameter] = remainingPositionalArguments.next(); |
| 576 } | 576 } |
| 577 // we attach the remaining positional arguments to their corresponding | 577 // we attach the remaining positional arguments to their corresponding |
| 578 // named arguments | 578 // named arguments |
| 579 Link<Element> remainingNamedParameters = signature.optionalParameters; | 579 Link<Element> remainingNamedParameters = signature.optionalParameters; |
| 580 while (remainingPositionalArguments.hasNext()) { | 580 while (remainingPositionalArguments.hasNext) { |
| 581 final Element namedParameter = remainingNamedParameters.head; | 581 final Element namedParameter = remainingNamedParameters.head; |
| 582 result[namedParameter] = remainingPositionalArguments.next(); | 582 result[namedParameter] = remainingPositionalArguments.next(); |
| 583 // we know tail is defined because of the guard above | 583 // we know tail is defined because of the guard above |
| 584 remainingNamedParameters = remainingNamedParameters.tail; | 584 remainingNamedParameters = remainingNamedParameters.tail; |
| 585 } | 585 } |
| 586 // we build a map out of the remaining named parameters | 586 // we build a map out of the remaining named parameters |
| 587 final Map<SourceString, Element> leftOverNamedParameters = | 587 final Map<SourceString, Element> leftOverNamedParameters = |
| 588 new Map<SourceString, Element>(); | 588 new Map<SourceString, Element>(); |
| 589 for (; | 589 for (; |
| 590 !remainingNamedParameters.isEmpty(); | 590 !remainingNamedParameters.isEmpty(); |
| (...skipping 654 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1245 Element element = elements[node]; | 1245 Element element = elements[node]; |
| 1246 inferrer.addCaller(element, currentMethod); | 1246 inferrer.addCaller(element, currentMethod); |
| 1247 return inferrer.getSendReturnType(element, null, | 1247 return inferrer.getSendReturnType(element, null, |
| 1248 analyzeArguments(node.arguments)); | 1248 analyzeArguments(node.arguments)); |
| 1249 } | 1249 } |
| 1250 | 1250 |
| 1251 void internalError(String reason, {Node node}) { | 1251 void internalError(String reason, {Node node}) { |
| 1252 inferrer.fail(node, reason); | 1252 inferrer.fail(node, reason); |
| 1253 } | 1253 } |
| 1254 } | 1254 } |
| OLD | NEW |