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

Side by Side Diff: sdk/lib/_internal/compiler/implementation/universe/universe.dart

Issue 24952003: Change TypeMask.base to be a ClassElement. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Moar declaration. Created 7 years, 2 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 | Annotate | Revision Log
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 library universe; 5 library universe;
6 6
7 import '../elements/elements.dart'; 7 import '../elements/elements.dart';
8 import '../dart2jslib.dart'; 8 import '../dart2jslib.dart';
9 import '../dart_types.dart'; 9 import '../dart_types.dart';
10 import '../types/types.dart'; 10 import '../types/types.dart';
(...skipping 620 matching lines...) Expand 10 before | Expand all | Expand 10 after
631 Map<TypeMask, TypedSelector> map = canonicalizedValues.putIfAbsent(untyped, 631 Map<TypeMask, TypedSelector> map = canonicalizedValues.putIfAbsent(untyped,
632 () => new Map<TypeMask, TypedSelector>()); 632 () => new Map<TypeMask, TypedSelector>());
633 TypedSelector result = map[mask]; 633 TypedSelector result = map[mask];
634 if (result == null) { 634 if (result == null) {
635 int hashCode = Selector.mixHashCodeBits(untyped.hashCode, mask.hashCode); 635 int hashCode = Selector.mixHashCodeBits(untyped.hashCode, mask.hashCode);
636 result = map[mask] = new TypedSelector.internal(mask, untyped, hashCode); 636 result = map[mask] = new TypedSelector.internal(mask, untyped, hashCode);
637 } 637 }
638 return result; 638 return result;
639 } 639 }
640 640
641 factory TypedSelector.exact(DartType base, Selector selector) 641 factory TypedSelector.exact(ClassElement base, Selector selector)
642 => new TypedSelector(new TypeMask.exact(base), selector); 642 => new TypedSelector(new TypeMask.exact(base), selector);
643 643
644 factory TypedSelector.subclass(DartType base, Selector selector) 644 factory TypedSelector.subclass(ClassElement base, Selector selector)
645 => new TypedSelector(new TypeMask.subclass(base), selector); 645 => new TypedSelector(new TypeMask.subclass(base), selector);
646 646
647 factory TypedSelector.subtype(DartType base, Selector selector) 647 factory TypedSelector.subtype(ClassElement base, Selector selector)
648 => new TypedSelector(new TypeMask.subtype(base), selector); 648 => new TypedSelector(new TypeMask.subtype(base), selector);
649 649
650 bool appliesUnnamed(Element element, Compiler compiler) { 650 bool appliesUnnamed(Element element, Compiler compiler) {
651 assert(sameNameHack(element, compiler)); 651 assert(sameNameHack(element, compiler));
652 // [TypedSelector] are only used after resolution. 652 // [TypedSelector] are only used after resolution.
653 assert(compiler.phase > Compiler.PHASE_RESOLVING); 653 assert(compiler.phase > Compiler.PHASE_RESOLVING);
654 if (!element.isMember()) return false; 654 if (!element.isMember()) return false;
655 655
656 // A closure can be called through any typed selector: 656 // A closure can be called through any typed selector:
657 // class A { 657 // class A {
658 // get foo => () => 42; 658 // get foo => () => 42;
659 // bar() => foo(); // The call to 'foo' is a typed selector. 659 // bar() => foo(); // The call to 'foo' is a typed selector.
660 // } 660 // }
661 if (element.getEnclosingClass().isClosure()) { 661 if (element.getEnclosingClass().isClosure()) {
662 return appliesUntyped(element, compiler); 662 return appliesUntyped(element, compiler);
663 } 663 }
664 664
665 if (!mask.canHit(element, this, compiler)) return false; 665 if (!mask.canHit(element, this, compiler)) return false;
666 return appliesUntyped(element, compiler); 666 return appliesUntyped(element, compiler);
667 } 667 }
668 } 668 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698