Christoph Thiede uploaded a new version of Tools to project The Trunk: http://source.squeak.org/trunk/Tools-ct.1244.mcz
==================== Summary ====================
Name: Tools-ct.1244 Author: ct Time: 15 December 2023, 9:10:35.361435 pm UUID: d5103ab3-045e-9846-9aff-98217a9e58aa Ancestors: Tools-mt.1242, Tools-ct.1243
Merges and revises Tools-ct.1243: When accepting a method in a debugger, allows to proceed compilation despite of no active home method. I noticed a frequent demand for this in myself and others as in many situations, we are not interested in proceeding the suspended process anyway. The second dialog window is optional and might bring clarity or annoyance. Do we need it?
Revision: Slightly changed wording of first message.
=============== Diff against Tools-mt.1242 ===============
Item was changed: ----- Method: Debugger>>contents:notifying: (in category 'accessing') ----- contents: aText notifying: aController "Accept new method source of the selected context."
| selector classOfMethod category ctxt newMethod | contextStackIndex = 0 ifTrue: [^ false]. "First, handle some edge cases" selector := self selectedClass newParser parseSelector: aText. "selector isDoIt ifTrue: [ currentCompiledMethod := self compileDoIt: aText]." self flag: #todo. "ct: Recompile doIt method *without* creating method litters!! See Compiler>>#evaluateCue:ifFail:." selector = self selectedMessageName ifFalse: [ "Different message compiled, delegating to super" ^ super contents: aText notifying: aController]. self selectedContext isExecutingBlock ifTrue: [ "If we are in a block context, we need to rewind the stack before ." | home | home := self selectedContext activeHome. home ifNil: [ + (self confirm: 'Method for block not found on stack, can''t edit and continue. Update method anyway?' translated) ifFalse: [ + ^ false]. + ^ (super contents: aText notifying: aController) + ifTrue: [ + contents := nil. self contentsChanged. + self inform: 'Method was updated, but cannot revert the stack to it.' translated]; + yourself]. - self inform: 'Method for block not found on stack, can''t edit and continue' translated. - ^ false]. (self confirm: 'I will have to revert to the method from\which this block originated. Is that OK?' translated withCRs) ifFalse: [ ^ false]. self resetContext: home changeContents: false. "N.B. Only reset the contents if the compilation succeeds. If contents would be reset when compilation fails, both compiler error message and modifications were lost." ^ (self contents: aText notifying: aController) ifTrue: [self contentsChanged]; yourself]. classOfMethod := self selectedClass. category := self selectedMessageCategoryName. "Do the actual compilation" selector := classOfMethod compile: aText classified: category notifying: aController. selector ifNil: [^ false]. "compilation cancelled" "Update views" contents := aText. newMethod := classOfMethod compiledMethodAt: selector. newMethod isQuick ifTrue: [ self cutBackExecutionToSenderContext]. ctxt := interruptedProcess popTo: self selectedContext. ctxt == self selectedContext ifFalse: [self inform: 'Method saved, but current context unchanged\because of unwind error. Click OK to see error' translated withCRs] ifTrue: [ newMethod isQuick ifFalse: [ interruptedProcess restartTopWith: newMethod. interruptedProcess stepToSendOrReturn]. contextVariablesInspector object: nil]. self resetContext: ctxt. Project current addDeferredUIMessage: [ self changed: #contentsSelection]. ^ true!
packages@lists.squeakfoundation.org