Eliot Miranda uploaded a new version of Compiler to project The Trunk: http://source.squeak.org/trunk/Compiler-eem.335.mcz
==================== Summary ====================
Name: Compiler-eem.335 Author: eem Time: 30 March 2017, 4:45:15.534619 pm UUID: c564b5dc-1858-413a-8138-7d322cfad902 Ancestors: Compiler-eem.334
Fix the regression properly.
=============== Diff against Compiler-eem.334 ===============
Item was removed: - ----- Method: Decompiler>>checkForBlock:selector:arguments: (in category 'control') ----- - checkForBlock: receiver selector: selector arguments: arguments - ^self checkForClosureCopy: receiver arguments: arguments!
Item was changed: ----- Method: Decompiler>>send:super:numArgs: (in category 'instruction decoding') ----- send: selector super: superFlag numArgs: numArgs + + | args rcvr selNode msgNode messages | - | args rcvr | args := Array new: numArgs. (numArgs to: 1 by: -1) do: [:i | args at: i put: stack removeLast]. rcvr := stack removeLast. + superFlag ifTrue: [rcvr := constructor codeSuper]. + (#closureCopy:copiedValues: == selector + and: [self checkForClosureCopy: rcvr arguments: args]) ifFalse: + [selNode := constructor codeAnySelector: selector. + rcvr == CascadeFlag + ifTrue: + ["May actually be a cascade or an ifNil: for value." + self willJumpIfFalse + ifTrue: "= generated by a case macro" + [selector == #= ifTrue: + [" = signals a case statement..." + statements addLast: args first. + stack addLast: rcvr. "restore CascadeFlag" + ^ self]. + selector == #== ifTrue: + [" == signals an ifNil: for value..." + stack removeLast; removeLast. + rcvr := stack removeLast. + stack addLast: IfNilFlag; + addLast: (constructor + codeMessage: rcvr + selector: selNode + arguments: args). + ^ self]] + ifFalse: + [(self willJumpIfTrue and: [selector == #==]) ifTrue: + [" == signals an ifNotNil: for value..." + stack removeLast; removeLast. + rcvr := stack removeLast. + stack addLast: IfNilFlag; + addLast: (constructor + codeMessage: rcvr + selector: selNode + arguments: args). + ^ self]]. + msgNode := constructor + codeCascadedMessage: selNode + arguments: args. + stack last == CascadeFlag ifFalse: + ["Last message of a cascade" + statements addLast: msgNode. + messages := self popTo: stack removeLast. "Depth saved by first dup" + msgNode := constructor + codeCascade: stack removeLast + messages: messages]] + ifFalse: + [msgNode := constructor + codeMessage: rcvr + selector: selNode + arguments: args]. + stack addLast: msgNode]! - superFlag ifTrue: [rcvr := constructor codeSuper]!
packages@lists.squeakfoundation.org