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

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

Issue 2975433002: Assert that we don't mix K and J elements (Closed)
Patch Set: Updated cf. comments Created 3 years, 5 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
OLDNEW
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 abstract class ResolutionWorldBuilder implements WorldBuilder, OpenWorld { 7 abstract class ResolutionWorldBuilder implements WorldBuilder, OpenWorld {
8 /// Set of all local functions in the program. Used by the mirror tracking 8 /// Set of all local functions in the program. Used by the mirror tracking
9 /// system to find all live closure instances. 9 /// system to find all live closure instances.
10 Iterable<Local> get localFunctions; 10 Iterable<Local> get localFunctions;
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
329 /// Set of methods in instantiated classes that are potentially closurized. 329 /// Set of methods in instantiated classes that are potentially closurized.
330 final Set<FunctionEntity> closurizedMembers = new Set<FunctionEntity>(); 330 final Set<FunctionEntity> closurizedMembers = new Set<FunctionEntity>();
331 331
332 /// Set of live closurized members whose signatures reference type variables. 332 /// Set of live closurized members whose signatures reference type variables.
333 /// 333 ///
334 /// A closurized method is considered live if the enclosing class has been 334 /// A closurized method is considered live if the enclosing class has been
335 /// instantiated. 335 /// instantiated.
336 final Set<FunctionEntity> closurizedMembersWithFreeTypeVariables = 336 final Set<FunctionEntity> closurizedMembersWithFreeTypeVariables =
337 new Set<FunctionEntity>(); 337 new Set<FunctionEntity>();
338 338
339 final CompilerOptions _options;
339 final ElementEnvironment _elementEnvironment; 340 final ElementEnvironment _elementEnvironment;
340 final DartTypes _dartTypes; 341 final DartTypes _dartTypes;
341 final CommonElements _commonElements; 342 final CommonElements _commonElements;
342 final ConstantSystem _constantSystem; 343 final ConstantSystem _constantSystem;
343 344
344 final NativeBasicData _nativeBasicData; 345 final NativeBasicData _nativeBasicData;
345 final NativeDataBuilder _nativeDataBuilder; 346 final NativeDataBuilder _nativeDataBuilder;
346 final InterceptorDataBuilder _interceptorDataBuilder; 347 final InterceptorDataBuilder _interceptorDataBuilder;
347 final BackendUsageBuilder _backendUsageBuilder; 348 final BackendUsageBuilder _backendUsageBuilder;
349 final RuntimeTypesNeedBuilder _rtiNeedBuilder;
350 final NativeResolutionEnqueuer _nativeResolutionEnqueuer;
348 351
349 final SelectorConstraintsStrategy selectorConstraintsStrategy; 352 final SelectorConstraintsStrategy selectorConstraintsStrategy;
350 353
351 bool hasRuntimeTypeSupport = false; 354 bool hasRuntimeTypeSupport = false;
352 bool hasIsolateSupport = false; 355 bool hasIsolateSupport = false;
353 bool hasFunctionApplySupport = false; 356 bool hasFunctionApplySupport = false;
354 357
355 bool _closed = false; 358 bool _closed = false;
356 ClosedWorld _closedWorldCache; 359 ClosedWorld _closedWorldCache;
357 final Set<MemberEntity> _liveInstanceMembers = new Set<MemberEntity>(); 360 final Set<MemberEntity> _liveInstanceMembers = new Set<MemberEntity>();
358 361
359 final Set<TypedefElement> _allTypedefs = new Set<TypedefElement>(); 362 final Set<TypedefElement> _allTypedefs = new Set<TypedefElement>();
360 363
361 final Map<ClassEntity, Set<ClassEntity>> _mixinUses = 364 final Map<ClassEntity, Set<ClassEntity>> _mixinUses =
362 new Map<ClassEntity, Set<ClassEntity>>(); 365 new Map<ClassEntity, Set<ClassEntity>>();
363 366
364 // We keep track of subtype and subclass relationships in four 367 // We keep track of subtype and subclass relationships in four
365 // distinct sets to make class hierarchy analysis faster. 368 // distinct sets to make class hierarchy analysis faster.
366 final Map<ClassEntity, ClassHierarchyNode> _classHierarchyNodes = 369 final Map<ClassEntity, ClassHierarchyNode> _classHierarchyNodes =
367 <ClassEntity, ClassHierarchyNode>{}; 370 <ClassEntity, ClassHierarchyNode>{};
368 final Map<ClassEntity, ClassSet> _classSets = <ClassEntity, ClassSet>{}; 371 final Map<ClassEntity, ClassSet> _classSets = <ClassEntity, ClassSet>{};
369 372
370 final Set<ConstantValue> _constantValues = new Set<ConstantValue>(); 373 final Set<ConstantValue> _constantValues = new Set<ConstantValue>();
371 374
372 bool get isClosed => _closed; 375 bool get isClosed => _closed;
373 376
374 ResolutionWorldBuilderBase( 377 ResolutionWorldBuilderBase(
378 this._options,
375 this._elementEnvironment, 379 this._elementEnvironment,
376 this._dartTypes, 380 this._dartTypes,
377 this._commonElements, 381 this._commonElements,
378 this._constantSystem, 382 this._constantSystem,
379 this._nativeBasicData, 383 this._nativeBasicData,
380 this._nativeDataBuilder, 384 this._nativeDataBuilder,
381 this._interceptorDataBuilder, 385 this._interceptorDataBuilder,
382 this._backendUsageBuilder, 386 this._backendUsageBuilder,
387 this._rtiNeedBuilder,
388 this._nativeResolutionEnqueuer,
383 this.selectorConstraintsStrategy); 389 this.selectorConstraintsStrategy);
384 390
385 Iterable<ClassEntity> get processedClasses => _processedClasses.keys 391 Iterable<ClassEntity> get processedClasses => _processedClasses.keys
386 .where((cls) => _processedClasses[cls].isInstantiated); 392 .where((cls) => _processedClasses[cls].isInstantiated);
387 393
388 ClosedWorld get closedWorldForTesting { 394 ClosedWorld get closedWorldForTesting {
389 if (!_closed) { 395 if (!_closed) {
390 throw new SpannableAssertionFailure( 396 throw new SpannableAssertionFailure(
391 NO_LOCATION_SPANNABLE, "The world builder has not yet been closed."); 397 NO_LOCATION_SPANNABLE, "The world builder has not yet been closed.");
392 } 398 }
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
939 assignedInstanceMembers.addAll(fieldSetters); 945 assignedInstanceMembers.addAll(fieldSetters);
940 return assignedInstanceMembers; 946 return assignedInstanceMembers;
941 } 947 }
942 } 948 }
943 949
944 abstract class KernelResolutionWorldBuilderBase 950 abstract class KernelResolutionWorldBuilderBase
945 extends ResolutionWorldBuilderBase { 951 extends ResolutionWorldBuilderBase {
946 KernelToElementMapForImpactImpl get elementMap; 952 KernelToElementMapForImpactImpl get elementMap;
947 953
948 KernelResolutionWorldBuilderBase( 954 KernelResolutionWorldBuilderBase(
955 CompilerOptions options,
949 ElementEnvironment elementEnvironment, 956 ElementEnvironment elementEnvironment,
950 DartTypes dartTypes, 957 DartTypes dartTypes,
951 CommonElements commonElements, 958 CommonElements commonElements,
952 ConstantSystem constantSystem, 959 ConstantSystem constantSystem,
953 NativeBasicData nativeBasicData, 960 NativeBasicData nativeBasicData,
954 NativeDataBuilder nativeDataBuilder, 961 NativeDataBuilder nativeDataBuilder,
955 InterceptorDataBuilder interceptorDataBuilder, 962 InterceptorDataBuilder interceptorDataBuilder,
956 BackendUsageBuilder backendUsageBuilder, 963 BackendUsageBuilder backendUsageBuilder,
964 RuntimeTypesNeedBuilder rtiNeedBuilder,
965 NativeResolutionEnqueuer nativeResolutionEnqueuer,
957 SelectorConstraintsStrategy selectorConstraintsStrategy) 966 SelectorConstraintsStrategy selectorConstraintsStrategy)
958 : super( 967 : super(
968 options,
959 elementEnvironment, 969 elementEnvironment,
960 dartTypes, 970 dartTypes,
961 commonElements, 971 commonElements,
962 constantSystem, 972 constantSystem,
963 nativeBasicData, 973 nativeBasicData,
964 nativeDataBuilder, 974 nativeDataBuilder,
965 interceptorDataBuilder, 975 interceptorDataBuilder,
966 backendUsageBuilder, 976 backendUsageBuilder,
977 rtiNeedBuilder,
978 nativeResolutionEnqueuer,
967 selectorConstraintsStrategy); 979 selectorConstraintsStrategy);
968 980
969 @override 981 @override
970 ClosedWorld closeWorld() { 982 ClosedWorld closeWorld() {
971 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses = 983 Map<ClassEntity, Set<ClassEntity>> typesImplementedBySubclasses =
972 populateHierarchyNodes(); 984 populateHierarchyNodes();
973 _classHierarchyNodes.keys.toList().forEach(_ensureClassSet); 985 _classHierarchyNodes.keys.toList().forEach(_ensureClassSet);
974 _closed = true; 986 _closed = true;
975 assert( 987 assert(
976 _classHierarchyNodes.length == _classSets.length, 988 _classHierarchyNodes.length == _classSets.length,
977 "ClassHierarchyNode/ClassSet mismatch: " 989 "ClassHierarchyNode/ClassSet mismatch: "
978 "$_classHierarchyNodes vs $_classSets"); 990 "$_classHierarchyNodes vs $_classSets");
979 return _closedWorldCache = new KernelClosedWorld(elementMap, 991 return _closedWorldCache = new KernelClosedWorld(elementMap,
992 options: _options,
980 elementEnvironment: _elementEnvironment, 993 elementEnvironment: _elementEnvironment,
981 dartTypes: _dartTypes, 994 dartTypes: _dartTypes,
982 commonElements: _commonElements, 995 commonElements: _commonElements,
983 nativeData: _nativeDataBuilder.close(), 996 nativeData: _nativeDataBuilder.close(),
984 interceptorData: _interceptorDataBuilder.close(), 997 interceptorData: _interceptorDataBuilder.close(),
985 backendUsage: _backendUsageBuilder.close(), 998 backendUsage: _backendUsageBuilder.close(),
999 resolutionWorldBuilder: this,
1000 rtiNeedBuilder: _rtiNeedBuilder,
986 constantSystem: _constantSystem, 1001 constantSystem: _constantSystem,
987 implementedClasses: _implementedClasses, 1002 implementedClasses: _implementedClasses,
1003 liveNativeClasses: _nativeResolutionEnqueuer.liveNativeClasses,
988 liveInstanceMembers: _liveInstanceMembers, 1004 liveInstanceMembers: _liveInstanceMembers,
989 assignedInstanceMembers: computeAssignedInstanceMembers(), 1005 assignedInstanceMembers: computeAssignedInstanceMembers(),
990 allTypedefs: _allTypedefs, 1006 allTypedefs: _allTypedefs,
991 mixinUses: _mixinUses, 1007 mixinUses: _mixinUses,
992 typesImplementedBySubclasses: typesImplementedBySubclasses, 1008 typesImplementedBySubclasses: typesImplementedBySubclasses,
993 classHierarchyNodes: _classHierarchyNodes, 1009 classHierarchyNodes: _classHierarchyNodes,
994 classSets: _classSets); 1010 classSets: _classSets);
995 } 1011 }
996 1012
997 @override 1013 @override
998 void registerClass(ClassEntity cls) { 1014 void registerClass(ClassEntity cls) {
999 throw new UnimplementedError('KernelResolutionWorldBuilder.registerClass'); 1015 throw new UnimplementedError('KernelResolutionWorldBuilder.registerClass');
1000 } 1016 }
1001 } 1017 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/universe/element_world_builder.dart ('k') | pkg/compiler/lib/src/universe/world_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698