The Trunk: Compiler-eem.335.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Compiler-eem.335.mcz

commits-2
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]!