Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/..VMMaker.oscog-eem.616.mcz ==================== Summary ==================== Name: ..VMMaker.oscog-eem.616 Author: eem Time: 12 February 2014, 8:33:36.811 pm UUID: 37fac92f-2bc3-4414-9fd6-4c5ac1378e46 Ancestors: .VMMaker.oscog-eem.615 Fix a Slang snafu in the last commit =============== Diff against .VMMaker.oscog-eem.615 =============== Item was changed: ----- Method: SpurSegmentManager>>postSnapshot (in category 'snapshot') ----- postSnapshot "Restore all shortened segments to their proper size, re-freeing the trailing space." numSegments - 1 to: 0 by: -1 do: [:i| (segments at: i) lastFreeObject ifNotNil: [:freeChunk| | address | address := (segments at: i) segLimit - manager bridgeSize. (segments at: i) segSize: (segments at: i) savedSegSize. + self bridgeFrom: (self addressOf: (segments at: i)) + to: (i < (numSegments - 1) ifTrue: [self addressOf: (segments at: i + 1)]). - self bridgeFrom: (segments at: i) - to: (i < (numSegments - 1) ifTrue: [segments at: i + 1]). manager addFreeChunkWithBytes: (segments at: i) segLimit - address - manager bridgeSize at: address]]. "perhaps this should read manager setEndOfMemory: 0; assimilateNewSegment: (segments at: numSegments - 1)" manager setEndOfMemory: (segments at: numSegments - 1) segLimit - manager bridgeSize! Item was changed: ----- Method: SpurSegmentManager>>prepareForSnapshot (in category 'snapshot') ----- prepareForSnapshot "shorten all segments by any trailing free space." <var: #seg type: #'SpurSegmentInfo *'> 0 to: numSegments - 1 do: [:i| (segments at: i) savedSegSize: (segments at: i) segSize; lastFreeObject: nil]. "Ideally finding the lastFreeObject of each segment would be done in some linear pass through the heap. But for now KISS." manager freeTreeNodesDo: [:freeChunk| | next seg | + next := manager objectAfter: freeChunk limit: manager endOfMemory. + (manager isSegmentBridge: next) ifTrue: - next := manager objectAfter: freeChunk limit: manager endOfMemory. - (manager isSegmentBridge: next) ifTrue: [seg := self segmentContainingObj: freeChunk. seg lastFreeObject: freeChunk]. + freeChunk]. - freeChunk]. 0 to: numSegments - 1 do: [:i| (segments at: i) lastFreeObject ifNotNil: [:freeChunk| manager detachFreeObject: freeChunk. (segments at: i) segSize: (manager startOfObject: freeChunk) + manager bridgeSize - (segments at: i) segStart. + self bridgeFrom: (self addressOf: (segments at: i)) + to: (i < (numSegments - 1) ifTrue: [self addressOf: (segments at: i + 1)])]]. - self bridgeFrom: (segments at: i) - to: (i < (numSegments - 1) ifTrue: [segments at: i + 1])]]. "perhaps this should read manager setEndOfMemory: 0; assimilateNewSegment: (segments at: numSegments - 1)" manager setEndOfMemory: (segments at: numSegments - 1) segLimit - manager bridgeSize! |
Free forum by Nabble | Edit this page |