[Pkg] The Trunk: Compiler-eem.335.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Mar 30 23:45:25 UTC 2017


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



More information about the Packages mailing list