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

Dale Henrichs via Glass glass at lists.gemtalksystems.com
Fri Nov 20 11:54:45 PST 2015


In tODE, I've been able to make `self` resolve to a proper object by 
using the following to evaluate code:

   | meth |
   meth := self
     _compileInContext: aContext
     symbolList: symbolList
     oldLitVars: litVarArray
     environmentId: 0.
   ^ meth _executeInContext: aContext

`self` is bound to aContext ... presumable RB is passing in a `nil` arg 
there ....

If you have fixes for RB, please fork the RB project[1] and share your 
fixes via a pull request.

Dale

[1]  https://github.com/dalehenrich/rb

On 11/19/2015 12:17 PM, Mariano Martinez Peck via Glass wrote:
> 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
>
>
> _______________________________________________
> Glass mailing list
> Glass at lists.gemtalksystems.com
> http://lists.gemtalksystems.com/mailman/listinfo/glass

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.gemtalksystems.com/mailman/private/glass/attachments/20151120/e4bdc7de/attachment.html>


More information about the Glass mailing list