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 >
