[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
|