[squeak-dev] The Trunk: Kernel-nice.276.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Oct 20 20:20:45 UTC 2009
Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.276.mcz
==================== Summary ====================
Name: Kernel-nice.276
Author: nice
Time: 20 October 2009, 10:19:32 am
UUID: 76a252f2-4063-451a-86d2-e063dc8be599
Ancestors: Kernel-nice.275
Track keys and selectors usage, use #includesSelector: #selectorsDo: and #asSet where due
+ make #classVarNames a sorted Array
=============== Diff against Kernel-nice.275 ===============
Item was changed:
----- Method: ClassDescription>>chooseClassVarName (in category 'instance variables') -----
chooseClassVarName
"Present the user with a list of class variable names and answer the one selected, or nil if none"
| lines labelStream allVars index |
lines := OrderedCollection new.
allVars := OrderedCollection new.
labelStream := WriteStream on: (String new: 200).
self withAllSuperclasses reverseDo:
[:class | | vars |
+ vars := class classVarNames.
- vars := class classVarNames asSortedCollection.
vars do:
[:var |
labelStream nextPutAll: var; cr.
allVars add: var].
vars isEmpty ifFalse: [lines add: allVars size]].
labelStream contents isEmpty ifTrue: [^Beeper beep]. "handle nil superclass better"
labelStream skip: -1 "cut last CR".
index := (UIManager default chooseFrom: (labelStream contents substrings) lines: lines).
index = 0 ifTrue: [^ nil].
^ allVars at: index!
Item was changed:
----- Method: Behavior>>whichSelectorsAccess: (in category 'testing method dictionary') -----
whichSelectorsAccess: instVarName
+ "Answer a collection of selectors whose methods access the argument,
- "Answer a set of selectors whose methods access the argument,
instVarName, as a named instance variable."
| instVarIndex |
instVarIndex := self allInstVarNames indexOf: instVarName ifAbsent: [^IdentitySet new].
^ self methodDict keys select:
[:sel |
((self methodDict at: sel)
readsField: instVarIndex)
or: [(self methodDict at: sel) writesField: instVarIndex]]
"Point whichSelectorsAccess: 'x'."!
Item was changed:
----- Method: InstructionPrinter class>>printClass: (in category 'printing') -----
printClass: class
"Create a file whose name is the argument followed by '.bytes'. Store on
the file the symbolic form of the compiled methods of the class."
| file |
file := FileStream newFileNamed: class name , '.bytes'.
+ class selectorsDo:
- class selectors do:
[:sel |
file cr; nextPutAll: sel; cr.
(self on: (class compiledMethodAt: sel)) printInstructionsOn: file].
file close
"InstructionPrinter printClass: Parser."
!
Item was changed:
----- Method: ClassDescription>>replaceSilently:to: (in category 'instance variables') -----
replaceSilently: old to: new
"text-replace any part of a method. Used for class and pool variables. Don't touch the header. Not guaranteed to work if name appears in odd circumstances"
| oldCode newCode parser header body sels oldName newName |
oldName := old asString.
newName := new asString.
self withAllSubclasses do:
+ [:cls | sels := cls selectors asSet.
- [:cls | sels := cls selectors.
sels removeAllFoundIn: #(DoIt DoItIn:).
sels do:
[:sel |
oldCode := cls sourceCodeAt: sel.
"Don't make changes in the method header"
(parser := cls parserClass new) parseSelector: oldCode.
header := oldCode copyFrom: 1 to: (parser endOfLastToken min: oldCode size).
body := header size > oldCode size
ifTrue: ['']
ifFalse: [oldCode copyFrom: header size+1 to: oldCode size].
newCode := header , (body copyReplaceTokens: oldName with: newName).
newCode ~= oldCode ifTrue:
[cls compile: newCode
classified: (cls organization categoryOfElement: sel)
notifying: nil]].
cls isMeta ifFalse:
[oldCode := cls comment.
newCode := oldCode copyReplaceTokens: oldName with: newName.
newCode ~= oldCode ifTrue:
[cls comment: newCode]]]!
Item was changed:
----- Method: Behavior>>whichSelectorsStoreInto: (in category 'testing method dictionary') -----
whichSelectorsStoreInto: instVarName
+ "Answer a collection of selectors whose methods access the argument,
- "Answer a Set of selectors whose methods access the argument,
instVarName, as a named instance variable."
| instVarIndex |
instVarIndex := self allInstVarNames indexOf: instVarName ifAbsent: [^IdentitySet new].
^ self methodDict keys select:
[:sel | (self methodDict at: sel) writesField: instVarIndex]
"Point whichSelectorsStoreInto: 'x'."!
Item was changed:
----- Method: Behavior>>classVarNames (in category 'accessing instances and variables') -----
classVarNames
+ "Answer a collection of the receiver's class variable names."
- "Answer a Set of the receiver's class variable names."
+ ^#()!
- ^Set new!
Item was changed:
----- Method: Class>>classVarNames (in category 'class variables') -----
classVarNames
+ "Answer a collection of the names of the class variables defined in the receiver."
- "Answer a Set of the names of the class variables defined in the receiver."
+ ^self classPool keys asArray sort!
- ^self classPool keys!
Item was changed:
----- Method: Class>>allClassVarNames (in category 'class variables') -----
allClassVarNames
"Answer a Set of the names of the receiver's class variables, including those
defined in the superclasses of the receiver."
| aSet |
self superclass == nil
ifTrue:
+ [^self classVarNames asSet] "This is the keys so it is a new Set."
- [^self classVarNames] "This is the keys so it is a new Set."
ifFalse:
[aSet := self superclass allClassVarNames.
aSet addAll: self classVarNames.
^aSet]!
More information about the Squeak-dev
mailing list
|