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

Side by Side Diff: pkg/compiler/lib/src/world.dart

Issue 1182053010: Revert "Split TypedSelector into Selector and TypeMask." (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 5 years, 6 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 unified diff | Download patch
« no previous file with comments | « pkg/compiler/lib/src/use_unused_api.dart ('k') | tests/compiler/dart2js/compiler_helper.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 part of dart2js; 5 part of dart2js;
6 6
7 abstract class ClassWorld { 7 abstract class ClassWorld {
8 // TODO(johnniwinther): Refine this into a `BackendClasses` interface. 8 // TODO(johnniwinther): Refine this into a `BackendClasses` interface.
9 Backend get backend; 9 Backend get backend;
10 10
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 104
105 class World implements ClassWorld { 105 class World implements ClassWorld {
106 ClassElement get objectClass => compiler.objectClass; 106 ClassElement get objectClass => compiler.objectClass;
107 ClassElement get functionClass => compiler.functionClass; 107 ClassElement get functionClass => compiler.functionClass;
108 ClassElement get boolClass => compiler.boolClass; 108 ClassElement get boolClass => compiler.boolClass;
109 ClassElement get numClass => compiler.numClass; 109 ClassElement get numClass => compiler.numClass;
110 ClassElement get intClass => compiler.intClass; 110 ClassElement get intClass => compiler.intClass;
111 ClassElement get doubleClass => compiler.doubleClass; 111 ClassElement get doubleClass => compiler.doubleClass;
112 ClassElement get stringClass => compiler.stringClass; 112 ClassElement get stringClass => compiler.stringClass;
113 113
114 Map<Selector, Map<ti.TypeMask, TypedSelector>> canonicalizedValues =
115 new Map<Selector, Map<ti.TypeMask, TypedSelector>>();
116
114 bool checkInvariants(ClassElement cls, {bool mustBeInstantiated: true}) { 117 bool checkInvariants(ClassElement cls, {bool mustBeInstantiated: true}) {
115 return 118 return
116 invariant(cls, cls.isDeclaration, 119 invariant(cls, cls.isDeclaration,
117 message: '$cls must be the declaration.') && 120 message: '$cls must be the declaration.') &&
118 invariant(cls, cls.isResolved, 121 invariant(cls, cls.isResolved,
119 message: '$cls must be resolved.') && 122 message: '$cls must be resolved.') &&
120 (!mustBeInstantiated || 123 (!mustBeInstantiated ||
121 invariant(cls, isInstantiated(cls), 124 invariant(cls, isInstantiated(cls),
122 message: '$cls is not instantiated.')); 125 message: '$cls is not instantiated.'));
123 } 126 }
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 ClassElement mixin) { 398 ClassElement mixin) {
396 // TODO(johnniwinther): Add map restricted to live classes. 399 // TODO(johnniwinther): Add map restricted to live classes.
397 // We don't support patch classes as mixin. 400 // We don't support patch classes as mixin.
398 assert(mixin.isDeclaration); 401 assert(mixin.isDeclaration);
399 List<MixinApplicationElement> users = 402 List<MixinApplicationElement> users =
400 _mixinUses.putIfAbsent(mixin, () => 403 _mixinUses.putIfAbsent(mixin, () =>
401 new List<MixinApplicationElement>()); 404 new List<MixinApplicationElement>());
402 users.add(mixinApplication); 405 users.add(mixinApplication);
403 } 406 }
404 407
405 bool hasAnyUserDefinedGetter(Selector selector, ti.TypeMask mask) { 408 bool hasAnyUserDefinedGetter(Selector selector) {
406 return allFunctions.filter(selector, mask).any((each) => each.isGetter); 409 return allFunctions.filter(selector).any((each) => each.isGetter);
407 } 410 }
408 411
409 void registerUsedElement(Element element) { 412 void registerUsedElement(Element element) {
410 if (element.isInstanceMember && !element.isAbstract) { 413 if (element.isInstanceMember && !element.isAbstract) {
411 allFunctions.add(element); 414 allFunctions.add(element);
412 } 415 }
413 } 416 }
414 417
415 VariableElement locateSingleField(Selector selector, ti.TypeMask mask) { 418 VariableElement locateSingleField(Selector selector) {
416 Element result = locateSingleElement(selector, mask); 419 Element result = locateSingleElement(selector);
417 return (result != null && result.isField) ? result : null; 420 return (result != null && result.isField) ? result : null;
418 } 421 }
419 422
420 Element locateSingleElement(Selector selector, ti.TypeMask mask) { 423 Element locateSingleElement(Selector selector) {
421 mask = mask == null 424 ti.TypeMask mask = selector.mask == null
422 ? compiler.typesTask.dynamicType 425 ? compiler.typesTask.dynamicType
423 : mask; 426 : selector.mask;
424 return mask.locateSingleElement(selector, mask, compiler); 427 return mask.locateSingleElement(selector, compiler);
425 }
426
427 ti.TypeMask extendMaskIfReachesAll(Selector selector, ti.TypeMask mask) {
428 bool canReachAll = true;
429 if (mask != null) {
430 canReachAll =
431 compiler.enabledInvokeOn &&
432 mask.needsNoSuchMethodHandling(selector, this);
433 }
434 return canReachAll ? compiler.typesTask.dynamicType : mask;
435 } 428 }
436 429
437 void addFunctionCalledInLoop(Element element) { 430 void addFunctionCalledInLoop(Element element) {
438 functionsCalledInLoop.add(element.declaration); 431 functionsCalledInLoop.add(element.declaration);
439 } 432 }
440 433
441 bool isCalledInLoop(Element element) { 434 bool isCalledInLoop(Element element) {
442 return functionsCalledInLoop.contains(element.declaration); 435 return functionsCalledInLoop.contains(element.declaration);
443 } 436 }
444 437
(...skipping 30 matching lines...) Expand all
475 void registerSideEffects(Element element, SideEffects effects) { 468 void registerSideEffects(Element element, SideEffects effects) {
476 if (sideEffectsFreeElements.contains(element)) return; 469 if (sideEffectsFreeElements.contains(element)) return;
477 sideEffects[element.declaration] = effects; 470 sideEffects[element.declaration] = effects;
478 } 471 }
479 472
480 void registerSideEffectsFree(Element element) { 473 void registerSideEffectsFree(Element element) {
481 sideEffects[element.declaration] = new SideEffects.empty(); 474 sideEffects[element.declaration] = new SideEffects.empty();
482 sideEffectsFreeElements.add(element); 475 sideEffectsFreeElements.add(element);
483 } 476 }
484 477
485 SideEffects getSideEffectsOfSelector(Selector selector, ti.TypeMask mask) { 478 SideEffects getSideEffectsOfSelector(Selector selector) {
486 // We're not tracking side effects of closures. 479 // We're not tracking side effects of closures.
487 if (selector.isClosureCall) return new SideEffects(); 480 if (selector.isClosureCall) return new SideEffects();
488 SideEffects sideEffects = new SideEffects.empty(); 481 SideEffects sideEffects = new SideEffects.empty();
489 for (Element e in allFunctions.filter(selector, mask)) { 482 for (Element e in allFunctions.filter(selector)) {
490 if (e.isField) { 483 if (e.isField) {
491 if (selector.isGetter) { 484 if (selector.isGetter) {
492 if (!fieldNeverChanges(e)) { 485 if (!fieldNeverChanges(e)) {
493 sideEffects.setDependsOnInstancePropertyStore(); 486 sideEffects.setDependsOnInstancePropertyStore();
494 } 487 }
495 } else if (selector.isSetter) { 488 } else if (selector.isSetter) {
496 sideEffects.setChangesInstanceProperty(); 489 sideEffects.setChangesInstanceProperty();
497 } else { 490 } else {
498 assert(selector.isCall); 491 assert(selector.isCall);
499 sideEffects.setAllSideEffects(); 492 sideEffects.setAllSideEffects();
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 // function expressions's element. 524 // function expressions's element.
532 // TODO(herhut): Generate classes for function expressions earlier. 525 // TODO(herhut): Generate classes for function expressions earlier.
533 if (element is closureMapping.SynthesizedCallMethodElementX) { 526 if (element is closureMapping.SynthesizedCallMethodElementX) {
534 return getMightBePassedToApply(element.expression); 527 return getMightBePassedToApply(element.expression);
535 } 528 }
536 return functionsThatMightBePassedToApply.contains(element); 529 return functionsThatMightBePassedToApply.contains(element);
537 } 530 }
538 531
539 bool get hasClosedWorldAssumption => !compiler.hasIncrementalSupport; 532 bool get hasClosedWorldAssumption => !compiler.hasIncrementalSupport;
540 } 533 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/use_unused_api.dart ('k') | tests/compiler/dart2js/compiler_helper.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698