[Glass] RefactoringBrowser (RB) failing to correctly bind "self" in closures?

Mariano Martinez Peck via Glass glass at lists.gemtalksystems.com
Thu Nov 19 12:17:42 PST 2015


Hi guys,

I have some code that uses RB and such code works correctly in Pharo but it
fails in GemStone. It seems a problem with a closure which in Pharo "self"
resolves to the real object while in GemStone resolves to nil.

The way to reproduce it is:

*| tree rewriter |*
*tree := RBParser parseMethod: 'DoIt ^ [:proxy | proxy at: #oldSelector.
]'.*
*rewriter := RBParseTreeRewriter new. *
*rewriter *
* replace: ('`#oldSelector `{:node | node value isSymbol and: [node value
matchesRegex: ''.*oldSelector.*''] }')*
* with: ('`{RBLiteralNode value: (`#oldSelector value copyReplaceAll:
''oldSelector'' with: ''newSelector'') asSymbol }').*
*rewriter executeTree: tree. *
*rewriter tree newSource*
And the problem is the line:

*with: ('`{RBLiteralNode value: (`#oldSelector value copyReplaceAll:
''oldSelector'' with: ''newSelector'') asSymbol }').*

which gets translated to:

*[ :aDictionary | RBLiteralNode  value:    ((self lookupMatchFor:
'`#oldSelector' in: aDictionary) value      copyReplaceAll: 'oldSelector'
    with: 'newSelector') asSymbol ]*

And the self there fails.

Any idea how this is expected to work?

Thanks in advance


-- 
Mariano
http://marianopeck.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20151119/620e1408/attachment.html>


More information about the Glass mailing list