VM Maker: VMMaker.oscog-eem.2968.mcz

Previous Topic Next Topic
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

VM Maker: VMMaker.oscog-eem.2968.mcz

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

==================== Summary ====================

Name: VMMaker.oscog-eem.2968
Author: eem
Time: 18 June 2021, 4:24:48.734961 pm
UUID: f7018c3a-ddc0-4f70-aa66-8f8f6b17f40f
Ancestors: VMMaker.oscog-eem.2967

In rare circumstances the Display bits oop can be nil post GC.  Avoid an assert failure and unnecessary work if it is.

=============== Diff against VMMaker.oscog-eem.2967 ===============

Item was changed:
  ----- Method: StackInterpreter>>postGCUpdateDisplayBits (in category 'object memory support') -----
  "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 splObj: TheDisplay.
  ((objectMemory isPointers: displayObj)
  and: [(objectMemory lengthOf: displayObj) >= 4]) ifFalse:
  bitsOop := objectMemory fetchPointer: 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..."
- (objectMemory isIntegerObject: bitsOop) ifTrue: "It's a surface; our work here is done..."
  self assert: ((objectMemory addressCouldBeObj: bitsOop)
  and: [objectMemory isWordsOrBytes: bitsOop]).
  (objectMemory hasSpurMemoryManagerAPI
  and: [objectMemory isPinned: bitsOop]) ifFalse:
  [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].
  (objectMemory hasSpurMemoryManagerAPI
   and: [stackPage ~= 0]) ifTrue: "If stackPage is zero we're snapshotting and now is not the time to pin."
  [objectMemory pinObject: bitsOop]].