>
>
>>
>>     Yes. I think it is possible to work around it by using the
>>     dictionary itself, storing the node selector in it in the replace:
>>     pattern and retrieving it in the with: pattern.
>>
>>     rewriter
>>                      replace: ('`#oldSelector `{:node :dic | (node value
>>     isSymbol and: [node value matchesRegex: ''.*oldSelector.*''])
>>     ifTrue: [dic at: #selector put: node value. true] ifFalse: [false] }')
>>                      with: ('`{:dic | RBLiteralNode value: ((dic at:
>>     #selector) copyReplaceAll: ''oldSelector'' with: ''newSelector'')
>>     asSymbol }').
>>
>>
>> Wow, that's very cool. I wasn't aware that I could pass arguments (like
>> the dict in this case). This is powerful.
>>
>
> Yes, quite significant. Also the fact the dictionary is cleared for each
> match (so that it can be reused for the next match in the same ast).
>
>
awesome.


> Thank you RB Jedi.
>>
>
> I've had the guidance of John Brant (and spent some time over the SmaCC
> code where he uses it)...
>
>     Now, maybe correcting RB in Gemstone is something to do, as well.
>>
>>
>> Yes. So with the dict workaround you said, it DID work, but when I
>> continue a little more and I found out where was the closure being
>> generated, and that is RBPatternBlockNode >> #createBlockFor:
>> And yeah, the way it was being generated the closure ("source
>> evalauted") was binding "self" to nil.  I found a way to make it bind
>> the real self and that worked too. So...time to fork RB for GemStone and
>> commit the fix :)
>>
>
> You're now the maintainer of RB for GemStone! Congratulations :)
>
>
ahhahahaha.

You know what is funny? I run all AST-Tests-Core from Pharo and NONE halt
on #createBlockFor: ...
I even run all those from Refactoring-Tests-Core.
*So..it seems there is not tests that covers the usage of #createBlockFor:
  :(*



> BTW, do you image other cases like this?
>>
>
> You mean storing those RB rules? I try to collect them if I see some (or
> participate to), or remember where I see them.
>
>
No, I mean the compilation of block closures that would try to bind "self".
Anyway, I will search if I find more.


> I used to know where the RBRewriteTree chapter was in the Pharo books, but
> it seems to have disappeared, so I have recreated a copy that I'll try to
> update.
>


Thanks, please share it with me when you made it because I could not find
it weeks ago.


>
> Thanks!
>>
>
> You're welcome. You are giving opportunities to improve which is what I
> need (need to practice, need to practice, need to practice...).
>
>
ahahahahahha :)


> I have ideas for Mark Rizun's tool, but I don't have the time to work on
> them.
>
> Thierry
>
>
Thanks !



-- 
Mariano
http://marianopeck.wordpress.com

Reply via email to