[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