[squeak-dev] The Trunk: Compiler-nice.130.mcz
Nicolas Cellier
nicolas.cellier.aka.nice at gmail.com
Tue Mar 2 00:33:55 UTC 2010
2010/3/2 <commits at source.squeak.org>:
> Nicolas Cellier uploaded a new version of Compiler to project The Trunk:
> http://source.squeak.org/trunk/Compiler-nice.130.mcz
>
> ==================== Summary ====================
>
> Name: Compiler-nice.130
> Author: nice
> Time: 2 March 2010, 1:28:40.263 am
> UUID: cdff6f07-1e9b-f746-a7b1-2cd22feb03b4
> Ancestors: Compiler-nice.129
>
> Provide a better fix for http://source.squeak.org/trunk/Compiler-nice.129.mcz
>
Hem, I meant http://bugs.squeak.org/view.php?id=7467
Danger, better not touching Compiler anymore at such a late time ;)
Nicolas
> BlockNode>>#addRemoteTemp: rootNode:
> was always sent to the TempVariableNode definingScope...
>
> But BlockNode>>#optimizedBlockHoistTempsInto:
> might already have moved the temporaries to next upper unoptimized BlockNode (definingBlock actualScope).
> This operation does not update the TempVariableNode definingScope (should it ?)
>
> Thus, only when definingScope temporaries does not include the TempVariableNode,
> should we attempt to remove it from actualScope temporaries....
>
> Note: this does not solve (EventSensor>>#eventTickler) decompileWithTemps
>
> =============== Diff against Compiler-nice.129 ===============
>
> Item was changed:
> ----- Method: BlockNode>>addRemoteTemp:rootNode: (in category 'code generation (closures)') -----
> addRemoteTemp: aTempVariableNode rootNode: rootNode "<MethodNode>"
> "Add aTempVariableNode to my actualScope's sequence of
> remote temps. If I am an optimized block then the actual
> scope is my actualScopeIfOptimized, otherwise it is myself."
> remoteTempNode == nil ifTrue:
> [remoteTempNode := RemoteTempVectorNode new
> name: self remoteTempNodeName
> index: arguments size + temporaries size
> type: LdTempType
> scope: 0.
> actualScopeIfOptimized
> ifNil:
> [self addTempNode: remoteTempNode.
> remoteTempNode definingScope: self]
> ifNotNil: [actualScopeIfOptimized addHoistedTemps: { remoteTempNode }]].
> remoteTempNode addRemoteTemp: aTempVariableNode encoder: rootNode encoder.
> "use remove:ifAbsent: because the deferred analysis for optimized
> loops can result in the temp has already been hoised into the root."
> + self removeTempNode: aTempVariableNode ifAbsent: [
> + self actualScope removeTempNode: aTempVariableNode ifAbsent: ["should not happen"]].
> - self actualScope removeTempNode: aTempVariableNode ifAbsent: [].
> ^remoteTempNode!
>
>
>
More information about the Squeak-dev
mailing list
|