125 61 57
The golf version looks almost unreadable so I'll explain first (and use real identifiers).
This is a variant of the "weirdest-way-to-produce-a-stack-overflow" self modifying method.
The method prints out a hello message, and its current source (for the demonstration only). Then, the code is modified to output a longer string and installed. Finally, the new code is called recursively.
In order to protect myself from an immediate runaway, it lets the user confirm in each cycle.
compile in Object:
mySource := thisContext method source.
'**** Hello Alice' printCR.
' ---- my current code is:' printCR.
' ---------------' printCR.
(UserConfirmation confirm:'Again? ') ifTrue:[
withString:'Hello ','Alice !').
start the show by sending "eatMe_alice" to any Object; nil will do:
A nice variant is to not call the new code recursively, but instead iteratively, by unwindig the call stack and reentering into the new method. This has the advantage of not leading to a recursion exception. To do this, replace the recursive call ("self eatMe_alice") by:
Obviously, printing and self calling was not asked for, so the shortest (for golf) is to simply append a comment to my own source and return it. As a side effect, it also gets installed for the next call...
x|s|Object compile:(s:=thisContext method source,'""').^s