Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.366.mcz==================== Summary ====================
Name: Collections-eem.366
Author: eem
Time: 29 June 2010, 5:26:30.834 pm
UUID: b8b3d29c-7d22-45a6-a235-aae3dd6316ea
Ancestors: Collections-ul.365
Much faster Dictionary>>unreferencedKeys (single pass
over class hierarchy) speeds up removeUnreferencedKeys.
=============== Diff against Collections-ul.365 ===============
Item was changed:
----- Method: Dictionary>>unreferencedKeys (in category 'removing') -----
unreferencedKeys
+ "| uk | (Time millisecondsToRun: [uk := TextConstants unreferencedKeys]) -> uk"
- "TextConstants unreferencedKeys"
^'Scanning for references . . .'
displayProgressAt: Sensor cursorPoint
from: 0
+ to: Smalltalk classNames size * 2
- to: self size
during:
+ [:bar | | currentClass n associations referencedAssociations |
+ currentClass := nil.
- [:bar |
- | n |
n := 0.
+ associations := self associations asIdentitySet.
+ referencedAssociations := IdentitySet new: associations size.
+ self systemNavigation allSelect:
+ [:m|
+ m methodClass ~~ currentClass ifTrue:
+ [currentClass := m methodClass.
+ bar value: (n := n + 1)].
+ m literalsDo:
+ [:l|
+ (l isVariableBinding and: [associations includes: l]) ifTrue:
+ [referencedAssociations add: l]].
+ false].
+ ((associations reject: [:assoc | referencedAssociations includes: assoc]) collect: [:assoc| assoc key]) asSet]!
- self keys select:
- [:key |
- bar value: (n := n + 1).
- (self systemNavigation allCallsOn: (self associationAt: key)) isEmpty]]!