> 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