Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(545)

Unified Diff: sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart

Issue 11783009: Big merge from experimental to bleeding edge. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
diff --git a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
index e33d173ccb97ded0c4851088818920af0d53d7ba..eb5f364188e21a6cd654cc8ea8a9bbfde5b78dc4 100644
--- a/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
+++ b/sdk/lib/_internal/compiler/implementation/types/concrete_types_inferrer.dart
@@ -171,7 +171,9 @@ class UnionType implements ConcreteType {
ClassElement getUniqueType() {
if (baseTypes.length == 1) {
- BaseType uniqueBaseType = baseTypes.iterator().next();
+ var iterator = baseTypes.iterator;
+ iterator.moveNext();
+ BaseType uniqueBaseType = iterator.current;
if (uniqueBaseType.isClass()) {
ClassBaseType uniqueClassType = uniqueBaseType;
return uniqueClassType.element;
@@ -190,14 +192,14 @@ class UnionType implements ConcreteType {
* [: (A, D) :], [: (B, C) :] and finally [: (B, D) :].
*/
class ConcreteTypeCartesianProduct
- implements Iterable<ConcreteTypesEnvironment> {
+ extends Iterable<ConcreteTypesEnvironment> {
final ConcreteTypesInferrer inferrer;
final BaseType baseTypeOfThis;
final Map<Element, ConcreteType> concreteTypes;
ConcreteTypeCartesianProduct(this.inferrer, this.baseTypeOfThis,
this.concreteTypes);
- Iterator iterator() => concreteTypes.isEmpty
- ? [new ConcreteTypesEnvironment(inferrer, baseTypeOfThis)].iterator()
+ Iterator get iterator => concreteTypes.isEmpty
+ ? [new ConcreteTypesEnvironment(inferrer, baseTypeOfThis)].iterator
: new ConcreteTypeCartesianProductIterator(inferrer, baseTypeOfThis,
concreteTypes);
String toString() {
@@ -210,7 +212,8 @@ class ConcreteTypeCartesianProduct
/**
* An helper class for [ConcreteTypeCartesianProduct].
*/
-class ConcreteTypeCartesianProductIterator implements Iterator {
+class ConcreteTypeCartesianProductIterator
+ implements Iterator<ConcreteTypesEnvironment> {
final ConcreteTypesInferrer inferrer;
final BaseType baseTypeOfThis;
final Map<Element, ConcreteType> concreteTypes;
@@ -218,6 +221,7 @@ class ConcreteTypeCartesianProductIterator implements Iterator {
final Map<Element, Iterator> state;
int size = 1;
int counter = 0;
+ ConcreteTypesEnvironment _current;
ConcreteTypeCartesianProductIterator(this.inferrer, this.baseTypeOfThis,
Map<Element, ConcreteType> concreteTypes)
@@ -234,9 +238,7 @@ class ConcreteTypeCartesianProductIterator implements Iterator {
}
}
- bool get hasNext {
- return counter < size;
- }
+ ConcreteTypesEnvironment get current => _current;
ConcreteTypesEnvironment takeSnapshot() {
Map<Element, ConcreteType> result = new Map<Element, ConcreteType>();
@@ -246,21 +248,26 @@ class ConcreteTypeCartesianProductIterator implements Iterator {
return new ConcreteTypesEnvironment.of(inferrer, result, baseTypeOfThis);
}
- ConcreteTypesEnvironment next() {
- if (!hasNext) throw new StateError("No more elements");
+ bool moveNext() {
+ if (counter >= size) {
+ _current = null;
+ return false;
+ }
Element keyToIncrement = null;
for (final key in concreteTypes.keys) {
final iterator = state[key];
- if (iterator != null && iterator.hasNext) {
- nextValues[key] = state[key].next();
+ if (iterator != null && iterator.moveNext()) {
+ nextValues[key] = state[key].current;
break;
}
- Iterator newIterator = concreteTypes[key].baseTypes.iterator();
+ Iterator newIterator = concreteTypes[key].baseTypes.iterator;
state[key] = newIterator;
- nextValues[key] = newIterator.next();
+ newIterator.moveNext();
+ nextValues[key] = newIterator.current;
}
counter++;
- return takeSnapshot();
+ _current = takeSnapshot();
+ return true;
}
}
@@ -676,8 +683,8 @@ class ConcreteTypesInferrer {
if (argumentsTypes.positional.length < signature.requiredParameterCount) {
return null;
}
- final Iterator<ConcreteType> remainingPositionalArguments =
- argumentsTypes.positional.iterator();
+ final HasNextIterator<ConcreteType> remainingPositionalArguments =
+ new HasNextIterator<ConcreteType>(argumentsTypes.positional.iterator);
// we attach each positional parameter to its corresponding positional
// argument
for (Link<Element> requiredParameters = signature.requiredParameters;
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/tree/unparser.dart ('k') | sdk/lib/_internal/compiler/implementation/util/link.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698