[Pkg] The Trunk: Compiler-bf.393.mcz
commits at source.squeak.org
commits at source.squeak.org
Fri Aug 24 02:44:56 UTC 2018
Bert Freudenberg uploaded a new version of Compiler to project The Trunk:
http://source.squeak.org/trunk/Compiler-bf.393.mcz
==================== Summary ====================
Name: Compiler-bf.393
Author: bf
Time: 23 August 2018, 7:44:43.576279 pm
UUID: 860565e2-2f2c-49bb-9e2f-e0d69d7b46c5
Ancestors: Compiler-bf.392
Fix pc highlighting for ifNil:ifNotNil:.
=============== Diff against Compiler-bf.392 ===============
Item was changed:
----- Method: MessageNode>>transformIfNilIfNotNil: (in category 'macro transformations') -----
transformIfNilIfNotNil: encoder
"vb: Changed to support one-argument ifNotNil: branch. In the 1-arg case we
transform the receiver to
(var := receiver)
which is further transformed to
(var := receiver) == nil ifTrue: .... ifFalse: ...
This does not allow the block variable to shadow an existing temp, but it's no different
from how to:do: is done."
| ifNotNilArg |
ifNotNilArg := arguments at: 2.
((self checkBlock: (arguments at: 1) as: 'Nil arg' from: encoder maxArgs: 0)
and: [self checkBlock: ifNotNilArg as: 'NotNil arg' from: encoder maxArgs: 1]) ifFalse:
[^false].
ifNotNilArg numberOfArguments = 1 ifTrue:
[receiver := AssignmentNode new
variable: ifNotNilArg firstArgument
+ value: receiver.
+ encoder noteSourceRange: (encoder sourceRangeFor: self) forNode: receiver].
- value: receiver].
selector := SelectorNode new key: #ifTrue:ifFalse: code: #macro.
receiver := MessageNode new
receiver: receiver
selector: #==
arguments: (Array with: NodeNil)
precedence: 2
from: encoder.
+ encoder noteSourceRange: (encoder sourceRangeFor: self) forNode: receiver.
arguments do: [:arg| arg noteOptimizedIn: self].
^true!
Item was changed:
----- Method: MessageNode>>transformIfNotNilIfNil: (in category 'macro transformations') -----
transformIfNotNilIfNil: encoder
"vb: Changed to support one-argument ifNotNil: branch. In the 1-arg case we
transform the receiver to
(var := receiver)
which is further transformed to
(var := receiver) == nil ifTrue: .... ifFalse: ...
This does not allow the block variable to shadow an existing temp, but it's no different
from how to:do: is done."
| ifNotNilArg |
ifNotNilArg := arguments at: 1.
((self checkBlock: ifNotNilArg as: 'NotNil arg' from: encoder maxArgs: 1)
and: [self checkBlock: (arguments at: 2) as: 'Nil arg' from: encoder maxArgs: 0]) ifFalse:
[^false].
ifNotNilArg numberOfArguments = 1 ifTrue:
[receiver := AssignmentNode new
variable: ifNotNilArg firstArgument
+ value: receiver.
+ encoder noteSourceRange: (encoder sourceRangeFor: self) forNode: receiver].
- value: receiver].
selector := SelectorNode new key: #ifTrue:ifFalse: code: #macro.
receiver := MessageNode new
receiver: receiver
selector: #==
arguments: (Array with: NodeNil)
precedence: 2
from: encoder.
+ encoder noteSourceRange: (encoder sourceRangeFor: self) forNode: receiver.
arguments swap: 1 with: 2.
arguments do: [:arg| arg noteOptimizedIn: self].
^true!
More information about the Packages
mailing list