Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2409.mcz==================== Summary ====================
Name: VMMaker.oscog-eem.2409
Author: eem
Time: 7 June 2018, 4:02:08.947009 pm
UUID: 679840b7-ac59-484f-a7aa-6bdb03ac1eb4
Ancestors: VMMaker.oscog-eem.2408
Fix static selector mapping in SpurCompactor; it needs to handle inheritance (SpurSelectiveCompactor inherits from SpurSweeper).
Spur64BitMemoryManager>>bytesBigEnoughForPrevPointer: shouldn't use =/~= for robustness.
=============== Diff against VMMaker.oscog-eem.2408 ===============
Item was changed:
----- Method: Spur64BitMemoryManager>>bytesBigEnoughForPrevPointer: (in category 'free space') -----
bytesBigEnoughForPrevPointer: chunkBytes
+ "To have a prev pointer, which follows the next pointer, we need at least two slots."
+ ^chunkBytes > (self baseHeaderSize + self allocationUnit)!
- ^ chunkBytes ~= (self baseHeaderSize + self allocationUnit)!
Item was changed:
----- Method: SpurCompactor class>>declareCVarsIn: (in category 'translation') -----
declareCVarsIn: aCCodeGenerator
"If subclasses are being used but are not the compactorClass itself
+ then statically resolve their api selectors."
+ (self inheritsFrom: SpurCompactor) ifTrue: "leave SpurCompactor methods alone"
+ [(SpurMemoryManager compactorClass includesBehavior: self) ifFalse: "only map methods not in the compactorClass"
+ [#(compact biasForGC biasForSnapshot remapObj: shouldRemapObj:) do: "map the public api methods only"
+ [:selectorToStaticallyResolve|
+ aCCodeGenerator
+ staticallyResolveMethodNamed: selectorToStaticallyResolve
+ forClass: self
+ to: (self staticallyResolvePolymorphicSelector: selectorToStaticallyResolve)]]]!
- then staticvally resolve their api selectors."
- ((self inheritsFrom: SpurCompactor)
- and: [(InitializationOptions at: #compactorClass) ~= self name]) ifTrue:
- [#(compact biasForGC biasForSnapshot remapObj: shouldRemapObj:) do:
- [:selectorToStaticallyResolve|
- aCCodeGenerator
- staticallyResolveMethodNamed: selectorToStaticallyResolve
- forClass: self
- to: (self staticallyResolvePolymorphicSelector: selectorToStaticallyResolve)]]!
Item was changed:
----- Method: SpurMemoryManager>>bytesBigEnoughForPrevPointer: (in category 'free space') -----
bytesBigEnoughForPrevPointer: chunkBytes
+ "Answer if chunkBytes (which includes an object header) has room enough for both
+ a next free chunk and a previous free chunk pointer. This is always true in 32-bits,
+ but in 64-bits requires at least 24 bytes."
self subclassResponsibility!