[Vm-dev] VM Maker: VMMakerUI-eem.23.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Feb 25 06:18:35 UTC 2020
Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker:
http://source.squeak.org/VMMaker/VMMakerUI-eem.23.mcz
==================== Summary ====================
Name: VMMakerUI-eem.23
Author: eem
Time: 24 February 2020, 10:18:34.007099 pm
UUID: 4c054213-2bde-422f-b669-589935878c54
Ancestors: VMMakerUI-eem.22
Extend CogFrameInspector to allow changing the stack pointer, and to force text generation when frame is old and out-of-bounds.
=============== Diff against VMMakerUI-eem.22 ===============
Item was changed:
CogVMObjectInspector subclass: #CogAbstractFrameInspector
+ instanceVariableNames: 'force'
- instanceVariableNames: ''
classVariableNames: ''
poolDictionaries: ''
category: 'VMMakerUI-SqueakInspectors'!
!CogAbstractFrameInspector commentStamp: 'eem 12/24/2019 12:32' prior: 0!
A CogAbstractFrameInspector is an inspector for the state of a Smalltalk stack frame in Cog.!
Item was added:
+ ----- Method: CogAbstractFrameInspector>>coInterpreter: (in category 'initialization') -----
+ coInterpreter: aCoInterpreter
+ super coInterpreter: aCoInterpreter.
+ force := false!
Item was changed:
----- Method: CogAbstractFrameInspector>>textForFramePointer:stackPointer: (in category 'accessing - ui') -----
textForFramePointer: framePointer stackPointer: stackPointer
"Print and emphasize the frame text as efficiently as possible, deferring as much interpretation until evaluation time."
| frameString frameText |
+ (force or: [coInterpreter stackPages apparentlyValidFramePointer: framePointer stackPointer: stackPointer]) ifFalse:
- (coInterpreter stackPages apparentlyValidFramePointer: framePointer stackPointer: stackPointer) ifFalse:
[^('Invalid Frame fp: ', (framePointer isInteger ifTrue: [framePointer hex allButFirst: 3] ifFalse: [framePointer printString]),
' sp: ', (framePointer isInteger ifTrue: [framePointer hex allButFirst: 3] ifFalse: [framePointer printString])) asText allBold].
frameText := (String streamContents: [:fs| coInterpreter printFrame: framePointer WithSP: stackPointer on: fs]) allButFirst asText.
(frameString := frameText string)
findTokens: {Character cr}
indicesDo:
[:start :stop| | firstColonIndex fieldNameIndex fieldNameEndIndex valueIndex |
start = 1
ifTrue:
[self windowTitle: (self windowTitleFrom: (frameString copyFrom: 1 to: stop)).
frameText
addAttribute: (PluggableTextAttribute evalBlock: [(CogFrameInspector on: coInterpreter)
framePointer: framePointer;
open])
from: 1
to: (frameString indexOf: Character space startingAt: 4) - 1]
ifFalse:
[fieldNameIndex := (firstColonIndex := frameString indexOf: $: startingAt: start + 1) + 1.
[(frameString at: fieldNameIndex) = Character space] whileTrue:
[fieldNameIndex := fieldNameIndex + 1].
fieldNameEndIndex := (frameString indexOf: $: startingAt: fieldNameIndex + 1) - 1.
valueIndex := fieldNameEndIndex + 2.
[(frameString at: valueIndex) = Character space] whileTrue:
[valueIndex := valueIndex + 1].
valueIndex < stop ifTrue: "greater for 'INVALID RECEIVER'"
[(self evalAttributeForFieldName: (frameString copyFrom: fieldNameIndex to: fieldNameEndIndex)
framePointer: framePointer
value: (frameString copyFrom: valueIndex to: stop)
addressString: (frameString copyFrom: start to: firstColonIndex - 1))
ifNotNil:
[:attribute| frameText addAttribute: attribute from: fieldNameIndex to: fieldNameEndIndex]]]].
^frameText!
Item was added:
+ ----- Method: CogFrameInspector>>textMenu: (in category 'accessing - ui') -----
+ textMenu: aMenuMorph
+ aMenuMorph
+ add: 'decrement sp' action: [self stackPointer: self stackPointer - objectMemory wordSize];
+ add: 'increment sp' action: [self stackPointer: self stackPointer + objectMemory wordSize];
+ addLine;
+ add: 'force output' action: [force := true].
+ ^aMenuMorph!
More information about the Vm-dev
mailing list