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

Side by Side Diff: lib/compiler/implementation/types/concrete_types_inferrer.dart

Issue 11267018: Make getKeys, getValues getters (keys, values). (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Update status files with co19 issue number. Created 8 years, 1 month 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « lib/compiler/implementation/ssa/variable_allocator.dart ('k') | lib/core/expect.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 206
207 ConcreteTypeCartesianProductIterator(this.baseTypeOfThis, 207 ConcreteTypeCartesianProductIterator(this.baseTypeOfThis,
208 Map<Element, ConcreteType> concreteTypes) : 208 Map<Element, ConcreteType> concreteTypes) :
209 this.concreteTypes = concreteTypes, 209 this.concreteTypes = concreteTypes,
210 nextValues = new Map<Element, BaseType>(), 210 nextValues = new Map<Element, BaseType>(),
211 state = new Map<Element, Iterator>() { 211 state = new Map<Element, Iterator>() {
212 if (concreteTypes.isEmpty) { 212 if (concreteTypes.isEmpty) {
213 size = 0; 213 size = 0;
214 return; 214 return;
215 } 215 }
216 for (final e in concreteTypes.getKeys()) { 216 for (final e in concreteTypes.keys) {
217 final baseTypes = concreteTypes[e].baseTypes; 217 final baseTypes = concreteTypes[e].baseTypes;
218 size *= baseTypes.length; 218 size *= baseTypes.length;
219 } 219 }
220 } 220 }
221 221
222 bool get hasNext { 222 bool get hasNext {
223 return counter < size; 223 return counter < size;
224 } 224 }
225 225
226 ConcreteTypesEnvironment takeSnapshot() { 226 ConcreteTypesEnvironment takeSnapshot() {
227 Map<Element, ConcreteType> result = new Map<Element, ConcreteType>(); 227 Map<Element, ConcreteType> result = new Map<Element, ConcreteType>();
228 nextValues.forEach((k, v) { result[k] = new ConcreteType.singleton(v); }); 228 nextValues.forEach((k, v) { result[k] = new ConcreteType.singleton(v); });
229 return new ConcreteTypesEnvironment.of(result, baseTypeOfThis); 229 return new ConcreteTypesEnvironment.of(result, baseTypeOfThis);
230 } 230 }
231 231
232 ConcreteTypesEnvironment next() { 232 ConcreteTypesEnvironment next() {
233 if (!hasNext) throw new NoMoreElementsException(); 233 if (!hasNext) throw new NoMoreElementsException();
234 Element keyToIncrement = null; 234 Element keyToIncrement = null;
235 for (final key in concreteTypes.getKeys()) { 235 for (final key in concreteTypes.keys) {
236 final iterator = state[key]; 236 final iterator = state[key];
237 if (iterator != null && iterator.hasNext) { 237 if (iterator != null && iterator.hasNext) {
238 nextValues[key] = state[key].next(); 238 nextValues[key] = state[key].next();
239 break; 239 break;
240 } 240 }
241 Iterator newIterator = concreteTypes[key].baseTypes.iterator(); 241 Iterator newIterator = concreteTypes[key].baseTypes.iterator();
242 state[key] = newIterator; 242 state[key] = newIterator;
243 nextValues[key] = newIterator.next(); 243 nextValues[key] = newIterator.next();
244 } 244 }
245 counter++; 245 counter++;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 newMap[element] = currentType.union(type); 310 newMap[element] = currentType.union(type);
311 } 311 }
312 }); 312 });
313 return new ConcreteTypesEnvironment.of(newMap, typeOfThis); 313 return new ConcreteTypesEnvironment.of(newMap, typeOfThis);
314 } 314 }
315 315
316 bool operator ==(ConcreteTypesEnvironment other) { 316 bool operator ==(ConcreteTypesEnvironment other) {
317 if (other is! ConcreteTypesEnvironment) return false; 317 if (other is! ConcreteTypesEnvironment) return false;
318 if (typeOfThis != other.typeOfThis) return false; 318 if (typeOfThis != other.typeOfThis) return false;
319 if (environment.length != other.environment.length) return false; 319 if (environment.length != other.environment.length) return false;
320 for (Element key in environment.getKeys()) { 320 for (Element key in environment.keys) {
321 if (!other.environment.containsKey(key) 321 if (!other.environment.containsKey(key)
322 || (environment[key] != other.environment[key])) { 322 || (environment[key] != other.environment[key])) {
323 return false; 323 return false;
324 } 324 }
325 } 325 }
326 return true; 326 return true;
327 } 327 }
328 328
329 int get hashCode { 329 int get hashCode {
330 int result = (typeOfThis != null) ? typeOfThis.hashCode : 1; 330 int result = (typeOfThis != null) ? typeOfThis.hashCode : 1;
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
656 final Map<SourceString, Element> leftOverNamedParameters = 656 final Map<SourceString, Element> leftOverNamedParameters =
657 new Map<SourceString, Element>(); 657 new Map<SourceString, Element>();
658 for (; 658 for (;
659 !remainingNamedParameters.isEmpty; 659 !remainingNamedParameters.isEmpty;
660 remainingNamedParameters = remainingNamedParameters.tail) { 660 remainingNamedParameters = remainingNamedParameters.tail) {
661 final Element namedParameter = remainingNamedParameters.head; 661 final Element namedParameter = remainingNamedParameters.head;
662 leftOverNamedParameters[namedParameter.name] = namedParameter; 662 leftOverNamedParameters[namedParameter.name] = namedParameter;
663 } 663 }
664 // we attach the named arguments to their corresponding named paramaters 664 // we attach the named arguments to their corresponding named paramaters
665 // (we don't use foreach because we want to be able to return early) 665 // (we don't use foreach because we want to be able to return early)
666 for (Identifier identifier in argumentsTypes.named.getKeys()) { 666 for (Identifier identifier in argumentsTypes.named.keys) {
667 final ConcreteType concreteType = argumentsTypes.named[identifier]; 667 final ConcreteType concreteType = argumentsTypes.named[identifier];
668 SourceString source = identifier.source; 668 SourceString source = identifier.source;
669 final Element namedParameter = leftOverNamedParameters[source]; 669 final Element namedParameter = leftOverNamedParameters[source];
670 // unexisting or already used named parameter 670 // unexisting or already used named parameter
671 if (namedParameter == null) return null; 671 if (namedParameter == null) return null;
672 result[namedParameter] = concreteType; 672 result[namedParameter] = concreteType;
673 leftOverNamedParameters.remove(source); 673 leftOverNamedParameters.remove(source);
674 }; 674 };
675 // we use null for each unused named parameter 675 // we use null for each unused named parameter
676 // TODO(polux): use default value whenever available 676 // TODO(polux): use default value whenever available
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 Element element = elements[node]; 1382 Element element = elements[node];
1383 inferrer.addCaller(element, currentMethod); 1383 inferrer.addCaller(element, currentMethod);
1384 return inferrer.getSendReturnType(element, null, 1384 return inferrer.getSendReturnType(element, null,
1385 analyzeArguments(node.arguments)); 1385 analyzeArguments(node.arguments));
1386 } 1386 }
1387 1387
1388 void internalError(String reason, {Node node}) { 1388 void internalError(String reason, {Node node}) {
1389 inferrer.fail(node, reason); 1389 inferrer.fail(node, reason);
1390 } 1390 }
1391 } 1391 }
OLDNEW
« no previous file with comments | « lib/compiler/implementation/ssa/variable_allocator.dart ('k') | lib/core/expect.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698