| OLD | NEW |
| 1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 world_builder; | 5 part of world_builder; |
| 6 | 6 |
| 7 /// World builder specific to codegen. | 7 /// World builder specific to codegen. |
| 8 /// | 8 /// |
| 9 /// This adds additional access to liveness of selectors and elements. | 9 /// This adds additional access to liveness of selectors and elements. |
| 10 abstract class CodegenWorldBuilder implements WorldBuilder { | 10 abstract class CodegenWorldBuilder implements WorldBuilder { |
| (...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 192 cls.allSupertypes.forEach((ResolutionInterfaceType supertype) { | 192 cls.allSupertypes.forEach((ResolutionInterfaceType supertype) { |
| 193 if (_implementedClasses.add(supertype.element)) { | 193 if (_implementedClasses.add(supertype.element)) { |
| 194 classUsed( | 194 classUsed( |
| 195 supertype.element, _getClassUsage(supertype.element).implement()); | 195 supertype.element, _getClassUsage(supertype.element).implement()); |
| 196 } | 196 } |
| 197 }); | 197 }); |
| 198 } | 198 } |
| 199 } | 199 } |
| 200 | 200 |
| 201 bool _hasMatchingSelector(Map<Selector, SelectorConstraints> selectors, | 201 bool _hasMatchingSelector(Map<Selector, SelectorConstraints> selectors, |
| 202 Element member, ClosedWorld world) { | 202 MemberElement member, ClosedWorld world) { |
| 203 if (selectors == null) return false; | 203 if (selectors == null) return false; |
| 204 for (Selector selector in selectors.keys) { | 204 for (Selector selector in selectors.keys) { |
| 205 if (selector.appliesUnnamed(member)) { | 205 if (selector.appliesUnnamed(member)) { |
| 206 SelectorConstraints masks = selectors[selector]; | 206 SelectorConstraints masks = selectors[selector]; |
| 207 if (masks.applies(member, selector, world)) { | 207 if (masks.applies(member, selector, world)) { |
| 208 return true; | 208 return true; |
| 209 } | 209 } |
| 210 } | 210 } |
| 211 } | 211 } |
| 212 return false; | 212 return false; |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 } | 397 } |
| 398 if (useSet.isNotEmpty) { | 398 if (useSet.isNotEmpty) { |
| 399 memberUsed(usage.entity, useSet); | 399 memberUsed(usage.entity, useSet); |
| 400 } | 400 } |
| 401 } | 401 } |
| 402 | 402 |
| 403 void processClassMembers(ClassElement cls, MemberUsedCallback memberUsed) { | 403 void processClassMembers(ClassElement cls, MemberUsedCallback memberUsed) { |
| 404 cls.implementation.forEachMember((_, MemberElement member) { | 404 cls.implementation.forEachMember((_, MemberElement member) { |
| 405 assert(invariant(member, member.isDeclaration)); | 405 assert(invariant(member, member.isDeclaration)); |
| 406 if (!member.isInstanceMember) return; | 406 if (!member.isInstanceMember) return; |
| 407 if (member.isMalformed) return; |
| 407 _getMemberUsage(member, memberUsed); | 408 _getMemberUsage(member, memberUsed); |
| 408 }); | 409 }); |
| 409 } | 410 } |
| 410 | 411 |
| 411 _MemberUsage _getMemberUsage( | 412 _MemberUsage _getMemberUsage( |
| 412 MemberElement member, MemberUsedCallback memberUsed) { | 413 MemberElement member, MemberUsedCallback memberUsed) { |
| 413 assert(invariant(member, member.isDeclaration)); | 414 assert(invariant(member, member.isDeclaration)); |
| 414 return _instanceMemberUsage.putIfAbsent(member, () { | 415 return _instanceMemberUsage.putIfAbsent(member, () { |
| 415 String memberName = member.name; | 416 String memberName = member.name; |
| 416 ClassElement cls = member.enclosingClass; | 417 ClassElement cls = member.enclosingClass; |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 488 | 489 |
| 489 /// Register the constant [use] with this world builder. Returns `true` if | 490 /// Register the constant [use] with this world builder. Returns `true` if |
| 490 /// the constant use was new to the world. | 491 /// the constant use was new to the world. |
| 491 bool registerConstantUse(ConstantUse use) { | 492 bool registerConstantUse(ConstantUse use) { |
| 492 if (use.kind == ConstantUseKind.DIRECT) { | 493 if (use.kind == ConstantUseKind.DIRECT) { |
| 493 _constants.addCompileTimeConstantForEmission(use.value); | 494 _constants.addCompileTimeConstantForEmission(use.value); |
| 494 } | 495 } |
| 495 return _constantValues.add(use.value); | 496 return _constantValues.add(use.value); |
| 496 } | 497 } |
| 497 } | 498 } |
| OLD | NEW |