David T. Lewis uploaded a new version of System to project The Trunk: http://source.squeak.org/trunk/System-dtl.666.mcz
==================== Summary ====================
Name: System-dtl.666 Author: dtl Time: 15 February 2014, 9:53:14.979 pm UUID: 098b856a-ecc5-498a-bceb-ef3457d3511e Ancestors: System-dtl.665
Sending basicNew to CompiledMethod may crash the VM, so don't do that.
=============== Diff against System-dtl.665 ===============
Item was changed: ----- Method: SpaceTally>>spaceForInstancesOf: (in category 'instance size') ----- spaceForInstancesOf: aClass "Answer the number of bytes consumed by all instances of the given class, including their object headers and the number of instances."
| smallHeaderSize instVarBytes isVariable bytesPerElement total lastInstance instance instanceCount | instance := aClass someInstance ifNil: [ ^#(0 0) ]. smallHeaderSize := aClass isCompact ifTrue: [ 4 ] ifFalse: [ 8 ]. instVarBytes := aClass instSize * 4. isVariable := aClass isVariable. bytesPerElement := isVariable ifFalse: [ 0 ] ifTrue: [ aClass isBytes ifTrue: [ 1 ] ifFalse: [ 4 ] ]. total := 0. instanceCount := 0. "A modified version of #allInstancesDo: is inlined here. It avoids an infinite loop when another process is creating new instances of aClass." self flag: #allInstancesDo:. + lastInstance := + aClass == CompiledMethod "CompiledMethod has special format, see its class comment" + ifTrue: [aClass new] + ifFalse: [aClass basicNew]. - lastInstance := aClass basicNew. [ instance == lastInstance ] whileFalse: [ | contentBytes headerBytes | contentBytes := instVarBytes + (isVariable ifFalse: [ 0 ] ifTrue: [ instance basicSize * bytesPerElement ]). headerBytes := contentBytes > 255 ifTrue: [ 12 ] ifFalse: [ smallHeaderSize ]. total := total + headerBytes + (contentBytes roundUpTo: 4). instanceCount := instanceCount + 1. instance := instance nextInstance ]. ^{ total. instanceCount }!
packages@lists.squeakfoundation.org