[Vm-dev] VM Maker: VMMaker.oscog-eem.488.mcz

commits at source.squeak.org commits at source.squeak.org
Fri Nov 1 01:10:19 UTC 2013

Eliot Miranda uploaded a new version of VMMaker to project VM Maker:

==================== 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

=============== 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:
  		 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') -----
  	"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 markInactiveEphemerons ifFalse:
  		[self fireAllUnscannedEphemerons].
  	 self markAllUnscannedEphemerons]

Item was changed:
  ----- Method: SpurMemoryManager>>nilUnmarkedWeaklingSlots (in category 'weakness and ephemerality') -----
  	"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:
+ 		(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!

More information about the Vm-dev mailing list