Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.488.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.488 Author: eem Time: 31 October 2013, 6:07:30.267 pm UUID: 1c22fbbe-334d-4740-8b2e-ac953396f93c Ancestors: VMMaker.oscog-eem.487
Mark some of the new methods <inline: false> for debugging. Actually dereference the field index in markAndTraceWeaklingsFrom:. Nuke unsent nilUnmarkedWeaklingSlots: (C conflict with nilUnmarkedWeaklingSlots).
=============== Diff against VMMaker.oscog-eem.487 ===============
Item was changed: ----- Method: SpurMemoryManager>>markAndTraceWeaklingsFrom: (in category 'weakness and ephemerality') ----- markAndTraceWeaklingsFrom: startIndex "Mark weaklings on the weaklingStack, ignoring startIndex number of elements on the bottom of the stack. Answer the size of the stack *before* the enumeration began." ^self objStack: weaklingStack from: startIndex do: [:weakling| 0 to: (self numStrongSlotsOf: weakling ephemeronInactiveIf: nil) - 1 do: + [:i| | field | + field := self fetchPointer: i ofObject: weakling. - [:field| ((self isImmediate: field) or: [self isMarked: field]) ifFalse: [self markAndTrace: field]]]!
Item was changed: ----- Method: SpurMemoryManager>>markWeaklingsAndMarkAndFireEphemerons (in category 'gc - global') ----- markWeaklingsAndMarkAndFireEphemerons "After the initial scan-mark is complete ephemerons can be processed. Weaklings have accumulated on the weaklingStack, but more may be uncovered during ephemeron processing. So trace the strong slots of the weaklings, and as ephemerons are processed ensure any newly reached weaklings are also traced." | numTracedWeaklings | + <inline: false> numTracedWeaklings := 0. [coInterpreter markAndTraceUntracedReachableStackPages. numTracedWeaklings := self markAndTraceWeaklingsFrom: numTracedWeaklings. self noUnscannedEphemerons ifTrue: [^self]. self markInactiveEphemerons ifFalse: [self fireAllUnscannedEphemerons]. self markAllUnscannedEphemerons] repeat!
Item was changed: ----- Method: SpurMemoryManager>>nilUnmarkedWeaklingSlots (in category 'weakness and ephemerality') ----- nilUnmarkedWeaklingSlots "Nil the unmarked slots in the weaklings on the weakling stack, finalizing those that lost references. Finally, empty the weaklingStack." + <inline: false> self objStack: weaklingStack from: 0 do: [:weakling| + (self nilUnmarkedWeaklingSlotsIn: weakling) ifTrue: - (self nilUnmarkedWeaklingSlots: weakling) ifTrue: [coInterpreter signalFinalization: weakling]]. self emptyObjStack: weaklingStack!
Item was removed: - ----- Method: SpurMemoryManager>>nilUnmarkedWeaklingSlots: (in category 'weakness and ephemerality') ----- - nilUnmarkedWeaklingSlots: aWeakling - "Nil the unmarked slots in aWeakling and - answer if any unmarked slots were found." - | anyUnmarked | - anyUnmarked := false. - (self numStrongSlotsOf: aWeakling ephemeronInactiveIf: nil) to: (self numSlotsOf: aWeakling) - 1 do: - [:i| | oop | - oop := self fetchPointer: i ofObject: aWeakling. - ((self isImmediate: oop) or: [self isMarked: oop]) ifFalse: - [self storePointerUnchecked: i ofObject: aWeakling withValue: nilObj. - anyUnmarked := true]]. - ^anyUnmarked!
vm-dev@lists.squeakfoundation.org