[squeak-dev] The Trunk: Kernel-nice.377.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Jan 15 22:16:03 UTC 2010
Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-nice.377.mcz
==================== Summary ====================
Name: Kernel-nice.377
Author: nice
Time: 15 January 2010, 11:15:25.577 pm
UUID: 9795d8b5-764d-4087-934b-5f540004008b
Ancestors: Kernel-bf.376
add #selectorsAndMethodsDo: and use it to fast up some operations
This is 4x faster than class selectorsDo: [:s | class compiledMethodAt: s]
=============== Diff against Kernel-bf.376 ===============
Item was changed:
----- Method: Behavior>>spaceUsed (in category 'private') -----
spaceUsed
"Answer a rough estimate of number of bytes used by this class and its metaclass. Does not include space used by class variables."
| space |
space := 0.
+ self methodsDo: [:method |
- self selectorsDo: [:sel | | method |
space := space + 16. "dict and org'n space"
- method := self compiledMethodAt: sel.
space := space + (method size + 6 "hdr + avg pad").
method literals do: [:lit |
(lit isMemberOf: Array) ifTrue: [space := space + ((lit size + 1) * 4)].
(lit isMemberOf: Float) ifTrue: [space := space + 12].
(lit isMemberOf: ByteString) ifTrue: [space := space + (lit size + 6)].
(lit isMemberOf: LargeNegativeInteger) ifTrue: [space := space + ((lit size + 1) * 4)].
(lit isMemberOf: LargePositiveInteger) ifTrue: [space := space + ((lit size + 1) * 4)]]].
^ space!
Item was changed:
----- Method: Behavior>>selectorsAndMethodsDo: (in category 'accessing method dictionary') -----
+ selectorsAndMethodsDo: selectorAndMethodBlock
+ "Evaluate the two argument selectorAndMethodBlock for all the selector/method pairs in my method dictionary."
- selectorsAndMethodsDo: aBlock
- "Evaluate selectorBlock for all the message selectors in my method dictionary."
+ ^ self methodDict keysAndValuesDo: selectorAndMethodBlock!
- ^ self methodDict keysAndValuesDo: aBlock!
Item was changed:
----- Method: Behavior>>recompileChanges (in category 'compiling') -----
recompileChanges
"Compile all the methods that are in the changes file.
This validates sourceCode and variable references and forces
methods to use the current bytecode set"
+ self selectorsAndMethodsDo:
+ [:sel :m | m fileIndex > 1 ifTrue:
- self selectorsDo:
- [:sel | (self compiledMethodAt: sel) fileIndex > 1 ifTrue:
[self recompile: sel from: self]]!
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 selectorsAndMethodsDo:
+ [:sel :m |
- class selectorsDo:
- [:sel |
file cr; nextPutAll: sel; cr.
+ (self on: m) printInstructionsOn: file].
- (self on: (class compiledMethodAt: sel)) printInstructionsOn: file].
file close
"InstructionPrinter printClass: Parser."
!
More information about the Squeak-dev
mailing list
|