[Vm-dev] VM Maker: VMMaker.oscog-eem.1641.mcz
commits at source.squeak.org
commits at source.squeak.org
Sat Jan 16 05:24:50 UTC 2016
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.1641.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.1641
Author: eem
Time: 16 January 2016, 9:23:06.807672 pm
UUID: a1fef138-fa26-4a09-b0c1-1e7be82e14a8
Ancestors: VMMaker.oscog-eem.1640
Spur:
Follow the stacked receiver (closure) of a block activation qwhen handling send faults so that forwarded copied values are unforwarded for subsequent activations of the same closure.
=============== Diff against VMMaker.oscog-eem.1640 ===============
Item was changed:
----- Method: StackInterpreter>>followForwardedFrameContents:stackPointer: (in category 'lazy become') -----
followForwardedFrameContents: theFP stackPointer: theSP
"follow pointers in the current stack frame up to theSP."
<var: #theFP type: #'char *'>
<var: #theSP type: #'char *'>
<inline: false>
+ | oop |
<var: #ptr type: #'char *'>
theSP
to: (self frameReceiverLocation: theFP)
by: objectMemory wordSize
+ do: [:ptr|
- do: [:ptr| | oop |
oop := stackPages longAt: ptr.
((objectMemory isNonImmediate: oop)
and: [objectMemory isForwarded: oop]) ifTrue:
[stackPages longAt: ptr put: (objectMemory followForwarded: oop)]].
theFP + FoxCallerSavedIP + objectMemory wordSize
to: theFP + (self frameStackedReceiverOffset: theFP)
by: objectMemory wordSize
+ do: [:ptr|
- do: [:ptr| | oop |
oop := stackPages longAt: ptr.
((objectMemory isNonImmediate: oop)
and: [objectMemory isForwarded: oop]) ifTrue:
+ [oop := objectMemory followForwarded: oop.
+ stackPages longAt: ptr put: oop]].
+ "If we're in a block then also follow fields in the stacked closure as it may be activated again."
+ (self frameIsBlockActivation: theFP) ifTrue:
+ [self assert: oop = (stackPages longAt: theFP + (self frameStackedReceiverOffset: theFP)).
+ self followForwardedObjectFields: oop toDepth: 0].
- [stackPages longAt: ptr put: (objectMemory followForwarded: oop)]].
self assert: (objectMemory isForwarded: (self frameMethodObject: theFP)) not.
(self frameHasContext: theFP) ifTrue:
[self assert: (objectMemory isForwarded: (self frameContext: theFP)) not]!
More information about the Vm-dev
mailing list