VM Maker: VMMaker.oscog-eem.2887.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.2887.mcz

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

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

Name: VMMaker.oscog-eem.2887
Author: eem
Time: 15 November 2020, 11:34:08.438409 pm
UUID: 835695f1-3354-4db4-9d20-dff979802ef4
Ancestors: VMMaker.oscog-eem.2886

...and another one.

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

Item was changed:
  ----- Method: CoInterpreter>>markCogMethodsAndReferentsOnPage: (in category 'frame access') -----
  markCogMethodsAndReferentsOnPage: thePage
  <var: #thePage type: #'StackPage *'>
+ | theFP callerFP |
+ <var: #theFP type: #'char *'>
+ <var: #callerFP type: #'char *'>
- | theFP callerFP cogMethod theIP |
  <inline: false>
  self assert: (stackPages isFree: thePage) not.
  self assert: (self ifCurrentStackPageHasValidHeadPointers: thePage).
  theFP := thePage headFP.
+ "Skip the instruction pointer on top of stack of inactive pages."
- "If a machine code primitive is in progress then there will be a return address on top of stack
- which does not refer to the current frame's method (which is the caller of the primitive), since
- the primitive has not built a frame. It is vital that that method not be reclaimed!!!!"
- theIP := (stackPages longAt: thePage headSP) asUnsignedInteger.
- (theIP < objectMemory startOfMemory
- and: [theIP ~= cogit ceReturnToInterpreterPC]) ifTrue:
- [self assert: (self isMachineCodeFrame: theFP).
- cogMethod := self mframeHomeMethod: theFP.
- (theIP >= cogMethod asUnsignedInteger
-  and: [theIP < (cogMethod asUnsignedInteger + cogMethod blockSize)]) ifFalse:
- [(cogit cogMethodContaining: theIP) ifNotNil:
- [:primCogMethod| cogit markMethodAndReferents: primCogMethod]]].
  [(self isMachineCodeFrame: theFP) ifTrue:
  [cogit markMethodAndReferents: (self mframeCogMethod: theFP)].
  (callerFP := self frameCallerFP: theFP) ~= 0] whileTrue:
  [theFP := callerFP]!