Hi!

Many of us have discovered that in the last Pharo adding a temporary variable 
is added before the | .. | part of the section.

Pablo Estefo and I spend time on understanding where this comes from. But since 
this is deep into the compilation chain, it would be great if an expert (Marcus 
? :-) could check what we have done.

OCUndeclaredVariableWarning>>declareTempAndPaste:  is the culprit method. We 
have changed:
        tempsMark :=  self methodNode body  leftBar ifNil: [ self methodNode 
body start ].
into 
        tempsMark :=  self methodNode body  rightBar ifNil: [ self methodNode 
body start ].


So, the new version of the method should be:
-=-=-=-=-=-=-=-=-=-=-=-=
OCUndeclaredVariableWarning>>declareTempAndPaste: name
        | insertion delta theTextString characterBeforeMark tempsMark |

        theTextString := self methodNode source.
        tempsMark :=  self methodNode body  rightBar ifNil: [ self methodNode 
body start ].
        characterBeforeMark := theTextString at: tempsMark-1 ifAbsent: [$ ].
        
        (theTextString at: tempsMark) = $| ifTrue:  [
                "Paste it before the second vertical bar"
                insertion := name, ' '.
                
                characterBeforeMark isSeparator ifFalse: [insertion := ' ', 
insertion].
                delta := 0.
        ] ifFalse: [
                "No bars - insert some with CR, tab"
                insertion := '| ' , name , ' |',String cr.
                delta := 2.     "the bar and CR"
                characterBeforeMark = Character tab ifTrue: [
                        insertion := insertion , String tab.
                        delta := delta + 1.     "the tab" ]
                ].
        tempsMark := tempsMark +
                (self substituteWord: insertion
                        wordInterval: (tempsMark to: tempsMark-1)
                        offset: 0) - delta.
        self methodNode scope addTemp: name.
        ^ (node owningScope lookupVar: node name)
                ifNil: [self error: 'should not happen']
-=-=-=-=-=-=-=-=-=-=-=-=

We have tried different cases and it seems to work.
Does this makes sense?

Cheers,
Alexandre
        
-- 
_,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:
Alexandre Bergel  http://www.bergel.eu
^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;._,.;:~^~:;.




Reply via email to