[squeak-dev] The Trunk: Compiler-nice.189.mcz

commits at source.squeak.org commits at source.squeak.org
Sun Feb 13 18:44:54 UTC 2011


Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-nice.189.mcz

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

Name: Compiler-nice.189
Author: nice
Time: 13 February 2011, 7:44:38.363 pm
UUID: 3f6f02cd-1acf-48de-a388-b5ac55e27055
Ancestors: Compiler-nice.188

Enable cascading of special messages by deoptimizing, thanks Eliot.
This is mostly useless, but it removes an arbitrary limitation of the language.

=============== Diff against Compiler-nice.188 ===============

Item was added:
+ ----- Method: BlockNode>>deoptimize (in category 'code generation (closures)') -----
+ deoptimize
+ 	optimized := false.
+ 	optimizedMessageNode := nil!

Item was changed:
  ----- Method: MessageNode>>canCascade (in category 'testing') -----
  canCascade
  
+ 	^receiver ~~ NodeSuper!
- 	^(receiver == NodeSuper or: [special > 0]) not!

Item was added:
+ ----- Method: MessageNode>>ensureCanCascade: (in category 'testing') -----
+ ensureCanCascade: encoder
+ 
+ 	special > 0 ifTrue:
+ 		[special := 0.
+ 		 selector := encoder encodeSelector: selector key.
+ 		 arguments do:
+ 			[:each|
+ 			each isBlockNode ifTrue:
+ 				[each deoptimize]]]!

Item was added:
+ ----- Method: ParseNode>>ensureCanCascade: (in category 'testing') -----
+ ensureCanCascade: encoder!

Item was changed:
  ----- Method: Parser>>cascade (in category 'expression types') -----
  cascade
  	" {; message} => CascadeNode."
  
  	| rcvr msgs |
+ 	parseNode canCascade ifFalse:
+ 		[^self expected: 'Cascading not'].
+ 	parseNode ensureCanCascade: encoder.
- 	parseNode canCascade
- 		ifFalse: [^self expected: 'Cascading not'].
  	rcvr := parseNode cascadeReceiver.
  	msgs := OrderedCollection with: parseNode.
  	[self match: #semicolon]
  		whileTrue: 
  			[parseNode := rcvr.
  			(self messagePart: 3 repeat: false)
  				ifFalse: [^self expected: 'Cascade'].
+ 			parseNode canCascade ifFalse:
+ 				[^self expected: '<- No special messages'].
+ 			parseNode ensureCanCascade: encoder.
+ 				parseNode cascadeReceiver.
- 			parseNode canCascade
- 				ifFalse: [^self expected: '<- No special messages'].
- 			parseNode cascadeReceiver.
  			msgs addLast: parseNode].
  	parseNode := CascadeNode new receiver: rcvr messages: msgs!




More information about the Squeak-dev mailing list