| 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.enqueue; | 5 library dart2js.enqueue; |
| 6 | 6 |
| 7 import 'dart:collection' show Queue; | 7 import 'dart:collection' show Queue; |
| 8 | 8 |
| 9 import 'common/tasks.dart' show CompilerTask; | 9 import 'common/tasks.dart' show CompilerTask; |
| 10 import 'common/work.dart' show WorkItem; | 10 import 'common/work.dart' show WorkItem; |
| (...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 223 _impactVisitor = new EnqueuerImplImpactVisitor(this); | 223 _impactVisitor = new EnqueuerImplImpactVisitor(this); |
| 224 } | 224 } |
| 225 | 225 |
| 226 ResolutionWorldBuilder get worldBuilder => _worldBuilder; | 226 ResolutionWorldBuilder get worldBuilder => _worldBuilder; |
| 227 | 227 |
| 228 bool get queueIsEmpty => _queue.isEmpty; | 228 bool get queueIsEmpty => _queue.isEmpty; |
| 229 | 229 |
| 230 @override | 230 @override |
| 231 void checkQueueIsEmpty() { | 231 void checkQueueIsEmpty() { |
| 232 if (_queue.isNotEmpty) { | 232 if (_queue.isNotEmpty) { |
| 233 throw new SpannableAssertionFailure( | 233 failedAt(_queue.first.element, "$name queue is not empty."); |
| 234 _queue.first.element, "$name queue is not empty."); | |
| 235 } | 234 } |
| 236 } | 235 } |
| 237 | 236 |
| 238 Iterable<ClassEntity> get processedClasses => _worldBuilder.processedClasses; | 237 Iterable<ClassEntity> get processedClasses => _worldBuilder.processedClasses; |
| 239 | 238 |
| 240 void applyImpact(WorldImpact worldImpact, {var impactSource}) { | 239 void applyImpact(WorldImpact worldImpact, {var impactSource}) { |
| 241 if (worldImpact.isEmpty) return; | 240 if (worldImpact.isEmpty) return; |
| 242 impactStrategy.visitImpact( | 241 impactStrategy.visitImpact( |
| 243 impactSource, worldImpact, _impactVisitor, impactUse); | 242 impactSource, worldImpact, _impactVisitor, impactUse); |
| 244 } | 243 } |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 } | 427 } |
| 429 | 428 |
| 430 /// Create a [WorkItem] for [entity] and add it to the work list if it has not | 429 /// Create a [WorkItem] for [entity] and add it to the work list if it has not |
| 431 /// already been processed. | 430 /// already been processed. |
| 432 void _addToWorkList(MemberEntity entity) { | 431 void _addToWorkList(MemberEntity entity) { |
| 433 if (_processedEntities.contains(entity)) return; | 432 if (_processedEntities.contains(entity)) return; |
| 434 WorkItem workItem = _workItemBuilder.createWorkItem(entity); | 433 WorkItem workItem = _workItemBuilder.createWorkItem(entity); |
| 435 if (workItem == null) return; | 434 if (workItem == null) return; |
| 436 | 435 |
| 437 if (queueIsClosed) { | 436 if (queueIsClosed) { |
| 438 throw new SpannableAssertionFailure( | 437 failedAt( |
| 439 entity, "Resolution work list is closed. Trying to add $entity."); | 438 entity, "Resolution work list is closed. Trying to add $entity."); |
| 440 } | 439 } |
| 441 | 440 |
| 442 applyImpact(listener.registerUsedElement(entity), | 441 applyImpact(listener.registerUsedElement(entity), |
| 443 impactSource: 'used element'); | 442 impactSource: 'used element'); |
| 444 _worldBuilder.registerUsedElement(entity); | 443 _worldBuilder.registerUsedElement(entity); |
| 445 _queue.add(workItem); | 444 _queue.add(workItem); |
| 446 } | 445 } |
| 447 | 446 |
| 448 /// Adds an action to the deferred task queue. | 447 /// Adds an action to the deferred task queue. |
| 449 /// The action is performed the next time the resolution queue has been | 448 /// The action is performed the next time the resolution queue has been |
| 450 /// emptied. | 449 /// emptied. |
| 451 /// | 450 /// |
| 452 /// The queue is processed in FIFO order. | 451 /// The queue is processed in FIFO order. |
| 453 void addDeferredAction(DeferredAction deferredAction) { | 452 void addDeferredAction(DeferredAction deferredAction) { |
| 454 if (queueIsClosed) { | 453 if (queueIsClosed) { |
| 455 throw new SpannableAssertionFailure( | 454 failedAt( |
| 456 deferredAction.element, | 455 deferredAction.element, |
| 457 "Resolution work list is closed. " | 456 "Resolution work list is closed. " |
| 458 "Trying to add deferred action for ${deferredAction.element}"); | 457 "Trying to add deferred action for ${deferredAction.element}"); |
| 459 } | 458 } |
| 460 _deferredQueue.add(deferredAction); | 459 _deferredQueue.add(deferredAction); |
| 461 } | 460 } |
| 462 | 461 |
| 463 void addDeferredActions(Iterable<DeferredAction> deferredActions) { | 462 void addDeferredActions(Iterable<DeferredAction> deferredActions) { |
| 464 deferredActions.forEach(addDeferredAction); | 463 deferredActions.forEach(addDeferredAction); |
| 465 } | 464 } |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 final Entity element; | 596 final Entity element; |
| 598 final DeferredActionFunction action; | 597 final DeferredActionFunction action; |
| 599 | 598 |
| 600 DeferredAction(this.element, this.action); | 599 DeferredAction(this.element, this.action); |
| 601 } | 600 } |
| 602 | 601 |
| 603 /// Interface for creating work items for enqueued member entities. | 602 /// Interface for creating work items for enqueued member entities. |
| 604 abstract class WorkItemBuilder { | 603 abstract class WorkItemBuilder { |
| 605 WorkItem createWorkItem(covariant MemberEntity entity); | 604 WorkItem createWorkItem(covariant MemberEntity entity); |
| 606 } | 605 } |
| OLD | NEW |