Chromium Code Reviews| Index: pkg/compiler/lib/src/universe/world_builder.dart |
| diff --git a/pkg/compiler/lib/src/universe/world_builder.dart b/pkg/compiler/lib/src/universe/world_builder.dart |
| index 35e1c0b6a83484f9fa7d50326f35b5806455ec24..05cae632087b4e55bb370f00436ae9f815d95e30 100644 |
| --- a/pkg/compiler/lib/src/universe/world_builder.dart |
| +++ b/pkg/compiler/lib/src/universe/world_builder.dart |
| @@ -478,9 +478,6 @@ class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder { |
| <ClassElement, ClassHierarchyNode>{}; |
| final Map<ClassElement, ClassSet> _classSets = <ClassElement, ClassSet>{}; |
| - final Map<ClassElement, Map<ClassElement, bool>> _subtypeCoveredByCache = |
|
Johnni Winther
2016/12/21 14:37:19
Only needed in ClosedWorldImpl
|
| - <ClassElement, Map<ClassElement, bool>>{}; |
| - |
| final Set<Element> alreadyPopulated; |
| final CacheStrategy cacheStrategy; |
| @@ -681,45 +678,33 @@ class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder { |
| DynamicUse dynamicUse, MemberUsedCallback memberUsed) { |
| Selector selector = dynamicUse.selector; |
| String methodName = selector.name; |
| + |
| + void _process(Map<String, Set<_MemberUsage>> memberMap, |
| + EnumSet<MemberUse> action(_MemberUsage usage)) { |
| + _processSet(memberMap, methodName, (_MemberUsage usage) { |
| + if (dynamicUse.appliesUnnamed(usage.entity, this)) { |
| + memberUsed(usage.entity, action(usage)); |
| + return true; |
| + } |
| + return false; |
| + }); |
| + } |
| + |
| switch (dynamicUse.kind) { |
| case DynamicUseKind.INVOKE: |
| if (_registerNewSelector(dynamicUse, _invokedNames)) { |
| - _processInstanceMembers(methodName, (_MemberUsage usage) { |
| - if (dynamicUse.appliesUnnamed(usage.entity, this)) { |
| - memberUsed(usage.entity, usage.invoke()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| + _process(_instanceMembersByName, (m) => m.invoke()); |
| } |
| break; |
| case DynamicUseKind.GET: |
| if (_registerNewSelector(dynamicUse, _invokedGetters)) { |
| - _processInstanceMembers(methodName, (_MemberUsage usage) { |
| - if (dynamicUse.appliesUnnamed(usage.entity, this)) { |
| - memberUsed(usage.entity, usage.read()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| - _processInstanceFunctions(methodName, (_MemberUsage usage) { |
| - if (dynamicUse.appliesUnnamed(usage.entity, this)) { |
| - memberUsed(usage.entity, usage.read()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| + _process(_instanceMembersByName, (m) => m.read()); |
| + _process(_instanceFunctionsByName, (m) => m.read()); |
| } |
| break; |
| case DynamicUseKind.SET: |
| if (_registerNewSelector(dynamicUse, _invokedSetters)) { |
| - _processInstanceMembers(methodName, (_MemberUsage usage) { |
| - if (dynamicUse.appliesUnnamed(usage.entity, this)) { |
| - memberUsed(usage.entity, usage.write()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| + _process(_instanceMembersByName, (m) => m.write()); |
| } |
| break; |
| } |
| @@ -894,15 +879,6 @@ class ResolutionWorldBuilderImpl implements ResolutionWorldBuilder { |
| map[memberName].addAll(remaining); |
| } |
| - void _processInstanceMembers(String name, bool updateUsage(_MemberUsage e)) { |
| - _processSet(_instanceMembersByName, name, updateUsage); |
| - } |
| - |
| - void _processInstanceFunctions( |
| - String name, bool updateUsage(_MemberUsage e)) { |
| - _processSet(_instanceFunctionsByName, name, updateUsage); |
| - } |
| - |
| void _processInstantiatedClassMember( |
| ClassElement cls, MemberElement member, MemberUsedCallback memberUsed) { |
| assert(invariant(member, member.isDeclaration)); |
| @@ -1320,47 +1296,35 @@ class CodegenWorldBuilderImpl implements CodegenWorldBuilder { |
| DynamicUse dynamicUse, MemberUsedCallback memberUsed) { |
| Selector selector = dynamicUse.selector; |
| String methodName = selector.name; |
| + |
| + void _process(Map<String, Set<_MemberUsage>> memberMap, |
| + EnumSet<MemberUse> action(_MemberUsage usage)) { |
| + _processSet(memberMap, methodName, (_MemberUsage usage) { |
| + if (dynamicUse.appliesUnnamed(usage.entity, _world)) { |
| + memberUsed(usage.entity, action(usage)); |
| + return true; |
| + } |
| + return false; |
| + }); |
| + } |
| + |
| switch (dynamicUse.kind) { |
| case DynamicUseKind.INVOKE: |
| if (_registerNewSelector(dynamicUse, _invokedNames)) { |
| - _processInstanceMembers(methodName, (_MemberUsage member) { |
| - if (dynamicUse.appliesUnnamed(member.entity, _world)) { |
| - memberUsed(member.entity, member.invoke()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| + _process(_instanceMembersByName, (m) => m.invoke()); |
| return true; |
| } |
| break; |
| case DynamicUseKind.GET: |
| if (_registerNewSelector(dynamicUse, _invokedGetters)) { |
| - _processInstanceMembers(methodName, (_MemberUsage member) { |
| - if (dynamicUse.appliesUnnamed(member.entity, _world)) { |
| - memberUsed(member.entity, member.read()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| - _processInstanceFunctions(methodName, (_MemberUsage member) { |
| - if (dynamicUse.appliesUnnamed(member.entity, _world)) { |
| - memberUsed(member.entity, member.read()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| + _process(_instanceMembersByName, (m) => m.read()); |
| + _process(_instanceFunctionsByName, (m) => m.read()); |
| return true; |
| } |
| break; |
| case DynamicUseKind.SET: |
| if (_registerNewSelector(dynamicUse, _invokedSetters)) { |
| - _processInstanceMembers(methodName, (_MemberUsage member) { |
| - if (dynamicUse.appliesUnnamed(member.entity, _world)) { |
| - memberUsed(member.entity, member.write()); |
| - return true; |
| - } |
| - return false; |
| - }); |
| + _process(_instanceMembersByName, (m) => m.write()); |
| return true; |
| } |
| break; |
| @@ -1578,14 +1542,6 @@ class CodegenWorldBuilderImpl implements CodegenWorldBuilder { |
| map[memberName].addAll(remaining); |
| } |
| - void _processInstanceMembers(String n, bool f(_MemberUsage e)) { |
| - _processSet(_instanceMembersByName, n, f); |
| - } |
| - |
| - void _processInstanceFunctions(String n, bool f(_MemberUsage e)) { |
| - _processSet(_instanceFunctionsByName, n, f); |
| - } |
| - |
| /// Return the canonical [_ClassUsage] for [cls]. |
| _ClassUsage _getClassUsage(ClassElement cls) { |
| return _processedClasses.putIfAbsent(cls, () => new _ClassUsage(cls)); |