Eliot Miranda uploaded a new version of VMMaker to project VM Maker: http://source.squeak.org/VMMaker/VMMaker.oscog-eem.3363.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.3363 Author: eem Time: 17 April 2024, 4:08:09.099496 pm UUID: ef2ede81-25f0-41f4-ab60-14f7bb01111a Ancestors: VMMaker.oscog-mt.3362
A couple of methods should use objectMemory displayObject rather than access TheDisplay directly.
=============== Diff against VMMaker.oscog-mt.3362 ===============
Item was changed: ----- Method: StackInterpreter>>postGCUpdateDisplayBits (in category 'object memory support') ----- postGCUpdateDisplayBits "Update the displayBits after a GC may have moved it. Answer if the displayBits appear valid. The wrinkle here is that the displayBits could be a surface handle." <inline: false> | displayObj bitsOop bitsNow | + displayObj := objectMemory displayObject. - displayObj := objectMemory splObj: TheDisplay. ((objectMemory isPointers: displayObj) and: [(objectMemory lengthOf: displayObj) >= 4]) ifFalse: [^false]. bitsOop := objectMemory followOopField: 0 ofObject: displayObj. (bitsOop = objectMemory nilObject "it ain't yet set" or: [objectMemory isIntegerObject: bitsOop]) ifTrue: "It's a surface; our work here is done..." [^true].
self assert: ((objectMemory addressCouldBeObj: bitsOop) and: [objectMemory isWordsOrBytes: bitsOop]).
(objectMemory hasSpurMemoryManagerAPI and: [objectMemory isPinned: bitsOop]) ifFalse: [(objectMemory hasSpurMemoryManagerAPI and: [stackPage notNil]) ifTrue: "If stackPage is nil we're snapshotting and now is not the time to pin." [objectMemory pinObject: bitsOop. bitsOop := objectMemory followOopField: 0 ofObject: displayObj]. bitsNow := self cCode: [objectMemory firstIndexableField: bitsOop] inSmalltalk: [(objectMemory firstIndexableField: bitsOop) asInteger]. displayBits ~= bitsNow ifTrue: [displayBits := bitsNow. self ioNoteDisplayChanged: displayBits width: displayWidth height: displayHeight depth: displayDepth]]. ^true!
Item was changed: ----- Method: StackInterpreter>>showDisplayBits:Left:Top:Right:Bottom: (in category 'I/O primitive support') ----- showDisplayBits: aForm Left: l Top: t Right: r Bottom: b "Repaint the portion of the Smalltalk screen bounded by the affected rectangle. Used to synchronize the screen after a Bitblt to the Smalltalk Display object." (deferDisplayUpdates + or: [aForm ~= objectMemory displayObject]) ifTrue: [^nil]. - or: [aForm ~= (objectMemory splObj: TheDisplay)]) ifTrue: [^nil]. self updateDisplayLeft: l Top: t Right: r Bottom: b!
vm-dev@lists.squeakfoundation.org