lukas 

I would love to have a chapter on Rules. I have a starter that I wrote long 
time ago for the squeak french book
but it would be cool if you could add to it.

Stef

On Nov 4, 2010, at 12:55 AM, Lukas Renggli wrote:

>> If I try to match it like:
>>  '`...@browser showOn: `...@target; from: `...@origin; using: [ `...@browser 
>> `[email protected]]'
> 
> The match expression
> 
>    `...@browser `[email protected]
> 
> doesn't make sense. Statements (.) cannot be a message selector that
> would be expected after a receiver. Also, you cannot have a selector
> list (@) if you don't give also an argument list to match. So the
> closest valid thing is
> 
>    `...@browser `message
> 
> which looks for unary message sends (recursive is not necessary here
> either, because there is nothing to recurse into), or
> 
>    `...@browser `...@message: `...@message
> 
> which looks for arbitrary message sends and recursively into all arguments.
> 
>> It seems to only get those appearances which contain a single appearance of 
>> browser inside the block.
> 
> As I wrote in the previous mail you need to do it with nested
> rewrites. Inside the block you match for any sequence of statements:
> 
>    `[email protected]
> 
> And as replacement you use the `{ :context | ... } trick to perform a
> new rewrite somehow along the following untested lines:
> 
>    `{ :context |
>        RBParseTreeRewriter new
>            " replace whatever matched to `...@browser with the variable a "
>            replaceTree: (context at: '`...@browser') with: (RBParser
> parseExpression: 'a');
>            " execute on the list of statements "
>            executeTree: (context at: '`[email protected]');
>            " return the rewritten tree "
>            tree }
> 
> Cheers,
> Lukas
> 
> -- 
> Lukas Renggli
> www.lukas-renggli.ch
> 


Reply via email to