Sometimes StackExchange-related guys are really stupid… I think that we should 
put this contest in a visible place. And thanks Hernán, I think that it’s also 
cool that you can search for desired method like that in the image.

Uko

On 08 Jul 2014, at 09:07, Hernán Morales Durand <hernan.mora...@gmail.com> 
wrote:

> The contest is gone?
> 
> Anyway, the closest useful method I have found by iterating all ASTs in 
> standard 3.0 image :
> 
> - Declares arguments
> - Has assignment
> - Has sequence
> - Has blocks with 0 and 2 arguments
> - Declares temporaries
> - Has binary messages
> - Has unary messages
> - Has keyword messages
> - Has super messages
> - Has cascade
> - Has return
> - Uses String and Integer
> 
> and this is the winner:
> 
> RBMessageNode>>replaceSourceWithMessageNode: aNode 
> 
>     | isBinaryToKeyword |
>     self numArgs = aNode numArgs ifFalse: [^super replaceSourceWith: aNode].
>     self arguments with: aNode arguments
>         do: [:old :new | (self mappingFor: old) = new ifFalse: [^super 
> replaceSourceWith: aNode]].
>     (self mappingFor: self receiver) = aNode receiver 
>         ifFalse:
>             [(self receiver isVariable and: [aNode receiver isVariable])
>                 ifFalse:
>                     [^super replaceSourceWith: aNode].
>             self addReplacement:
>                 (RBStringReplacement
>                     replaceFrom: self receiver start
>                     to: self receiver stop
>                     with: aNode receiver name)].
>     (isBinaryToKeyword := self isBinary and: [aNode isKeyword]) 
>         ifTrue: 
>             [(self hasParentheses not and: [self parent precedence <= aNode 
> precedence]) 
>                 ifTrue: 
>                     [self
>                         addReplacement: (RBStringReplacement 
>                                     replaceFrom: self start
>                                     to: self start - 1
>                                     with: '(');
>                         addReplacement: (RBStringReplacement 
>                                     replaceFrom: self stop + 1
>                                     to: self stop
>                                     with: ')')]].
>     self selectorParts with: aNode selectorParts
>         do: 
>             [:old :new | 
>             old value ~= new value 
>                 ifTrue: 
>                     [self addReplacement: (RBStringReplacement 
>                                 replaceFrom: old start
>                                 to: old stop
>                                 with: ((isBinaryToKeyword 
>                                         and: [(self source at: old start - 1) 
> isSeparator not]) 
>                                             ifTrue: [' ' , new value]
>                                             ifFalse: [new value]))]]
> 
> Cheers,
> 
> Hernán
> 
> 
> 
> 2014-07-06 13:16 GMT-03:00 MartinW <w...@fastmail.fm>:
> As there was a recent discussion about the Smalltalk Syntax in a Postcard, i
> added a contest on the Stackoverflow Programming Puzzles & Code Golf site:
> http://codegolf.stackexchange.com/questions/33050/smalltalk-syntax-in-a-postcard-that-actually-does-something-interesting
> 
> 
> 
> --
> View this message in context: 
> http://forum.world.st/Smalltalk-Syntax-in-a-Postcard-contest-tp4766793.html
> Sent from the Pharo Smalltalk Developers mailing list archive at Nabble.com.
> 
> 

Reply via email to