Eliot Miranda uploaded a new version of VMMakerUI to project VM Maker: http://source.squeak.org/VMMaker/VMMakerUI-eem.49.mcz
==================== Summary ====================
Name: VMMakerUI-eem.49 Author: eem Time: 17 October 2021, 6:04:39.6084 pm UUID: 041ca5cc-0316-41dc-aa4f-e1a3cf780180 Ancestors: VMMakerUI-eem.48
Part of VMMaker.oscog-eem.3093. Have setClickStepBreakBlock avoid stopping twice when click stepping in bytecode. Maintain clickstepping so that CoInteropreter's atEachStepBlock can avoid recursing.
=============== Diff against VMMakerUI-eem.48 ===============
Item was changed: ----- Method: Cogit>>setClickStepBreakBlock (in category '*VMMakerUI-user interface') ----- setClickStepBreakBlock "Set the break block to present a confirmer, breaking if true, and restoring the previous break block. If an open debugger on the receiver can be found, proceed it." <doNotGenerate> | previousBreakBlock previousAtEachStepBlock previousBreakPC previousSingleStep previousClickConfirm result | (breakBlock isNil or: [breakBlock method ~~ thisContext method]) ifTrue: [previousBreakBlock := breakBlock. previousAtEachStepBlock := coInterpreter atEachStepBlock. previousBreakPC := breakPC. previousSingleStep := singleStep. previousClickConfirm := clickConfirm. breakBlock := [:ign| (processor pc ~= previousBreakPC + and: [self inMachineCode + and: [(result := self promptClickStep) == true]]) - and: [(result := self promptClickStep) == true]) ifTrue: [false] ifFalse: [breakBlock := previousBreakBlock. coInterpreter atEachStepBlock: previousAtEachStepBlock. + breakPC := (previousBreakPC isBreakpointFor: processor pc) ifTrue: [false] ifFalse: [previousBreakPC]. - breakPC := previousBreakPC == true ifTrue: [false] ifFalse: [previousBreakPC]. singleStep := previousSingleStep. clickConfirm := previousClickConfirm. result ~~ #proceed]]. coInterpreter atEachStepBlock: + [clickStepping := true. + [previousAtEachStepBlock value] ensure: [clickStepping := false]. - [previousAtEachStepBlock value. (coInterpreter localIP ~= previousBreakPC + and: [self inMachineCode not + and: [(result := self promptClickStep) == true]]) ifFalse: - and: [(result := self promptClickStep) == true]) ifFalse: [breakBlock := previousBreakBlock. coInterpreter atEachStepBlock: previousAtEachStepBlock. + breakPC := (previousBreakPC isBreakpointFor: coInterpreter localIP) ifTrue: [false] ifFalse: [previousBreakPC]. - breakPC := previousBreakPC == true ifTrue: [false] ifFalse: [previousBreakPC]. singleStep := previousSingleStep. clickConfirm := previousClickConfirm. self halt]]. singleStep := breakPC := clickConfirm := result ~~ #proceed]. (World submorphs detect: [:m| m model isDebugger and: [(m model interruptedProcess suspendedContext ifNil: [false] "happens if we're debugging this very method..." ifNotNil: [:suspendedContext| suspendedContext findContextSuchThat: [:ctxt| (ctxt receiver == self and: [ctxt selector == #simulateCogCodeAt: or: [ctxt selector == #simulateLeafCallOf:]]) or: [ctxt receiver == coInterpreter and: [ctxt selector == #interpret or: [ctxt selector == #halt "initial launch doit"]]]]]) notNil]] ifNone: []) ifNotNil: [:debuggerWindow| WorldState addDeferredUIMessage: [debuggerWindow model proceed]]!
vm-dev@lists.squeakfoundation.org