Eliot Miranda uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-eem.416.mcz
==================== Summary ====================
Name: Compiler-eem.416 Author: eem Time: 18 January 2020, 5:39:19.465227 pm UUID: dc1deb74-569c-4fab-8b57-c4513cbead96 Ancestors: Compiler-ct.415
Fix compiler bug with cascaded caseOf:[otherwise:] nodes. When an optimized block form is used in a cascade the form's message is sent ensureCanCascade:, whicharranges to send deoptimize to any and all previously optimized blocks in the form. The bug was that ensureCanCascade: failed to identify the brace node in the optimized caseOf:[otherwise:] form and hence neglected to deoptimize the blocks in the case. The fix is to provide both an isBraceNode to make it easy for ensureCanCascade: to identify braces, and BraceNode>>deoptimize: to do the work.
=============== Diff against Compiler-ct.415 ===============
Item was added: + ----- Method: BraceNode>>deoptimize (in category 'closure analysis') ----- + deoptimize + "Deoptimize the blocks in a caseOf:[otherwise:] that is being used in a cascade." + elements do: + [:aMessage| + self assert: aMessage selector key == #->. + aMessage receiver deoptimize. + aMessage arguments first deoptimize]!
Item was added: + ----- Method: BraceNode>>isBraceNode (in category 'testing') ----- + isBraceNode + ^true!
Item was changed: ----- Method: MessageNode>>ensureCanCascade: (in category 'cascading') ----- ensureCanCascade: encoder special > 0 ifTrue: [special := 0. receiver := originalReceiver. selector := encoder encodeSelector: originalSelector. arguments := originalArguments. receiver isBlockNode ifTrue: [receiver deoptimize]. arguments do: [:each| + (each isBlockNode or: [each isBraceNode]) ifTrue: - each isBlockNode ifTrue: [each deoptimize]]]!
Item was added: + ----- Method: ParseNode>>isBraceNode (in category 'testing') ----- + isBraceNode + ^false!
packages@lists.squeakfoundation.org