Eliot Miranda uploaded a new version of Kernel to project The Trunk: http://source.squeak.org/trunk/Kernel-eem.1498.mcz
==================== Summary ====================
Name: Kernel-eem.1498 Author: eem Time: 12 February 2023, 1:30:55.883243 pm UUID: e8b69d4d-8a07-4cf8-8ee7-d764b47f1981 Ancestors: Kernel-tpr.1497
In implementing BlockClosure>>hasMethodReturn, don't assume the byutecode set.
Implement Context>>#home so that it will code with clean blocks.
=============== Diff against Kernel-tpr.1497 ===============
Item was changed: ----- Method: BlockClosure>>hasMethodReturn (in category 'testing') ----- hasMethodReturn "Answer whether the receiver has a method-return ('^') in its code." | scanner endpc | + scanner := InstructionStream new method: self method pc: startpcOrMethod. - scanner := InstructionStream new method: outerContext method pc: startpcOrMethod. endpc := self endPC. + scanner scanFor: + [:byte | + scanner willReturn ifTrue: + [scanner willBlockReturn ifFalse: + [^true]]. + scanner pc >= endpc]. + ^false! - scanner scanFor: [:byte | (byte between: 120 and: 124) or: [scanner pc > endpc]]. - ^scanner pc <= endpc!
Item was changed: ----- Method: Context>>home (in category 'accessing') ----- home + "Answer the outermost context (along the static chain) for the receiver. + This is the outermost lexical scope in which the receiver's method is defined." - "Answer the context in which the receiver was defined."
+ ^closureOrNil + ifNil: [self] "normal method activation" + ifNotNil: "block activation" + [:closure| + closure outerContext + ifNil: [self] "clean block" + ifNotNil: [:outerContext| outerContext home]] "normal block"! - closureOrNil == nil ifTrue: - [^self]. - ^closureOrNil outerContext home!
packages@lists.squeakfoundation.org