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

Side by Side Diff: pkg/compiler/lib/src/universe/world_builder.dart

Issue 2549423002: Change Enqueuer to use Entity instead of Element. (Closed)
Patch Set: Updated cf. comments. Created 4 years 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/ssa/builder.dart ('k') | pkg/compiler/lib/src/universe/world_impact.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 library universe; 5 library universe;
6 6
7 import 'dart:collection'; 7 import 'dart:collection';
8 8
9 import '../cache_strategy.dart'; 9 import '../cache_strategy.dart';
10 import '../common.dart'; 10 import '../common.dart';
(...skipping 703 matching lines...) Expand 10 before | Expand all | Expand 10 after
714 case StaticUseKind.CLOSURE: 714 case StaticUseKind.CLOSURE:
715 allClosures.add(element); 715 allClosures.add(element);
716 break; 716 break;
717 case StaticUseKind.DIRECT_INVOKE: 717 case StaticUseKind.DIRECT_INVOKE:
718 invariant( 718 invariant(
719 element, 'Direct static use is not supported for resolution.'); 719 element, 'Direct static use is not supported for resolution.');
720 break; 720 break;
721 } 721 }
722 } 722 }
723 723
724 void forgetElement(Element element, Compiler compiler) { 724 void forgetEntity(Entity entity, Compiler compiler) {
725 allClosures.remove(element); 725 allClosures.remove(entity);
726 slowDirectlyNestedClosures(element).forEach(compiler.forgetElement); 726 slowDirectlyNestedClosures(entity).forEach(compiler.forgetElement);
727 closurizedMembers.remove(element); 727 closurizedMembers.remove(entity);
728 fieldSetters.remove(element); 728 fieldSetters.remove(entity);
729 _instantiationInfo.remove(element); 729 _instantiationInfo.remove(entity);
730 730
731 void removeUsage(Set<_MemberUsage> set, Element element) { 731 void removeUsage(Set<_MemberUsage> set, Entity entity) {
732 if (set == null) return; 732 if (set == null) return;
733 set.removeAll( 733 set.removeAll(
734 set.where((_MemberUsage usage) => usage.entity == element).toList()); 734 set.where((_MemberUsage usage) => usage.entity == entity).toList());
735 } 735 }
736 736
737 _processedClasses.remove(element); 737 _processedClasses.remove(entity);
738 removeUsage(_instanceMembersByName[element.name], element); 738 removeUsage(_instanceMembersByName[entity.name], entity);
739 removeUsage(_instanceFunctionsByName[element.name], element); 739 removeUsage(_instanceFunctionsByName[entity.name], entity);
740 } 740 }
741 741
742 // TODO(ahe): Replace this method with something that is O(1), for example, 742 // TODO(ahe): Replace this method with something that is O(1), for example,
743 // by using a map. 743 // by using a map.
744 List<LocalFunctionElement> slowDirectlyNestedClosures(Element element) { 744 List<LocalFunctionElement> slowDirectlyNestedClosures(Element element) {
745 // Return new list to guard against concurrent modifications. 745 // Return new list to guard against concurrent modifications.
746 return new List<LocalFunctionElement>.from( 746 return new List<LocalFunctionElement>.from(
747 allClosures.where((LocalFunctionElement closure) { 747 allClosures.where((LocalFunctionElement closure) {
748 return closure.executableContext == element; 748 return closure.executableContext == element;
749 })); 749 }));
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
801 for (_MemberUsage usage in members) { 801 for (_MemberUsage usage in members) {
802 if (!updateUsage(usage)) remaining.add(usage); 802 if (!updateUsage(usage)) remaining.add(usage);
803 } 803 }
804 map[memberName].addAll(remaining); 804 map[memberName].addAll(remaining);
805 } 805 }
806 806
807 void _processInstanceMembers(String name, bool updateUsage(_MemberUsage e)) { 807 void _processInstanceMembers(String name, bool updateUsage(_MemberUsage e)) {
808 _processSet(_instanceMembersByName, name, updateUsage); 808 _processSet(_instanceMembersByName, name, updateUsage);
809 } 809 }
810 810
811 void _processInstanceFunctions(String name, bool updateUsage(_MemberUsage e)) { 811 void _processInstanceFunctions(
812 String name, bool updateUsage(_MemberUsage e)) {
812 _processSet(_instanceFunctionsByName, name, updateUsage); 813 _processSet(_instanceFunctionsByName, name, updateUsage);
813 } 814 }
814 815
815 void _processInstantiatedClassMember( 816 void _processInstantiatedClassMember(
816 ClassElement cls, MemberElement member, MemberUsed memberUsed) { 817 ClassElement cls, MemberElement member, MemberUsed memberUsed) {
817 assert(invariant(member, member.isDeclaration)); 818 assert(invariant(member, member.isDeclaration));
818 if (!member.isInstanceMember) return; 819 if (!member.isInstanceMember) return;
819 String memberName = member.name; 820 String memberName = member.name;
820 member.computeType(_resolution); 821 member.computeType(_resolution);
821 EnumSet<MemberUse> useSet = new EnumSet<MemberUse>(); 822 EnumSet<MemberUse> useSet = new EnumSet<MemberUse>();
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after
1441 class ClassUses { 1442 class ClassUses {
1442 static const EnumSet<ClassUse> NONE = const EnumSet<ClassUse>.fixed(0); 1443 static const EnumSet<ClassUse> NONE = const EnumSet<ClassUse>.fixed(0);
1443 static const EnumSet<ClassUse> INSTANTIATED_ONLY = 1444 static const EnumSet<ClassUse> INSTANTIATED_ONLY =
1444 const EnumSet<ClassUse>.fixed(1); 1445 const EnumSet<ClassUse>.fixed(1);
1445 static const EnumSet<ClassUse> IMPLEMENTED_ONLY = 1446 static const EnumSet<ClassUse> IMPLEMENTED_ONLY =
1446 const EnumSet<ClassUse>.fixed(2); 1447 const EnumSet<ClassUse>.fixed(2);
1447 static const EnumSet<ClassUse> ALL = const EnumSet<ClassUse>.fixed(3); 1448 static const EnumSet<ClassUse> ALL = const EnumSet<ClassUse>.fixed(3);
1448 } 1449 }
1449 1450
1450 typedef void ClassUsed(ClassEntity cls, EnumSet<ClassUse> useSet); 1451 typedef void ClassUsed(ClassEntity cls, EnumSet<ClassUse> useSet);
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/universe/world_impact.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698