| OLD | NEW |
| 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 dart2js.world; | 5 library dart2js.world; |
| 6 | 6 |
| 7 import 'closure.dart' show ClosureClassElement, SynthesizedCallMethodElementX; | 7 import 'closure.dart' show ClosureClassElement, SynthesizedCallMethodElementX; |
| 8 import 'common.dart'; | 8 import 'common.dart'; |
| 9 import 'constants/constant_system.dart'; | 9 import 'constants/constant_system.dart'; |
| 10 import 'common_elements.dart' show CommonElements; | 10 import 'common_elements.dart' show CommonElements, ElementEnvironment; |
| 11 import 'elements/entities.dart'; | 11 import 'elements/entities.dart'; |
| 12 import 'elements/elements.dart' | 12 import 'elements/elements.dart' |
| 13 show | 13 show |
| 14 ClassElement, | 14 ClassElement, |
| 15 Element, | 15 Element, |
| 16 MemberElement, | 16 MemberElement, |
| 17 MixinApplicationElement, | 17 MixinApplicationElement, |
| 18 TypedefElement; | 18 TypedefElement; |
| 19 import 'elements/resolution_types.dart'; | 19 import 'elements/resolution_types.dart'; |
| 20 import 'elements/types.dart'; | 20 import 'elements/types.dart'; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 41 /// JavaScript types are touched, what language features are used, and so on. | 41 /// JavaScript types are touched, what language features are used, and so on. |
| 42 /// This precise knowledge about what's live in the program is later used in | 42 /// This precise knowledge about what's live in the program is later used in |
| 43 /// optimizations and other compiler decisions during code generation. | 43 /// optimizations and other compiler decisions during code generation. |
| 44 abstract class ClosedWorld implements World { | 44 abstract class ClosedWorld implements World { |
| 45 BackendUsage get backendUsage; | 45 BackendUsage get backendUsage; |
| 46 | 46 |
| 47 NativeData get nativeData; | 47 NativeData get nativeData; |
| 48 | 48 |
| 49 InterceptorData get interceptorData; | 49 InterceptorData get interceptorData; |
| 50 | 50 |
| 51 ElementEnvironment get elementEnvironment; |
| 52 |
| 51 CommonElements get commonElements; | 53 CommonElements get commonElements; |
| 52 | 54 |
| 53 CommonMasks get commonMasks; | 55 CommonMasks get commonMasks; |
| 54 | 56 |
| 55 ConstantSystem get constantSystem; | 57 ConstantSystem get constantSystem; |
| 56 | 58 |
| 57 /// Returns `true` if [cls] is either directly or indirectly instantiated. | 59 /// Returns `true` if [cls] is either directly or indirectly instantiated. |
| 58 bool isInstantiated(ClassEntity cls); | 60 bool isInstantiated(ClassEntity cls); |
| 59 | 61 |
| 60 /// Returns `true` if [cls] is directly instantiated. This means that at | 62 /// Returns `true` if [cls] is directly instantiated. This means that at |
| (...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 422 final Map<Entity, SideEffects> _sideEffects = new Map<Entity, SideEffects>(); | 424 final Map<Entity, SideEffects> _sideEffects = new Map<Entity, SideEffects>(); |
| 423 | 425 |
| 424 final Set<Entity> _sideEffectsFreeElements = new Set<Entity>(); | 426 final Set<Entity> _sideEffectsFreeElements = new Set<Entity>(); |
| 425 | 427 |
| 426 final Set<Entity> _elementsThatCannotThrow = new Set<Entity>(); | 428 final Set<Entity> _elementsThatCannotThrow = new Set<Entity>(); |
| 427 | 429 |
| 428 final Set<Entity> _functionsThatMightBePassedToApply = new Set<Entity>(); | 430 final Set<Entity> _functionsThatMightBePassedToApply = new Set<Entity>(); |
| 429 | 431 |
| 430 CommonMasks _commonMasks; | 432 CommonMasks _commonMasks; |
| 431 | 433 |
| 434 final ElementEnvironment elementEnvironment; |
| 432 final CommonElements commonElements; | 435 final CommonElements commonElements; |
| 433 | 436 |
| 434 // TODO(johnniwinther): Avoid this. | 437 // TODO(johnniwinther): Avoid this. |
| 435 final ResolutionWorldBuilder _resolverWorld; | 438 final ResolutionWorldBuilder _resolverWorld; |
| 436 | 439 |
| 437 // TODO(johnniwinther): Can this be derived from [ClassSet]s? | 440 // TODO(johnniwinther): Can this be derived from [ClassSet]s? |
| 438 final Set<ClassEntity> _implementedClasses; | 441 final Set<ClassEntity> _implementedClasses; |
| 439 | 442 |
| 440 ClosedWorldBase( | 443 ClosedWorldBase( |
| 441 {this.commonElements, | 444 {this.elementEnvironment, |
| 445 this.commonElements, |
| 442 this.constantSystem, | 446 this.constantSystem, |
| 443 this.nativeData, | 447 this.nativeData, |
| 444 this.interceptorData, | 448 this.interceptorData, |
| 445 this.backendUsage, | 449 this.backendUsage, |
| 446 ResolutionWorldBuilder resolutionWorldBuilder, | 450 ResolutionWorldBuilder resolutionWorldBuilder, |
| 447 Set<ClassEntity> implementedClasses, | 451 Set<ClassEntity> implementedClasses, |
| 448 FunctionSet functionSet, | 452 FunctionSet functionSet, |
| 449 Set<TypedefElement> allTypedefs, | 453 Set<TypedefElement> allTypedefs, |
| 450 Map<ClassEntity, Set<ClassEntity>> mixinUses, | 454 Map<ClassEntity, Set<ClassEntity>> mixinUses, |
| 451 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, | 455 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, |
| (...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1149 sb.write("Instantiated classes in the closed world:\n"); | 1153 sb.write("Instantiated classes in the closed world:\n"); |
| 1150 } | 1154 } |
| 1151 getClassHierarchyNode(commonElements.objectClass) | 1155 getClassHierarchyNode(commonElements.objectClass) |
| 1152 .printOn(sb, ' ', instantiatedOnly: cls == null, withRespectTo: cls); | 1156 .printOn(sb, ' ', instantiatedOnly: cls == null, withRespectTo: cls); |
| 1153 return sb.toString(); | 1157 return sb.toString(); |
| 1154 } | 1158 } |
| 1155 } | 1159 } |
| 1156 | 1160 |
| 1157 class ClosedWorldImpl extends ClosedWorldBase { | 1161 class ClosedWorldImpl extends ClosedWorldBase { |
| 1158 ClosedWorldImpl( | 1162 ClosedWorldImpl( |
| 1159 {CommonElements commonElements, | 1163 {ElementEnvironment elementEnvironment, |
| 1164 CommonElements commonElements, |
| 1160 ConstantSystem constantSystem, | 1165 ConstantSystem constantSystem, |
| 1161 NativeData nativeData, | 1166 NativeData nativeData, |
| 1162 InterceptorData interceptorData, | 1167 InterceptorData interceptorData, |
| 1163 BackendUsage backendUsage, | 1168 BackendUsage backendUsage, |
| 1164 ResolutionWorldBuilder resolutionWorldBuilder, | 1169 ResolutionWorldBuilder resolutionWorldBuilder, |
| 1165 Set<ClassEntity> implementedClasses, | 1170 Set<ClassEntity> implementedClasses, |
| 1166 FunctionSet functionSet, | 1171 FunctionSet functionSet, |
| 1167 Set<TypedefElement> allTypedefs, | 1172 Set<TypedefElement> allTypedefs, |
| 1168 Map<ClassEntity, Set<ClassEntity>> mixinUses, | 1173 Map<ClassEntity, Set<ClassEntity>> mixinUses, |
| 1169 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, | 1174 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses, |
| 1170 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, | 1175 Map<ClassEntity, ClassHierarchyNode> classHierarchyNodes, |
| 1171 Map<ClassEntity, ClassSet> classSets}) | 1176 Map<ClassEntity, ClassSet> classSets}) |
| 1172 : super( | 1177 : super( |
| 1178 elementEnvironment: elementEnvironment, |
| 1173 commonElements: commonElements, | 1179 commonElements: commonElements, |
| 1174 constantSystem: constantSystem, | 1180 constantSystem: constantSystem, |
| 1175 nativeData: nativeData, | 1181 nativeData: nativeData, |
| 1176 interceptorData: interceptorData, | 1182 interceptorData: interceptorData, |
| 1177 backendUsage: backendUsage, | 1183 backendUsage: backendUsage, |
| 1178 resolutionWorldBuilder: resolutionWorldBuilder, | 1184 resolutionWorldBuilder: resolutionWorldBuilder, |
| 1179 implementedClasses: implementedClasses, | 1185 implementedClasses: implementedClasses, |
| 1180 functionSet: functionSet, | 1186 functionSet: functionSet, |
| 1181 allTypedefs: allTypedefs, | 1187 allTypedefs: allTypedefs, |
| 1182 mixinUses: mixinUses, | 1188 mixinUses: mixinUses, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1291 // does not see generative constructor bodies because they are | 1297 // does not see generative constructor bodies because they are |
| 1292 // created by the backend. Also, it does not make any distinction | 1298 // created by the backend. Also, it does not make any distinction |
| 1293 // between a constructor and its body for side effects. This | 1299 // between a constructor and its body for side effects. This |
| 1294 // implies that currently, the side effects of a constructor body | 1300 // implies that currently, the side effects of a constructor body |
| 1295 // contain the side effects of the initializers. | 1301 // contain the side effects of the initializers. |
| 1296 assert(!element.isGenerativeConstructorBody); | 1302 assert(!element.isGenerativeConstructorBody); |
| 1297 assert(!element.isField); | 1303 assert(!element.isField); |
| 1298 return super.getSideEffectsOfElement(element); | 1304 return super.getSideEffectsOfElement(element); |
| 1299 } | 1305 } |
| 1300 } | 1306 } |
| OLD | NEW |