>
>
>>
>> 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