[squeak-dev] The Trunk: Compiler-eem.333.mcz

commits at source.squeak.org commits at source.squeak.org
Thu Mar 30 23:06:58 UTC 2017


Eliot Miranda uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-eem.333.mcz

==================== Summary ====================

Name: Compiler-eem.333
Author: eem
Time: 30 March 2017, 4:06:49.311904 pm
UUID: 89658511-31df-4a48-8b8f-ea3a070871fd
Ancestors: Compiler-ul.332

Nuke obsolete bytecodeless closure implementation support.
Nuke not trearting special selector 200 aas a real send (was #blockCopy: now #~~).

=============== Diff against Compiler-ul.332 ===============

Item was removed:
- ----- Method: Decompiler>>checkForBlock:selector:arguments: (in category 'control') -----
- checkForBlock: receiver selector: selector arguments: arguments
- 	selector == #blockCopy: ifTrue:
- 		[^self checkForBlockCopy: receiver].
- 	self assert: selector == #closureCopy:copiedValues:.
- 	^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 |
- 
- 	| args rcvr selNode msgNode messages |
  	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]!
- 	superFlag ifTrue: [rcvr := constructor codeSuper].
- 	((#(blockCopy: closureCopy:copiedValues:) includes: selector)
- 	  and: [self checkForBlock: rcvr selector: selector 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]!

Item was changed:
  ----- Method: EncoderForV3 class>>isRealSendAt:in: (in category 'instruction stream support') -----
  isRealSendAt: pc in: method
  	"Answer whether the bytecode at pc is a real message-send, not blockCopy:."
  
  	| byte |
  	byte := method at: pc.
+ 	^byte >= 176			"special send or short send"
+ 	  or: [byte >= 131
- 	^(byte >= 176			"special send or short send"
- 	   and: [byte ~= 200	"special selector blockCopy:"
- 			or: [(Smalltalk specialSelectorAt: 200 - 175) ~~ #blockCopy:]])
- 	 or: [byte >= 131
  		 and: [byte <= 134	"long sends"	
  		 and: [byte ~= 132	"double extended do anything"
  			or: [(method at: pc + 1) // 32 <= 1]]]]!



More information about the Squeak-dev mailing list